{"components":{"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"}}},"info":{"contact":{"email":"agdata@shveik.dev"},"description":"Servers for AI agents, rented by the month: pay in stablecoins and get a Linux server with root access and a public IPv4, then pay again to keep it. Endpoints: vps-small, vps-small-renew, vps-medium, vps-medium-renew. An order returns a server id and a secret after the payment settles; the address and the root password follow about 5 to 10 minutes later at GET /v1/vps. A renew call extends a server by months. Payment is in stablecoins: x402 on Base, Polygon and Solana or MPP on Base. x402 uses the exact scheme; no API keys, accounts or subscriptions. A call that cannot be served is never charged. Feedback is free: POST /feedback (or the MCP tool feedback) sends a note to the people who run the service.","title":"agvps","version":"1.0.0","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."},"openapi":"3.1.0","paths":{"/mpp/vps-medium":{"post":{"description":"Rent a Linux server for a month and get root access: 2 vCPU, 2 GB RAM, 25 GB NVMe, a dedicated IPv4 address, Ubuntu 24.04, in Germany or Finland. Pay per month in stablecoins with x402 or MPP, no account and no card. The answer carries a server id and secret; the IP and the root password follow in about 5 to 10 minutes. Extend it with the renew route. 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.","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"hostname":{"description":"optional host name of the server","pattern":"^[a-z0-9]([a-z0-9-]{0,38}[a-z0-9])?$","type":"string"},"location":{"default":"de","description":"data center country: de (Germany) or fi (Finland)","enum":["de","fi"],"type":"string"}},"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."},"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":"Server, 2 vCPU 2 GB RAM","x-payment-info":{"price":{"amount":"14.608","currency":"USD","mode":"fixed"},"protocols":[{"mpp":{"currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","intent":"charge","method":"evm"}}]}}},"/mpp/vps-medium-renew":{"post":{"description":"Extend a medium server by one to six months. Send the server id from the order and the number of months; each month is billed at the plan's monthly price. Pay in stablecoins with x402 or MPP. The server keeps its data and its IP. A server that is not renewed stops at its expiry date. Use the renew route that matches the server's plan. 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.","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"id":{"description":"the server id returned by the order","pattern":"^vps_[0-9a-f]{16}$","type":"string"},"months":{"default":1,"description":"months to add; each month is billed at the plan's monthly price","maximum":6,"minimum":1,"type":"integer"}},"required":["id"],"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."},"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":"Renew a medium server","x-payment-info":{"price":{"currency":"USD","max":"87.608","min":"14.608","mode":"dynamic"},"protocols":[{"mpp":{"currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","intent":"charge","method":"evm"}}]}}},"/mpp/vps-small":{"post":{"description":"Rent a Linux server for a month and get root access: 1 vCPU, 1 GB RAM, 10 GB NVMe, a dedicated IPv4 address, Ubuntu 24.04, in Germany or Finland. Pay per month in stablecoins with x402 or MPP, no account and no card. The answer carries a server id and secret; the IP and the root password follow in about 5 to 10 minutes. Extend it with the renew route. 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.","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"hostname":{"description":"optional host name of the server","pattern":"^[a-z0-9]([a-z0-9-]{0,38}[a-z0-9])?$","type":"string"},"location":{"default":"de","description":"data center country: de (Germany) or fi (Finland)","enum":["de","fi"],"type":"string"}},"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."},"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":"Server, 1 vCPU 1 GB RAM","x-payment-info":{"price":{"amount":"10.008","currency":"USD","mode":"fixed"},"protocols":[{"mpp":{"currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","intent":"charge","method":"evm"}}]}}},"/mpp/vps-small-renew":{"post":{"description":"Extend a small server by one to six months. Send the server id from the order and the number of months; each month is billed at the plan's monthly price. Pay in stablecoins with x402 or MPP. The server keeps its data and its IP. A server that is not renewed stops at its expiry date. Use the renew route that matches the server's plan. 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.","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"id":{"description":"the server id returned by the order","pattern":"^vps_[0-9a-f]{16}$","type":"string"},"months":{"default":1,"description":"months to add; each month is billed at the plan's monthly price","maximum":6,"minimum":1,"type":"integer"}},"required":["id"],"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."},"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":"Renew a small server","x-payment-info":{"price":{"currency":"USD","max":"60.008","min":"10.008","mode":"dynamic"},"protocols":[{"mpp":{"currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","intent":"charge","method":"evm"}}]}}},"/x402/vps-medium":{"post":{"description":"Rent a Linux server for a month and get root access: 2 vCPU, 2 GB RAM, 25 GB NVMe, a dedicated IPv4 address, Ubuntu 24.04, in Germany or Finland. Pay per month in stablecoins with x402 or MPP, no account and no card. The answer carries a server id and secret; the IP and the root password follow in about 5 to 10 minutes. Extend it with the renew route. 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.","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"hostname":{"description":"optional host name of the server","pattern":"^[a-z0-9]([a-z0-9-]{0,38}[a-z0-9])?$","type":"string"},"location":{"default":"de","description":"data center country: de (Germany) or fi (Finland)","enum":["de","fi"],"type":"string"}},"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."},"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":"Server, 2 vCPU 2 GB RAM","x-payment-info":{"price":{"amount":"14.608","currency":"USD","mode":"fixed"},"protocols":[{"x402":{}}]}}},"/x402/vps-medium-renew":{"post":{"description":"Extend a medium server by one to six months. Send the server id from the order and the number of months; each month is billed at the plan's monthly price. Pay in stablecoins with x402 or MPP. The server keeps its data and its IP. A server that is not renewed stops at its expiry date. Use the renew route that matches the server's plan. 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.","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"id":{"description":"the server id returned by the order","pattern":"^vps_[0-9a-f]{16}$","type":"string"},"months":{"default":1,"description":"months to add; each month is billed at the plan's monthly price","maximum":6,"minimum":1,"type":"integer"}},"required":["id"],"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."},"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":"Renew a medium server","x-payment-info":{"price":{"currency":"USD","max":"87.608","min":"14.608","mode":"dynamic"},"protocols":[{"x402":{}}]}}},"/x402/vps-small":{"post":{"description":"Rent a Linux server for a month and get root access: 1 vCPU, 1 GB RAM, 10 GB NVMe, a dedicated IPv4 address, Ubuntu 24.04, in Germany or Finland. Pay per month in stablecoins with x402 or MPP, no account and no card. The answer carries a server id and secret; the IP and the root password follow in about 5 to 10 minutes. Extend it with the renew route. 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.","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"hostname":{"description":"optional host name of the server","pattern":"^[a-z0-9]([a-z0-9-]{0,38}[a-z0-9])?$","type":"string"},"location":{"default":"de","description":"data center country: de (Germany) or fi (Finland)","enum":["de","fi"],"type":"string"}},"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."},"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":"Server, 1 vCPU 1 GB RAM","x-payment-info":{"price":{"amount":"10.008","currency":"USD","mode":"fixed"},"protocols":[{"x402":{}}]}}},"/x402/vps-small-renew":{"post":{"description":"Extend a small server by one to six months. Send the server id from the order and the number of months; each month is billed at the plan's monthly price. Pay in stablecoins with x402 or MPP. The server keeps its data and its IP. A server that is not renewed stops at its expiry date. Use the renew route that matches the server's plan. 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.","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"id":{"description":"the server id returned by the order","pattern":"^vps_[0-9a-f]{16}$","type":"string"},"months":{"default":1,"description":"months to add; each month is billed at the plan's monthly price","maximum":6,"minimum":1,"type":"integer"}},"required":["id"],"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."},"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":"Renew a small server","x-payment-info":{"price":{"currency":"USD","max":"60.008","min":"10.008","mode":"dynamic"},"protocols":[{"x402":{}}]}}}},"servers":[{"url":"https://agvps.shveik.dev"}],"x-service-info":{"categories":["web-scraping","data","ai"],"docs":{"homepage":"https://agvps.shveik.dev"}}}
