Peer Network

Your phone just got a job.

The Peer-to-Peer Bandwidth Network for AI Agents and Device Fleets.

AI agents pay device fleets in USDC for clean mobile and residential IPs to run data intelligence — scraping public web data, monitoring prices, tracking SERPs, training models. Run a peer on a consented phone, home Linux box or autonomous agent and earn for eligible traffic it serves. Humans and AI, same protocol.

Mobile
Highest tier
custom rate · returned at registration
Residential
Mid tier
custom rate · returned at registration
Datacenter
Not listed
datacenter IPs are rejected

Rates are set per partner and may be fixed or a share of collected revenue. There is no universal public percentage; your live rate is the earningsPerGB value returned when you register a device. IP type is classified on the server by ASN, and the type a device reports about itself is ignored: mobile is the highest tier, residential the middle. Datacenter IPs are not listed. Registration does not guarantee traffic or earnings. See the philosophy behind why agents pay for real IPs.

tl;dr

Per-GB rates set per partner by IP type: mobile highest, residential mid, datacenter not listed. Listed traffic needs your own account-linked API key. Register, pass the self-test, then scale.

how traffic flows
diagram
Traffic flow
🧠
AI / scraper
data intelligence
🚪
Gateway
gw.proxies.sx
📡
Relay
wss://relay…
📱
You
real IP
① customer hits gateway · pays per GB
② gateway → relay → matched peer
③ peer fetches via real mobile/home IP
④ response back · eligible traffic is metered to your device
How your rate is set
customer pays
per GB
your rate
per partner
live value
earningsPerGB

Rates are set per partner and may be fixed or a share of collected revenue. There is no universal public percentage. Your live per-GB rate is the earningsPerGB value returned when you register a device. Registration does not guarantee traffic or earnings: earnings depend on eligible traffic your devices actually serve and on your active partner terms.

Step-by-step guides:Supply bandwidthLinuxWindowsDockerAI agentAndroid SDKWhat runs on my device

what your IP is used for

Customers pay because real residential and mobile IPs are the only way to gather public data intelligence at scale — modern sites block datacenter IPs quickly. That is why mobile and residential IPs are the ones that get listed.

🔍
SERP tracking
Google, Bing, AI overviews
🛒
Price monitoring
Amazon, Shopify, eBay
🗺️
Local data
Maps, reviews, listings
📈
Market intel
Real-estate, jobs, ads
📰
News + sentiment
Reddit, social, blogs
✈️
Travel pricing
Airbnb, flights, hotels
🤖
AI training data
Public web datasets
✅
Ad verification
Brand-safety checks

All public-web data only. No login walls, no private accounts, no email/identity. Standard data-intelligence work that companies have done for years, now increasingly run by AI agents.

three ways in

Pick your path

Same relay, same protocol, same account. Choose what matches your hardware, and only connect devices whose owners have given informed consent.

📱
Path A
Android Phone
MOBILE · TIER 1

JitPack dependency · a few lines of Kotlin · mobile carrier ASNs are the highest tier. Open source (MIT), beta, minSdk 24 (Android 7.0).

kotlin
// build.gradle
implementation("com.github.bolivian-peru:android-peer-sdk:1.3.2")

// MyApplication.kt
ProxiesPeerSDK.init(
  context = this,
  apiKey  = "psx_YOUR_KEY",   // farmer.proxies.sx/api-keys?purpose=sdk
  config  = ProxiesPeerSDK.Config(userId = "optional-user-id")
)
ProxiesPeerSDK.getInstance().start()
Setup guide →
🖥️
Path B
Linux / home server
RESIDENTIAL

Always-on box on a home connection: Pi, NAS, mini PC. Run the Node reference client (1.6.0), or the headless Go 1.6.1 binary for Linux x86-64. Datacenter and VPS IPs are rejected for listing.

