First request: curl -s 'https://api.proxies.sx/v1/x402/pricing' - no auth needed. Then an unpaid GET /v1/x402/proxy (Dedicated Port) or GET /v1/x402/pool (Pool Gateway Access) returns HTTP 402 with the payment catalog. Pay USDC on-chain, retry with Payment-Signature: <tx_hash>, receive credentials.
Master Skill File: agents.proxies.sx/skill.md - the complete contract in one read for AI agents
HTTP 402 Payment Required for machine-to-machine USDC payments. No account, no API key. The same protocol gates both buy products: Dedicated Port (/v1/x402/proxy) and Pool Gateway Access (/v1/x402/pool).
1. Request without payment GET /v1/x402/proxy?country=US&traffic=1 2. Receive 402 response price, recipient wallet, supported networks 3. Send USDC on-chain Base (~2s) or Solana (~400ms) 4. Retry with payment proof Payment-Signature: <tx_hash> 5. Receive proxy credentials host, port, username, password, session token
| Network | Settlement | Gas | USDC Contract | Recipient |
|---|---|---|---|---|
| Base (EVM) | ~2 sec | ~$0.01 | 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 | 0xF8cD900794245fc36CBE65be9afc23CDF5103042 |
| Solana | ~400ms | ~$0.0001 | EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v | 6eUdVwsPArTxwVqEARYGCh4S2qwW2zCs7jSEDRpxydnv |
| Type | Price/GB | Min Purchase | Duration |
|---|---|---|---|
| Shared | $4.00 | 0.1 GB ($0.40) | Free (unlimited) |
# 1. Request proxy (receive 402 with payment info)
curl -s 'https://api.proxies.sx/v1/x402/proxy?country=US&traffic=1'
# 2. After sending USDC, retry with tx hash
curl -s 'https://api.proxies.sx/v1/x402/proxy?country=US&traffic=1' \
-H "Payment-Signature: YOUR_TX_HASH"
# 3. Check session
curl -s https://api.proxies.sx/v1/x402/manage/session \
-H "X-Session-Token: x402s_YOUR_TOKEN"
# 4. Replace offline port (free, max 3)
curl -s -X POST https://api.proxies.sx/v1/x402/manage/ports/replace \
-H "X-Session-Token: x402s_YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"country":"US"}'
# 5. Top up session (pay for more traffic)
curl -s -X POST https://api.proxies.sx/v1/x402/manage/session/topup \
-H "X-Session-Token: x402s_YOUR_TOKEN" \
-H "Payment-Signature: NEW_TX_HASH" \
-H "Content-Type: application/json" \
-d '{"addTrafficGB":2,"addDurationSeconds":86400}'
Pool Gateway endpoints (GET/POST /v1/x402/pool, /v1/x402/pool/pricing, /v1/x402/manage/pool/*) are in the Pool Gateway section below and in /pool/skill.md. Live per-component health: GET /v1/x402/status.
| Method | Path | Auth | Description |
|---|---|---|---|
| GET | /v1/x402/pricing | - | Pricing tiers and structure |
| GET | /v1/x402/countries | - | Available countries with device counts |
| GET | /v1/x402/calculate | - | Calculate cost |
| GET | /v1/x402/health | - | Service health |
| GET | /v1/x402/info | - | Master info (pricing, countries, MCP) |
| GET | /v1/x402/.well-known | - | Protocol discovery |
| GET | /v1/x402/proxy | x402 | Purchase mobile proxy |
| POST | /v1/x402/proxy | x402 | Purchase mobile proxy (POST) |
| GET | /v1/x402/manage/session | Token | Session details via token |
| GET | /v1/x402/manage/session/credit | Token | Check remaining credit |
| GET | /v1/x402/manage/ports | Token | List all ports in session |
| GET | /v1/x402/manage/ports/:portId/status | Token | Port status |
| POST | /v1/x402/manage/ports/replace | Token | Replace offline port (free, max 3) |
| POST | /v1/x402/manage/ports/recreate | Token | Recreate deleted port with remaining credit |
| GET | /v1/x402/manage/session/topup/calculate | Token | Preview top-up cost |
| POST | /v1/x402/manage/session/topup | Token+x402 | Pay to extend session |
| GET | /v1/x402/session/:id | - | Session by ID |
| GET | /v1/x402/session/tx/:txHash | - | Session by transaction hash |
| GET | /v1/x402/sessions/wallet/:wallet | - | Sessions by wallet address |
| POST | /v1/x402/agents | - | Register agent |
| GET | /v1/x402/agents/:wallet | - | Get agent by wallet |
| GET | /v1/rotate/:token | - | Rotate IP via public token |
Token = X-Session-Token: x402s_<hex> header. x402 = Payment-Signature: <tx_hash> header.
Port Replacement - If proxy goes offline, POST /manage/ports/replace for free replacement. Max 3 per session. Session Top-Up - Add traffic ($4/GB) or duration (free). POST /manage/session/topup with Payment-Signature. Port Recreation - If port deleted but session has credit, POST /manage/ports/recreate. IP Rotation - GET /v1/rotate/:token to rotate IP without auth.
Two ways to buy - Dedicated Port and Pool Gateway Access, both x402-gated at api.proxies.sx, paid in USDC. One way to earn - the Peer Network, where agents and devices share bandwidth for USDC.
| Product | Endpoint | Price | Payment | Status |
|---|---|---|---|---|
| Dedicated Port (mobile proxy) | GET /v1/x402/proxy |
$4.00/GB | USDC on Base or Solana | LIVE |
| Pool Gateway Access (one credential, all tier countries) | GET/POST /v1/x402/pool |
$4.00/GB | USDC on Base or Solana | LIVE |
| Peer Network (earn) | POST /v1/peer/agents/register |
earn per GB | USDC payout | LIVE |
Your own port on a real 4G/5G modem. The country set is live and rotating (NL, PL, US, GE, FR, GB as of last edit; it shifts with carrier supply - read live availability, not this sentence). HTTP and SOCKS5, city/carrier targeting, auto IP rotation. Free port replacement (max 3) and session top-up. Buy a Dedicated Port.
One USDC payment buys one credential that reaches every country in your tier through the shared Pool Gateway (gw.proxies.sx:7000) - no per-country repurchase. Metered and capped. v1 tier mbl (production modems), $4/GB. Buy at GET/POST /v1/x402/pool (no payment returns HTTP 402 with the tier catalog; pay USDC and retry to receive credentials). Pool Gateway page · Quickstart · skill.md.
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, 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 | 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.
Share mobile/residential bandwidth and earn USDC. Per-GB rates are set by IP type (mobile > residential > datacenter) and are dynamic - read earningsPerGB in the registration response for live values. Start earning.
@proxies-sx/mcp-server v2.2.0 on npm - 79 tools for AI agents to manage proxy infrastructure via the Model Context Protocol (61 API-key tools incl. the ops + pool groups, 18 wallet-only x402 tools incl. buying Pool Gateway access with USDC). The server self-describes via tools/list.
npx -y @proxies-sx/mcp-server
// API Key mode (account required)
{
"mcpServers": {
"proxies-sx": {
"command": "npx",
"args": ["-y", "@proxies-sx/mcp-server"],
"env": { "PROXIES_API_KEY": "psx_your_key" }
}
}
}
// x402 mode (no account needed)
{
"mcpServers": {
"proxies-sx": {
"command": "npx",
"args": ["-y", "@proxies-sx/mcp-server"],
"env": { "AGENT_WALLET_KEY": "your_private_key", "PREFERRED_NETWORK": "base" }
}
}
}
| Category | Count | Key Tools |
|---|---|---|
| Account | 2 | get_account_summary, get_account_usage |
| Port Mgmt | 7 | list_ports, create_port, delete_port, update_port_credentials, reconfigure_port |
| Port Status | 4 | get_port_status, get_port_ip, ping_port, speed_test_port |
| Rotation | 5 | rotate_port, configure_auto_rotation, get_rotation_history |
| Billing | 3 | get_pricing, calculate_price, purchase_shared_traffic |
| Crypto Pay | 5 | create_crypto_payment, check_crypto_payment_status |
| Reference | 1 | list_available_countries |
| Utilities | 3 | get_proxy_connection_string, get_all_proxy_formats |
| Support | 5 | create_support_ticket, list_my_tickets, reply_to_ticket |
| x402 Session | 8 | get_x402_session, replace_x402_port, calculate_x402_topup, topup_x402_session |
| x402 Auto | 11 | x402_get_proxy, x402_wallet_balance, x402_rotate_ip, x402_extend_session |
| x402 Pool (wallet-only) | 7 | x402_get_pool_access, x402_pool_credit, x402_pool_topup |
| Ops (admin-scoped keys) | 11 | ops_get_user, ops_list_tickets, ops_reconcile_payments |
| Pool Gateway (reseller) | 7 | pool_get_stock, pool_mint_key, pool_topup_key |
Share your internet bandwidth, get paid in USDC on Solana. AI agents and humans connect via WebSocket, route traffic, earn automatically. This section is a summary - the canonical contract (binary tunnel protocol, self-test, SDK implementer checklist) is the Peer Network page and /peer/skill.md; if this page ever disagrees with them, they win.
| IP Type | Rate Tier | Examples |
|---|---|---|
| Mobile | Highest | AT&T, Verizon, T-Mobile, Vodafone |
| Residential | Mid | Comcast, Spectrum, Cox, BT |
| Datacenter | Base | AWS, GCP, Azure, Hetzner, VPNs |
Per-GB earnings accumulate automatically. IP type is classified server-side via ASN lookup - the value your device reports is ignored. Rates are dynamic: read earningsPerGB from the registration response. Min payout: $5 USDC (agents; Android SDK devices: $10).
1. Register POST /v1/peer/agents/register - get JWT + device ID
2. Connect wss://relay.proxies.sx with Sec-WebSocket-Protocol: token.{JWT}
3. Tunnel Receive tunnel_connect - open TCP to the target - stream bytes both ways
4. Earn Earnings credited per GB. Request payout min $5 USDC to Solana wallet.
Fastest start - use a ready, tested SDK (it does the whole protocol for you):
Node.js ·
Go ·
Windows ·
Android.
Full guide at the Peer Network page. The inline snippets below are only for building your own client - if you do, implement the streaming tunnel_connect flow documented in /peer/skill.md, not the legacy proxy_request.
curl -s -X POST https://api.proxies.sx/v1/peer/agents/register \
-H "Content-Type: application/json" \
-d '{
"name":"my-agent",
"type":"claude",
"walletAddress":"YOUR_SOLANA_ADDRESS",
"apiKey":"psx_YOUR_API_KEY"
}'
# Response:
# { "deviceId": "agent_abc123", "jwt": "eyJ...", "refreshToken": "a1b2...",
# "relay": "wss://relay.proxies.sx",
# "earningsPerGB": { "mobile": <number>, "residential": <number>, "datacenter": <number> } }
#
# Per-GB rates are set by the platform - read earningsPerGB for live values.
# Tier order: mobile > residential > datacenter. Rates can change anytime.
# Min payout: $5 (agents) / $10 (Android SDK).
# JWT expires in 1h - refresh via POST /v1/peer/agents/{id}/refresh.
const ws = new WebSocket('wss://relay.proxies.sx', [`token.${JWT}`]);
ws.onopen = () => {
ws.send(JSON.stringify({ type: 'device_info', payload: { country: 'US' } }));
};
ws.onmessage = (event) => {
const msg = JSON.parse(event.data);
if (msg.type === 'proxy_request') {
const { requestId, method, url, headers, body } = msg.payload;
fetch(url, { method, headers, body: body ? atob(body) : undefined })
.then(async (res) => {
const buf = await res.arrayBuffer();
ws.send(JSON.stringify({
type: 'proxy_response',
payload: { requestId, statusCode: res.status,
headers: Object.fromEntries(res.headers),
body: btoa(String.fromCharCode(...new Uint8Array(buf))) }
}));
});
}
if (msg.type === 'heartbeat') ws.send(JSON.stringify({ type: 'heartbeat_ack' }));
};
This snippet shows the connection handshake plus the legacy JSON proxy_request flow for illustration. Production clients must handle the binary tunnel_connect protocol - full lifecycle, message shapes, and the two porting mistakes that cause intermittent auth are in /peer/skill.md.
| Method | Endpoint | Auth | Description |
|---|---|---|---|
| POST | /v1/peer/agents/register | - | Register as peer (600/min per IP rate limit) |
| POST | /v1/peer/agents/:id/refresh | Refresh | Refresh JWT (expires 1h) |
| GET | /v1/peer/agents/:id/status | JWT | Peer status |
| GET | /v1/peer/agents/:id/earnings | JWT | Earnings and traffic stats |
| PUT | /v1/peer/agents/:id/wallet | JWT | Update wallet (7-day cooling period) |
| POST | /v1/peer/agents/:id/withdraw | JWT | Request payout (min $5 USDC; paid only to the registered wallet) |
| Feature | Value |
|---|---|
| JWT expiry | 1 hour |
| Refresh token expiry | 7 days |
| Max WebSocket connections | 6 per device (multi-WS socket pool; over-cap evicts the oldest socket; reference SDK opens 4 by default) |
| Message rate limit | 100/min per device |
| Registration rate limit | 600/min per IP (agents); 5/min per IP (Android SDK device registration) |
| Wallet change cooling | 7 days |
| IP classification | Server-side ASN lookup (cannot spoof) |
Earnings depend entirely on demand routed through your IP - there is no fixed monthly figure. Always pull the current earningsPerGB at registration and multiply by your own throughput. Illustrative relative shape only:
| Connection | Relative earning potential |
|---|---|
| Mobile 5G (US) | Highest - premium tier, most demand |
| Residential (US) | Mid |
| Datacenter VPS | Lowest - base tier |
Actual earnings depend on demand, location, uptime, and carrier ASN reputation.
// build.gradle
implementation("com.github.bolivian-peru:android-peer-sdk:1.3.1")
// Usage
ProxiesPeerSDK.init(context, "api-key", config)
ProxiesPeerSDK.getInstance().start() // Start sharing
ProxiesPeerSDK.getInstance().stop() // Stop sharing
| Package | Description |
|---|---|
| @proxies-sx/mcp-server | MCP server - 79 tools published on npm (v2.2.0) |
| @proxies-sx/x402-core | x402 types, utilities, payment requirement builder |
| @proxies-sx/x402-hono | x402 Hono middleware for building paywall APIs |
| @proxies-sx/x402-solana | Solana transaction verification for x402 |
| Repository | Description |
|---|---|
| proxies-sx-mcp-server | MCP server source |
| x402-sdk | x402 payment protocol SDK |
| android-peer-sdk | Android SDK for peer bandwidth sharing |
| Framework | Integration | Details |
|---|---|---|
| MCP | npx @proxies-sx/mcp-server | 79 tools for Claude, Cursor, Windsurf |
import { Hono } from 'hono';
import { x402Middleware } from '@proxies-sx/x402-hono';
import { verifySolanaPayment } from '@proxies-sx/x402-solana';
const app = new Hono();
app.use('/api/*', x402Middleware({
price: 10000, // $0.01 in micro-units
recipient: 'YOUR_SOLANA_WALLET',
verify: verifySolanaPayment,
}));
app.get('/api/data', (c) => c.json({ data: 'premium content' }));
| File | URL | Purpose |
|---|---|---|
| skill.md | /skill.md | Master skill file - everything for AI agents in one read |
| llms.txt | /llms.txt | LLM integration reference |
| x402.json | /.well-known/x402.json | x402 protocol discovery |
| peer skill.md | /peer/skill.md | Peer Network detailed contract (earn side) |
| pool quickstart | /pool-quickstart.html | Pool Gateway: buy with USDC or use a pak_ key in 30 seconds |
Hierarchy: if this page disagrees with a skill.md, the skill.md wins; if a skill.md disagrees with the live API, the live API wins.
| Domain | Purpose |
|---|---|
| api.proxies.sx | REST API + x402 endpoints + agent APIs |
| client.proxies.sx | Customer portal |
| admin.proxies.sx | Admin dashboard |
| agents.proxies.sx | This page |
| relay.proxies.sx | WebSocket relay for peer devices |
| gw.proxies.sx | HTTP proxy gateway |
Twitter/X | Telegram | GitHub | Dashboard
Support: maya@proxies.sx or Telegram. When reporting an error, quote the req id from the error message.