This is a Dedicated Port (one modem, one fixed host:port). If you instead need one credential for many countries with per-request switching, see Pool Gateway at /pool/. Full comparison under DEDICATED PORT VS POOL GATEWAY below.
First request: curl "https://api.proxies.sx/v1/x402/proxy?country=US&traffic=0.1&duration=3600" - returns HTTP 402 with payment instructions. The full buy sequence is under HOW TO USE below.
Canonical contract: the skill file (/marketplace/skill.md; master: /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.
A mobile proxy API that assigns you a dedicated port backed by real 4G/5G IP addresses from physical phone and modem devices. Every request routes through a real carrier network - AT&T, T-Mobile, Vodafone, Orange, Deutsche Telekom - so your traffic presents as a real mobile user.
Payment is USDC on Base or Solana via the x402 protocol: send a request, get an HTTP 402 with payment requirements, pay on-chain, retry with the tx hash, receive credentials. No account registration, no API key, no subscription.
| Feature | Details |
|---|---|
| Protocols | HTTP and SOCKS5 |
| IP Type | Real 4G/5G mobile (not residential, not datacenter) |
| Countries | Live, rotating fleet - NL, PL, US, GE (Georgia), FR, GB as carrier supply allows. Check live stock before buying |
| Devices | 115+ physical phones and modems on carrier networks (example figure - live per-country counts are the availableDevices field in /v1/x402/countries) |
| IP Rotation | On-demand rotation via the public rotate URL (5-min cooldown) - call it from your own scheduler for interval rotation |
| Authentication | Username/password per port |
| Concurrency | Unlimited connections per port |
| Session 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 IP holds until YOU hit the rotate URL. 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; call it on your own schedule) | -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 | No - HTTP :7000 only in v1; :7001 rejects this credential |
| 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 SOCKS5 - the pool credential is HTTP-only in v1.
> 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: $4.00/GB, 0.1 GB ($0.40) minimum, duration free - you only pay for traffic. 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 countries (US, GB, PL, FR, NL, GE). The difference is topology, not hardware or price.
$4.00/GB. Minimum purchase 0.1 GB = $0.40. Duration is free - you only pay for traffic.
| Port Price | Traffic Price | Min Purchase | Best For |
|---|---|---|---|
| FREE | $4.00/GB | 0.1 GB ($0.40) | Scraping, monitoring, account management, general use |
| Use Case | Avg Request Size | Requests per GB | Cost per Request |
|---|---|---|---|
| JSON API calls | ~10 KB | ~100,000 | $0.00004 |
| Text extraction | ~50 KB | ~20,000 | $0.0002 |
| HTML pages (no images) | ~200 KB | ~5,000 | $0.0008 |
| Full page loads | ~2 MB | ~500 | $0.008 |
At $4/GB, a typical text scraping operation costs less than $0.001 per request.
| Method | URL | Description |
|---|---|---|
| GET | https://api.proxies.sx/v1/x402/proxy | Purchase a mobile proxy |
| GET | https://api.proxies.sx/v1/x402/pricing | Get current pricing |
| GET | https://api.proxies.sx/v1/x402/countries | List available countries |
| GET | https://api.proxies.sx/v1/x402/calculate | Calculate cost before purchase |
| Param | Type | Required | Description |
|---|---|---|---|
country | string | required | ISO country code - live set shifts with supply, see /v1/x402/countries |
traffic | number | required, min 0.1 | Traffic in GB (the unpaid 402 quote assumes 0.1 if omitted) |
duration | number | required, 3600-2592000 | Session duration in seconds. Free - the price depends on traffic only (the unpaid 402 quote assumes 3600 if omitted) |
tier | string | optional | shared is the only tier - a tier=private request is silently served as shared at $4/GB. Do not send a param named type: unknown query params are rejected with HTTP 400 |
All three required params must be present on the paid retry - a missing one returns HTTP 400 (validation), which does NOT consume your tx hash; retry with the same hash and the param added.
curl "https://api.proxies.sx/v1/x402/proxy?country=US&traffic=0.1&duration=3600"
Returns HTTP 402 with payment instructions. The authoritative fields are inside accepts[]: maxAmountRequired (a STRING in micro-USDC, 6 decimals), payTo (recipient), and asset (the USDC contract/mint):
{
"x402Version": 1,
"error": "Payment required to access this resource",
"accepts": [
{
"scheme": "exact",
"network": "base",
"maxAmountRequired": "400000",
"payTo": "0xF8cD900794245fc36CBE65be9afc23CDF5103042",
"asset": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913"
},
{
"scheme": "exact",
"network": "solana",
"maxAmountRequired": "400000",
"payTo": "6eUdVwsPArTxwVqEARYGCh4S2qwW2zCs7jSEDRpxydnv",
"asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
}
]
}
maxAmountRequired is micro-USDC (6 decimals): 400000 = $0.40 for 0.1 GB; 1 GB = 4000000 = $4.00.
Send $0.40 USDC to the recipient wallet on Base (~2s) or Solana (~400ms).
curl "https://api.proxies.sx/v1/x402/proxy?country=US&traffic=0.1&duration=3600" \
-H "Payment-Signature: 0xyour_transaction_hash"
country, traffic and duration are all required on this paid retry. If you already paid and get an HTTP 400 validation error, the tx hash is not consumed - retry with the same hash and the missing param added.
Returns proxy credentials:
{
"proxy": {
"http": "http://psx_abc123:r4nd0mP4ss@YOUR_PROXY_IP:10234",
"socks5": "socks5://psx_abc123:r4nd0mP4ss@YOUR_PROXY_IP:10235",
"server": "YOUR_PROXY_IP",
"httpPort": 10234,
"socksPort": 10235,
"username": "psx_abc123",
"password": "r4nd0mP4ss",
"expiresAt": "2026-02-09T05:00:00Z"
},
"rotationUrl": "https://api.proxies.sx/v1/rotate/tok_xyz789",
"sessionId": "...",
"portId": "...",
"traffic": { "allocatedGB": 0.1, "usedGB": 0, "remainingGB": 0.1 },
"location": { "country": "United States", "countryCode": "US", "city": null, "carrier": null },
"management": {
"sessionToken": "x402s_abc123def456...",
"authMethod": "Header: X-Session-Token: x402s_..."
}
}
Persist three fields: proxy.username / proxy.password (the credentials), management.sessionToken (x402s_... - sent as the X-Session-Token header on every management call, nested under management, NOT top-level), and rotationUrl. Note the response is fully nested: expiry is proxy.expiresAt, traffic is traffic.allocatedGB, country is location.country.
# With curl
curl -x http://psx_abc123:r4nd0mP4ss@YOUR_PROXY_IP:10234 https://api.ipify.org
# With Python requests
import requests
proxies = {"http": "http://psx_abc123:r4nd0mP4ss@YOUR_PROXY_IP:10234",
"https": "http://psx_abc123:r4nd0mP4ss@YOUR_PROXY_IP:10234"}
r = requests.get("https://api.ipify.org", proxies=proxies) # plain-text exit IP
# With Node.js
const response = await fetch("https://api.ipify.org", {
agent: new HttpsProxyAgent("http://psx_abc123:r4nd0mP4ss@YOUR_PROXY_IP:10234")
});
Rotate your proxy to a new mobile IP on demand - no extra cost.
| Method | How | Cooldown |
|---|---|---|
| Public URL | Call the rotationUrl from your purchase response - no auth needed | 5 minutes |
| Scheduled | Automatic interval rotation is not available on x402 purchases - call the rotate URL from your own scheduler, respecting the 5-minute cooldown | 5 minutes |
# Rotate IP via public URL (from proxy credentials)
curl "https://api.proxies.sx/v1/rotate/tok_xyz789"
# -> { "success": true,
# "message": "Device switch initiated. New device will be assigned shortly.",
# "rotationType": "device_switch",
# "portName": "...",
# "cooldownSeconds": 300 }
Rotation is async - the response never contains a newIp field. Verify the new IP by calling https://api.ipify.org through the proxy after ~10-30 seconds.
After purchase, manage your session with the session token (x402s_...), sent as the X-Session-Token header on every call below:
| Endpoint | Description |
|---|---|
GET /v1/x402/manage/session | Session details (traffic used, time remaining) |
GET /v1/x402/manage/session/credit | Check remaining credit |
GET /v1/x402/manage/ports | List ports in session |
POST /v1/x402/manage/ports/recreate | Recreate expired port (if credit remains) |
POST /v1/x402/manage/ports/replace | Replace offline port (free, max 3) |
POST /v1/x402/manage/session/topup | Add more traffic (pay additional USDC) |
# Check session status
curl "https://api.proxies.sx/v1/x402/manage/session" \
-H "X-Session-Token: x402s_abc123def456"
Mobile IPs are assigned by carriers (AT&T, T-Mobile, Vodafone) to millions of real users. Websites cannot block mobile IP ranges without blocking their own customers.
| Proxy Type | Block Rate | Trust Level | Cost | Use Case |
|---|---|---|---|---|
| Datacenter | High (~80%) | Low | $0.50/GB | Basic requests only |
| Residential | Medium (~30%) | Medium | $2-5/GB | General scraping |
| Mobile 4G/5G | Very Low (~5%) | High | $4/GB | Everything - highest success rate |
Mobile proxies are the most trusted IP type on the internet. Google, Instagram, Amazon, LinkedIn - they all treat mobile IPs as legitimate users because they are legitimate IPs from real carrier networks.
Country availability is live - the mobile fleet rotates as carrier supply changes, so the exact set online varies day to day. Always check the live stock endpoint for what is online right now before you buy:
curl https://api.proxies.sx/v1/x402/countries
# [{ "code": "NL", "name": "Netherlands", "availableDevices": 28, "tier": "both" }, ...]
| Country | Code | Carriers |
|---|---|---|
| United States | US | AT&T, T-Mobile, Verizon |
| United Kingdom | GB | EE, Three, Vodafone |
| Poland | PL | Play, Orange, T-Mobile |
| Netherlands | NL | KPN, Vodafone, T-Mobile |
| France | FR | Orange, SFR, Free |
| Germany | DE | Telekom, Vodafone, O2 |
| Spain | ES | Movistar, Vodafone, Orange |
| Georgia | GE | Magti, Silknet |
These are the countries we serve when carrier supply is up. Some (ES, DE, FR, GE) rotate in and out - if a country reads 0 in the stock endpoint it is temporarily unavailable, not gone. For EU work, FR / NL / DE mobile behave nearly identically for most use cases.
AI coding agents (Claude Code, OpenAI Codex, Opencode) can purchase proxies autonomously using x402. The flow is automatic:
Payment-Signature headerFor AI agents using MCP (Model Context Protocol):
npx @proxies-sx/mcp-server
Provides 79 tools for proxy management (v2.2.0 published on npm). npm package
npm install @proxies-sx/x402-core @proxies-sx/x402-hono @proxies-sx/x402-solana
Build your own services on top of mobile proxies with payment gating.
| Network | Settlement | Recipient Wallet | USDC Contract |
|---|---|---|---|
| Base | ~2 seconds | 0xF8cD900794245fc36CBE65be9afc23CDF5103042 | 0x833589fcd6edb6e08f4c7c32d4f71b54bda02913 |
| Solana | ~400ms | 6eUdVwsPArTxwVqEARYGCh4S2qwW2zCs7jSEDRpxydnv | EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v |
| Resource | URL |
|---|---|
| API Endpoint | api.proxies.sx/v1/x402/proxy |
| Pricing API | api.proxies.sx/v1/x402/pricing |
| Countries API | api.proxies.sx/v1/x402/countries |
| MCP Server | @proxies-sx/mcp-server |
| x402 Protocol | x402.org |
| Customer Portal | client.proxies.sx |
| Mobile Proxy | agents.proxies.sx/marketplace |
| Peer Network | agents.proxies.sx/peer |