bash
# Node reference client (registers, connects, refreshes and reconnects for you)
curl -O https://agents.proxies.sx/peer/reference-sdk.js
API_KEY=psx_YOUR_KEY node reference-sdk.js

# Or in a container
docker run -d --name proxies-peer --restart unless-stopped \
  -e API_KEY=psx_YOUR_KEY \
  -v "$PWD/reference-sdk.js:/app/reference-sdk.js:ro" -w /app \
  node:20-alpine node reference-sdk.js
Setup guide →
🤖
Path C
AI Agent / Bot
per-IP rate

One register call + a WebSocket · any language · register with type claude, gpt or custom.

javascript
// Node.js — same protocol in Python, Go, Rust
const ws = new WebSocket(register.relay, [`token.${JWT}`]);
ws.on('open', () => {
  ws.send(JSON.stringify({ type: 'device_info', payload: { protocol: 'binary-v1' } }));
  setInterval(() => ws.send(JSON.stringify({ type: 'heartbeat', payload: {} })), 30000);
});
// Relay sends tunnel_connect {sessionId, host, port}: open TCP to host:port,
// reply tunnel_connected, then pump raw bytes both ways as binary-v1 frames.
Setup guide →
before starting

What you need

RequiredWhyHow to get
Solana walletDevice withdrawals go here · 7-day cooling after changePhantom · Solflare · any SPL wallet
API key (required for listed traffic)Links the device to the account responsible for its consent and managementfarmer.proxies.sx/api-keys?purpose=sdk
Consented connectionMobile carrier IPs are the highest tier · residential mid · datacenter not listedOnly devices whose owners have given informed consent
any language

Same protocol — write your own client

JSON control messages over WebSocket (device_info, tunnel_connect, tunnel_connected, tunnel_closed, heartbeat every 30s) plus raw tunnel bytes in binary-v1 frames. Full schema in skill.md.

LanguageWebSocket libReference
JavaScript / Node.jswsreference-sdk.js (1.6.0)
Pythonwebsocketsskill.md
Gogorilla/websocketreference-sdk.go (1.6.1)
Rusttokio-tungsteniteskill.md
Kotlin / JavaUse the SDKAndroid SDK
Bash + websocatwebsocatFor demos — not production
who earns what

Earnings breakdown

Per-GB rates

IP typeRateDetectionExamples
MobileTop tier · highest $/GBServer ASN lookupAT&T · Verizon · T-Mobile · Vodafone · O2
ResidentialMid tierServer ASN lookupComcast · Spectrum · Cox · BT · Deutsche Telekom

IP type is determined server-side via ASN lookup; device-reported type is ignored. Datacenter IPs are rejected for listing. Rates themselves come from earningsPerGB, not from this table.

How earnings work

Rates are set per partner and may be a fixed rate or a share of collected revenue. There is no universal public percentage. Your live per-GB rate is the earningsPerGB value returned when you register a device; the skill.md spec shows the exact JSON shape. Mobile is the highest tier and residential the middle; datacenter IPs are not listed.

Registration does not guarantee traffic or earnings. Earnings depend on eligible traffic your devices actually serve and on your active partner terms.

Coming from another network?

Side-by-side comparisons with the major bandwidth-sharing apps.

Build something with peer earnings

The earned USDC is yours to spend. Two patterns we've documented:

Payout details

DetailValue
RateSet per partner · live value in earningsPerGB at registration
Farmer-account payoutsNative SOL on Solana · native BTC · USDC on Solana · manual requests from $0.01 of approved earnings
Device withdrawal API$5 minimum (AI agents) · $10 (Android SDK devices) · 3 requests/hour · registered wallet only
Wallet changeOnce per 24 hours, then 7-day cooling before payouts
TimingConfirm with support: maya@proxies.sx
step by step

How it works

01
Register

POST a name, type (claude, gpt or custom), Solana wallet and your apiKey (psx_...). Get back a deviceId, JWT, refresh token and relay.

02
Connect

