{"components":{"headers":{"RateLimit-Limit":{"description":"Per-client request limit for free GET documents.","schema":{"const":120,"type":"integer"}},"RateLimit-Policy":{"description":"Configured free-document policy.","schema":{"const":"120;w=60","type":"string"}},"RateLimit-Remaining":{"description":"Requests remaining in the current 60-second window.","schema":{"minimum":0,"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the oldest request expires and another slot opens.","schema":{"minimum":1,"type":"integer"}},"Retry-After":{"description":"Seconds to wait after a 429 response.","schema":{"minimum":1,"type":"integer"}}},"parameters":{"IdempotencyKey":{"description":"Optional retry key; reusing it with a different request body returns 422.","in":"header","name":"Idempotency-Key","required":false,"schema":{"maxLength":128,"type":"string"}}},"schemas":{"Error":{"additionalProperties":true,"properties":{"error":{"description":"a short stable code: invalid_request, invalid_payment, body_too_large, payment_in_progress, rate_limited, unavailable, upstream_failed, not_fetched, settlement_failed, expired, internal_error, not_found, method_not_allowed","type":"string"},"message":{"description":"a human sentence","type":"string"}},"required":["error","message"],"type":"object"}},"securitySchemes":{"mpp":{"description":"MPP evm/authorization credential in Authorization header. First request without payment returns WWW-Authenticate challenge.","scheme":"Payment","type":"http"},"x402":{"description":"x402 exact payment credential. First request without payment returns PAYMENT-REQUIRED quote.","in":"header","name":"PAYMENT-SIGNATURE","type":"apiKey"}}},"info":{"contact":{"email":"agdata@shveik.dev"},"description":"Residential proxy packs and a raw HTTP fetch for AI agents: buy gigabytes of traffic and get a proxy login, or fetch one URL from a residential IP. Endpoints: proxy, fetch. A proxy pack returns a host, a port, a username and a password after the payment settles; a fetch returns the raw response of one request as JSON. Payment is in stablecoins: x402 on Base and Polygon or MPP on Base. x402 uses the exact scheme; no API keys, accounts or subscriptions. A call that cannot be served is never charged; a fetch is billed by the megabytes it delivers and the rest of the quote is refunded. Feedback is free: POST /feedback (or the MCP tool feedback) sends a note to the people who run the service. Every response carries RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset and RateLimit-Policy headers: they show the per-IP budget of the request class (free documents 120 per minute, unpaid quote requests 300 per minute; a request that carries a payment is never limited). Free GET documents (/openapi.json, /llms.txt, /agents.md, /pricing.md, /docs, /ask and /health) are limited to 120 requests per minute per client IP and return RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset and RateLimit-Policy; a 429 also includes Retry-After. API deprecation policy: https://agproxy.shveik.dev/deprecation-policy.","title":"agproxy","version":"1.1.0","x-api-lifecycle":{"deprecation":"Deprecation and Sunset response headers with at least 90 days notice","policy":"https://agproxy.shveik.dev/deprecation-policy","versioning":"URL prefix /v1"},"x-guidance":"POST a small JSON body (see each operation's requestBody) with no payment to get a 402 carrying a PAYMENT-REQUIRED header (x402) and a WWW-Authenticate: Payment challenge (MPP). Sign either and retry the same request with a PAYMENT-SIGNATURE header (x402) or Authorization: Payment (MPP) to receive the JSON dataset. The 402 quotes the price for your requested limit: a fixed per-call fee plus a per-result price for each result; endpoints without a limit field return one result. If fewer results come back than you asked for, the per-result price of the missing ones is refunded on-chain to the paying address (refunds too small to be worth a transfer are not sent); a scrape with no results keeps only the fixed fee and refunds every result; a failed scrape is not settled. Response headers X-Agdata-Results-Requested, X-Agdata-Results-Delivered and X-Agdata-Refund (USDC base units) report it. fetch can take up to about 25 s: keep the connection open; retrying with the same payment returns the stored result. proxy and fetch are not offered on Solana. Results are returned as one JSON array; limit is a maximum-result count (clamped to endpoint bounds). Paid results have no cursor or continuation token; the only paginated resource is the free GET /endpoints list (limit, cursor, next_cursor). Calls are synchronous; scrape timeout is bounded by configured upstream and settlement windows. An occasional 202 means settlement may have reached the chain, not an asynchronous job; retry the same payment to resolve/retrieve, and there is no status URL."},"openapi":"3.1.0","paths":{"/endpoints":{"get":{"description":"Lists the paid endpoints with their paths and quote URLs, the same entries as the /v1 index. Pages hold limit entries (default 10, at most 50); when next_cursor is not null, pass it back as cursor for the next page. A malformed limit or cursor is a 400 error.","operationId":"listEndpoints","parameters":[{"description":"Entries per page.","in":"query","name":"limit","required":false,"schema":{"default":10,"maximum":50,"minimum":1,"type":"integer"}},{"description":"Opaque cursor: the next_cursor of the previous page.","in":"query","name":"cursor","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"items":{"items":{"type":"object"},"type":"array"},"next_cursor":{"description":"Cursor of the next page; null on the last page.","type":["string","null"]},"total":{"description":"Number of endpoints in the whole list.","minimum":0,"type":"integer"}},"required":["items","next_cursor","total"],"type":"object"}}},"description":"One page of endpoints."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Invalid limit or cursor (error invalid_request)."}},"summary":"List the API endpoints, one page at a time","tags":["Discovery"]}},"/mpp/fetch":{"post":{"description":"Fetch one URL from a residential IP and get the raw response as JSON: status, final URL, headers and body (text or base64), up to 10 MB. GET, HEAD or POST, your own headers, an optional country. No JavaScript rendering. You pay for the megabytes delivered; a fetch that fails is not charged. Pay per call in stablecoins. Send the JSON body with no payment to get a 402 with an MPP challenge (WWW-Authenticate) and an x402 challenge (PAYMENT-REQUIRED); sign the MPP one (evm/authorization) and retry with an Authorization header. Both paths take either protocol: /x402/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. Not offered on Solana: pay on Base or Polygon. GET /mpp/fetch with no body answers the 402 quote for one result without starting a scrape.","operationId":"mppFetch","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"body":{"description":"request body for POST, sent as given","maxLength":1048576,"type":"string"},"country":{"description":"exit country, a two-letter code such as DE or US (default: anywhere)","pattern":"^[A-Za-z]{2}$","type":"string"},"headers":{"additionalProperties":{"type":"string"},"description":"request headers; Host, Content-Length, Connection, Accept-Encoding and proxy headers are set by the service","type":"object"},"max_mb":{"default":1,"description":"most megabytes of the response to return and pay for; a longer body is cut and flagged truncated","maximum":10,"minimum":1,"type":"integer"},"method":{"default":"GET","enum":["GET","HEAD","POST"],"type":"string"},"url":{"description":"the http or https URL to fetch","maxLength":2000,"type":"string"}},"required":["url"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"items":{"type":"object"},"type":"array"}}},"description":"The dataset, after the payment settled.","headers":{"PAYMENT-RESPONSE":{"description":"Base64 x402 settlement response (x402 payments).","schema":{"type":"string"}},"Payment-Receipt":{"description":"MPP receipt (MPP payments).","schema":{"type":"string"}},"X-Agdata-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Agdata-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Agdata-Results-Requested":{"description":"Number of results the quote was for.","schema":{"type":"string"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Invalid request: a request body that is invalid (a payment was attached; without a payment an invalid body gets the 402 below), or a payment header that cannot be read (error invalid_payment). Nothing is charged."},"402":{"content":{"application/json":{"schema":{"description":"The x402 PaymentRequired object (the same as the PAYMENT-REQUIRED header).","type":"object"}}},"description":"Payment required: the quote, with both challenges (also the answer when a payment was not accepted: read error). An unpaid request with an invalid body also gets this 402, quoted for 1 result, with X-Agdata-Invalid-Request: 1 and the reason in error; do not sign that one.","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded x402 payment-required JSON.","schema":{"type":"string"}},"WWW-Authenticate":{"description":"MPP Payment challenge (RFC 9110 auth-params): id, realm, method=evm, intent=charge, request.","schema":{"type":"string"}},"X-Agdata-Invalid-Request":{"description":"1 when the request body is invalid and the quote is for 1 result only.","schema":{"type":"string"}}}},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"The same payment is already being worked on: wait and retry with the same payment."},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"The stored copy of this payment's result has expired (error expired): nothing is charged or run; sign a new payment to ask again."},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"The request body is over 65536 bytes."},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Idempotency-Key was already used with a different request body."},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Too many calls for this host or route are in flight (Retry-After: 5): no payment was taken.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"string"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Internal error: no payment was settled for it."},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"The upstream scrape failed (error upstream_failed), or the payment could not be settled (settlement_failed). Nothing is delivered; an upstream failure is not charged."},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Temporarily unavailable (the endpoint, a payment network or the upstream is switched off or over its failure budget): no payment was taken. Try again later."}},"summary":"Raw fetch from a residential IP","tags":["Scraping"],"x-payment-info":{"price":{"currency":"USD","max":"0.0372","min":"0.0156","mode":"dynamic"},"protocols":[{"mpp":{"currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","intent":"charge","method":"evm"}}]},"x-quote-probe":{"description":"GET /mpp/fetch with no body answers the 402 quote for one result without starting a scrape. A quote for a request-specific limit needs this POST body.","method":"GET"}}},"/mpp/proxy":{"post":{"description":"Residential proxy for AI agents. Pay for gigabytes of traffic and get a proxy login (host, port, username, password) after payment, to use with curl, a browser or any HTTP client. Choose a country, rotate the IP on every connection or keep one with a session tag. A pack lasts 90 days. Pay per pack in stablecoins. Send the JSON body with no payment to get a 402 with an MPP challenge (WWW-Authenticate) and an x402 challenge (PAYMENT-REQUIRED); sign the MPP one (evm/authorization) and retry with an Authorization header. Both paths take either protocol: /x402/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. Not offered on Solana: pay on Base or Polygon. GET /mpp/proxy with no body answers the 402 quote for one result without starting a scrape.","operationId":"mppProxy","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"country":{"description":"optional default exit country, a two-letter code such as DE or US; the username can override it per connection","pattern":"^[A-Za-z]{2}$","type":"string"},"gb":{"default":1,"description":"gigabytes of traffic in the pack (1 GB = 1,000,000,000 bytes, counted on both directions)","maximum":100,"minimum":1,"type":"integer"}},"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"items":{"type":"object"},"type":"array"}}},"description":"The dataset, after the payment settled.","headers":{"PAYMENT-RESPONSE":{"description":"Base64 x402 settlement response (x402 payments).","schema":{"type":"string"}},"Payment-Receipt":{"description":"MPP receipt (MPP payments).","schema":{"type":"string"}},"X-Agdata-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Agdata-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Agdata-Results-Requested":{"description":"Number of results the quote was for.","schema":{"type":"string"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Invalid request: a request body that is invalid (a payment was attached; without a payment an invalid body gets the 402 below), or a payment header that cannot be read (error invalid_payment). Nothing is charged."},"402":{"content":{"application/json":{"schema":{"description":"The x402 PaymentRequired object (the same as the PAYMENT-REQUIRED header).","type":"object"}}},"description":"Payment required: the quote, with both challenges (also the answer when a payment was not accepted: read error). An unpaid request with an invalid body also gets this 402, quoted for 1 result, with X-Agdata-Invalid-Request: 1 and the reason in error; do not sign that one.","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded x402 payment-required JSON.","schema":{"type":"string"}},"WWW-Authenticate":{"description":"MPP Payment challenge (RFC 9110 auth-params): id, realm, method=evm, intent=charge, request.","schema":{"type":"string"}},"X-Agdata-Invalid-Request":{"description":"1 when the request body is invalid and the quote is for 1 result only.","schema":{"type":"string"}}}},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"The same payment is already being worked on: wait and retry with the same payment."},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"The stored copy of this payment's result has expired (error expired): nothing is charged or run; sign a new payment to ask again."},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"The request body is over 65536 bytes."},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Idempotency-Key was already used with a different request body."},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Too many calls for this host or route are in flight (Retry-After: 5): no payment was taken.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"string"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Internal error: no payment was settled for it."},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"The upstream scrape failed (error upstream_failed), or the payment could not be settled (settlement_failed). Nothing is delivered; an upstream failure is not charged."},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Temporarily unavailable (the endpoint, a payment network or the upstream is switched off or over its failure budget): no payment was taken. Try again later."}},"summary":"Residential proxy pack","tags":["Scraping"],"x-payment-info":{"price":{"currency":"USD","max":"240.012","min":"2.412","mode":"dynamic"},"protocols":[{"mpp":{"currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","intent":"charge","method":"evm"}}]},"x-quote-probe":{"description":"GET /mpp/proxy with no body answers the 402 quote for one result without starting a scrape. A quote for a request-specific limit needs this POST body.","method":"GET"}}},"/x402/fetch":{"post":{"description":"Fetch one URL from a residential IP and get the raw response as JSON: status, final URL, headers and body (text or base64), up to 10 MB. GET, HEAD or POST, your own headers, an optional country. No JavaScript rendering. You pay for the megabytes delivered; a fetch that fails is not charged. Pay per call in stablecoins. Send the JSON body with no payment to get a 402 with an x402 challenge (PAYMENT-REQUIRED) and an MPP challenge (WWW-Authenticate); sign the x402 one (exact scheme) and retry with a PAYMENT-SIGNATURE header. Both paths take either protocol: /x402/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. Not offered on Solana: pay on Base or Polygon. GET /x402/fetch with no body answers the 402 quote for one result without starting a scrape.","operationId":"x402Fetch","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"body":{"description":"request body for POST, sent as given","maxLength":1048576,"type":"string"},"country":{"description":"exit country, a two-letter code such as DE or US (default: anywhere)","pattern":"^[A-Za-z]{2}$","type":"string"},"headers":{"additionalProperties":{"type":"string"},"description":"request headers; Host, Content-Length, Connection, Accept-Encoding and proxy headers are set by the service","type":"object"},"max_mb":{"default":1,"description":"most megabytes of the response to return and pay for; a longer body is cut and flagged truncated","maximum":10,"minimum":1,"type":"integer"},"method":{"default":"GET","enum":["GET","HEAD","POST"],"type":"string"},"url":{"description":"the http or https URL to fetch","maxLength":2000,"type":"string"}},"required":["url"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"items":{"type":"object"},"type":"array"}}},"description":"The dataset, after the payment settled.","headers":{"PAYMENT-RESPONSE":{"description":"Base64 x402 settlement response (x402 payments).","schema":{"type":"string"}},"Payment-Receipt":{"description":"MPP receipt (MPP payments).","schema":{"type":"string"}},"X-Agdata-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Agdata-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Agdata-Results-Requested":{"description":"Number of results the quote was for.","schema":{"type":"string"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Invalid request: a request body that is invalid (a payment was attached; without a payment an invalid body gets the 402 below), or a payment header that cannot be read (error invalid_payment). Nothing is charged."},"402":{"content":{"application/json":{"schema":{"description":"The x402 PaymentRequired object (the same as the PAYMENT-REQUIRED header).","type":"object"}}},"description":"Payment required: the quote, with both challenges (also the answer when a payment was not accepted: read error). An unpaid request with an invalid body also gets this 402, quoted for 1 result, with X-Agdata-Invalid-Request: 1 and the reason in error; do not sign that one.","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded x402 payment-required JSON.","schema":{"type":"string"}},"WWW-Authenticate":{"description":"MPP Payment challenge (RFC 9110 auth-params): id, realm, method=evm, intent=charge, request.","schema":{"type":"string"}},"X-Agdata-Invalid-Request":{"description":"1 when the request body is invalid and the quote is for 1 result only.","schema":{"type":"string"}}}},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"The same payment is already being worked on: wait and retry with the same payment."},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"The stored copy of this payment's result has expired (error expired): nothing is charged or run; sign a new payment to ask again."},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"The request body is over 65536 bytes."},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Idempotency-Key was already used with a different request body."},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Too many calls for this host or route are in flight (Retry-After: 5): no payment was taken.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"string"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Internal error: no payment was settled for it."},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"The upstream scrape failed (error upstream_failed), or the payment could not be settled (settlement_failed). Nothing is delivered; an upstream failure is not charged."},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Temporarily unavailable (the endpoint, a payment network or the upstream is switched off or over its failure budget): no payment was taken. Try again later."}},"summary":"Raw fetch from a residential IP","tags":["Scraping"],"x-payment-info":{"price":{"currency":"USD","max":"0.0372","min":"0.0156","mode":"dynamic"},"protocols":[{"x402":{}}]},"x-quote-probe":{"description":"GET /x402/fetch with no body answers the 402 quote for one result without starting a scrape. A quote for a request-specific limit needs this POST body.","method":"GET"}}},"/x402/proxy":{"post":{"description":"Residential proxy for AI agents. Pay for gigabytes of traffic and get a proxy login (host, port, username, password) after payment, to use with curl, a browser or any HTTP client. Choose a country, rotate the IP on every connection or keep one with a session tag. A pack lasts 90 days. Pay per pack in stablecoins. Send the JSON body with no payment to get a 402 with an x402 challenge (PAYMENT-REQUIRED) and an MPP challenge (WWW-Authenticate); sign the x402 one (exact scheme) and retry with a PAYMENT-SIGNATURE header. Both paths take either protocol: /x402/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. Not offered on Solana: pay on Base or Polygon. GET /x402/proxy with no body answers the 402 quote for one result without starting a scrape.","operationId":"x402Proxy","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"country":{"description":"optional default exit country, a two-letter code such as DE or US; the username can override it per connection","pattern":"^[A-Za-z]{2}$","type":"string"},"gb":{"default":1,"description":"gigabytes of traffic in the pack (1 GB = 1,000,000,000 bytes, counted on both directions)","maximum":100,"minimum":1,"type":"integer"}},"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"items":{"type":"object"},"type":"array"}}},"description":"The dataset, after the payment settled.","headers":{"PAYMENT-RESPONSE":{"description":"Base64 x402 settlement response (x402 payments).","schema":{"type":"string"}},"Payment-Receipt":{"description":"MPP receipt (MPP payments).","schema":{"type":"string"}},"X-Agdata-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Agdata-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Agdata-Results-Requested":{"description":"Number of results the quote was for.","schema":{"type":"string"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Invalid request: a request body that is invalid (a payment was attached; without a payment an invalid body gets the 402 below), or a payment header that cannot be read (error invalid_payment). Nothing is charged."},"402":{"content":{"application/json":{"schema":{"description":"The x402 PaymentRequired object (the same as the PAYMENT-REQUIRED header).","type":"object"}}},"description":"Payment required: the quote, with both challenges (also the answer when a payment was not accepted: read error). An unpaid request with an invalid body also gets this 402, quoted for 1 result, with X-Agdata-Invalid-Request: 1 and the reason in error; do not sign that one.","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded x402 payment-required JSON.","schema":{"type":"string"}},"WWW-Authenticate":{"description":"MPP Payment challenge (RFC 9110 auth-params): id, realm, method=evm, intent=charge, request.","schema":{"type":"string"}},"X-Agdata-Invalid-Request":{"description":"1 when the request body is invalid and the quote is for 1 result only.","schema":{"type":"string"}}}},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"The same payment is already being worked on: wait and retry with the same payment."},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"The stored copy of this payment's result has expired (error expired): nothing is charged or run; sign a new payment to ask again."},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"The request body is over 65536 bytes."},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Idempotency-Key was already used with a different request body."},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Too many calls for this host or route are in flight (Retry-After: 5): no payment was taken.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"string"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Internal error: no payment was settled for it."},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"The upstream scrape failed (error upstream_failed), or the payment could not be settled (settlement_failed). Nothing is delivered; an upstream failure is not charged."},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Temporarily unavailable (the endpoint, a payment network or the upstream is switched off or over its failure budget): no payment was taken. Try again later."}},"summary":"Residential proxy pack","tags":["Scraping"],"x-payment-info":{"price":{"currency":"USD","max":"240.012","min":"2.412","mode":"dynamic"},"protocols":[{"x402":{}}]},"x-quote-probe":{"description":"GET /x402/proxy with no body answers the 402 quote for one result without starting a scrape. A quote for a request-specific limit needs this POST body.","method":"GET"}}}},"servers":[{"description":"Current stable API routes; legacy unversioned routes remain available.","url":"https://agproxy.shveik.dev/v1"},{"description":"Unversioned compatibility routes.","url":"https://agproxy.shveik.dev"}],"tags":[{"description":"Synchronous data retrieval; each request completes in the HTTP response.","name":"Scraping"},{"description":"Free, unpaid API metadata.","name":"Discovery"}],"x-api-versioning":{"current":"v1","policy":"The /v1 prefix identifies the current stable API. Unversioned paths remain compatibility aliases. Breaking changes will use a new major path and be announced with a deprecation period; no fixed sunset date is promised."},"x-service-info":{"categories":["web-scraping","data","ai"],"docs":{"homepage":"https://agproxy.shveik.dev"}}}
