residential proxies for agents

agproxy

Residential proxies for AI agents. Pay per GB. No account.

Buy a pack of traffic and use it like any HTTP proxy, with a country and a sticky session in the username. Or skip the proxy: one fetch call returns the raw response from a residential IP. Pay per call in stablecoins.

Pay with x402 or MPP: x402 on Base and Polygon or MPP on Base. Every endpoint answers both.

The same routes are also an MCP server (streamable HTTP, stateless): one tool per route, paid with x402 inside the tool call. /mcp

buy once · use anywherehttp
$ curl -X POST https://agproxy.shveik.dev/x402/proxy \
    -d '{"gb":1}'
HTTP/1.1 402 Payment Required
sign the quote in the header, retry, and:
{
  "host": "agproxy.shveik.dev", "port": 443,
  "username": "ap_9f2c…", "password": "…"
}

$ curl -x http://ap_9f2c…-country-DE:…@agproxy.shveik.dev:443 \
    https://example.com/
<!doctype html>… (from a German residential IP)

What can I buy?

Two ways to use a residential IP. Buy traffic and point your tools at it, or send one request and read the answer.

proxy packs

A proxy login for your agent

Pay for gigabytes, get a host, a port, a username and a password after payment. Use it with curl, a browser, a crawler or any HTTP client that takes a proxy. Choose the country, rotate the IP on every connection or keep one with a session tag.

POST /x402/proxy
or POST /mpp/proxy
{"gb":1}

{
  "host": "agproxy.shveik.dev",
  "port": 443,
  "username": "ap_9f2c…",
  "password": "…",
  "cap_bytes": 1000000000
}

fetch

One request, no proxy to run

Send a URL and get the raw response back as JSON: status, headers and body, fetched from a residential IP in the country you pick. You pay for the megabytes that came back.

POST /x402/fetch
or POST /mpp/fetch
{"max_mb":1,"url":"https://example.com/"}

{
  "status": 200,
  "final_url": "https://example.com/",
  "body": "<!doctype html>…",
  "bytes": 1256
}

Try also agdata: Need the page rendered, unblocked and returned as Markdown, or structured data from social, maps, search, news and jobs? agdata does that, paid the same way.

Using a pack

A pack is an ordinary HTTP proxy. The username carries the options, so the same login does every job.

UsernameWhat it does
ap_IDA new exit IP for every connection, anywhere.
ap_ID-country-DEExit in a country: any two-letter code, such as US, GB, JP, BR.
ap_ID-session-job1Keep one exit IP for every connection that uses the tag job1 (letters, digits, underscore).
ap_ID-country-US-session-job1-ttl-60Options combine; ttl is the session length in minutes, 1 to 180.
any HTTP clientshell · python
$ curl -x http://ap_ID-country-JP:PASSWORD@agproxy.shveik.dev:443 https://example.com/
$ curl -x http://ap_ID:PASSWORD@agproxy.shveik.dev:443 http://usage.agproxy/
{"used_bytes":1256,"cap_bytes":1000000000,"remaining_bytes":999998744,...}

# python
proxies = {"https": "http://ap_ID-session-job1:PASSWORD@agproxy.shveik.dev:443"}
requests.get("https://example.com/", proxies=proxies)

Traffic is counted in both directions through the upstream, tunnel set-up included. A pack ends at its byte cap or after 90 days; http://usage.agproxy/ through the proxy shows what is left and costs nothing. Private and local addresses are not reachable.

Two protocols, every endpoint

Pay the way your agent already does. x402 on Base and Polygon or MPP on Base.

x402 · exact

The 402 carries a PAYMENT-REQUIRED header. Sign an exact-scheme stablecoin authorization and retry with PAYMENT-SIGNATURE.

Endpoints: /x402/<name>

MPP · evm charge

The 402 carries a WWW-Authenticate: Payment challenge (Machine Payments Protocol). Sign it and retry with Authorization: Payment.

Endpoints: /mpp/<name>

Both paths are the same endpoint with the same price: an unpaid request gets both challenges in one 402, and either credential is accepted on either path.

Why agents use it

No account, no keyAn unpaid request returns the quote, so you see the price before you sign anything. The login arrives with the payment receipt.
Metered to the byteThe pack ends exactly at its cap, and an open connection is closed there. You are never billed past what you bought.
A failed call is freeA fetch that fails on the way is not charged; one that delivers less than you reserved is refunded for the difference.
Country and sticky sessionsPick the exit country in the username and keep one IP across steps with a session tag.

How it works

  1. POST a small JSON body. You get 402 with an x402 PAYMENT-REQUIRED header and an MPP WWW-Authenticate: Payment challenge that quote the price for exactly what you asked.
  2. Sign either one with a stablecoin authorization (EIP-3009): x402 exact or MPP evm/authorization.
  3. Retry with PAYMENT-SIGNATURE or Authorization. A pack answers with its proxy login; a fetch answers with the raw response. The payment settles only once the call has succeeded.

All endpoints

  1. POST /x402/proxyor /mpp/proxy

    Residential proxy pack

  2. POST /x402/fetchor /mpp/fetch

    Raw fetch from a residential IP