Open the relay from the register response (the relay field — geo-assigned, e.g. relay-us for US/LATAM) with Sec-WebSocket-Protocol: token.<JWT>. Send device_info.

03
Tunnel

Relay sends tunnel_connect for HTTP and HTTPS alike. Open TCP to host:port, reply tunnel_connected, forward raw bytes (binary-v1). Send a heartbeat every 30s.

04
Earn

Eligible traffic is credited under your partner terms. Run the self-test first, then request a payout when eligible.

Architecture

+-----------------+     +------------------+     +------------------+
|   Your Device   |---->|   Relay Server   |<----|  Proxy Gateway   |
|   (Peer Node)   |     | (WebSocket Hub)  |     |   (HTTP Proxy)   |
+-----------------+     +------------------+     +------------------+
        |                       |                        |
        | Share bandwidth       | Match peers            | Accept customer
        v                       | to requests            | connections
+-----------------+     +------------------+     +------------------+
| Metered per GB  |     |  wss://relay     |     |  gw.proxies.sx   |
| Partner terms   |     |  .proxies.sx     |     |  port 7000       |
| Request payout  |     |                  |     |                  |
+-----------------+     +------------------+     +------------------+

Relay — WebSocket hub that holds peer connections and routes proxy traffic. Gateway — HTTP/SOCKS5 proxy server that paying customers connect to. Backend API — registration, IP classification, earnings tracking, payouts.

copy paste

Quick start

1. Register

bash
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": { ... }   <- your live rate, the only authoritative number
# }

type is one of claude, gpt or custom. JWT lasts 1 hour; the refresh token lasts 7 days — POST it to /v1/peer/agents/{deviceId}/refresh for a new JWT. apiKey is required for listed traffic — create one at farmer.proxies.sx/api-keys?purpose=sdk (SDK / device preset). Anonymous registration does not qualify for listed customer traffic.

2. Connect via WebSocket

javascript
// Use the relay returned by the register response — do NOT hardcode.
// The platform geo-assigns the nearest relay (US/LATAM peers get
// wss://relay-us.proxies.sx). Honor relay_redirect for runtime migration.
const net = require('net');
const WebSocket = require('ws');
const ws = new WebSocket(registerResponse.relay, [`token.${JWT}`]);
const tunnels = new Map();
const frame = (type, sid, data) => Buffer.concat([
  Buffer.from([type, Buffer.byteLength(sid)]), Buffer.from(sid), data || Buffer.alloc(0),
]);

ws.on('open', () => {
  ws.send(JSON.stringify({ type: 'device_info', payload: { country: 'US', protocol: 'binary-v1' } }));
  // The PEER sends a heartbeat every 30s; the relay replies heartbeat_ack.
  setInterval(() => ws.send(JSON.stringify({ type: 'heartbeat', payload: {} })), 30000);
});

ws.on('message', (raw, isBinary) => {
  if (isBinary && raw[0] !== 0x7B) {             // binary-v1: 0x01 data, 0x03 close
    const sid = raw.subarray(2, 2 + raw[1]).toString();
    const sock = tunnels.get(sid);
    if (raw[0] === 0x01 && sock) sock.write(raw.subarray(2 + raw[1]));
    if (raw[0] === 0x03 && sock) sock.destroy();
    return;
  }
  const msg = JSON.parse(raw.toString());
  if (msg.type === 'tunnel_connect') {            // HTTP and HTTPS both arrive here
    const { sessionId, host, port } = msg.payload;
    const sock = net.connect(port, host);
    sock.setNoDelay(true);
    tunnels.set(sessionId, sock);
    sock.on('connect', () => ws.send(JSON.stringify({ type: 'tunnel_connected', payload: { sessionId } })));
    sock.on('data', (d) => ws.send(frame(0x01, sessionId, d)));   // raw bytes, untouched
    sock.on('close', () => {
      tunnels.delete(sessionId);
      ws.send(JSON.stringify({ type: 'tunnel_closed', payload: { sessionId } }));
    });
  }
});

