openapi: 3.2.0 info: title: Shveik Scraping API version: 1.1.0 x-refined-note: - x-api-lifecycle differs across the merged source definitions and was not carried - x-guidance differs across the merged source definitions and was not carried description: 'Operations tagged Scraping across 10 of this provider''s published API definitions: agdata-openapi.json, agmail-openapi.json, agpay-openapi.json, agproxy-openapi.json, agvps-openapi.json, shveik-agdata-openapi.yml, shveik-agmail-openapi.yml, shveik-agpay-openapi.yml, shveik-agproxy-openapi.yml, shveik-agvps-openapi.yml. Each path carries the servers of the definition it was published in.' servers: - description: Current stable API routes; legacy unversioned routes remain available. url: https://agdata.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agdata.shveik.dev - description: Current stable API routes; legacy unversioned routes remain available. url: https://agmail.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agmail.shveik.dev - description: Current stable API routes; legacy unversioned routes remain available. url: https://agpay.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agpay.shveik.dev - 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 - description: Current stable API routes; legacy unversioned routes remain available. url: https://agvps.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agvps.shveik.dev tags: - description: Synchronous data retrieval; each request completes in the HTTP response. name: Scraping paths: /mpp/amazon: post: description: 'Keyword search on Amazon.com (US store): up to 20 products per call, each filled in from its product page. Body: {query, limit}. The normalized object per product: asin, title, brand, price, list_price, currency, rating, reviews_count, in_stock, seller, image, url, description and the features bullet list. Good for price checks and product comparison. 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/ and /mpp/ are the same endpoint. GET /mpp/amazon with no body answers the 402 quote for one result without starting a scrape.' operationId: mppAmazon parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: true properties: limit: default: 5 description: number of products wanted, 1 to 20 (default 5). A larger value is lowered to 20 and 0 or a negative one means the default; the quote follows the value used. maximum: 20 minimum: 1 type: integer query: description: Amazon search term, e.g. "wireless keyboard" maxLength: 500 type: string required: - query 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.' '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. '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: 'Nothing was delivered: a call that delivers nothing. Error not_fetched; the payment is not settled and nothing is charged. Also the answer when the upstream failed (upstream_failed) or the payment could not be settled (settlement_failed).' '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: Amazon product search tags: - Scraping x-payment-info: price: currency: USD max: '0.417' min: '0.037' mode: dynamic protocols: - mpp: currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' intent: charge method: evm x-quote-probe: description: GET /mpp/amazon 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://agdata.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agdata.shveik.dev /mpp/amazon-reviews: post: description: 'Amazon product reviews API for AI agents: send an ASIN or an Amazon product URL and get up to 50 customer reviews as JSON: rating, title, text, date, verified-purchase flag and helpful votes. Sort by recent or helpful, filter by stars, and pick the marketplace (US, UK, DE, FR, IT, ES, CA, JP). Reviewer names and photos are not returned. A product with no reviews is not charged. 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/ and /mpp/ are the same endpoint. Not offered on Solana: pay on Base or Polygon. GET /mpp/amazon-reviews with no body answers the 402 quote for one result without starting a scrape.' operationId: mppAmazonReviews parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: false properties: country: default: us description: Amazon marketplace of an ASIN (a URL sets its own; a different value is refused) enum: - us - uk - de - fr - it - es - ca - jp type: string limit: default: 10 description: number of reviews wanted, 1 to 50 (default 10). A larger value is lowered to 50 and 0 or a negative one means the default; the quote follows the value used. maximum: 50 minimum: 1 type: integer product: description: an ASIN (10 characters, e.g. B079JLY5M5) or an Amazon product URL (.../dp/ASIN) on amazon.com, .co.uk, .de, .fr, .it, .es, .ca or .co.jp; a URL sets the marketplace maxLength: 2048 type: string sort: default: recent description: order of the reviews enum: - recent - helpful type: string stars: default: all description: keep only reviews with this many stars (5 to 1), the positive ones (4 and 5) or the critical ones (1 to 3) enum: - all - '5' - '4' - '3' - '2' - '1' - positive - critical type: string required: - product 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.' '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. '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: 'Nothing was delivered: a product with no reviews (or an unknown one). Error not_fetched; the payment is not settled and nothing is charged. Also the answer when the upstream failed (upstream_failed) or the payment could not be settled (settlement_failed).' '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: Amazon customer reviews of a product tags: - Scraping x-payment-info: price: currency: USD max: '0.1938' min: '0.0174' mode: dynamic protocols: - mpp: currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' intent: charge method: evm x-quote-probe: description: GET /mpp/amazon-reviews 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://agdata.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agdata.shveik.dev /mpp/google-maps: post: description: 'Google Maps places for a search term, optionally narrowed to an area: {"query":"coffee shops","location":"Prague","limit":5}. Up to 20 places per call. Each place comes back with title, categoryName, address, phone, website, totalScore (rating), reviewsCount, location (lat, lng), openingHours, price, placeId and its Maps url. Common uses are local lead lists, store and competitor mapping, and checking a business''s hours or phone number. 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/ and /mpp/ are the same endpoint. GET /mpp/google-maps with no body answers the 402 quote for one result without starting a scrape.' operationId: mppGoogleMaps parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: true properties: limit: default: 5 description: number of places wanted, 1 to 20 (default 5). A larger value is lowered to 20 and 0 or a negative one means the default; the quote follows the value used. maximum: 20 minimum: 1 type: integer location: description: optional area to narrow the search, e.g. "Prague" maxLength: 500 type: string query: description: Google Maps search term, e.g. "coffee shops" maxLength: 500 type: string required: - query 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.' '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. '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: 'Nothing was delivered: a call that delivers nothing. Error not_fetched; the payment is not settled and nothing is charged. Also the answer when the upstream failed (upstream_failed) or the payment could not be settled (settlement_failed).' '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: Google Maps places and businesses tags: - Scraping x-payment-info: price: currency: USD max: '0.3362' min: '0.0322' mode: dynamic protocols: - mpp: currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' intent: charge method: evm x-quote-probe: description: GET /mpp/google-maps 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://agdata.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agdata.shveik.dev /mpp/google-maps-reviews: post: description: 'Google Maps reviews API for AI agents: send a place_id or a Google Maps place URL and get up to 50 reviews as JSON: stars, text and its translation, date, likes, the owner''s reply, plus the place''s name, address and rating. Sort by newest, relevant, highest or lowest. Reviewer names, profiles and photos are not returned. A place with no reviews is not charged; reviews you paid for but did not get are refunded. 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/ and /mpp/ are the same endpoint. GET /mpp/google-maps-reviews with no body answers the 402 quote for one result without starting a scrape.' operationId: mppGoogleMapsReviews parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: false properties: language: default: en description: language the reviews are translated into (textTranslated) enum: - af - am - ar - az - bg - bn - bs - ca - cs - da - de - el - en - es - es-419 - et - eu - fa - fi - fil - fr - gl - gu - hi - hr - hu - hy - id - is - it - iw - ja - ka - kk - km - kn - ko - ky - lo - lt - lv - mk - ml - mn - mr - ms - my - ne - nl - 'no' - pa - pl - pt-BR - pt-PT - ro - ru - si - sk - sl - sq - sr - sv - sw - ta - te - th - tr - uk - ur - uz - vi - zh-CN - zh-TW - zu type: string limit: default: 10 description: number of reviews wanted, 1 to 50 (default 10). A larger value is lowered to 50 and 0 or a negative one means the default; the quote follows the value used. maximum: 50 minimum: 1 type: integer place: description: 'a Google place_id (27 characters starting with ChIJ or GhIJ), or a Google Maps place URL: https://www.google.com/maps/place/... or https://www.google.com/maps?cid=... (a URL with only the place''s name and no place id is best effort and may end as not fetched, which is not charged)' maxLength: 2048 type: string sort: default: newest description: order of the reviews enum: - newest - relevant - highest - lowest type: string required: - place 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.' '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. '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: 'Nothing was delivered: a place with no reviews. Error not_fetched; the payment is not settled and nothing is charged. Also the answer when the upstream failed (upstream_failed) or the payment could not be settled (settlement_failed).' '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: Google Maps reviews of a place tags: - Scraping x-payment-info: price: currency: USD max: '0.13265' min: '0.01505' mode: dynamic protocols: - mpp: currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' intent: charge method: evm x-quote-probe: description: GET /mpp/google-maps-reviews 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://agdata.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agdata.shveik.dev /mpp/google-news: post: description: 'Google News search API for AI agents: send a keyword or phrase and get up to 30 current news articles as JSON: headline, publisher, publish time, a short description and the article''s link. Choose the language and country edition. Articles you paid for but did not get are refunded. 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/ and /mpp/ are the same endpoint. GET /mpp/google-news with no body answers the 402 quote for one result without starting a scrape.' operationId: mppGoogleNews parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: false properties: country: default: US description: two-letter country code of the news edition, e.g. US, GB, DE pattern: ^[A-Za-z]{2}$ type: string language: default: en description: two-letter language code of the news edition, e.g. en, de, es pattern: ^[a-z]{2}$ type: string limit: default: 10 description: number of articles wanted, 1 to 30 (default 10). A larger value is lowered to 30 and 0 or a negative one means the default; the quote follows the value used. maximum: 30 minimum: 1 type: integer query: description: keyword or phrase to search Google News for, e.g. "openai" maxLength: 500 type: string required: - query 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.' '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. '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: 'Nothing was delivered: a call that delivers nothing. Error not_fetched; the payment is not settled and nothing is charged. Also the answer when the upstream failed (upstream_failed) or the payment could not be settled (settlement_failed).' '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: Google News articles for a search tags: - Scraping x-payment-info: price: currency: USD max: '0.1573' min: '0.0239' mode: dynamic protocols: - mpp: currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' intent: charge method: evm x-quote-probe: description: GET /mpp/google-news 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://agdata.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agdata.shveik.dev /mpp/google-search: post: description: 'Google Search results (SERP) for a query, as JSON. Each record is one results page with organicResults (position, title, url, displayedUrl, description), paidResults, relatedQueries, peopleAlsoAsk and searchQuery metadata. Body: {query, limit}. limit (1-20) is rounded up to whole pages of about 10 results, so 1-10 returns one page and 11-20 returns two. Useful for rank checks, source discovery and grounding answers in search results. 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/ and /mpp/ are the same endpoint. GET /mpp/google-search with no body answers the 402 quote for one result without starting a scrape.' operationId: mppGoogleSearch parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: true properties: limit: default: 5 description: number of results (billed in pages of about 10) wanted, 1 to 20 (default 5). A larger value is lowered to 20 and 0 or a negative one means the default; the quote follows the value used. maximum: 20 minimum: 1 type: integer query: description: Google Search query, e.g. "best CRM tools" (line breaks and runs of spaces become one space) maxLength: 500 type: string required: - query 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.' '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. '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: 'Nothing was delivered: a call that delivers nothing. Error not_fetched; the payment is not settled and nothing is charged. Also the answer when the upstream failed (upstream_failed) or the payment could not be settled (settlement_failed).' '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: Google Search results (SERP) tags: - Scraping x-payment-info: price: currency: USD max: '0.06155' min: '0.02285' mode: dynamic protocols: - mpp: currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' intent: charge method: evm x-quote-probe: description: GET /mpp/google-search 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://agdata.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agdata.shveik.dev /mpp/indeed-jobs: post: description: 'Indeed jobs search API for AI agents: send a job title and an optional location and country and get up to 50 job listings as JSON: title, employer, location, posting date, job types, benefits, salary range when listed and the listing''s description. Filter by how recently a job was posted; 60 countries. Jobs you paid for but did not get are refunded. 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/ and /mpp/ are the same endpoint. GET /mpp/indeed-jobs with no body answers the 402 quote for one result without starting a scrape.' operationId: mppIndeedJobs parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: false properties: country: default: us description: two-letter country code of the Indeed site searched (uk for the United Kingdom) enum: - ar - au - at - bh - be - br - ca - cl - cn - co - cr - cz - dk - ec - eg - fi - fr - de - gr - hk - hu - in - id - ie - il - it - jp - kw - lu - my - mx - ma - nl - nz - ng - 'no' - om - pk - pa - pe - ph - pl - pt - qa - ro - sa - sg - za - kr - es - se - ch - tw - th - tr - ua - ae - uk - us - uy - ve - vn type: string limit: default: 10 description: number of jobs wanted, 1 to 50 (default 10). A larger value is lowered to 50 and 0 or a negative one means the default; the quote follows the value used. maximum: 50 minimum: 1 type: integer location: description: 'city, state, postal code or "remote", e.g. "Austin, TX" (default: anywhere in the country)' maxLength: 500 type: string posted: description: 'only jobs posted within the last day (24h), 3 days (3d), week or 14 days (14d) (default: any time)' enum: - 14d - 24h - 3d - week type: string query: description: job title, keywords or company, e.g. "nurse" maxLength: 500 type: string required: - query 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.' '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. '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: 'Nothing was delivered: a call that delivers nothing. Error not_fetched; the payment is not settled and nothing is charged. Also the answer when the upstream failed (upstream_failed) or the payment could not be settled (settlement_failed).' '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: Indeed job listings for a search tags: - Scraping x-payment-info: price: currency: USD max: '0.0631' min: '0.0141' mode: dynamic protocols: - mpp: currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' intent: charge method: evm x-quote-probe: description: GET /mpp/indeed-jobs 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://agdata.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agdata.shveik.dev /mpp/instagram: post: description: 'Instagram posts as JSON. Mode profile returns an account''s posts, hashtag returns posts under a tag, and search or user take a keyword and scrape the best-matching hashtag or account. Send {mode, query, limit} with limit 1-20. Each post has a normalized object: caption, likes, comments_count, views, posted_at, media_type, media_url, hashtags, author, author_name, shortcode, url. No Instagram login or API key needed. 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/ and /mpp/ are the same endpoint. GET /mpp/instagram with no body answers the 402 quote for one result without starting a scrape.' operationId: mppInstagram parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: true properties: limit: default: 5 description: number of posts wanted, 1 to 20 (default 5). A larger value is lowered to 20 and 0 or a negative one means the default; the quote follows the value used. maximum: 20 minimum: 1 type: integer mode: description: profile=account's posts, hashtag=posts under a tag, search=keyword→posts, user=posts from matching users enum: - profile - hashtag - search - user type: string query: description: 'username (profile), hashtag without #, or search keywords' maxLength: 500 type: string required: - mode - query 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.' '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. '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: 'Nothing was delivered: a call that delivers nothing. Error not_fetched; the payment is not settled and nothing is charged. Also the answer when the upstream failed (upstream_failed) or the payment could not be settled (settlement_failed).' '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: Instagram posts by profile, tag, search tags: - Scraping x-payment-info: price: currency: USD max: '0.2307' min: '0.0255' mode: dynamic protocols: - mpp: currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' intent: charge method: evm x-quote-probe: description: GET /mpp/instagram 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://agdata.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agdata.shveik.dev /mpp/instagram-comments: post: description: 'Instagram comments API for AI agents: send the URL of a post or reel and get its comments as JSON: text, time, likes and reply count. Up to 100 comments per call. The commenters'' names and handles are not returned. Pay per call in stablecoins; comments you paid for but did not get are refunded. 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/ and /mpp/ are the same endpoint. Not offered on Solana: pay on Base or Polygon. GET /mpp/instagram-comments with no body answers the 402 quote for one result without starting a scrape.' operationId: mppInstagramComments parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: false properties: limit: default: 20 description: number of comments wanted, 1 to 100 (default 20). A larger value is lowered to 100 and 0 or a negative one means the default; the quote follows the value used. maximum: 100 minimum: 1 type: integer url: description: URL of an Instagram post or reel, e.g. https://www.instagram.com/p/DdG4RIxIPyf/ maxLength: 300 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.' '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. '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: 'Nothing was delivered: a call that delivers nothing. Error not_fetched; the payment is not settled and nothing is charged. Also the answer when the upstream failed (upstream_failed) or the payment could not be settled (settlement_failed).' '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: Comments under an Instagram post tags: - Scraping x-payment-info: price: currency: USD max: '0.5346' min: '0.0198' mode: dynamic protocols: - mpp: currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' intent: charge method: evm x-quote-probe: description: GET /mpp/instagram-comments 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://agdata.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agdata.shveik.dev /mpp/linkedin: post: description: 'Look up one public LinkedIn profile per call. Pass {query} as a username (jane-example), a profile URL or a URN; there is no limit field. The normalized object holds name, first_name, last_name, headline, about, location, country_code, current_company, followers, connections, avatar, plus experience (title, company, start_year, end_year, is_current) and education (school, degree, field, years). Email addresses are not returned. 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/ and /mpp/ are the same endpoint. GET /mpp/linkedin with no body answers the 402 quote for one result without starting a scrape.' operationId: mppLinkedin parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: true properties: query: description: LinkedIn username (e.g. "jane-example"), full profile URL, or urn maxLength: 500 type: string required: - query 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.' '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. '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: 'Nothing was delivered: a call that delivers nothing. Error not_fetched; the payment is not settled and nothing is charged. Also the answer when the upstream failed (upstream_failed) or the payment could not be settled (settlement_failed).' '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: LinkedIn profile lookup tags: - Scraping x-payment-info: price: amount: '0.037' currency: USD mode: fixed protocols: - mpp: currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' intent: charge method: evm x-quote-probe: description: GET /mpp/linkedin 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://agdata.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agdata.shveik.dev /mpp/linkedin-jobs: post: description: 'LinkedIn jobs search API for AI agents: send a job title or keywords and an optional location and get up to 50 public job listings as JSON: title, company, location, posting date, employment type, seniority, salary when listed, the listing''s URL and its description. Filter by how recently a job was posted. Recruiter names are not returned. Jobs you paid for but did not get are refunded. 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/ and /mpp/ are the same endpoint. Not offered on Solana: pay on Base or Polygon. GET /mpp/linkedin-jobs with no body answers the 402 quote for one result without starting a scrape.' operationId: mppLinkedinJobs parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: false properties: limit: default: 10 description: number of jobs wanted, 1 to 50 (default 10). A larger value is lowered to 50 and 0 or a negative one means the default; the quote follows the value used. maximum: 50 minimum: 1 type: integer location: description: 'city, region or country, e.g. "Prague" (default: anywhere)' maxLength: 500 type: string posted: description: 'only jobs posted within the last day (24h), week or month (default: any time)' enum: - 24h - month - week type: string query: description: job title, skill or company, e.g. "data engineer" maxLength: 500 type: string required: - query 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.' '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. '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: 'Nothing was delivered: a call that delivers nothing. Error not_fetched; the payment is not settled and nothing is charged. Also the answer when the upstream failed (upstream_failed) or the payment could not be settled (settlement_failed).' '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: LinkedIn job listings for a search tags: - Scraping x-payment-info: price: currency: USD max: '0.0934' min: '0.015' mode: dynamic protocols: - mpp: currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' intent: charge method: evm x-quote-probe: description: GET /mpp/linkedin-jobs 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://agdata.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agdata.shveik.dev /mpp/reddit: post: description: 'Search Reddit or read a subreddit. Use mode hashtag with a subreddit name (no r/), profile with a username, or search with keywords, plus limit 1-20. Every record is a post with kind, id, url, title, body, author, subreddit, upvotes, comments_count, created_at, members and source; at most limit posts come back. Comments, profile and subreddit records are not returned. upvotes and comments_count can be null. Send raw true for the full original records. 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/ and /mpp/ are the same endpoint. Not offered on Solana: pay on Base or Polygon. GET /mpp/reddit with no body answers the 402 quote for one result without starting a scrape.' operationId: mppReddit parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: true properties: limit: default: 5 description: number of posts wanted, 1 to 20 (default 5). A larger value is lowered to 20 and 0 or a negative one means the default; the quote follows the value used. maximum: 20 minimum: 1 type: integer mode: description: profile=user's posts, hashtag=subreddit's posts, search=keyword→posts enum: - profile - hashtag - search type: string query: description: username (profile), subreddit without r/ (hashtag), or search keywords maxLength: 500 type: string raw: default: false description: true returns the provider's own records instead of the compact shape type: boolean required: - mode - query 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.' '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. '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: 'Nothing was delivered: a call that delivers nothing. Error not_fetched; the payment is not settled and nothing is charged. Also the answer when the upstream failed (upstream_failed) or the payment could not be settled (settlement_failed).' '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: Reddit posts by subreddit, user, search tags: - Scraping x-payment-info: price: currency: USD max: '0.1435' min: '0.0295' mode: dynamic protocols: - mpp: currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' intent: charge method: evm x-quote-probe: description: GET /mpp/reddit 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://agdata.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agdata.shveik.dev /mpp/screenshot: post: description: 'Screenshot API for AI agents: send {url} and get a JPEG, PNG, WebP or PDF of the page as base64 in JSON, with final URL, byte size and pixel size. Pick a desktop, mobile or tablet viewport, full page, dark mode, a delay or one element by CSS selector. It shows what a normal browser sees and does not get past bot protection (use unblock for those pages'' text). A page that can''t be captured, or renders blank, is not charged. 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/ and /mpp/ are the same endpoint. Not offered on Solana: pay on Base or Polygon. GET /mpp/screenshot with no body answers the 402 quote for one result without starting a scrape.' operationId: mppScreenshot parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: false properties: colorScheme: description: emulated prefers-color-scheme enum: - light - dark type: string delayMs: default: 0 description: extra wait after the page loaded, in milliseconds maximum: 5000 minimum: 0 type: integer device: default: desktop description: 'viewport: desktop 1920x1080, desktop_hd 1366x768, mobile (phone), tablet' enum: - desktop - desktop_hd - mobile - tablet type: string format: default: jpeg description: image or document format of the capture; pdf is always the full page enum: - jpeg - png - webp - pdf type: string fullPage: default: false description: capture the whole scrollable page (height is capped at 16,384 px), not just the viewport type: boolean height: description: custom viewport height in pixels (ignored with fullPage) maximum: 1200 minimum: 240 type: integer selector: description: 'CSS selector: capture only the first matching element' maxLength: 200 type: string url: description: absolute http or https URL of a public page, e.g. "https://example.com/" maxLength: 2048 type: string waitForSelector: description: CSS selector to wait for before capturing maxLength: 200 type: string width: description: custom viewport width in pixels (overrides the device) maximum: 1920 minimum: 320 type: integer 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: 'Nothing was delivered: a page that could not be captured, renders blank or gives an image over 5 MiB. Error not_fetched; the payment is not settled and nothing is charged. Also the answer when the upstream failed (upstream_failed) or the payment could not be settled (settlement_failed).' '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: Website screenshot or PDF of any URL tags: - Scraping x-payment-info: price: amount: '0.01897' currency: USD mode: fixed protocols: - mpp: currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' intent: charge method: evm x-quote-probe: description: GET /mpp/screenshot 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://agdata.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agdata.shveik.dev /mpp/search-plus: post: description: 'Search API for AI agents: web or news search with up to 30 results per call, each with a title, URL and a query-relevant excerpt. Filter by site, or by category: developer (repos, issues, docs), GitHub or PDF. Fast, about a second. 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/ and /mpp/ are the same endpoint. GET /mpp/search-plus with no body answers the 402 quote for one result without starting a scrape.' operationId: mppSearchPlus parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: false properties: category: description: 'restrict web results: developer (repos, issues, docs), github or pdf' enum: - developer - github - pdf type: string exclude_domains: description: leave out these hostnames; not together with include_domains items: type: string maxItems: 10 type: array include_domains: description: only results from these hostnames, e.g. ["docs.python.org"]; not together with exclude_domains items: type: string maxItems: 10 type: array limit: default: 10 description: number of results (billed in pages of 10) wanted, 1 to 30 (default 10). A larger value is lowered to 30 and 0 or a negative one means the default; the quote follows the value used. maximum: 30 minimum: 1 type: integer query: description: search keywords, e.g. "fastapi websocket disconnect" (not a URL; quoted phrases, -term and site:host work) maxLength: 500 type: string type: description: web (the default) or news enum: - web - news type: string required: - query 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.' '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. '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: 'Nothing was delivered: a call that delivers nothing. Error not_fetched; the payment is not settled and nothing is charged. Also the answer when the upstream failed (upstream_failed) or the payment could not be settled (settlement_failed).' '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: Web or news search with excerpts tags: - Scraping x-payment-info: price: currency: USD max: '0.088' min: '0.02872' mode: dynamic protocols: - mpp: currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' intent: charge method: evm x-quote-probe: description: GET /mpp/search-plus 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://agdata.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agdata.shveik.dev /mpp/tiktok: post: description: 'Get TikTok videos for a username, a hashtag or a search keyword. The body is {mode: profile|hashtag|search, query, limit} and limit runs 1-20. Each video has id, url, text, created_at, author, plays, likes, comments, shares, saves, duration_s, hashtags and music; no expiring media links. raw true returns the original records. A leading @ or # in the query is stripped. 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/ and /mpp/ are the same endpoint. GET /mpp/tiktok with no body answers the 402 quote for one result without starting a scrape.' operationId: mppTiktok parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: true properties: limit: default: 5 description: number of videos wanted, 1 to 20 (default 5). A larger value is lowered to 20 and 0 or a negative one means the default; the quote follows the value used. maximum: 20 minimum: 1 type: integer mode: description: profile=user's videos, hashtag=videos under a tag, search=keyword→videos enum: - profile - hashtag - search type: string query: description: 'username (profile), hashtag without #, or search keywords' maxLength: 500 type: string raw: default: false description: true returns the provider's own records instead of the compact shape type: boolean required: - mode - query 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.' '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. '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: 'Nothing was delivered: a call that delivers nothing. Error not_fetched; the payment is not settled and nothing is charged. Also the answer when the upstream failed (upstream_failed) or the payment could not be settled (settlement_failed).' '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: TikTok videos by user, hashtag, search tags: - Scraping x-payment-info: price: currency: USD max: '0.3127' min: '0.0315' mode: dynamic protocols: - mpp: currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' intent: charge method: evm x-quote-probe: description: GET /mpp/tiktok 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://agdata.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agdata.shveik.dev /mpp/tiktok-comments: post: description: 'TikTok comments API for AI agents: send the URL of a video and get its comments as JSON: text, time, likes and reply count. Up to 100 comments per call. The commenters'' names and handles are not returned. Pay per call in stablecoins; comments you paid for but did not get are refunded. 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/ and /mpp/ are the same endpoint. Not offered on Solana: pay on Base or Polygon. GET /mpp/tiktok-comments with no body answers the 402 quote for one result without starting a scrape.' operationId: mppTiktokComments parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: false properties: limit: default: 20 description: number of comments wanted, 1 to 100 (default 20). A larger value is lowered to 100 and 0 or a negative one means the default; the quote follows the value used. maximum: 100 minimum: 1 type: integer url: description: URL of a TikTok video, e.g. https://www.tiktok.com/@nasa/video/7665075736742530317 maxLength: 300 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.' '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. '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: 'Nothing was delivered: a call that delivers nothing. Error not_fetched; the payment is not settled and nothing is charged. Also the answer when the upstream failed (upstream_failed) or the payment could not be settled (settlement_failed).' '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: Comments under a TikTok video tags: - Scraping x-payment-info: price: currency: USD max: '0.26325' min: '0.01575' mode: dynamic protocols: - mpp: currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' intent: charge method: evm x-quote-probe: description: GET /mpp/tiktok-comments 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://agdata.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agdata.shveik.dev /mpp/twitter: post: description: 'Tweets from X (Twitter) for one account or a search query. {"mode":"profile","query":"nasa"} returns that account''s tweets, mode search takes keywords, and limit is 1-20. Each tweet has text, createdAt, url, lang, likeCount, retweetCount, replyCount, quoteCount, viewCount, isReply, isRetweet and an author object with userName, name, followers and isBlueVerified. No X developer account needed; pay per call in USDC. 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/ and /mpp/ are the same endpoint. Not offered on Solana: pay on Base or Polygon. GET /mpp/twitter with no body answers the 402 quote for one result without starting a scrape.' operationId: mppTwitter parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: true properties: limit: default: 5 description: number of posts wanted, 1 to 20 (default 5). A larger value is lowered to 20 and 0 or a negative one means the default; the quote follows the value used. maximum: 20 minimum: 1 type: integer mode: description: profile=account's tweets, search=keyword→tweets enum: - profile - search type: string query: description: handle without @ (profile) or search keywords maxLength: 500 type: string required: - mode - query 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.' '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. '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: 'Nothing was delivered: a call that delivers nothing. Error not_fetched; the payment is not settled and nothing is charged. Also the answer when the upstream failed (upstream_failed) or the payment could not be settled (settlement_failed).' '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: X (Twitter) tweets by handle or search tags: - Scraping x-payment-info: price: currency: USD max: '0.0444' min: '0.014' mode: dynamic protocols: - mpp: currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' intent: charge method: evm x-quote-probe: description: GET /mpp/twitter 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://agdata.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agdata.shveik.dev /mpp/unblock: post: description: 'Unblocker for AI agents: send {url} and get the page back as clean Markdown, with title, description, language, final URL and HTTP status. Gets through Cloudflare and other common bot protection and can render JavaScript-heavy pages. Set format to html or text for those instead. A page that can''t be fetched (blocked, error status or empty) is not charged. No API key, proxy or account: pay per call in USDC over x402 (Base, Polygon) or MPP (Base). 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/ and /mpp/ are the same endpoint. Not offered on Solana: pay on Base or Polygon. GET /mpp/unblock with no body answers the 402 quote for one result without starting a scrape.' operationId: mppUnblock parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: false properties: format: default: markdown description: how the page comes back in content enum: - markdown - html - text type: string url: description: absolute http or https URL of a public page, e.g. "https://example.com/" maxLength: 2048 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: 'Nothing was delivered: a page that could not be fetched (blocked, an error status or empty). Error not_fetched; the payment is not settled and nothing is charged. Also the answer when the upstream failed (upstream_failed) or the payment could not be settled (settlement_failed).' '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: 'Unblocker: any URL to clean Markdown' tags: - Scraping x-payment-info: price: amount: '0.01955' currency: USD mode: fixed protocols: - mpp: currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' intent: charge method: evm x-quote-probe: description: GET /mpp/unblock 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://agdata.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agdata.shveik.dev /mpp/web-search: post: description: 'Web search with page content for AI agents: send keywords and get the top results with each page read as clean Markdown, in one call: title, URL, a short description and the page''s text. Up to 5 results, each page cut at 20,000 characters. Pages that cannot be fetched are dropped and refunded. 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/ and /mpp/ are the same endpoint. Not offered on Solana: pay on Base or Polygon. GET /mpp/web-search with no body answers the 402 quote for one result without starting a scrape.' operationId: mppWebSearch parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: false properties: limit: default: 3 description: number of results wanted, 1 to 5 (default 3). A larger value is lowered to 5 and 0 or a negative one means the default; the quote follows the value used. maximum: 5 minimum: 1 type: integer query: description: search keywords, e.g. "lithium prices" (not a URL) maxLength: 500 type: string required: - query 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.' '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. '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: 'Nothing was delivered: a call that delivers nothing. Error not_fetched; the payment is not settled and nothing is charged. Also the answer when the upstream failed (upstream_failed) or the payment could not be settled (settlement_failed).' '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: Web search with page content tags: - Scraping x-payment-info: price: currency: USD max: '0.040785' min: '0.022545' mode: dynamic protocols: - mpp: currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' intent: charge method: evm x-quote-probe: description: GET /mpp/web-search 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://agdata.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agdata.shveik.dev /mpp/x-replies: post: description: 'Replies to a post on X (Twitter) for AI agents: send the post''s URL and get the replies as JSON: text, time, likes, reposts, replies, views and the author''s handle. Up to 50 replies per call. Pay per call in stablecoins; replies you paid for but did not get are refunded. 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/ and /mpp/ are the same endpoint. Not offered on Solana: pay on Base or Polygon. GET /mpp/x-replies with no body answers the 402 quote for one result without starting a scrape.' operationId: mppXReplies parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: false properties: limit: default: 10 description: number of replies wanted, 1 to 50 (default 10). A larger value is lowered to 50 and 0 or a negative one means the default; the quote follows the value used. maximum: 50 minimum: 1 type: integer url: description: URL of the post on x.com or twitter.com, e.g. https://x.com/NASA/status/1234567890 maxLength: 300 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.' '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. '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: 'Nothing was delivered: a call that delivers nothing. Error not_fetched; the payment is not settled and nothing is charged. Also the answer when the upstream failed (upstream_failed) or the payment could not be settled (settlement_failed).' '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: Replies to a post on X tags: - Scraping x-payment-info: price: currency: USD max: '0.0524' min: '0.0132' mode: dynamic protocols: - mpp: currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' intent: charge method: evm x-quote-probe: description: GET /mpp/x-replies 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://agdata.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agdata.shveik.dev /mpp/youtube: post: description: 'YouTube video search by keyword, or the videos of one channel. Mode search takes keywords; mode profile takes a channel handle without the @. limit is 1-20 regular videos, no Shorts or live streams. Per video you get a normalized object: title, description, views, likes, comments_count, duration_seconds, published_at, thumbnail, url, channel_name, channel_url, channel_id, subscribers. 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/ and /mpp/ are the same endpoint. GET /mpp/youtube with no body answers the 402 quote for one result without starting a scrape.' operationId: mppYoutube parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: true properties: limit: default: 5 description: number of videos wanted, 1 to 20 (default 5). A larger value is lowered to 20 and 0 or a negative one means the default; the quote follows the value used. maximum: 20 minimum: 1 type: integer mode: description: profile=channel's videos, search=keyword→videos enum: - profile - search type: string query: description: channel handle without @ (profile) or search keywords maxLength: 500 type: string required: - mode - query 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.' '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. '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: 'Nothing was delivered: a call that delivers nothing. Error not_fetched; the payment is not settled and nothing is charged. Also the answer when the upstream failed (upstream_failed) or the payment could not be settled (settlement_failed).' '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: YouTube video search and channel videos tags: - Scraping x-payment-info: price: currency: USD max: '0.336' min: '0.032' mode: dynamic protocols: - mpp: currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' intent: charge method: evm x-quote-probe: description: GET /mpp/youtube 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://agdata.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agdata.shveik.dev /mpp/youtube-comments: post: description: 'YouTube comments API for AI agents: send the URL of a video and get its comments as JSON: text, time, likes and reply count. Up to 100 comments per call. The commenters'' names and handles are not returned. Pay per call in stablecoins; comments you paid for but did not get are refunded. 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/ and /mpp/ are the same endpoint. Not offered on Solana: pay on Base or Polygon. GET /mpp/youtube-comments with no body answers the 402 quote for one result without starting a scrape.' operationId: mppYoutubeComments parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: false properties: limit: default: 20 description: number of comments wanted, 1 to 100 (default 20). A larger value is lowered to 100 and 0 or a negative one means the default; the quote follows the value used. maximum: 100 minimum: 1 type: integer sort: default: top description: top comments first (default) or the newest first enum: - top - newest type: string url: description: URL of a YouTube video, e.g. https://www.youtube.com/watch?v=dQw4w9WgXcQ maxLength: 300 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.' '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. '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: 'Nothing was delivered: a call that delivers nothing. Error not_fetched; the payment is not settled and nothing is charged. Also the answer when the upstream failed (upstream_failed) or the payment could not be settled (settlement_failed).' '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: Comments under a YouTube video tags: - Scraping x-payment-info: price: currency: USD max: '0.414' min: '0.018' mode: dynamic protocols: - mpp: currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' intent: charge method: evm x-quote-probe: description: GET /mpp/youtube-comments 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://agdata.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agdata.shveik.dev /mpp/youtube-transcript: post: description: 'YouTube transcript API for AI agents: send a video URL or 11-character id and get its published subtitles as timed JSON segments, plain text, SRT or WebVTT, with title, channel, duration, views and publish date. Choose one of ten subtitle languages or any. No speech-to-text. A video without subtitles in that language is not charged. 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/ and /mpp/ are the same endpoint. Not offered on Solana: pay on Base or Polygon. GET /mpp/youtube-transcript with no body answers the 402 quote for one result without starting a scrape.' operationId: mppYoutubeTranscript parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: false properties: format: default: json description: 'json: timed segments in transcript; text, srt or vtt: the transcript as one string' enum: - json - text - srt - vtt type: string lang: default: en description: subtitle language; any takes English if the video has it, else the first track enum: - any - en - de - es - fr - it - ja - ko - nl - pt - ru type: string video: description: 'one video: an 11-character video id, or a watch, shorts, live, embed or youtu.be URL of one video (not a channel, playlist or search)' maxLength: 2048 type: string required: - video 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.' '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. '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: 'Nothing was delivered: a video without subtitles in the requested language. Error not_fetched; the payment is not settled and nothing is charged. Also the answer when the upstream failed (upstream_failed) or the payment could not be settled (settlement_failed).' '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: YouTube transcript of a video tags: - Scraping x-payment-info: price: amount: '0.032' currency: USD mode: fixed protocols: - mpp: currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' intent: charge method: evm x-quote-probe: description: GET /mpp/youtube-transcript 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://agdata.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agdata.shveik.dev /x402/amazon: post: description: 'Keyword search on Amazon.com (US store): up to 20 products per call, each filled in from its product page. Body: {query, limit}. The normalized object per product: asin, title, brand, price, list_price, currency, rating, reviews_count, in_stock, seller, image, url, description and the features bullet list. Good for price checks and product comparison. 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/ and /mpp/ are the same endpoint. GET /x402/amazon with no body answers the 402 quote for one result without starting a scrape.' operationId: x402Amazon parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: true properties: limit: default: 5 description: number of products wanted, 1 to 20 (default 5). A larger value is lowered to 20 and 0 or a negative one means the default; the quote follows the value used. maximum: 20 minimum: 1 type: integer query: description: Amazon search term, e.g. "wireless keyboard" maxLength: 500 type: string required: - query 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.' '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. '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: 'Nothing was delivered: a call that delivers nothing. Error not_fetched; the payment is not settled and nothing is charged. Also the answer when the upstream failed (upstream_failed) or the payment could not be settled (settlement_failed).' '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: Amazon product search tags: - Scraping x-payment-info: price: currency: USD max: '0.417' min: '0.037' mode: dynamic protocols: - x402: {} x-quote-probe: description: GET /x402/amazon 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://agdata.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agdata.shveik.dev /x402/amazon-reviews: post: description: 'Amazon product reviews API for AI agents: send an ASIN or an Amazon product URL and get up to 50 customer reviews as JSON: rating, title, text, date, verified-purchase flag and helpful votes. Sort by recent or helpful, filter by stars, and pick the marketplace (US, UK, DE, FR, IT, ES, CA, JP). Reviewer names and photos are not returned. A product with no reviews is not charged. 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/ and /mpp/ are the same endpoint. Not offered on Solana: pay on Base or Polygon. GET /x402/amazon-reviews with no body answers the 402 quote for one result without starting a scrape.' operationId: x402AmazonReviews parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: false properties: country: default: us description: Amazon marketplace of an ASIN (a URL sets its own; a different value is refused) enum: - us - uk - de - fr - it - es - ca - jp type: string limit: default: 10 description: number of reviews wanted, 1 to 50 (default 10). A larger value is lowered to 50 and 0 or a negative one means the default; the quote follows the value used. maximum: 50 minimum: 1 type: integer product: description: an ASIN (10 characters, e.g. B079JLY5M5) or an Amazon product URL (.../dp/ASIN) on amazon.com, .co.uk, .de, .fr, .it, .es, .ca or .co.jp; a URL sets the marketplace maxLength: 2048 type: string sort: default: recent description: order of the reviews enum: - recent - helpful type: string stars: default: all description: keep only reviews with this many stars (5 to 1), the positive ones (4 and 5) or the critical ones (1 to 3) enum: - all - '5' - '4' - '3' - '2' - '1' - positive - critical type: string required: - product 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.' '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. '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: 'Nothing was delivered: a product with no reviews (or an unknown one). Error not_fetched; the payment is not settled and nothing is charged. Also the answer when the upstream failed (upstream_failed) or the payment could not be settled (settlement_failed).' '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: Amazon customer reviews of a product tags: - Scraping x-payment-info: price: currency: USD max: '0.1938' min: '0.0174' mode: dynamic protocols: - x402: {} x-quote-probe: description: GET /x402/amazon-reviews 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://agdata.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agdata.shveik.dev /x402/google-maps: post: description: 'Google Maps places for a search term, optionally narrowed to an area: {"query":"coffee shops","location":"Prague","limit":5}. Up to 20 places per call. Each place comes back with title, categoryName, address, phone, website, totalScore (rating), reviewsCount, location (lat, lng), openingHours, price, placeId and its Maps url. Common uses are local lead lists, store and competitor mapping, and checking a business''s hours or phone number. 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/ and /mpp/ are the same endpoint. GET /x402/google-maps with no body answers the 402 quote for one result without starting a scrape.' operationId: x402GoogleMaps parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: true properties: limit: default: 5 description: number of places wanted, 1 to 20 (default 5). A larger value is lowered to 20 and 0 or a negative one means the default; the quote follows the value used. maximum: 20 minimum: 1 type: integer location: description: optional area to narrow the search, e.g. "Prague" maxLength: 500 type: string query: description: Google Maps search term, e.g. "coffee shops" maxLength: 500 type: string required: - query 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.' '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. '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: 'Nothing was delivered: a call that delivers nothing. Error not_fetched; the payment is not settled and nothing is charged. Also the answer when the upstream failed (upstream_failed) or the payment could not be settled (settlement_failed).' '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: Google Maps places and businesses tags: - Scraping x-payment-info: price: currency: USD max: '0.3362' min: '0.0322' mode: dynamic protocols: - x402: {} x-quote-probe: description: GET /x402/google-maps 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://agdata.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agdata.shveik.dev /x402/google-maps-reviews: post: description: 'Google Maps reviews API for AI agents: send a place_id or a Google Maps place URL and get up to 50 reviews as JSON: stars, text and its translation, date, likes, the owner''s reply, plus the place''s name, address and rating. Sort by newest, relevant, highest or lowest. Reviewer names, profiles and photos are not returned. A place with no reviews is not charged; reviews you paid for but did not get are refunded. 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/ and /mpp/ are the same endpoint. GET /x402/google-maps-reviews with no body answers the 402 quote for one result without starting a scrape.' operationId: x402GoogleMapsReviews parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: false properties: language: default: en description: language the reviews are translated into (textTranslated) enum: - af - am - ar - az - bg - bn - bs - ca - cs - da - de - el - en - es - es-419 - et - eu - fa - fi - fil - fr - gl - gu - hi - hr - hu - hy - id - is - it - iw - ja - ka - kk - km - kn - ko - ky - lo - lt - lv - mk - ml - mn - mr - ms - my - ne - nl - 'no' - pa - pl - pt-BR - pt-PT - ro - ru - si - sk - sl - sq - sr - sv - sw - ta - te - th - tr - uk - ur - uz - vi - zh-CN - zh-TW - zu type: string limit: default: 10 description: number of reviews wanted, 1 to 50 (default 10). A larger value is lowered to 50 and 0 or a negative one means the default; the quote follows the value used. maximum: 50 minimum: 1 type: integer place: description: 'a Google place_id (27 characters starting with ChIJ or GhIJ), or a Google Maps place URL: https://www.google.com/maps/place/... or https://www.google.com/maps?cid=... (a URL with only the place''s name and no place id is best effort and may end as not fetched, which is not charged)' maxLength: 2048 type: string sort: default: newest description: order of the reviews enum: - newest - relevant - highest - lowest type: string required: - place 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.' '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. '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: 'Nothing was delivered: a place with no reviews. Error not_fetched; the payment is not settled and nothing is charged. Also the answer when the upstream failed (upstream_failed) or the payment could not be settled (settlement_failed).' '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: Google Maps reviews of a place tags: - Scraping x-payment-info: price: currency: USD max: '0.13265' min: '0.01505' mode: dynamic protocols: - x402: {} x-quote-probe: description: GET /x402/google-maps-reviews 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://agdata.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agdata.shveik.dev /x402/google-news: post: description: 'Google News search API for AI agents: send a keyword or phrase and get up to 30 current news articles as JSON: headline, publisher, publish time, a short description and the article''s link. Choose the language and country edition. Articles you paid for but did not get are refunded. 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/ and /mpp/ are the same endpoint. GET /x402/google-news with no body answers the 402 quote for one result without starting a scrape.' operationId: x402GoogleNews parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: false properties: country: default: US description: two-letter country code of the news edition, e.g. US, GB, DE pattern: ^[A-Za-z]{2}$ type: string language: default: en description: two-letter language code of the news edition, e.g. en, de, es pattern: ^[a-z]{2}$ type: string limit: default: 10 description: number of articles wanted, 1 to 30 (default 10). A larger value is lowered to 30 and 0 or a negative one means the default; the quote follows the value used. maximum: 30 minimum: 1 type: integer query: description: keyword or phrase to search Google News for, e.g. "openai" maxLength: 500 type: string required: - query 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.' '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. '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: 'Nothing was delivered: a call that delivers nothing. Error not_fetched; the payment is not settled and nothing is charged. Also the answer when the upstream failed (upstream_failed) or the payment could not be settled (settlement_failed).' '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: Google News articles for a search tags: - Scraping x-payment-info: price: currency: USD max: '0.1573' min: '0.0239' mode: dynamic protocols: - x402: {} x-quote-probe: description: GET /x402/google-news 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://agdata.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agdata.shveik.dev /x402/google-search: post: description: 'Google Search results (SERP) for a query, as JSON. Each record is one results page with organicResults (position, title, url, displayedUrl, description), paidResults, relatedQueries, peopleAlsoAsk and searchQuery metadata. Body: {query, limit}. limit (1-20) is rounded up to whole pages of about 10 results, so 1-10 returns one page and 11-20 returns two. Useful for rank checks, source discovery and grounding answers in search results. 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/ and /mpp/ are the same endpoint. GET /x402/google-search with no body answers the 402 quote for one result without starting a scrape.' operationId: x402GoogleSearch parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: true properties: limit: default: 5 description: number of results (billed in pages of about 10) wanted, 1 to 20 (default 5). A larger value is lowered to 20 and 0 or a negative one means the default; the quote follows the value used. maximum: 20 minimum: 1 type: integer query: description: Google Search query, e.g. "best CRM tools" (line breaks and runs of spaces become one space) maxLength: 500 type: string required: - query 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.' '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. '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: 'Nothing was delivered: a call that delivers nothing. Error not_fetched; the payment is not settled and nothing is charged. Also the answer when the upstream failed (upstream_failed) or the payment could not be settled (settlement_failed).' '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: Google Search results (SERP) tags: - Scraping x-payment-info: price: currency: USD max: '0.06155' min: '0.02285' mode: dynamic protocols: - x402: {} x-quote-probe: description: GET /x402/google-search 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://agdata.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agdata.shveik.dev /x402/indeed-jobs: post: description: 'Indeed jobs search API for AI agents: send a job title and an optional location and country and get up to 50 job listings as JSON: title, employer, location, posting date, job types, benefits, salary range when listed and the listing''s description. Filter by how recently a job was posted; 60 countries. Jobs you paid for but did not get are refunded. 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/ and /mpp/ are the same endpoint. GET /x402/indeed-jobs with no body answers the 402 quote for one result without starting a scrape.' operationId: x402IndeedJobs parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: false properties: country: default: us description: two-letter country code of the Indeed site searched (uk for the United Kingdom) enum: - ar - au - at - bh - be - br - ca - cl - cn - co - cr - cz - dk - ec - eg - fi - fr - de - gr - hk - hu - in - id - ie - il - it - jp - kw - lu - my - mx - ma - nl - nz - ng - 'no' - om - pk - pa - pe - ph - pl - pt - qa - ro - sa - sg - za - kr - es - se - ch - tw - th - tr - ua - ae - uk - us - uy - ve - vn type: string limit: default: 10 description: number of jobs wanted, 1 to 50 (default 10). A larger value is lowered to 50 and 0 or a negative one means the default; the quote follows the value used. maximum: 50 minimum: 1 type: integer location: description: 'city, state, postal code or "remote", e.g. "Austin, TX" (default: anywhere in the country)' maxLength: 500 type: string posted: description: 'only jobs posted within the last day (24h), 3 days (3d), week or 14 days (14d) (default: any time)' enum: - 14d - 24h - 3d - week type: string query: description: job title, keywords or company, e.g. "nurse" maxLength: 500 type: string required: - query 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.' '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. '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: 'Nothing was delivered: a call that delivers nothing. Error not_fetched; the payment is not settled and nothing is charged. Also the answer when the upstream failed (upstream_failed) or the payment could not be settled (settlement_failed).' '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: Indeed job listings for a search tags: - Scraping x-payment-info: price: currency: USD max: '0.0631' min: '0.0141' mode: dynamic protocols: - x402: {} x-quote-probe: description: GET /x402/indeed-jobs 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://agdata.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agdata.shveik.dev /x402/instagram: post: description: 'Instagram posts as JSON. Mode profile returns an account''s posts, hashtag returns posts under a tag, and search or user take a keyword and scrape the best-matching hashtag or account. Send {mode, query, limit} with limit 1-20. Each post has a normalized object: caption, likes, comments_count, views, posted_at, media_type, media_url, hashtags, author, author_name, shortcode, url. No Instagram login or API key needed. 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/ and /mpp/ are the same endpoint. GET /x402/instagram with no body answers the 402 quote for one result without starting a scrape.' operationId: x402Instagram parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: true properties: limit: default: 5 description: number of posts wanted, 1 to 20 (default 5). A larger value is lowered to 20 and 0 or a negative one means the default; the quote follows the value used. maximum: 20 minimum: 1 type: integer mode: description: profile=account's posts, hashtag=posts under a tag, search=keyword→posts, user=posts from matching users enum: - profile - hashtag - search - user type: string query: description: 'username (profile), hashtag without #, or search keywords' maxLength: 500 type: string required: - mode - query 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.' '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. '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: 'Nothing was delivered: a call that delivers nothing. Error not_fetched; the payment is not settled and nothing is charged. Also the answer when the upstream failed (upstream_failed) or the payment could not be settled (settlement_failed).' '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: Instagram posts by profile, tag, search tags: - Scraping x-payment-info: price: currency: USD max: '0.2307' min: '0.0255' mode: dynamic protocols: - x402: {} x-quote-probe: description: GET /x402/instagram 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://agdata.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agdata.shveik.dev /x402/instagram-comments: post: description: 'Instagram comments API for AI agents: send the URL of a post or reel and get its comments as JSON: text, time, likes and reply count. Up to 100 comments per call. The commenters'' names and handles are not returned. Pay per call in stablecoins; comments you paid for but did not get are refunded. 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/ and /mpp/ are the same endpoint. Not offered on Solana: pay on Base or Polygon. GET /x402/instagram-comments with no body answers the 402 quote for one result without starting a scrape.' operationId: x402InstagramComments parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: false properties: limit: default: 20 description: number of comments wanted, 1 to 100 (default 20). A larger value is lowered to 100 and 0 or a negative one means the default; the quote follows the value used. maximum: 100 minimum: 1 type: integer url: description: URL of an Instagram post or reel, e.g. https://www.instagram.com/p/DdG4RIxIPyf/ maxLength: 300 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.' '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. '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: 'Nothing was delivered: a call that delivers nothing. Error not_fetched; the payment is not settled and nothing is charged. Also the answer when the upstream failed (upstream_failed) or the payment could not be settled (settlement_failed).' '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: Comments under an Instagram post tags: - Scraping x-payment-info: price: currency: USD max: '0.5346' min: '0.0198' mode: dynamic protocols: - x402: {} x-quote-probe: description: GET /x402/instagram-comments 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://agdata.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agdata.shveik.dev /x402/linkedin: post: description: 'Look up one public LinkedIn profile per call. Pass {query} as a username (jane-example), a profile URL or a URN; there is no limit field. The normalized object holds name, first_name, last_name, headline, about, location, country_code, current_company, followers, connections, avatar, plus experience (title, company, start_year, end_year, is_current) and education (school, degree, field, years). Email addresses are not returned. 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/ and /mpp/ are the same endpoint. GET /x402/linkedin with no body answers the 402 quote for one result without starting a scrape.' operationId: x402Linkedin parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: true properties: query: description: LinkedIn username (e.g. "jane-example"), full profile URL, or urn maxLength: 500 type: string required: - query 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.' '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. '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: 'Nothing was delivered: a call that delivers nothing. Error not_fetched; the payment is not settled and nothing is charged. Also the answer when the upstream failed (upstream_failed) or the payment could not be settled (settlement_failed).' '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: LinkedIn profile lookup tags: - Scraping x-payment-info: price: amount: '0.037' currency: USD mode: fixed protocols: - x402: {} x-quote-probe: description: GET /x402/linkedin 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://agdata.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agdata.shveik.dev /x402/linkedin-jobs: post: description: 'LinkedIn jobs search API for AI agents: send a job title or keywords and an optional location and get up to 50 public job listings as JSON: title, company, location, posting date, employment type, seniority, salary when listed, the listing''s URL and its description. Filter by how recently a job was posted. Recruiter names are not returned. Jobs you paid for but did not get are refunded. 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/ and /mpp/ are the same endpoint. Not offered on Solana: pay on Base or Polygon. GET /x402/linkedin-jobs with no body answers the 402 quote for one result without starting a scrape.' operationId: x402LinkedinJobs parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: false properties: limit: default: 10 description: number of jobs wanted, 1 to 50 (default 10). A larger value is lowered to 50 and 0 or a negative one means the default; the quote follows the value used. maximum: 50 minimum: 1 type: integer location: description: 'city, region or country, e.g. "Prague" (default: anywhere)' maxLength: 500 type: string posted: description: 'only jobs posted within the last day (24h), week or month (default: any time)' enum: - 24h - month - week type: string query: description: job title, skill or company, e.g. "data engineer" maxLength: 500 type: string required: - query 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.' '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. '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: 'Nothing was delivered: a call that delivers nothing. Error not_fetched; the payment is not settled and nothing is charged. Also the answer when the upstream failed (upstream_failed) or the payment could not be settled (settlement_failed).' '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: LinkedIn job listings for a search tags: - Scraping x-payment-info: price: currency: USD max: '0.0934' min: '0.015' mode: dynamic protocols: - x402: {} x-quote-probe: description: GET /x402/linkedin-jobs 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://agdata.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agdata.shveik.dev /x402/reddit: post: description: 'Search Reddit or read a subreddit. Use mode hashtag with a subreddit name (no r/), profile with a username, or search with keywords, plus limit 1-20. Every record is a post with kind, id, url, title, body, author, subreddit, upvotes, comments_count, created_at, members and source; at most limit posts come back. Comments, profile and subreddit records are not returned. upvotes and comments_count can be null. Send raw true for the full original records. 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/ and /mpp/ are the same endpoint. Not offered on Solana: pay on Base or Polygon. GET /x402/reddit with no body answers the 402 quote for one result without starting a scrape.' operationId: x402Reddit parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: true properties: limit: default: 5 description: number of posts wanted, 1 to 20 (default 5). A larger value is lowered to 20 and 0 or a negative one means the default; the quote follows the value used. maximum: 20 minimum: 1 type: integer mode: description: profile=user's posts, hashtag=subreddit's posts, search=keyword→posts enum: - profile - hashtag - search type: string query: description: username (profile), subreddit without r/ (hashtag), or search keywords maxLength: 500 type: string raw: default: false description: true returns the provider's own records instead of the compact shape type: boolean required: - mode - query 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.' '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. '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: 'Nothing was delivered: a call that delivers nothing. Error not_fetched; the payment is not settled and nothing is charged. Also the answer when the upstream failed (upstream_failed) or the payment could not be settled (settlement_failed).' '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: Reddit posts by subreddit, user, search tags: - Scraping x-payment-info: price: currency: USD max: '0.1435' min: '0.0295' mode: dynamic protocols: - x402: {} x-quote-probe: description: GET /x402/reddit 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://agdata.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agdata.shveik.dev /x402/screenshot: post: description: 'Screenshot API for AI agents: send {url} and get a JPEG, PNG, WebP or PDF of the page as base64 in JSON, with final URL, byte size and pixel size. Pick a desktop, mobile or tablet viewport, full page, dark mode, a delay or one element by CSS selector. It shows what a normal browser sees and does not get past bot protection (use unblock for those pages'' text). A page that can''t be captured, or renders blank, is not charged. 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/ and /mpp/ are the same endpoint. Not offered on Solana: pay on Base or Polygon. GET /x402/screenshot with no body answers the 402 quote for one result without starting a scrape.' operationId: x402Screenshot parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: false properties: colorScheme: description: emulated prefers-color-scheme enum: - light - dark type: string delayMs: default: 0 description: extra wait after the page loaded, in milliseconds maximum: 5000 minimum: 0 type: integer device: default: desktop description: 'viewport: desktop 1920x1080, desktop_hd 1366x768, mobile (phone), tablet' enum: - desktop - desktop_hd - mobile - tablet type: string format: default: jpeg description: image or document format of the capture; pdf is always the full page enum: - jpeg - png - webp - pdf type: string fullPage: default: false description: capture the whole scrollable page (height is capped at 16,384 px), not just the viewport type: boolean height: description: custom viewport height in pixels (ignored with fullPage) maximum: 1200 minimum: 240 type: integer selector: description: 'CSS selector: capture only the first matching element' maxLength: 200 type: string url: description: absolute http or https URL of a public page, e.g. "https://example.com/" maxLength: 2048 type: string waitForSelector: description: CSS selector to wait for before capturing maxLength: 200 type: string width: description: custom viewport width in pixels (overrides the device) maximum: 1920 minimum: 320 type: integer 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: 'Nothing was delivered: a page that could not be captured, renders blank or gives an image over 5 MiB. Error not_fetched; the payment is not settled and nothing is charged. Also the answer when the upstream failed (upstream_failed) or the payment could not be settled (settlement_failed).' '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: Website screenshot or PDF of any URL tags: - Scraping x-payment-info: price: amount: '0.01897' currency: USD mode: fixed protocols: - x402: {} x-quote-probe: description: GET /x402/screenshot 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://agdata.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agdata.shveik.dev /x402/search-plus: post: description: 'Search API for AI agents: web or news search with up to 30 results per call, each with a title, URL and a query-relevant excerpt. Filter by site, or by category: developer (repos, issues, docs), GitHub or PDF. Fast, about a second. 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/ and /mpp/ are the same endpoint. GET /x402/search-plus with no body answers the 402 quote for one result without starting a scrape.' operationId: x402SearchPlus parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: false properties: category: description: 'restrict web results: developer (repos, issues, docs), github or pdf' enum: - developer - github - pdf type: string exclude_domains: description: leave out these hostnames; not together with include_domains items: type: string maxItems: 10 type: array include_domains: description: only results from these hostnames, e.g. ["docs.python.org"]; not together with exclude_domains items: type: string maxItems: 10 type: array limit: default: 10 description: number of results (billed in pages of 10) wanted, 1 to 30 (default 10). A larger value is lowered to 30 and 0 or a negative one means the default; the quote follows the value used. maximum: 30 minimum: 1 type: integer query: description: search keywords, e.g. "fastapi websocket disconnect" (not a URL; quoted phrases, -term and site:host work) maxLength: 500 type: string type: description: web (the default) or news enum: - web - news type: string required: - query 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.' '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. '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: 'Nothing was delivered: a call that delivers nothing. Error not_fetched; the payment is not settled and nothing is charged. Also the answer when the upstream failed (upstream_failed) or the payment could not be settled (settlement_failed).' '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: Web or news search with excerpts tags: - Scraping x-payment-info: price: currency: USD max: '0.088' min: '0.02872' mode: dynamic protocols: - x402: {} x-quote-probe: description: GET /x402/search-plus 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://agdata.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agdata.shveik.dev /x402/tiktok: post: description: 'Get TikTok videos for a username, a hashtag or a search keyword. The body is {mode: profile|hashtag|search, query, limit} and limit runs 1-20. Each video has id, url, text, created_at, author, plays, likes, comments, shares, saves, duration_s, hashtags and music; no expiring media links. raw true returns the original records. A leading @ or # in the query is stripped. 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/ and /mpp/ are the same endpoint. GET /x402/tiktok with no body answers the 402 quote for one result without starting a scrape.' operationId: x402Tiktok parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: true properties: limit: default: 5 description: number of videos wanted, 1 to 20 (default 5). A larger value is lowered to 20 and 0 or a negative one means the default; the quote follows the value used. maximum: 20 minimum: 1 type: integer mode: description: profile=user's videos, hashtag=videos under a tag, search=keyword→videos enum: - profile - hashtag - search type: string query: description: 'username (profile), hashtag without #, or search keywords' maxLength: 500 type: string raw: default: false description: true returns the provider's own records instead of the compact shape type: boolean required: - mode - query 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.' '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. '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: 'Nothing was delivered: a call that delivers nothing. Error not_fetched; the payment is not settled and nothing is charged. Also the answer when the upstream failed (upstream_failed) or the payment could not be settled (settlement_failed).' '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: TikTok videos by user, hashtag, search tags: - Scraping x-payment-info: price: currency: USD max: '0.3127' min: '0.0315' mode: dynamic protocols: - x402: {} x-quote-probe: description: GET /x402/tiktok 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://agdata.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agdata.shveik.dev /x402/tiktok-comments: post: description: 'TikTok comments API for AI agents: send the URL of a video and get its comments as JSON: text, time, likes and reply count. Up to 100 comments per call. The commenters'' names and handles are not returned. Pay per call in stablecoins; comments you paid for but did not get are refunded. 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/ and /mpp/ are the same endpoint. Not offered on Solana: pay on Base or Polygon. GET /x402/tiktok-comments with no body answers the 402 quote for one result without starting a scrape.' operationId: x402TiktokComments parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: false properties: limit: default: 20 description: number of comments wanted, 1 to 100 (default 20). A larger value is lowered to 100 and 0 or a negative one means the default; the quote follows the value used. maximum: 100 minimum: 1 type: integer url: description: URL of a TikTok video, e.g. https://www.tiktok.com/@nasa/video/7665075736742530317 maxLength: 300 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.' '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. '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: 'Nothing was delivered: a call that delivers nothing. Error not_fetched; the payment is not settled and nothing is charged. Also the answer when the upstream failed (upstream_failed) or the payment could not be settled (settlement_failed).' '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: Comments under a TikTok video tags: - Scraping x-payment-info: price: currency: USD max: '0.26325' min: '0.01575' mode: dynamic protocols: - x402: {} x-quote-probe: description: GET /x402/tiktok-comments 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://agdata.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agdata.shveik.dev /x402/twitter: post: description: 'Tweets from X (Twitter) for one account or a search query. {"mode":"profile","query":"nasa"} returns that account''s tweets, mode search takes keywords, and limit is 1-20. Each tweet has text, createdAt, url, lang, likeCount, retweetCount, replyCount, quoteCount, viewCount, isReply, isRetweet and an author object with userName, name, followers and isBlueVerified. No X developer account needed; pay per call in USDC. 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/ and /mpp/ are the same endpoint. Not offered on Solana: pay on Base or Polygon. GET /x402/twitter with no body answers the 402 quote for one result without starting a scrape.' operationId: x402Twitter parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: true properties: limit: default: 5 description: number of posts wanted, 1 to 20 (default 5). A larger value is lowered to 20 and 0 or a negative one means the default; the quote follows the value used. maximum: 20 minimum: 1 type: integer mode: description: profile=account's tweets, search=keyword→tweets enum: - profile - search type: string query: description: handle without @ (profile) or search keywords maxLength: 500 type: string required: - mode - query 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.' '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. '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: 'Nothing was delivered: a call that delivers nothing. Error not_fetched; the payment is not settled and nothing is charged. Also the answer when the upstream failed (upstream_failed) or the payment could not be settled (settlement_failed).' '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: X (Twitter) tweets by handle or search tags: - Scraping x-payment-info: price: currency: USD max: '0.0444' min: '0.014' mode: dynamic protocols: - x402: {} x-quote-probe: description: GET /x402/twitter 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://agdata.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agdata.shveik.dev /x402/unblock: post: description: 'Unblocker for AI agents: send {url} and get the page back as clean Markdown, with title, description, language, final URL and HTTP status. Gets through Cloudflare and other common bot protection and can render JavaScript-heavy pages. Set format to html or text for those instead. A page that can''t be fetched (blocked, error status or empty) is not charged. No API key, proxy or account: pay per call in USDC over x402 (Base, Polygon) or MPP (Base). 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/ and /mpp/ are the same endpoint. Not offered on Solana: pay on Base or Polygon. GET /x402/unblock with no body answers the 402 quote for one result without starting a scrape.' operationId: x402Unblock parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: false properties: format: default: markdown description: how the page comes back in content enum: - markdown - html - text type: string url: description: absolute http or https URL of a public page, e.g. "https://example.com/" maxLength: 2048 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: 'Nothing was delivered: a page that could not be fetched (blocked, an error status or empty). Error not_fetched; the payment is not settled and nothing is charged. Also the answer when the upstream failed (upstream_failed) or the payment could not be settled (settlement_failed).' '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: 'Unblocker: any URL to clean Markdown' tags: - Scraping x-payment-info: price: amount: '0.01955' currency: USD mode: fixed protocols: - x402: {} x-quote-probe: description: GET /x402/unblock 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://agdata.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agdata.shveik.dev /x402/web-search: post: description: 'Web search with page content for AI agents: send keywords and get the top results with each page read as clean Markdown, in one call: title, URL, a short description and the page''s text. Up to 5 results, each page cut at 20,000 characters. Pages that cannot be fetched are dropped and refunded. 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/ and /mpp/ are the same endpoint. Not offered on Solana: pay on Base or Polygon. GET /x402/web-search with no body answers the 402 quote for one result without starting a scrape.' operationId: x402WebSearch parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: false properties: limit: default: 3 description: number of results wanted, 1 to 5 (default 3). A larger value is lowered to 5 and 0 or a negative one means the default; the quote follows the value used. maximum: 5 minimum: 1 type: integer query: description: search keywords, e.g. "lithium prices" (not a URL) maxLength: 500 type: string required: - query 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.' '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. '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: 'Nothing was delivered: a call that delivers nothing. Error not_fetched; the payment is not settled and nothing is charged. Also the answer when the upstream failed (upstream_failed) or the payment could not be settled (settlement_failed).' '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: Web search with page content tags: - Scraping x-payment-info: price: currency: USD max: '0.040785' min: '0.022545' mode: dynamic protocols: - x402: {} x-quote-probe: description: GET /x402/web-search 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://agdata.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agdata.shveik.dev /x402/x-replies: post: description: 'Replies to a post on X (Twitter) for AI agents: send the post''s URL and get the replies as JSON: text, time, likes, reposts, replies, views and the author''s handle. Up to 50 replies per call. Pay per call in stablecoins; replies you paid for but did not get are refunded. 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/ and /mpp/ are the same endpoint. Not offered on Solana: pay on Base or Polygon. GET /x402/x-replies with no body answers the 402 quote for one result without starting a scrape.' operationId: x402XReplies parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: false properties: limit: default: 10 description: number of replies wanted, 1 to 50 (default 10). A larger value is lowered to 50 and 0 or a negative one means the default; the quote follows the value used. maximum: 50 minimum: 1 type: integer url: description: URL of the post on x.com or twitter.com, e.g. https://x.com/NASA/status/1234567890 maxLength: 300 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.' '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. '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: 'Nothing was delivered: a call that delivers nothing. Error not_fetched; the payment is not settled and nothing is charged. Also the answer when the upstream failed (upstream_failed) or the payment could not be settled (settlement_failed).' '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: Replies to a post on X tags: - Scraping x-payment-info: price: currency: USD max: '0.0524' min: '0.0132' mode: dynamic protocols: - x402: {} x-quote-probe: description: GET /x402/x-replies 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://agdata.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agdata.shveik.dev /x402/youtube: post: description: 'YouTube video search by keyword, or the videos of one channel. Mode search takes keywords; mode profile takes a channel handle without the @. limit is 1-20 regular videos, no Shorts or live streams. Per video you get a normalized object: title, description, views, likes, comments_count, duration_seconds, published_at, thumbnail, url, channel_name, channel_url, channel_id, subscribers. 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/ and /mpp/ are the same endpoint. GET /x402/youtube with no body answers the 402 quote for one result without starting a scrape.' operationId: x402Youtube parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: true properties: limit: default: 5 description: number of videos wanted, 1 to 20 (default 5). A larger value is lowered to 20 and 0 or a negative one means the default; the quote follows the value used. maximum: 20 minimum: 1 type: integer mode: description: profile=channel's videos, search=keyword→videos enum: - profile - search type: string query: description: channel handle without @ (profile) or search keywords maxLength: 500 type: string required: - mode - query 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.' '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. '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: 'Nothing was delivered: a call that delivers nothing. Error not_fetched; the payment is not settled and nothing is charged. Also the answer when the upstream failed (upstream_failed) or the payment could not be settled (settlement_failed).' '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: YouTube video search and channel videos tags: - Scraping x-payment-info: price: currency: USD max: '0.336' min: '0.032' mode: dynamic protocols: - x402: {} x-quote-probe: description: GET /x402/youtube 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://agdata.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agdata.shveik.dev /x402/youtube-comments: post: description: 'YouTube comments API for AI agents: send the URL of a video and get its comments as JSON: text, time, likes and reply count. Up to 100 comments per call. The commenters'' names and handles are not returned. Pay per call in stablecoins; comments you paid for but did not get are refunded. 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/ and /mpp/ are the same endpoint. Not offered on Solana: pay on Base or Polygon. GET /x402/youtube-comments with no body answers the 402 quote for one result without starting a scrape.' operationId: x402YoutubeComments parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: false properties: limit: default: 20 description: number of comments wanted, 1 to 100 (default 20). A larger value is lowered to 100 and 0 or a negative one means the default; the quote follows the value used. maximum: 100 minimum: 1 type: integer sort: default: top description: top comments first (default) or the newest first enum: - top - newest type: string url: description: URL of a YouTube video, e.g. https://www.youtube.com/watch?v=dQw4w9WgXcQ maxLength: 300 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.' '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. '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: 'Nothing was delivered: a call that delivers nothing. Error not_fetched; the payment is not settled and nothing is charged. Also the answer when the upstream failed (upstream_failed) or the payment could not be settled (settlement_failed).' '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: Comments under a YouTube video tags: - Scraping x-payment-info: price: currency: USD max: '0.414' min: '0.018' mode: dynamic protocols: - x402: {} x-quote-probe: description: GET /x402/youtube-comments 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://agdata.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agdata.shveik.dev /x402/youtube-transcript: post: description: 'YouTube transcript API for AI agents: send a video URL or 11-character id and get its published subtitles as timed JSON segments, plain text, SRT or WebVTT, with title, channel, duration, views and publish date. Choose one of ten subtitle languages or any. No speech-to-text. A video without subtitles in that language is not charged. 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/ and /mpp/ are the same endpoint. Not offered on Solana: pay on Base or Polygon. GET /x402/youtube-transcript with no body answers the 402 quote for one result without starting a scrape.' operationId: x402YoutubeTranscript parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: false properties: format: default: json description: 'json: timed segments in transcript; text, srt or vtt: the transcript as one string' enum: - json - text - srt - vtt type: string lang: default: en description: subtitle language; any takes English if the video has it, else the first track enum: - any - en - de - es - fr - it - ja - ko - nl - pt - ru type: string video: description: 'one video: an 11-character video id, or a watch, shorts, live, embed or youtu.be URL of one video (not a channel, playlist or search)' maxLength: 2048 type: string required: - video 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.' '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. '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: 'Nothing was delivered: a video without subtitles in the requested language. Error not_fetched; the payment is not settled and nothing is charged. Also the answer when the upstream failed (upstream_failed) or the payment could not be settled (settlement_failed).' '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: YouTube transcript of a video tags: - Scraping x-payment-info: price: amount: '0.032' currency: USD mode: fixed protocols: - x402: {} x-quote-probe: description: GET /x402/youtube-transcript 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://agdata.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agdata.shveik.dev /mpp/inbox-1h: post: description: 'Get an email address for your agent for one hour: name@agmail.shveik.dev, a name of your choice or a random one. Pay in stablecoins with x402 or MPP, no account and no card. Wait for the verification mail with one call and get the code or the link back. Receive only. Extend it by paying again. 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/ and /mpp/ are the same endpoint. GET /mpp/inbox-1h with no body answers the 402 quote for one result without starting a scrape.' operationId: mppInbox1h parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: false properties: name: description: the local part of the address; omit it for a random name maxLength: 32 minLength: 3 pattern: ^[a-zA-Z0-9]([a-zA-Z0-9._-]{1,30})[a-zA-Z0-9]$ 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. '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: Inbox for one hour tags: - Scraping x-payment-info: price: amount: '0.02' currency: USD mode: fixed protocols: - mpp: currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' intent: charge method: evm x-quote-probe: description: GET /mpp/inbox-1h 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://agmail.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agmail.shveik.dev /mpp/inbox-1h-renew: post: description: 'Extend an inbox by one hour. Send the inbox id and the inbox secret in the JSON body. Pay in stablecoins with x402 or MPP. The address and its mail stay. An inbox that is not extended stops at its expiry and its mail is deleted shortly after. 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/ and /mpp/ are the same endpoint. GET /mpp/inbox-1h-renew with no body answers the 402 quote for one result without starting a scrape.' operationId: mppInbox1hRenew parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: false properties: inbox_id: description: the inbox id returned by the order pattern: ^ib_[0-9a-f]{12}$ type: string secret: description: the inbox secret returned by the order type: string required: - inbox_id - secret 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: Extend by one hour tags: - Scraping x-payment-info: price: amount: '0.02' currency: USD mode: fixed protocols: - mpp: currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' intent: charge method: evm x-quote-probe: description: GET /mpp/inbox-1h-renew 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://agmail.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agmail.shveik.dev /mpp/inbox-24h: post: description: 'Get an email address for your agent for 24 hours: name@agmail.shveik.dev, a name of your choice or a random one. Pay in stablecoins with x402 or MPP, no account and no card. Wait for the verification mail with one call and get the code or the link back. Receive only. Extend it by paying again. 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/ and /mpp/ are the same endpoint. GET /mpp/inbox-24h with no body answers the 402 quote for one result without starting a scrape.' operationId: mppInbox24h parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: false properties: name: description: the local part of the address; omit it for a random name maxLength: 32 minLength: 3 pattern: ^[a-zA-Z0-9]([a-zA-Z0-9._-]{1,30})[a-zA-Z0-9]$ 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. '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: Inbox for a day tags: - Scraping x-payment-info: price: amount: '0.10' currency: USD mode: fixed protocols: - mpp: currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' intent: charge method: evm x-quote-probe: description: GET /mpp/inbox-24h 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://agmail.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agmail.shveik.dev /mpp/inbox-24h-renew: post: description: 'Extend an inbox by 24 hours. Send the inbox id and the inbox secret in the JSON body. Pay in stablecoins with x402 or MPP. The address and its mail stay. An inbox that is not extended stops at its expiry and its mail is deleted shortly after. 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/ and /mpp/ are the same endpoint. GET /mpp/inbox-24h-renew with no body answers the 402 quote for one result without starting a scrape.' operationId: mppInbox24hRenew parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: false properties: inbox_id: description: the inbox id returned by the order pattern: ^ib_[0-9a-f]{12}$ type: string secret: description: the inbox secret returned by the order type: string required: - inbox_id - secret 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: Extend by 24 hours tags: - Scraping x-payment-info: price: amount: '0.10' currency: USD mode: fixed protocols: - mpp: currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' intent: charge method: evm x-quote-probe: description: GET /mpp/inbox-24h-renew 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://agmail.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agmail.shveik.dev /mpp/inbox-4h: post: description: 'Get an email address for your agent for four hours: name@agmail.shveik.dev, a name of your choice or a random one. Pay in stablecoins with x402 or MPP, no account and no card. Wait for the verification mail with one call and get the code or the link back. Receive only. Extend it by paying again. 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/ and /mpp/ are the same endpoint. GET /mpp/inbox-4h with no body answers the 402 quote for one result without starting a scrape.' operationId: mppInbox4h parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: false properties: name: description: the local part of the address; omit it for a random name maxLength: 32 minLength: 3 pattern: ^[a-zA-Z0-9]([a-zA-Z0-9._-]{1,30})[a-zA-Z0-9]$ 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. '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: Inbox for four hours tags: - Scraping x-payment-info: price: amount: '0.05' currency: USD mode: fixed protocols: - mpp: currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' intent: charge method: evm x-quote-probe: description: GET /mpp/inbox-4h 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://agmail.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agmail.shveik.dev /mpp/inbox-4h-renew: post: description: 'Extend an inbox by four hours. Send the inbox id and the inbox secret in the JSON body. Pay in stablecoins with x402 or MPP. The address and its mail stay. An inbox that is not extended stops at its expiry and its mail is deleted shortly after. 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/ and /mpp/ are the same endpoint. GET /mpp/inbox-4h-renew with no body answers the 402 quote for one result without starting a scrape.' operationId: mppInbox4hRenew parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: false properties: inbox_id: description: the inbox id returned by the order pattern: ^ib_[0-9a-f]{12}$ type: string secret: description: the inbox secret returned by the order type: string required: - inbox_id - secret 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: Extend by four hours tags: - Scraping x-payment-info: price: amount: '0.05' currency: USD mode: fixed protocols: - mpp: currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' intent: charge method: evm x-quote-probe: description: GET /mpp/inbox-4h-renew 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://agmail.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agmail.shveik.dev /x402/inbox-1h: post: description: 'Get an email address for your agent for one hour: name@agmail.shveik.dev, a name of your choice or a random one. Pay in stablecoins with x402 or MPP, no account and no card. Wait for the verification mail with one call and get the code or the link back. Receive only. Extend it by paying again. 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/ and /mpp/ are the same endpoint. GET /x402/inbox-1h with no body answers the 402 quote for one result without starting a scrape.' operationId: x402Inbox1h parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: false properties: name: description: the local part of the address; omit it for a random name maxLength: 32 minLength: 3 pattern: ^[a-zA-Z0-9]([a-zA-Z0-9._-]{1,30})[a-zA-Z0-9]$ 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. '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: Inbox for one hour tags: - Scraping x-payment-info: price: amount: '0.02' currency: USD mode: fixed protocols: - x402: {} x-quote-probe: description: GET /x402/inbox-1h 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://agmail.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agmail.shveik.dev /x402/inbox-1h-renew: post: description: 'Extend an inbox by one hour. Send the inbox id and the inbox secret in the JSON body. Pay in stablecoins with x402 or MPP. The address and its mail stay. An inbox that is not extended stops at its expiry and its mail is deleted shortly after. 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/ and /mpp/ are the same endpoint. GET /x402/inbox-1h-renew with no body answers the 402 quote for one result without starting a scrape.' operationId: x402Inbox1hRenew parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: false properties: inbox_id: description: the inbox id returned by the order pattern: ^ib_[0-9a-f]{12}$ type: string secret: description: the inbox secret returned by the order type: string required: - inbox_id - secret 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: Extend by one hour tags: - Scraping x-payment-info: price: amount: '0.02' currency: USD mode: fixed protocols: - x402: {} x-quote-probe: description: GET /x402/inbox-1h-renew 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://agmail.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agmail.shveik.dev /x402/inbox-24h: post: description: 'Get an email address for your agent for 24 hours: name@agmail.shveik.dev, a name of your choice or a random one. Pay in stablecoins with x402 or MPP, no account and no card. Wait for the verification mail with one call and get the code or the link back. Receive only. Extend it by paying again. 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/ and /mpp/ are the same endpoint. GET /x402/inbox-24h with no body answers the 402 quote for one result without starting a scrape.' operationId: x402Inbox24h parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: false properties: name: description: the local part of the address; omit it for a random name maxLength: 32 minLength: 3 pattern: ^[a-zA-Z0-9]([a-zA-Z0-9._-]{1,30})[a-zA-Z0-9]$ 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. '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: Inbox for a day tags: - Scraping x-payment-info: price: amount: '0.10' currency: USD mode: fixed protocols: - x402: {} x-quote-probe: description: GET /x402/inbox-24h 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://agmail.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agmail.shveik.dev /x402/inbox-24h-renew: post: description: 'Extend an inbox by 24 hours. Send the inbox id and the inbox secret in the JSON body. Pay in stablecoins with x402 or MPP. The address and its mail stay. An inbox that is not extended stops at its expiry and its mail is deleted shortly after. 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/ and /mpp/ are the same endpoint. GET /x402/inbox-24h-renew with no body answers the 402 quote for one result without starting a scrape.' operationId: x402Inbox24hRenew parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: false properties: inbox_id: description: the inbox id returned by the order pattern: ^ib_[0-9a-f]{12}$ type: string secret: description: the inbox secret returned by the order type: string required: - inbox_id - secret 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: Extend by 24 hours tags: - Scraping x-payment-info: price: amount: '0.10' currency: USD mode: fixed protocols: - x402: {} x-quote-probe: description: GET /x402/inbox-24h-renew 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://agmail.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agmail.shveik.dev /x402/inbox-4h: post: description: 'Get an email address for your agent for four hours: name@agmail.shveik.dev, a name of your choice or a random one. Pay in stablecoins with x402 or MPP, no account and no card. Wait for the verification mail with one call and get the code or the link back. Receive only. Extend it by paying again. 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/ and /mpp/ are the same endpoint. GET /x402/inbox-4h with no body answers the 402 quote for one result without starting a scrape.' operationId: x402Inbox4h parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: false properties: name: description: the local part of the address; omit it for a random name maxLength: 32 minLength: 3 pattern: ^[a-zA-Z0-9]([a-zA-Z0-9._-]{1,30})[a-zA-Z0-9]$ 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. '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: Inbox for four hours tags: - Scraping x-payment-info: price: amount: '0.05' currency: USD mode: fixed protocols: - x402: {} x-quote-probe: description: GET /x402/inbox-4h 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://agmail.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agmail.shveik.dev /x402/inbox-4h-renew: post: description: 'Extend an inbox by four hours. Send the inbox id and the inbox secret in the JSON body. Pay in stablecoins with x402 or MPP. The address and its mail stay. An inbox that is not extended stops at its expiry and its mail is deleted shortly after. 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/ and /mpp/ are the same endpoint. GET /x402/inbox-4h-renew with no body answers the 402 quote for one result without starting a scrape.' operationId: x402Inbox4hRenew parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: false properties: inbox_id: description: the inbox id returned by the order pattern: ^ib_[0-9a-f]{12}$ type: string secret: description: the inbox secret returned by the order type: string required: - inbox_id - secret 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: Extend by four hours tags: - Scraping x-payment-info: price: amount: '0.05' currency: USD mode: fixed protocols: - x402: {} x-quote-probe: description: GET /x402/inbox-4h-renew 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://agmail.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agmail.shveik.dev /mpp/deal: post: description: 'Hold a payment between two AI agents: the buyer pays once in stablecoins, the seller accepts and signs its delivery, and the money moves when the buyer confirms or the review window ends. Disputes and refunds are built in. Pay with x402 or MPP; no account, no API key. Base only for now. 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/ and /mpp/ are the same endpoint. GET /mpp/deal with no body answers the 402 quote for one result without starting a scrape.' operationId: mppDeal parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: false properties: amount_usd: description: what the seller receives on release, in dollars with at most 2 decimals pattern: ^(0|[1-9][0-9]{0,11})(\.[0-9]{1,2})?$ type: string deadline_hours: description: hours from funding until the seller must deliver type: integer instant: description: the job is delivered at once and may be confirmed at once type: boolean network: enum: - base type: string ref: description: a public reference; never put a secret in it maxLength: 200 type: string review_hours: description: hours you have to dispute after delivery type: integer secret_hash: description: SHA-256 hex of the secret you keep to confirm or dispute the deal pattern: ^[0-9a-fA-F]{64}$ type: string seller_address: description: the seller's EVM address; it proves control of it with one signature later pattern: ^0x[0-9a-fA-F]{40}$ type: string required: - amount_usd - seller_address - network - secret_hash 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 '202': content: application/json: schema: $ref: '#/components/schemas/Error' description: Settlement outcome is ambiguous; do not submit a new payment. For this deal endpoint, poll the returned GET /v1/deals/{id} status route; it reports pending/funded and subsequent deal state. '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: 'Nothing was delivered: a call that delivers nothing. Error not_fetched; the payment is not settled and nothing is charged. Also the answer when the upstream failed (upstream_failed) or the payment could not be settled (settlement_failed).' '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: Hold a deal tags: - Scraping x-payment-info: price: currency: USD max: '505.092' min: '0.597' mode: dynamic protocols: - mpp: currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' intent: charge method: evm x-quote-probe: description: GET /mpp/deal 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://agpay.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agpay.shveik.dev /x402/deal: post: description: 'Hold a payment between two AI agents: the buyer pays once in stablecoins, the seller accepts and signs its delivery, and the money moves when the buyer confirms or the review window ends. Disputes and refunds are built in. Pay with x402 or MPP; no account, no API key. Base only for now. 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/ and /mpp/ are the same endpoint. GET /x402/deal with no body answers the 402 quote for one result without starting a scrape.' operationId: x402Deal parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: content: application/json: schema: additionalProperties: false properties: amount_usd: description: what the seller receives on release, in dollars with at most 2 decimals pattern: ^(0|[1-9][0-9]{0,11})(\.[0-9]{1,2})?$ type: string deadline_hours: description: hours from funding until the seller must deliver type: integer instant: description: the job is delivered at once and may be confirmed at once type: boolean network: enum: - base type: string ref: description: a public reference; never put a secret in it maxLength: 200 type: string review_hours: description: hours you have to dispute after delivery type: integer secret_hash: description: SHA-256 hex of the secret you keep to confirm or dispute the deal pattern: ^[0-9a-fA-F]{64}$ type: string seller_address: description: the seller's EVM address; it proves control of it with one signature later pattern: ^0x[0-9a-fA-F]{40}$ type: string required: - amount_usd - seller_address - network - secret_hash 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 '202': content: application/json: schema: $ref: '#/components/schemas/Error' description: Settlement outcome is ambiguous; do not submit a new payment. For this deal endpoint, poll the returned GET /v1/deals/{id} status route; it reports pending/funded and subsequent deal state. '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: 'Nothing was delivered: a call that delivers nothing. Error not_fetched; the payment is not settled and nothing is charged. Also the answer when the upstream failed (upstream_failed) or the payment could not be settled (settlement_failed).' '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: Hold a deal tags: - Scraping x-payment-info: price: currency: USD max: '505.092' min: '0.597' mode: dynamic protocols: - x402: {} x-quote-probe: description: GET /x402/deal 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://agpay.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agpay.shveik.dev /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/ and /mpp/ 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 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 /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/ and /mpp/ 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 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 /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/ and /mpp/ 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 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 /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/ and /mpp/ 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 /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/ and /mpp/ are the same endpoint. GET /mpp/vps-medium with no body answers the 402 quote for one result without starting a scrape.' operationId: mppVpsMedium parameters: - $ref: '#/components/parameters/IdempotencyKey' 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. '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: Server, 2 vCPU 2 GB RAM tags: - Scraping x-payment-info: price: amount: '14.612' currency: USD mode: fixed protocols: - mpp: currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' intent: charge method: evm x-quote-probe: description: GET /mpp/vps-medium 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://agvps.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agvps.shveik.dev /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/ and /mpp/ are the same endpoint. GET /mpp/vps-medium-renew with no body answers the 402 quote for one result without starting a scrape.' operationId: mppVpsMediumRenew parameters: - $ref: '#/components/parameters/IdempotencyKey' 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. '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: Renew a medium server tags: - Scraping x-payment-info: price: currency: USD max: '87.612' min: '14.612' mode: dynamic protocols: - mpp: currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' intent: charge method: evm x-quote-probe: description: GET /mpp/vps-medium-renew 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://agvps.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agvps.shveik.dev /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/ and /mpp/ are the same endpoint. GET /mpp/vps-small with no body answers the 402 quote for one result without starting a scrape.' operationId: mppVpsSmall parameters: - $ref: '#/components/parameters/IdempotencyKey' 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. '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: Server, 1 vCPU 1 GB RAM tags: - Scraping x-payment-info: price: amount: '10.012' currency: USD mode: fixed protocols: - mpp: currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' intent: charge method: evm x-quote-probe: description: GET /mpp/vps-small 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://agvps.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agvps.shveik.dev /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/ and /mpp/ are the same endpoint. GET /mpp/vps-small-renew with no body answers the 402 quote for one result without starting a scrape.' operationId: mppVpsSmallRenew parameters: - $ref: '#/components/parameters/IdempotencyKey' 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. '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: Renew a small server tags: - Scraping x-payment-info: price: currency: USD max: '60.012' min: '10.012' mode: dynamic protocols: - mpp: currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' intent: charge method: evm x-quote-probe: description: GET /mpp/vps-small-renew 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://agvps.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agvps.shveik.dev /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/ and /mpp/ are the same endpoint. GET /x402/vps-medium with no body answers the 402 quote for one result without starting a scrape.' operationId: x402VpsMedium parameters: - $ref: '#/components/parameters/IdempotencyKey' 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. '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: Server, 2 vCPU 2 GB RAM tags: - Scraping x-payment-info: price: amount: '14.612' currency: USD mode: fixed protocols: - x402: {} x-quote-probe: description: GET /x402/vps-medium 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://agvps.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agvps.shveik.dev /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/ and /mpp/ are the same endpoint. GET /x402/vps-medium-renew with no body answers the 402 quote for one result without starting a scrape.' operationId: x402VpsMediumRenew parameters: - $ref: '#/components/parameters/IdempotencyKey' 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. '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: Renew a medium server tags: - Scraping x-payment-info: price: currency: USD max: '87.612' min: '14.612' mode: dynamic protocols: - x402: {} x-quote-probe: description: GET /x402/vps-medium-renew 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://agvps.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agvps.shveik.dev /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/ and /mpp/ are the same endpoint. GET /x402/vps-small with no body answers the 402 quote for one result without starting a scrape.' operationId: x402VpsSmall parameters: - $ref: '#/components/parameters/IdempotencyKey' 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. '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: Server, 1 vCPU 1 GB RAM tags: - Scraping x-payment-info: price: amount: '10.012' currency: USD mode: fixed protocols: - x402: {} x-quote-probe: description: GET /x402/vps-small 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://agvps.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agvps.shveik.dev /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/ and /mpp/ are the same endpoint. GET /x402/vps-small-renew with no body answers the 402 quote for one result without starting a scrape.' operationId: x402VpsSmallRenew parameters: - $ref: '#/components/parameters/IdempotencyKey' 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. '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: Renew a small server tags: - Scraping x-payment-info: price: currency: USD max: '60.012' min: '10.012' mode: dynamic protocols: - x402: {} x-quote-probe: description: GET /x402/vps-small-renew 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://agvps.shveik.dev/v1 - description: Unversioned compatibility routes. url: https://agvps.shveik.dev 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 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 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 x-refined-from: - agdata-openapi.json - agmail-openapi.json - agpay-openapi.json - agproxy-openapi.json - agvps-openapi.json - shveik-agdata-openapi.yml - shveik-agmail-openapi.yml - shveik-agpay-openapi.yml - shveik-agproxy-openapi.yml - shveik-agvps-openapi.yml 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-discovery: ownershipProofs: - '0x4ffdf47416ffbbc8b180b751a1c18efe380b16b65d72717852cf220c5be3efe46349ab913f124e093bbc9f37e63f9f1de31f5165af3dfe07da884705dcd27cbf1b' - '0xb7d25846f7bb4548b1bae18daf930ec61b5b859d3f47d03209293afb9e967cc363cd5861f76e3dc8beef3f63d64098c314434789f0c97fffe5ea7cdc50697c4a1c' - b1cms5zVangJCETnpvwDewgRKyavSgnaPqQFtL3Wrg4GdonoN13K9LHmVVfWsi8Nigi1MY7LXqpimyUeyuEV5B1 x-service-info: categories: - unblocker - screenshots - web-scraping - data - ai docs: homepage: https://agdata.shveik.dev