This is Pool Gateway Access. If you instead need ONE dedicated modem with a fixed host:port, see the Dedicated Port at /marketplace/proxy/. Two different products: DEDICATED PORT = one real port on one modem, its own host:port, one country fixed at purchase - the modem is exclusively yours and rotates only when YOU hit the rotate URL (carrier NAT can still re-issue the exit IP). POOL GATEWAY = one credential on gw.proxies.sx:7000, every country in the tier - country, session and rotation are declared per-request in the proxy username. Full comparison below. For a dedicated, unlimited-traffic, p0f or OpenVPN need, start at Private modems (a whole 4G/5G modem per day, week or month); the legacy dedicated port is nearly full.
1) API key + GB — the simple path (recommended for anyone with an account). Sign up at client.proxies.sx, deposit GB (card, crypto, or USDC), and create an API key. Then use the raw REST API with your key — no wallet, no per-request payment:
# get your ready-to-use gateway credentials
curl https://api.proxies.sx/v1/gateway/credentials -H "X-API-Key: YOUR_API_KEY"
# then just point any HTTP client at the gateway (country picked in the username):
curl -x "http://psx_<accountId>-peer-us:YOUR_PROXY_PASSWORD@gw.proxies.sx:7000" https://api.ipify.org
Your key also drives the whole platform programmatically — buy GB, spawn pooled proxy strings, read usage, manage ports — all under https://api.proxies.sx/v1/* with the X-API-Key header. Full endpoint list: client.proxies.sx/documentation/api.
2) x402 — accountless USDC (for agents with no account). First request needs no auth and no payment; it returns HTTP 402 with the buyable catalog and wallets:
curl "https://api.proxies.sx/v1/x402/pool?tier=peer&country=us&traffic=1"
Pay USDC to a listed wallet, retry with Payment-Signature: <tx_hash>, and persist the returned password (pak_) and sessionToken (x402s_). Full steps below.
Both paths hit the SAME gateway. Country tiers apply on the account path; an x402 purchase costs $4 per GB of traffic in every country. Canonical machine contract: /pool/skill.md — if this page disagrees with the skill file, the skill file wins; if the skill file disagrees with the live API, the live API wins.
Pool Gateway Access is a single credential that routes through a shared pool of real 4G/5G mobile proxies. A Dedicated Port gives you one modem on one port; one Pool Gateway credential reaches every country in your tier through one host. You select the country per request in the proxy username - no per-country repurchase.
Pay however suits you: deposit GB on an account and drive it with an API key, or pay accountless USDC via the x402 protocol on Base or Solana. Either way the credential is metered and capped and tops up the same way.
| Feature | Details |
|---|---|
| One credential | Reaches every country in the network - switch country per-request in the username, no new purchase |
| Gateway | gw.proxies.sx:7000 (HTTP) or :7001 (SOCKS5) - both work for this credential, and every other credential shape, metered identically |
| Tiers | peer - the flagship residential + mobile network; mbl - 4G/5G carrier modems in 6 countries. Pick per request in the username; the pool does not change the price, the exit country does. |
| Countries | About 170 with stock on October 13, 2026 via the peer network, plus 6 carrier-modem countries on mbl (US, GB, PL, FR, NL, GE). Supply fluctuates and a country can have none - read the live list from /v1/gateway/pool/stock |
| Metering | Per-GB, capped at the USDC you paid - auto-suspends at the cap |
| Session control | Sticky / rotating per-request via the username DSL |
| Duration | Free - you only pay for traffic (GB) |
DEDICATED PORT = one real port on one modem, its own host:port, one country fixed at purchase - the modem is exclusively yours and rotates only when YOU hit the rotate URL (carrier NAT can still re-issue the exit IP). POOL GATEWAY = one credential on gw.proxies.sx:7000, every country in the tier - country, session and rotation are declared per-request in the proxy username.
| Dedicated Port (/v1/x402/proxy) | Pool Gateway (/v1/x402/pool) | |
|---|---|---|
| What payment mints | A real port on ONE modem (ProxySmart), bound to that device | A metered pak_ credential; no device touched - modem picked live per connection |
| Endpoint | Unique serverIp:port per purchase | Shared gw.proxies.sx:7000 for everyone; routing lives in the username |
| Country | Fixed at purchase. Change = recreate the port (only with 0 active ports left) | Edit the country slot in the username per request - same credential, no repurchase |
| Rotation | True carrier-IP reset via public /v1/rotate/<token> URL (5-min cooldown, auto 5-1440 min) | -rot- token only: auto5/10/20/60 re-pick a modem on interval; sticky/hard pin the modem. No rotate URL; no mode gives per-request IP change |
| SOCKS5 | Yes - working socks5:// URL included | Yes - HTTP :7000 and SOCKS5 :7001 both work, GB metered identically on either |
| Concurrency | One modem. Fan-out = buy more ports | Parallel sessions on different modems via distinct -sid- values; capped at 250 sessions / 500 connections per account |
| Payment rails | Solana, Base, AND facilitator signed intents (EIP-3009) | Solana and Base on-chain only - facilitator rail rejected |
| Failure recovery | /manage/ports/replace (free, max 3, new device) or /ports/recreate | Automatic - dead modems routed around on next pick; /manage/pool/regenerate rotates the secret |
IP caveats (both): mobile carriers re-NAT egress IPs on their own cadence - a dedicated port holds a MODEM you control the rotation of, not a fixed IP; pool -rot-sticky pins the MODEM for the session, never the IP. Pool sessions need a -sid-<id> token to stick across connections (-session- is silently ignored).
> Cookie-bound / login / 2FA work in one country: one held modem whose IP changes only when you trigger it - no pool selector re-picks under you.
> You need on-demand true carrier-IP resets via the public rotate URL - the pool cannot do this at all.
> You must hard-pin a city or carrier at purchase, or you pay via facilitator signed intents (EIP-3009) - only this product accepts either.
> Multi-country work from one purchase: same key, edit us → gb → pl → fr in the username per request.
> High fan-out: hundreds of parallel sticky sessions (distinct -sid- values land on different modems) through one credential.
> A fleet of agents shares one secret, one top-up, one credit meter - instead of N ports with N passwords.
> You want zero babysitting: default auto10 rotates modems every 10 min with no API calls, and dead modems are routed around automatically.
Same for both: balance at $4.00/GB, duration free - you only pay for traffic. On the account path a GB of pool traffic uses 1.00, 0.375 or 0.1875 GB of balance by exit country; a dedicated port and every x402 purchase (0.1 GB / $0.40 minimum) use 1 GB per GB. Accountless x402 flow (HTTP 402 → pay USDC on Base ~2s or Solana ~400ms → retry with Payment-Signature), same replay protection, same x402s_ session token for management, and the same real ProxySmart 4G/5G carrier modems in the same 6 carrier-modem countries (US, GB, PL, FR, NL, GE) — the mbl tier. The other difference is topology.
Duration is free. You only pay for traffic. On the account path you buy balance at $4/GB, $2.40/GB at 250 GB+, and a GB of traffic uses that balance at a rate set by the exit country of the device that served it (live since October 12, 2026):
| Country tier | Balance used per GB of traffic | Per GB of traffic at $4/GB | At the 250 GB+ price |
|---|---|---|---|
| Premium | 1.00 | $4.00 | $2.40 |
| Plus | 0.375 | $1.50 | $0.90 |
| Standard | 0.1875 | $0.75 | $0.45 |
Which country is in which tier is in the pricing block of GET /v1/gateway/pool/stock (no auth): basePricePerGB, volumeDiscounts, defaultTier and tiers[] with tier, name, burnRate, pricePerGB and countries. On October 13, 2026 Premium listed 27 countries, Plus 25 and Standard every other country; read the lists from the endpoint, because they can change. Field reference and a full example: /pool/skill.md.
x402 purchases do not follow country tiers. The USDC you send buys a GB cap that counts raw traffic: $4 per GB in every country, volume-discounted by the size of the purchase. The same holds for reseller pak_ keys with a cap and for dedicated ports.
The hosted (datacenter) class is not on sale at the moment. Peers are classed by the network that announces their address; on October 13, 2026 about 1% of peers on sale were still unclassified. Use -iptype-residential or -iptype-mobile to exclude them. Most peer stock is residential, and the carrier modems are mobile. Verify any exit IP on ipinfo.io / MaxMind / IP2Location before you pay.
| x402 tier | Traffic Price | Min Purchase | What it is |
|---|---|---|---|
mbl | $4.00/GB | 0.1 GB ($0.40) | Carrier modems in 6 countries |
peer | $4.00/GB | 0.1 GB ($0.40) | Residential and mobile peers; the pool token routes as written |
Live tier catalog: GET /v1/x402/pool/pricing
| Method | URL | Description |
|---|---|---|
| GET | https://api.proxies.sx/v1/x402/pool/pricing | Tier catalog + networks (no payment) |
| GET/POST | https://api.proxies.sx/v1/x402/pool | Buy access (no payment -> 402 catalog; pay USDC -> credentials) |
| GET | https://api.proxies.sx/v1/x402/manage/pool/credit | Remaining GB (X-Session-Token) |
| POST | https://api.proxies.sx/v1/x402/manage/pool/topup | Add GB with more USDC (X-Session-Token + Payment-Signature) |
| GET | https://api.proxies.sx/v1/x402/manage/pool/usage | Per-day usage (X-Session-Token) |
| POST | https://api.proxies.sx/v1/x402/manage/pool/regenerate | Rotate the secret, keep the username (X-Session-Token) |
| GET | https://api.proxies.sx/v1/x402/manage/pool/connection | Re-emit credentials, recovery (X-Session-Token) |
/v1/x402/pool)| Param | Required | Default | Valid values |
|---|---|---|---|
tier | no | mbl | mbl (6-country carrier modems) or peer (flagship peer network) - both $4/GB of traffic in every country |
country | no | any | 2-letter ISO code (e.g. us, gb) or any |
traffic | yes, on the paid request | - | GB, 0.1 to 1000 for mbl. Any request without a payment header returns the 402 catalog regardless |
duration | no | 2592000 (30 days) | seconds, max 7776000 (90 days). Duration never changes the price |
sid | no | auto-generated | 8-64 chars [a-z0-9_]; anything that sanitizes shorter is replaced with a random sid (see sid rules below) |
rot | no | sticky | sticky, hard, auto5, auto10, auto20, auto60, ondemand |
curl "https://api.proxies.sx/v1/x402/pool?tier=mbl&country=us&traffic=1"
With no payment header it returns HTTP 402 with the tier catalog and the wallets to pay:
{
"x402Version": 1,
"error": "Payment required",
"accepts": [
{ "scheme": "exact", "network": "base",
"maxAmountRequired": "4000000",
"payTo": "0xF8cD900794245fc36CBE65be9afc23CDF5103042",
"asset": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913" },
{ "scheme": "exact", "network": "solana",
"maxAmountRequired": "4000000",
"payTo": "6eUdVwsPArTxwVqEARYGCh4S2qwW2zCs7jSEDRpxydnv",
"asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" }
]
}
maxAmountRequired is micro-USDC (6 decimals): 4000000 = $4.00 = 1 GB. The live 402 also carries an accepts[].outputSchema - ignore it: it is inherited from the dedicated-port product and is wrong for pool purchases (the real parameters are in the table above).
Send the USDC ($4 = 1 GB) to the recipient wallet on Base (~2s) or Solana (~400ms).
curl "https://api.proxies.sx/v1/x402/pool?tier=mbl&country=us&traffic=1" \
-H "Payment-Signature: <your_transaction_hash>"
You receive one gateway credential (username token + secret) plus a session token to manage it:
{
"product": "pool",
"proxy": {
"host": "gw.proxies.sx",
"httpPort": 7000,
"username": "psx_<account>-mbl-us-sid-<id>-rot-sticky",
"password": "pak_xxxxxxxxxxxxxxxxxxxxxxxx",
"http": "http://psx_<account>-mbl-us-sid-<id>-rot-sticky:pak_...@gw.proxies.sx:7000",
"socks5": "socks5://psx_<account>-mbl-us-sid-<id>-rot-sticky:pak_...@gw.proxies.sx:7001"
},
"credit": {
"allocatedGB": 1,
"usedGB": 0,
"remainingGB": 1,
"expiresAt": "2026-08-01T00:00:00.000Z"
},
"sessionToken": "x402s_...",
"manage": { "credit": "...", "topup": "...", "usage": "...", "regenerate": "...", "connection": "..." }
}
Persist three fields: (1) proxy.password - the pak_ secret, your gateway password; (2) sessionToken (top-level) - the x402s_ token, the ONLY way to manage or recover the credential; (3) your payment tx hash - proof of purchase. The returned proxy.username already carries your -sid- and -rot- tokens (the values you passed at buy time, or generated defaults). Use it as returned; edit only the country slot per request.
HTTP :7000 and SOCKS5 :7001 both work for this credential (and every other credential shape), GB metered identically on either.
One credential reaches every country in the tier. You pick the country and behaviour per connection by composing the username from --delimited tokens. The gateway lowercases the whole username and splits on -, so no token value may contain a hyphen. The pak_ secret is the password.
psx_<account>-mbl-<country>[-sid-<id>][-rot-<mode>][-failover-<policy>][-carrier-<slug>] : pak_<secret>
└──────────────────────────── username ────────────────────────────┘ (password)
required: psx_<account> . mbl . country (2-letter ISO)
optional: everything in [ ] - order-independent, each has a safe default
| Token | Value | Default | Notes |
|---|---|---|---|
pool | mbl | required | v1 production tier (real carrier modems) |
country | 2-letter ISO | required | same key, switch per request. Live list: stock endpoint below |
sid | 8-64 [a-z0-9_] | none | REQUIRED for a sticky/auto session to persist across connections. See sid rules |
rot | see modes below | auto10 | rotation behaviour |
failover | samecountry \| samecarrier \| samenode \| any \| strict | samecountry | if the exit dies mid-request, where to retry (samenode = same relay server) |
carrier | carrier name slug | none | hard filter, e.g. -carrier-tmobile: an exact name from GET /v1/gateway/pool/stock/carriers?pool=mbl, lowercased with spaces and punctuation removed (Vodafone Libertel B.V. -> vodafonelibertelbv; a trailing US/Inc/LLC/Ltd may be dropped, so T-Mobile US -> tmobile). Preferred on mbl. -asn-<n> also works on mbl, but it matches the modem's current exit ASN, which can differ from the carrier label, so it may select fewer modems than you expect |
Default nuance: a username with no -rot- token gets auto10 at the gateway; the username returned by the purchase carries -rot-sticky unless you passed a different rot= at buy time.
The sid is the "port name" that makes a session persist. Use 8-64 chars of [a-z0-9_], no hyphens. The gateway parser is self-healing (it accepts whatever survives sanitization), but at purchase time a sid that sanitizes to fewer than 8 chars is silently replaced with a random one - your intended stickiness is lost. Keep to 8-64 and both the buy path and the gateway path agree:
| Rule | Good | Bad - why |
|---|---|---|
| 8-64 chars, lowercase a-z / 0-9 / underscore | cust_8f3a21bd | t1 - under 8 chars, auto-replaced |
| no uppercase, no hyphens (a hyphen splits the token) | order_99213 | job-42 - two tokens; Job_4201 - uppercase |
| never empty | worker_0001 | empty - no session, fresh IP each call |
| STABLE per workflow/customer | reuse the same sid for the same job | a new random sid per call = a new IP per call |
Derive a sid from any string: lowercase it, delete every char that is not [a-z0-9_], make sure it is 8-64 chars (pad a short one), then reuse it for every request that should share an exit IP. "Order #99/A" -> order_0099a. Note: use -sid-. -session- is NOT a token and creates no session; right after the account id it fills the pool and country slots (any pool, any country).
| Mode | Behaviour |
|---|---|
auto10 (default) | re-pick a fresh modem every 10 min (also auto5 / auto20 / auto60). Omit the -rot- token to get this |
sticky | pin the same modem for the session - needs a -sid- |
hard | pins like sticky (same modem). It does NOT mean a new IP per request |
sticky-strict | strongest IP hold - pins the most IP-stable modem. Best for login / cookie / 2FA flows. Needs a -sid- |
ondemand | new IP only when you open a new connection |
sticky-strict is the one sanctioned compound: the gateway parses it as rot=sticky plus a strict flag (the DSL splits on -), so its internal hyphen is safe - it does not break the no-hyphen rule for token values.
Sticky pins the MODEM, not the IP - mobile carrier CGNAT can still re-NAT the exit IP across calls. For the strongest hold pair sticky-strict with a stable -sid-.
The mbl tier serves US, GB, PL, FR, NL, GE (Georgia), but supply moves. Read the live stock endpoint (online counts per country, no IPs) before targeting a country:
curl https://api.proxies.sx/v1/gateway/pool/stock
# { "pools": { "mbl": { "us": 40, "nl": 26, "pl": 21, "gb": 18, "fr": 17, "ge": 3 } } }
# 1) US, sticky for one customer - same exit IP across the whole workflow
http://psx_abc123-mbl-us-sid-cust_8f3a21bd-rot-sticky:pak_xxxx@gw.proxies.sx:7000
# 2) UK, default rotation - no sid, so each new connection may land on a different modem
# (add -sid- for a stable auto10 session that re-picks the modem every ~10 min)
http://psx_abc123-mbl-gb:pak_xxxx@gw.proxies.sx:7000
# 3) Netherlands, strongest IP hold for a login/cookie flow
http://psx_abc123-mbl-nl-sid-login_7782-rot-sticky-strict:pak_xxxx@gw.proxies.sx:7000
# 4) US on T-Mobile specifically (hard carrier filter - -carrier- is preferred on mbl)
http://psx_abc123-mbl-us-sid-job_us01-rot-sticky-carrier-tmobile:pak_xxxx@gw.proxies.sx:7000
# Note: SOCKS5 (:7001) is NOT available for x402-purchased pool credentials in v1.
# HTTP :7000 and SOCKS5 :7001 both work, for every credential shape - see pool-quickstart.html.
// JavaScript
function poolUsername(account, country, { sid, rot } = {}) {
const slug = s => String(s || '').toLowerCase().replace(/[^a-z0-9_]/g, '').slice(0, 64);
let u = `psx_${account}-mbl-${country.toLowerCase()}`;
if (sid) u += `-sid-${slug(sid)}`; // stable id, no hyphens
if (rot && rot !== 'auto10') u += `-rot-${rot}`; // omit for the default
return u;
}
const user = poolUsername('abc123', 'us', { sid: 'cust_8f3a21bd', rot: 'sticky' });
const proxy = `http://${user}:${pak}@gw.proxies.sx:7000`;
# Python
import re
def pool_username(account, country, sid=None, rot=None):
slug = lambda s: re.sub(r'[^a-z0-9_]', '', (s or '').lower())[:64]
u = f"psx_{account}-mbl-{country.lower()}"
if sid: u += f"-sid-{slug(sid)}"
if rot and rot != "auto10": u += f"-rot-{rot}"
return u
user = pool_username('abc123', 'us', sid='cust_8f3a21bd', rot='sticky')
proxy = f"http://{user}:{pak}@gw.proxies.sx:7000"
| Format | Example |
|---|---|
| URL | http://USER:pak@gw.proxies.sx:7000 |
| host:port:user:pass | gw.proxies.sx:7000:USER:pak |
| user:pass@host:port | USER:pak@gw.proxies.sx:7000 |
Success prints the exit IP of a US mobile modem. A 407 means bad credentials or an exhausted/disabled cap - check /v1/x402/manage/pool/credit.
curl -x "http://psx_abc123-mbl-us-sid-cust_8f3a21bd-rot-sticky:pak_xxxx@gw.proxies.sx:7000" https://api.ipify.org
Same credential in every stack. Username psx_<id>-peer-us-rot-sticky-sid-x = peer pool, US exit, sticky session x (use a stable 8-64 char id per workflow); password = your proxy password or pak_ key. Swap peer for mbl to force a carrier modem (US, GB, FR, NL, PL, GE), or edit the country slot per request.
curl -x "http://psx_<id>-peer-us-rot-sticky-sid-x:PASSWORD@gw.proxies.sx:7000" https://api.ipify.org
# SOCKS5 instead (same credential, same metering):
curl --proxy "socks5h://psx_<id>-peer-us-rot-sticky-sid-x:PASSWORD@gw.proxies.sx:7001" https://api.ipify.org
import requests
PROXY = "http://psx_<id>-peer-us-rot-sticky-sid-x:PASSWORD@gw.proxies.sx:7000"
r = requests.get("https://api.ipify.org", proxies={"http": PROXY, "https": PROXY}, timeout=30)
print(r.text)
import { fetch, ProxyAgent } from 'undici';
const dispatcher = new ProxyAgent('http://psx_<id>-peer-us-rot-sticky-sid-x:PASSWORD@gw.proxies.sx:7000');
const res = await fetch('https://api.ipify.org', { dispatcher });
console.log(await res.text());
import { chromium } from 'playwright';
const browser = await chromium.launch({
proxy: { server: 'http://gw.proxies.sx:7000', username: 'psx_<id>-peer-us-rot-sticky-sid-x', password: 'PASSWORD' },
});
const page = await browser.newPage();
await page.goto('https://api.ipify.org');
console.log(await page.textContent('body'));
await browser.close();
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(proxy={
"server": "http://gw.proxies.sx:7000",
"username": "psx_<id>-peer-us-rot-sticky-sid-x",
"password": "PASSWORD",
})
page = browser.new_page()
page.goto("https://api.ipify.org")
print(page.text_content("body"))
browser.close()
package main
import (
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
proxy, _ := url.Parse("http://psx_<id>-peer-us-rot-sticky-sid-x:PASSWORD@gw.proxies.sx:7000")
client := &http.Client{Transport: &http.Transport{Proxy: http.ProxyURL(proxy)}}
res, err := client.Get("https://api.ipify.org")
if err != nil {
panic(err)
}
defer res.Body.Close()
b, _ := io.ReadAll(res.Body)
fmt.Println(string(b))
}
# pip install browser-use (Python 3.11+, then: playwright install chromium)
# Chromium ignores credentials in HTTP_PROXY/HTTPS_PROXY, so pass the proxy to the browser profile.
import asyncio, uuid
from browser_use import Agent, BrowserSession, BrowserProfile, ChatOpenAI
sid = uuid.uuid4().hex[:12] # one sticky exit per run
profile = BrowserProfile(proxy={
"server": "http://gw.proxies.sx:7000",
"username": f"psx_ACCOUNT_ID-peer-us-rot-sticky-sid-{sid}",
"password": "PROXY_PASSWORD",
})
agent = Agent(task="Open https://api.ipify.org?format=json and read the ip",
llm=ChatOpenAI(model="gpt-4o-mini"),
browser_session=BrowserSession(browser_profile=profile))
asyncio.run(agent.run())
After purchase, manage the credential with the session token (X-Session-Token header):
# Remaining GB
curl "https://api.proxies.sx/v1/x402/manage/pool/credit" \
-H "X-Session-Token: x402s_..."
Response - metering is live and read-through (remainingGB = allocatedGB - usedGB):
{
"tier": "mbl",
"allocatedGB": 1,
"usedGB": 0.2143,
"remainingGB": 0.7857,
"enabled": true,
"expiresAt": "2026-07-12T00:00:00.000Z",
"sessionToken": "x402s_..."
}
When usedGB reaches the cap, enabled flips to false automatically and the gateway rejects auth with 407. Top up to re-enable:
# Top up with more USDC (returns a 402, pay it, retry with Payment-Signature)
curl -X POST "https://api.proxies.sx/v1/x402/manage/pool/topup?addTrafficGB=2" \
-H "X-Session-Token: x402s_..."
Lost the password but kept the session token? GET /v1/x402/manage/pool/connection re-emits the full credentials. POST /v1/x402/manage/pool/regenerate rotates the pak_ secret and keeps the username.
A wallet-only agent buys Pool Gateway Access end-to-end with no human and no account:
/v1/x402/pool -> 402 catalog with pricing + walletsPayment-Signature header -> receive the credential; persist password, sessionToken, and the tx hash| Resource | URL |
|---|---|
| Skill file (this product) | agents.proxies.sx/pool/skill.md |
| Rotation cookbook (copy-paste + footguns) | agents.proxies.sx/pool/rotation-cookbook.md |
| Quickstart (30 seconds) | agents.proxies.sx/pool-quickstart.html |
| Master skill file | agents.proxies.sx/skill.md |
| x402 discovery | /.well-known/x402.json |
| LLMs.txt | agents.proxies.sx/llms.txt |
| MCP Server | @proxies-sx/mcp-server |
| x402 Protocol | x402.org |
Support: maya@proxies.sx or https://t.me/proxies_sx - quote the req id from any gateway error body.
Resellers can mint their own per-customer pak_ keys for the same gateway - see Build & Resell.
Pass the proxy to the browser profile: BrowserProfile(proxy={server: http://gw.proxies.sx:7000, username: psx_<id>-peer-us-rot-sticky-sid-x, password: your proxy password}) and hand it to Agent via BrowserSession. Chromium drops credentials given in HTTP_PROXY/HTTPS_PROXY, so env vars alone do not work. Change the country slot (us, gb, de ...) or the -sid- value per task.
Pass the proxy option at launch: server http://gw.proxies.sx:7000, username psx_<id>-peer-us-rot-sticky-sid-x, password your proxy password or pak_ key. It is the same option in Node and Python. Give each browser context its own -sid- value if you want each on its own exit.
-rot-auto5, auto10, auto20 and auto60 re-pick an endpoint on that interval (auto10 is the default); -rot-ondemand re-picks only on a new connection; -rot-sticky pins one endpoint for the session. sticky and auto* need a -sid-<id>, or every connection is a fresh session. Sticky pins the modem, not the IP: mobile carriers re-NAT their egress on their own schedule. Unknown tokens are dropped silently - there is no -session- token, only -sid-.
peer is the default: residential and mobile IPs across the countries listed live at /v1/gateway/pool/stock. mbl forces a real carrier modem and exists in exactly six countries: US, GB, FR, NL, PL and GE (Georgia, not Germany - use peer-de for Germany). Pick mbl when the target trusts carrier-grade mobile IPs most; pick peer for every other country or when you want a residential exit. Same price either way.
Balance costs $4 per GB, falling to $2.40 per GB at 250 GB and above. A GB of traffic uses 1.00, 0.375 or 0.1875 GB of balance by the exit country: $4, $1.50 or $0.75 per GB of traffic at the base price. The tier of each country is in the pricing block of GET /v1/gateway/pool/stock. x402 purchases cost $4 per GB of traffic in every country. Duration is free - you pay only for traffic, metered identically on HTTP :7000 and SOCKS5 :7001. Sign up at client.proxies.sx/signup, deposit GB and mint an API key at client.proxies.sx/account - or pay per purchase in USDC via x402 with no account.
| Network | Settlement | Recipient Wallet | USDC Contract |
|---|---|---|---|
| Base | ~2 seconds | 0xF8cD900794245fc36CBE65be9afc23CDF5103042 | 0x833589fcd6edb6e08f4c7c32d4f71b54bda02913 |
| Solana | ~400ms | 6eUdVwsPArTxwVqEARYGCh4S2qwW2zCs7jSEDRpxydnv | EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v |