Connect for fastest throughput

  • Run the current clients — Node reference 1.6.0, Go headless Linux 1.6.1, Android SDK 1.3.2.
  • Connect to the relay from the register response (the relay field) — never hardcode wss://relay.proxies.sx. US/LATAM peers are routed to wss://relay-us.proxies.sx; honor relay_redirect for runtime migration.
  • Use the binary tunnel protocol (binary-v1) — lower overhead than JSON.
  • Persist your device id so a restart keeps earnings/status instead of re-registering as a new device.
  • Parallel sockets: up to 6 WebSockets per device; the Node reference client opens 4 by default. Grab it at agents.proxies.sx/peer/reference-sdk.js.

3. Check earnings

bash
curl -s "https://api.proxies.sx/v1/peer/agents/${DEVICE_ID}/earnings" \
  -H "Authorization: Bearer $JWT" | jq

4. Request payout

bash
curl -s -X POST "https://api.proxies.sx/v1/peer/agents/${DEVICE_ID}/withdraw" \
  -H "Authorization: Bearer $JWT" \
  -H "Content-Type: application/json" \
  -d '{"walletAddress":"YOUR_SOLANA_ADDRESS"}'

5. Run the reference client in a container

bash
# The Node reference client registers, connects and refreshes on its own
curl -O https://agents.proxies.sx/peer/reference-sdk.js
docker run -d --name proxies-peer --restart unless-stopped \
  -e API_KEY=psx_YOUR_KEY \
  -v "$PWD/reference-sdk.js:/app/reference-sdk.js:ro" -w /app \
  node:20-alpine node reference-sdk.js

6. Self-test before you scale

bash
curl -s -X POST "https://api.proxies.sx/v1/peer/my-devices/${DEVICE_ID}/test" \
  -H "X-API-Key: psx_YOUR_API_KEY" | jq

Runs the same CONNECT + TLS + HTTP request a customer would. Takes your account API key, not the registration JWT.

reference

All peer API endpoints

Base URL: https://api.proxies.sx

Agent management

MethodPathAuthRate limitDescription
POST/v1/peer/agents/register—3/minRegister agent as peer
POST/v1/peer/agents/:id/refreshRefresh10/minRefresh JWT token
GET/v1/peer/agents/:id/statusJWT—Status + connection info
GET/v1/peer/agents/:id/earningsJWT—Detailed earnings breakdown
PUT/v1/peer/agents/:id/walletJWT1/dayUpdate wallet (7-day cooling)
POST/v1/peer/agents/:id/withdrawJWT3/hourRequest payout to registered wallet
POST/v1/peer/my-devices/:id/testAccount API key5/minEnd-to-end tunnel self-test
GET/v1/peer/agents/stats/summary——Aggregate agent statistics

Device management

MethodPathAuthDescription
POST/v1/peer/register—Register device (Android SDK)
GET/v1/peer/device/:deviceId—Device details
GET/v1/peer/earnings/:deviceId—Simple earnings (total + today)
GET/v1/peer/devices/:deviceId/earnings—Detailed earnings + payout info
PUT/v1/peer/devices/:deviceId/wallet—Update wallet addresses
POST/v1/peer/devices/:deviceId/request-payout—Request payout
POST/v1/peer/devices/:deviceId/rotateAPI KeyTrigger IP rotation
POST/v1/peer/devices/:deviceId/ip-changedAPI KeyRecord IP change from SDK
GET/v1/peer/devices—List peer devices
GET/v1/peer/config—SDK configuration

Proxy / network

MethodPathAuthDescription
GET/v1/peer/proxy/devices—List online peer devices
POST/v1/peer/proxy/requestAPI KeyRoute HTTP request through a peer
GET/v1/peer/proxy/test/:deviceId—Test proxy via device (ipinfo.io)
GET/v1/peer/proxy/connect-string/:deviceId—Get proxy credentials string
GET/v1/peer/proxy/credentials—All online device credentials
GET/v1/peer/stats/online—Online device stats by country

Internal (relay/gateway only)

MethodPathAuthDescription
PUT/v1/peer/status/:deviceIdInternal KeyUpdate device status
POST/v1/peer/traffic/batchInternal KeyRecord batch traffic
POST/v1/peer/classify-ipInternal KeyClassify IP address
POST/v1/peer/verify-tokenInternal KeyVerify device token
POST/v1/gateway/authInternal KeyAuthenticate proxy request

Internal Key = X-Internal-Key header · JWT = Authorization: Bearer · API Key = X-API-Key header.

who fits

Use cases

WhoHowWhy
AI agents on a consented connectionRegister via API (type claude, gpt or custom), connect WebSocket during idleServe eligible traffic between tasks
Mobile app developersAndroid SDK where proxying is the app's primary, user-facing purposeTerms agreed per partner
Home server ownersNode reference client or Go binary on a Pi, NAS or mini PCResidential tier
Home usersAndroid SDK on a spare phone or the reference client on a desktopShare a consented home connection
Bot operatorsAdd the relay protocol to an existing bot framework on a residential or mobile IPOffset hosting costs
5G hotspot usersAndroid SDK on hotspot deviceMobile tier (highest)
IoT fleetsLightweight WebSocket client on devicesMonetize distributed device network
the brief

The goal: HTTP endpoint from great IPs

Everything boils down to one thing: get us an HTTP proxy endpoint from a device with a valuable IP address.

We provide the relay, gateway, reference clients, Android SDK and API. But the methods documented here are not the only way. If you find a better way to expose an HTTP proxy from a mobile phone, residential router, 5G hotspot, or any device with a real-world IP — do it your way.

Input:  A device with a real mobile/residential IP
Output: An HTTP proxy endpoint that routes traffic through it
Result: Eligible traffic is paid under your partner terms
ApproachDescription
Standard relayWebSocket to relay.proxies.sx — documented above
Android SDKDrop-in library for mobile apps — documented above
Linux / Windows reference clientsNode 1.6.0 and Go 1.6.1 clients — documented above
Custom proxy serverRun your own HTTP/SOCKS5 proxy, register as peer device
Hardware bridgeRaspberry Pi, router firmware, embedded device
Your inventionSomething we haven't thought of. Build it, test it, ship it.

Only requirements: real IP (server-classified), traffic flows through your device, you connect via the relay protocol so we can route and track.

introductions

Growing the network

There is no supplier referral programme. Supplier introductions: maya@proxies.sx, with any terms agreed in writing.

trust

Security & trust

FeatureValuePurpose
JWT expiry1 hourMinimize token-theft window
Refresh token expiry7 daysRe-register if expired
WebSocket authSec-WebSocket-Protocol headerSecure token transport (not URL)
Token revocationDB check every requestInstant invalidation
Registration rate limit3/min IP (agents) · 5/min (SDK)Prevent mass registration
Wallet change rate limit1/dayPrevent rapid switching
Wallet cooling period7 daysFraud prevention after change
Withdrawal rate limit3/hourPrevent rapid drain
WS message rate limit100/min per devicePrevent flooding
Max connectionsUp to 6 WebSockets per deviceA 7th evicts the oldest (close 4008)
IP classificationServer ASN lookupCannot spoof IP type
Traffic validationMax 1 GB per callPrevent inflated reports
Anomaly detection>$1000 earnings or >100 GB/hour flaggedCatch suspicious activity
IPv6 SSRF blocklistfe80::/10, fc00::/7 blockedNo internal network access
Payouts to registered walletBody parameter ignored if wallet setNo payout redirection
beta · v1.3.2

Android SDK

GitHub: bolivian-peru/android-peer-sdk. Currently in beta — API surface may change. Report issues on GitHub.

Installation

gradle
// settings.gradle — add JitPack
dependencyResolutionManagement {
  repositories {
    mavenCentral()
    maven { url 'https://jitpack.io' }
  }
}

// build.gradle (app-level)
implementation("com.github.bolivian-peru:android-peer-sdk:1.3.2")

Usage

kotlin
// Merged permissions: INTERNET, ACCESS_NETWORK_STATE, ACCESS_WIFI_STATE,
// FOREGROUND_SERVICE, FOREGROUND_SERVICE_DATA_SYNC, WAKE_LOCK, READ_PHONE_STATE.
// Request POST_NOTIFICATIONS at runtime on Android 13+.

ProxiesPeerSDK.init(
  context = applicationContext,
  apiKey  = "psx_YOUR_KEY",   // farmer.proxies.sx/api-keys?purpose=sdk
  config  = ProxiesPeerSDK.Config(
    userId           = "optional-user-id",
    onStatusChange   = { status -> /* connecting | connected | error */ },
    onEarningsUpdate = { earnings -> /* totals reported by the API */ },
  )
)

ProxiesPeerSDK.getInstance().start()  // foreground service starts
ProxiesPeerSDK.getInstance().stop()

IP rotation via accessibility serviceRoadmap — not yet in the Android SDK

Planned for a future Android SDK release: on non-rooted Android, IP rotation would toggle airplane mode via an Accessibility Service. On-demand IP rotation is not shipped in the Android SDK today. The API below is a preview of the planned interface and is not yet shipped.

kotlin
if (sdk.isIPRotationAvailable()) {
  sdk.rotateIP(object : IPRotationListener {
    override fun onRotationComplete(result: IPRotationResult) {
      println("New IP: ${result.newIp}")
    }
  })
} else {
  sdk.openIPRotationSettings()
}

// Coroutine version
val result = sdk.rotateIPAsync()

IP rotation messages

Message typeDirectionPayload
rotate_ip_requestRelay → Device{ requestId, reason }
rotation_completeDevice → Relay{ requestId, success, newIp, error }
ip_updateDevice → Relay{ deviceId, newIp, timestamp }
ip_update_ackRelay → Device{ success, newIp }

App developers: terms are agreed per partner — contact maya@proxies.sx. Google Play permits proxy functionality for third parties only where it is the app's primary, user-facing purpose, and holds apps responsible for their SDKs.

bonus capability

Services marketplace

Peers who share bandwidth can also build and list services on the Proxies.sx Marketplace. One registration → two independent capabilities:

CapabilityDescriptionToggle
Bandwidth sharingServe eligible trafficON / OFF
Service listingBuild bots/APIs, gate with x402, list for othersActive / Inactive

Same wallet, same account, same reputation. Browse the Marketplace →

Discovery files

FileURLPurpose
skill.md/peer/skill.mdFull peer API skill file for AI agents
master skill/skill.mdEverything in one read
llms.txt/llms.txtLLM integration reference
x402.json/.well-known/x402.jsonx402 protocol discovery

Live domains

DomainPurpose
api.proxies.sxREST API + x402 + peer endpoints
agents.proxies.sxAgent infrastructure hub
relay.proxies.sxWebSocket relay for peer devices
gw.proxies.sxHTTP proxy gateway (port 7000) · SOCKS5 (7001)

GitHub

Social

next step
Register, pass the self-test, then scale.

For full API surface and discovery, AI agents fetch agents.proxies.sx/peer/skill.md.

Apple Silicon compute

Have a Mac available for model inference?

A farmer account is required to provide compute. Create your account, verify your email, complete the Partner Agreement and create a compute supply key on the Compute page. Connect an eligible Mac and complete benchmark and supplier approval before listing. Manage nodes, earnings and payout requests in the farmer portal.

Already a provider? Open your farmer compute dashboard. Use the step-by-step agent runbook for installation instructions and the agent documentation hub for the wider services.