{"components":{"headers":{"RateLimit-Limit":{"description":"Per-client request limit for free GET documents.","schema":{"const":120,"type":"integer"}},"RateLimit-Policy":{"description":"Configured free-document policy.","schema":{"const":"120;w=60","type":"string"}},"RateLimit-Remaining":{"description":"Requests remaining in the current 60-second window.","schema":{"minimum":0,"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the oldest request expires and another slot opens.","schema":{"minimum":1,"type":"integer"}},"Retry-After":{"description":"Seconds to wait after a 429 response.","schema":{"minimum":1,"type":"integer"}}},"parameters":{"IdempotencyKey":{"description":"Optional retry key; reusing it with a different request body returns 422.","in":"header","name":"Idempotency-Key","required":false,"schema":{"maxLength":128,"type":"string"}}},"schemas":{"Error":{"additionalProperties":true,"properties":{"error":{"description":"a short stable code: invalid_request, invalid_payment, body_too_large, payment_in_progress, rate_limited, unavailable, upstream_failed, not_fetched, settlement_failed, expired, internal_error, not_found, method_not_allowed","type":"string"},"message":{"description":"a human sentence","type":"string"}},"required":["error","message"],"type":"object"}},"securitySchemes":{"mpp":{"description":"MPP evm/authorization credential in Authorization header. First request without payment returns WWW-Authenticate challenge.","scheme":"Payment","type":"http"},"x402":{"description":"x402 exact payment credential. First request without payment returns PAYMENT-REQUIRED quote.","in":"header","name":"PAYMENT-SIGNATURE","type":"apiKey"}}},"info":{"contact":{"email":"support@dalaran.sh"},"description":"Unblocking and web data API for AI agents: any URL as clean Markdown, HTML or text, screenshots and PDFs of pages, YouTube transcripts, Google Maps reviews, job listings, Google News, Amazon reviews and web search with page content, plus social, maps and search data as JSON. Endpoints: unblock, instagram, google-maps, tiktok, linkedin, youtube, twitter, reddit, amazon, google-search, google-maps-reviews, youtube-transcript, screenshot, linkedin-jobs, indeed-jobs, shopify-products, google-news, amazon-reviews, google-play-reviews, linkedin-company, web-search, x-replies, youtube-comments, tiktok-comments, instagram-comments, ebay-sold, meta-ads, linkedin-profile-email, linkedin-posts, facebook-page, facebook-posts, facebook-comments, domain-contacts, maps-contacts, email-verify, instagram-profile, instagram-reels, linkedin-post-search, facebook-group-posts, linkedin-company-search, linkedin-comments. Returns structured JSON. Payment is in stablecoins: x402 on Base and Polygon (plus Solana on most routes) or MPP on Base. x402 uses the exact scheme; no API keys, accounts or subscriptions. A failed scrape is never charged; otherwise a call pays a small fixed fee plus the results it returns, and results paid for but not delivered are refunded. Feedback is free: POST /feedback (or the MCP tool feedback) sends a note to the people who run the service. Every response carries RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset and RateLimit-Policy headers: they show the per-IP budget of the request class (free documents 120 per minute, unpaid quote requests 300 per minute; a request that carries a payment is never limited). Free GET documents (/openapi.json, /llms.txt, /agents.md, /pricing.md, /docs, /ask and /health) are limited to 120 requests per minute per client IP and return RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset and RateLimit-Policy; a 429 also includes Retry-After. API deprecation policy: https://archivum.dalaran.sh/deprecation-policy.","title":"archivum","version":"1.1.0","x-api-lifecycle":{"deprecation":"API routes and behavior may change or be discontinued. Consult the current documentation before use. There is no fixed advance-notice period; existing purchases and rights that cannot lawfully be excluded are unaffected.","policy":"https://archivum.dalaran.sh/deprecation-policy","versioning":"URL prefix /v1"},"x-guidance":"POST a small JSON body (see each operation's requestBody) with no payment to get a 402 carrying a PAYMENT-REQUIRED header (x402) and a WWW-Authenticate: Payment challenge (MPP). Sign either and retry the same request with a PAYMENT-SIGNATURE header (x402) or Authorization: Payment (MPP) to receive the JSON dataset. The 402 quotes the price for your requested limit: a fixed per-call fee plus a per-result price for each result; endpoints without a limit field return one result. If fewer results come back than you asked for, the per-result price of the missing ones is refunded on-chain to the paying address (refunds too small to be worth a transfer are not sent); a scrape with no results keeps only the fixed fee and refunds every result; a failed scrape is not settled. Response headers X-Archivum-Results-Requested, X-Archivum-Results-Delivered and X-Archivum-Refund (USDC base units) report it. On unblock, a page that could not be fetched (blocked, an error status or empty) is not settled and nothing is kept for it (502, error not_fetched). On instagram, a call that delivers nothing is not settled and nothing is kept for it (502, error not_fetched). On google-maps, a call that delivers nothing is not settled and nothing is kept for it (502, error not_fetched). On tiktok, a call that delivers nothing is not settled and nothing is kept for it (502, error not_fetched). On linkedin, a call that delivers nothing is not settled and nothing is kept for it (502, error not_fetched). On youtube, a call that delivers nothing is not settled and nothing is kept for it (502, error not_fetched). On twitter, a call that delivers nothing is not settled and nothing is kept for it (502, error not_fetched). On reddit, a call that delivers nothing is not settled and nothing is kept for it (502, error not_fetched). On amazon, a call that delivers nothing is not settled and nothing is kept for it (502, error not_fetched). On google-search, a call that delivers nothing is not settled and nothing is kept for it (502, error not_fetched). On google-maps-reviews, a place with no reviews is not settled and nothing is kept for it (502, error not_fetched). On youtube-transcript, a video without subtitles in the requested language is not settled and nothing is kept for it (502, error not_fetched). On screenshot, a page that could not be captured, renders blank or gives an image over 5 MiB is not settled and nothing is kept for it (502, error not_fetched). On linkedin-jobs, a call that delivers nothing is not settled and nothing is kept for it (502, error not_fetched). On indeed-jobs, a call that delivers nothing is not settled and nothing is kept for it (502, error not_fetched). On shopify-products, a site that is not a Shopify store, or has no public products is not settled and nothing is kept for it (502, error not_fetched). On google-news, a call that delivers nothing is not settled and nothing is kept for it (502, error not_fetched). On amazon-reviews, a product with no reviews (or an unknown one) is not settled and nothing is kept for it (502, error not_fetched). On google-play-reviews, an app with no reviews (or an unknown one) is not settled and nothing is kept for it (502, error not_fetched). On linkedin-company, a call that delivers nothing is not settled and nothing is kept for it (502, error not_fetched). On web-search, a call that delivers nothing is not settled and nothing is kept for it (502, error not_fetched). On x-replies, a call that delivers nothing is not settled and nothing is kept for it (502, error not_fetched). On youtube-comments, a call that delivers nothing is not settled and nothing is kept for it (502, error not_fetched). On tiktok-comments, a call that delivers nothing is not settled and nothing is kept for it (502, error not_fetched). On instagram-comments, a call that delivers nothing is not settled and nothing is kept for it (502, error not_fetched). On ebay-sold, a search that returned no sold listings is not settled and nothing is kept for it (502, error not_fetched). On meta-ads, a call that delivers nothing is not settled and nothing is kept for it (502, error not_fetched). On linkedin-profile-email, a call that delivers nothing is not settled and nothing is kept for it (502, error not_fetched). On linkedin-posts, a call that delivers nothing is not settled and nothing is kept for it (502, error not_fetched). On facebook-page, a page that is private, unknown or not a page is not settled and nothing is kept for it (502, error not_fetched). On facebook-posts, a page with no readable posts is not settled and nothing is kept for it (502, error not_fetched). On facebook-comments, a post with no readable comments is not settled and nothing is kept for it (502, error not_fetched). On domain-contacts, sites where no email, phone or social link was found is not settled and nothing is kept for it (502, error not_fetched). On maps-contacts, a search that matched no places is not settled and nothing is kept for it (502, error not_fetched). On email-verify, addresses that got no verdict is not settled and nothing is kept for it (502, error not_fetched). On instagram-profile, a call that delivers nothing is not settled and nothing is kept for it (502, error not_fetched). On instagram-reels, a call that delivers nothing is not settled and nothing is kept for it (502, error not_fetched). On linkedin-post-search, a call that delivers nothing is not settled and nothing is kept for it (502, error not_fetched). On facebook-group-posts, a call that delivers nothing is not settled and nothing is kept for it (502, error not_fetched). On linkedin-company-search, a call that delivers nothing is not settled and nothing is kept for it (502, error not_fetched). On linkedin-comments, a call that delivers nothing is not settled and nothing is kept for it (502, error not_fetched). The unblock endpoint fetches one page per call and has no limit field. A fetch can take up to about 90 s: keep the connection open; retrying with the same payment returns the stored result. youtube-transcript and screenshot can take up to about 60 s: keep the connection open; retrying with the same payment returns the stored result. twitter, youtube-transcript, web-search, x-replies, meta-ads, domain-contacts, maps-contacts, email-verify, instagram-profile, instagram-reels, linkedin-post-search, facebook-group-posts, linkedin-company-search and linkedin-comments are not offered on Solana. Results are returned as one JSON array; limit is a maximum-result count (clamped to endpoint bounds). Paid results have no cursor or continuation token; the only paginated resource is the free GET /endpoints list (limit, cursor, next_cursor). Calls are synchronous; scrape timeout is bounded by configured upstream and settlement windows. An occasional 202 means settlement may have reached the chain, not an asynchronous job; retry the same payment to resolve/retrieve, and there is no status URL."},"openapi":"3.1.0","paths":{"/endpoints":{"get":{"description":"Lists the paid endpoints with their paths and quote URLs, the same entries as the /v1 index. Pages hold limit entries (default 10, at most 50); when next_cursor is not null, pass it back as cursor for the next page. A malformed limit or cursor is a 400 error.","operationId":"listEndpoints","parameters":[{"description":"Entries per page.","in":"query","name":"limit","required":false,"schema":{"default":10,"maximum":50,"minimum":1,"type":"integer"}},{"description":"Opaque cursor: the next_cursor of the previous page.","in":"query","name":"cursor","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"items":{"items":{"type":"object"},"type":"array"},"next_cursor":{"description":"Cursor of the next page; null on the last page.","type":["string","null"]},"total":{"description":"Number of endpoints in the whole list.","minimum":0,"type":"integer"}},"required":["items","next_cursor","total"],"type":"object"}}},"description":"One page of endpoints."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Invalid limit or cursor (error invalid_request)."}},"summary":"List the API endpoints, one page at a time","tags":["Discovery"]}},"/mpp/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/\u003cname\u003e and /mpp/\u003cname\u003e 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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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.413","min":"0.033","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"}}},"/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/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. 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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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.1898","min":"0.0134","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"}}},"/mpp/domain-contacts":{"post":{"description":"Website contact finder API for AI agents: send up to 5 websites and get, for each, the emails, phone numbers and social profile links printed on its home, contact and about pages, as JSON with the contact page that was found. Pay per website in stablecoins; a site where no contact was found is not charged and you are refunded for it. Send the JSON body with no payment to get a 402 with an MPP challenge (WWW-Authenticate) and an x402 challenge (PAYMENT-REQUIRED); sign the MPP one (evm/authorization) and retry with an Authorization header. Both paths take either protocol: /x402/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. Not offered on Solana: pay on Base or Polygon. GET /mpp/domain-contacts with no body answers the 402 quote for one result without starting a scrape.","operationId":"mppDomainContacts","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"urls":{"description":"websites to read, 1 to 5, each a domain or URL such as example.com or https://example.com/ (only the host is used); the call is priced per website","items":{"maxLength":2048,"type":"string"},"maxItems":5,"minItems":1,"type":"array"}},"required":["urls"],"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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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: sites where no email, phone or social link was found. 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":"Emails and phones found on websites","tags":["Scraping"],"x-payment-info":{"price":{"currency":"USD","max":"0.054","min":"0.046","mode":"dynamic"},"protocols":[{"mpp":{"currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","intent":"charge","method":"evm"}}]},"x-quote-probe":{"description":"GET /mpp/domain-contacts with no body answers the 402 quote for one result without starting a scrape. A quote for a request-specific limit needs this POST body.","method":"GET"}}},"/mpp/ebay-sold":{"post":{"description":"eBay sold listings API for AI agents: send a keyword, get sold items as JSON for resale comps: sold price, currency, shipping, total, sale date, condition, listing type, bids, seller feedback. Eight eBay marketplaces, last 1 to 90 days, new or used. No seller names or thumbnails. A search with no results 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/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. GET /mpp/ebay-sold with no body answers the 402 quote for one result without starting a scrape.","operationId":"mppEbaySold","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"condition":{"default":"any","description":"only new or only used items (default any)","enum":["any","new","used"],"type":"string"},"days":{"default":30,"description":"sold within the last this many days (1 to 90, default 30)","maximum":90,"minimum":1,"type":"integer"},"keyword":{"description":"what was sold, as typed into eBay's search, e.g. \"mechanical keyboard\" (2 to 100 characters)","maxLength":100,"minLength":2,"type":"string"},"limit":{"default":20,"description":"number of sold listings 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"},"site":{"default":"ebay.com","description":"the eBay marketplace searched","enum":["ebay.com","ebay.co.uk","ebay.de","ebay.fr","ebay.it","ebay.es","ebay.ca","ebay.com.au"],"type":"string"}},"required":["keyword"],"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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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 search that returned no sold listings. 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":"eBay sold prices for resale comps","tags":["Scraping"],"x-payment-info":{"price":{"currency":"USD","max":"1.61205","min":"0.02805","mode":"dynamic"},"protocols":[{"mpp":{"currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","intent":"charge","method":"evm"}}]},"x-quote-probe":{"description":"GET /mpp/ebay-sold with no body answers the 402 quote for one result without starting a scrape. A quote for a request-specific limit needs this POST body.","method":"GET"}}},"/mpp/email-verify":{"post":{"description":"Email verification API for AI agents: send up to 20 email addresses and get a verdict for each as JSON: status, score, whether the domain exists and has a mail server, disposable, role-based and free-provider flags, catch-all detection and a typo suggestion. Catch-all and strict servers are reported as risky or unknown, never as valid. Pay per address in stablecoins; addresses that got no verdict 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/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. Not offered on Solana: pay on Base or Polygon. GET /mpp/email-verify with no body answers the 402 quote for one result without starting a scrape.","operationId":"mppEmailVerify","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"emails":{"description":"email addresses to check, 1 to 20 (duplicates are checked once); the call is priced per address","items":{"maxLength":254,"type":"string"},"maxItems":20,"minItems":1,"type":"array"}},"required":["emails"],"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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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: addresses that got no verdict. 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":"Verify email addresses","tags":["Scraping"],"x-payment-info":{"price":{"currency":"USD","max":"0.04449","min":"0.01067","mode":"dynamic"},"protocols":[{"mpp":{"currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","intent":"charge","method":"evm"}}]},"x-quote-probe":{"description":"GET /mpp/email-verify with no body answers the 402 quote for one result without starting a scrape. A quote for a request-specific limit needs this POST body.","method":"GET"}}},"/mpp/facebook-comments":{"post":{"description":"Facebook comments API for AI agents: send the URL of a public Facebook post, video 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/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. GET /mpp/facebook-comments with no body answers the 402 quote for one result without starting a scrape.","operationId":"mppFacebookComments","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 public Facebook post, video or reel, e.g. https://www.facebook.com/nasa/posts/pfbid02Xk4Lm9Qa1","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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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 post with no readable comments. 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 Facebook post","tags":["Scraping"],"x-payment-info":{"price":{"currency":"USD","max":"0.5115","min":"0.0165","mode":"dynamic"},"protocols":[{"mpp":{"currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","intent":"charge","method":"evm"}}]},"x-quote-probe":{"description":"GET /mpp/facebook-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"}}},"/mpp/facebook-group-posts":{"post":{"description":"Read recent posts from one public Facebook group. Get post text, URLs, dates, group title and reaction, comment and share counts as JSON. Use it to research recurring questions and discussion topics. Member profiles and nested comments 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/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. Not offered on Solana: pay on Base or Polygon. GET /mpp/facebook-group-posts with no body answers the 402 quote for one result without starting a scrape.","operationId":"mppFacebookGroupPosts","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"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"},"url":{"description":"public Facebook group URL","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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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":"Public Facebook group posts","tags":["Scraping"],"x-payment-info":{"price":{"currency":"USD","max":"0.414","min":"0.034","mode":"dynamic"},"protocols":[{"mpp":{"currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","intent":"charge","method":"evm"}}]},"x-quote-probe":{"description":"GET /mpp/facebook-group-posts with no body answers the 402 quote for one result without starting a scrape. A quote for a request-specific limit needs this POST body.","method":"GET"}}},"/mpp/facebook-page":{"post":{"description":"Facebook page API for AI agents: send the URL of a public Facebook page and get its public details as JSON: name, category, followers, intro, website, and the email, phone and address when the page lists them. One page per call; pay per call in stablecoins. A page that is private, unknown or not a page 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/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. GET /mpp/facebook-page with no body answers the 402 quote for one result without starting a scrape.","operationId":"mppFacebookPage","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"url":{"description":"URL of a public Facebook page, e.g. https://www.facebook.com/nasa/ (not a profile or group)","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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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 page that is private, unknown or not a page. 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":"Public details of a Facebook page","tags":["Scraping"],"x-payment-info":{"price":{"amount":"0.044","currency":"USD","mode":"fixed"},"protocols":[{"mpp":{"currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","intent":"charge","method":"evm"}}]},"x-quote-probe":{"description":"GET /mpp/facebook-page with no body answers the 402 quote for one result without starting a scrape. A quote for a request-specific limit needs this POST body.","method":"GET"}}},"/mpp/facebook-posts":{"post":{"description":"Facebook posts API for AI agents: send the URL of a public Facebook page and get its most recent posts as JSON: text, time, reaction, comment and share counts, video views and the breakdown of reactions. Up to 20 posts per call; pay per post in stablecoins. A page with no readable posts is not charged; posts 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/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. GET /mpp/facebook-posts with no body answers the 402 quote for one result without starting a scrape.","operationId":"mppFacebookPosts","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"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"},"url":{"description":"URL of a public Facebook page, e.g. https://www.facebook.com/nasa/","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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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 page with no readable posts. 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":"Recent posts of a Facebook page","tags":["Scraping"],"x-payment-info":{"price":{"currency":"USD","max":"0.214","min":"0.024","mode":"dynamic"},"protocols":[{"mpp":{"currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","intent":"charge","method":"evm"}}]},"x-quote-probe":{"description":"GET /mpp/facebook-posts with no body answers the 402 quote for one result without starting a scrape. A quote for a request-specific limit needs this POST body.","method":"GET"}}},"/mpp/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/\u003cname\u003e and /mpp/\u003cname\u003e 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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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.3322","min":"0.0282","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"}}},"/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/\u003cname\u003e and /mpp/\u003cname\u003e 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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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.12865","min":"0.01105","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"}}},"/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/\u003cname\u003e and /mpp/\u003cname\u003e 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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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.1533","min":"0.0199","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"}}},"/mpp/google-play-reviews":{"post":{"description":"Google Play app reviews API for AI agents: send an Android package name or a Google Play app URL and get up to 200 reviews as JSON: rating, text, date, app version, language and helpful votes. Sort by newest, relevance or rating and filter by stars. Reviewer names and photos are not returned. An app 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/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. GET /mpp/google-play-reviews with no body answers the 402 quote for one result without starting a scrape.","operationId":"mppGooglePlayReviews","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"app":{"description":"an Android package name (e.g. com.spotify.music) or a Google Play app URL (https://play.google.com/store/apps/details?id=com.spotify.music)","maxLength":2048,"type":"string"},"limit":{"default":20,"description":"number of reviews wanted, 1 to 200 (default 20). A larger value is lowered to 200 and 0 or a negative one means the default; the quote follows the value used.","maximum":200,"minimum":1,"type":"integer"},"rating":{"description":"keep only reviews with this many stars (1 to 5); omit for all","maximum":5,"minimum":1,"type":"integer"},"sort":{"default":"newest","description":"order of the reviews","enum":["newest","relevant","rating"],"type":"string"}},"required":["app"],"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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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: an app 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":"Google Play reviews of an Android app","tags":["Scraping"],"x-payment-info":{"price":{"currency":"USD","max":"0.12815","min":"0.00875","mode":"dynamic"},"protocols":[{"mpp":{"currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","intent":"charge","method":"evm"}}]},"x-quote-probe":{"description":"GET /mpp/google-play-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"}}},"/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/\u003cname\u003e and /mpp/\u003cname\u003e 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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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.05755","min":"0.01885","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"}}},"/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/\u003cname\u003e and /mpp/\u003cname\u003e 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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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.0591","min":"0.0101","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"}}},"/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/\u003cname\u003e and /mpp/\u003cname\u003e 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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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.2267","min":"0.0215","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"}}},"/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/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. 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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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.5306","min":"0.0158","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"}}},"/mpp/instagram-profile":{"post":{"description":"Look up one public Instagram account by username. Get its biography, website, follower and following counts, post count, business category and verification status as JSON. Use it for account research and creator comparisons; a profile that cannot be read 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/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. Not offered on Solana: pay on Base or Polygon. GET /mpp/instagram-profile with no body answers the 402 quote for one result without starting a scrape.","operationId":"mppInstagramProfile","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"username":{"description":"Instagram username, without @; one public account per call","maxLength":500,"type":"string"}},"required":["username"],"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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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 profile details","tags":["Scraping"],"x-payment-info":{"price":{"amount":"0.021","currency":"USD","mode":"fixed"},"protocols":[{"mpp":{"currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","intent":"charge","method":"evm"}}]},"x-quote-probe":{"description":"GET /mpp/instagram-profile with no body answers the 402 quote for one result without starting a scrape. A quote for a request-specific limit needs this POST body.","method":"GET"}}},"/mpp/instagram-reels":{"post":{"description":"Read recent reels from one public Instagram account, or inspect a specific reel URL. Get captions, dates, views, likes, comment counts, duration and music as JSON. Use it to compare short-video performance. Returns structured metadata rather than media files. Send the JSON body with no payment to get a 402 with an MPP challenge (WWW-Authenticate) and an x402 challenge (PAYMENT-REQUIRED); sign the MPP one (evm/authorization) and retry with an Authorization header. Both paths take either protocol: /x402/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. Not offered on Solana: pay on Base or Polygon. GET /mpp/instagram-reels with no body answers the 402 quote for one result without starting a scrape.","operationId":"mppInstagramReels","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"limit":{"default":5,"description":"number of reels 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"},"target":{"description":"Instagram username, profile URL or direct reel URL; one target","maxLength":2048,"type":"string"}},"required":["target"],"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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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 reels and engagement","tags":["Scraping"],"x-payment-info":{"price":{"currency":"USD","max":"0.2196","min":"0.022","mode":"dynamic"},"protocols":[{"mpp":{"currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","intent":"charge","method":"evm"}}]},"x-quote-probe":{"description":"GET /mpp/instagram-reels with no body answers the 402 quote for one result without starting a scrape. A quote for a request-specific limit needs this POST body.","method":"GET"}}},"/mpp/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/\u003cname\u003e and /mpp/\u003cname\u003e 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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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.023","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"}}},"/mpp/linkedin-comments":{"post":{"description":"Read top-level comments from one public LinkedIn post URL. Get comment text, dates, like counts and reply counts as JSON. Use it to understand questions and reactions around an announcement or discussion. Commenter identities and nested replies 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/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. Not offered on Solana: pay on Base or Polygon. GET /mpp/linkedin-comments with no body answers the 402 quote for one result without starting a scrape.","operationId":"mppLinkedinComments","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"limit":{"default":5,"description":"number of comments 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"},"url":{"description":"LinkedIn post URL or /feed/update/urn:li:activity:... URL","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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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 post comments","tags":["Scraping"],"x-payment-info":{"price":{"currency":"USD","max":"0.17","min":"0.018","mode":"dynamic"},"protocols":[{"mpp":{"currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","intent":"charge","method":"evm"}}]},"x-quote-probe":{"description":"GET /mpp/linkedin-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"}}},"/mpp/linkedin-company":{"post":{"description":"LinkedIn company enrichment API for AI agents: send up to 10 LinkedIn company page URLs and get one JSON record per company: name, website, employee and follower counts, founding year, tagline, description, industries, specialities, headquarters and locations, company type. Pay per company in stablecoins; a company that is not found 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/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. GET /mpp/linkedin-company with no body answers the 402 quote for one result without starting a scrape.","operationId":"mppLinkedinCompany","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"companies":{"description":"LinkedIn company page URLs, 1 to 10, e.g. https://www.linkedin.com/company/stripe/ (https only, no query string); the call is priced per company","items":{"maxLength":2048,"type":"string"},"maxItems":10,"minItems":1,"type":"array"}},"required":["companies"],"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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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 company enrichment","tags":["Scraping"],"x-payment-info":{"price":{"currency":"USD","max":"0.17205","min":"0.02805","mode":"dynamic"},"protocols":[{"mpp":{"currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","intent":"charge","method":"evm"}}]},"x-quote-probe":{"description":"GET /mpp/linkedin-company with no body answers the 402 quote for one result without starting a scrape. A quote for a request-specific limit needs this POST body.","method":"GET"}}},"/mpp/linkedin-company-search":{"post":{"description":"Find LinkedIn companies by keywords, with optional location, industry and company-size filters. Get company names, URLs, industries, location and search summaries as JSON. Use the returned URLs with company enrichment for further research. No employee search is performed. Send the JSON body with no payment to get a 402 with an MPP challenge (WWW-Authenticate) and an x402 challenge (PAYMENT-REQUIRED); sign the MPP one (evm/authorization) and retry with an Authorization header. Both paths take either protocol: /x402/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. Not offered on Solana: pay on Base or Polygon. GET /mpp/linkedin-company-search with no body answers the 402 quote for one result without starting a scrape.","operationId":"mppLinkedinCompanySearch","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"industry":{"description":"optional LinkedIn industry ID","maxLength":500,"type":"string"},"limit":{"default":5,"description":"number of companies 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 location, such as Prague","maxLength":500,"type":"string"},"query":{"description":"company search keywords","maxLength":500,"type":"string"},"size":{"description":"optional company size","enum":["1-10","11-50","51-200","201-500","501-1000","1001-5000","5001-10000","10001+"],"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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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":"Discover LinkedIn companies","tags":["Scraping"],"x-payment-info":{"price":{"currency":"USD","max":"0.171","min":"0.019","mode":"dynamic"},"protocols":[{"mpp":{"currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","intent":"charge","method":"evm"}}]},"x-quote-probe":{"description":"GET /mpp/linkedin-company-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"}}},"/mpp/linkedin-jobs":{"post":{"description":"LinkedIn jobs search: 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/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. 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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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.0894","min":"0.011","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"}}},"/mpp/linkedin-post-search":{"post":{"description":"Search public LinkedIn posts by keywords or Boolean query, with optional author, age and sort filters. Get post text, dates and engagement as JSON. Use it to find company announcements, product mentions and relevant discussions without knowing the post URLs first. Send the JSON body with no payment to get a 402 with an MPP challenge (WWW-Authenticate) and an x402 challenge (PAYMENT-REQUIRED); sign the MPP one (evm/authorization) and retry with an Authorization header. Both paths take either protocol: /x402/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. Not offered on Solana: pay on Base or Polygon. GET /mpp/linkedin-post-search with no body answers the 402 quote for one result without starting a scrape.","operationId":"mppLinkedinPostSearch","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"author_url":{"description":"optional LinkedIn profile or company page URL","maxLength":2048,"type":"string"},"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"},"posted":{"description":"maximum post age","enum":["any","1h","24h","week","month","3months","6months","year"],"type":"string"},"query":{"description":"keywords or Boolean query","maxLength":500,"type":"string"},"sort":{"description":"result order","enum":["relevance","date"],"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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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":"Search LinkedIn posts","tags":["Scraping"],"x-payment-info":{"price":{"currency":"USD","max":"0.17105","min":"0.01905","mode":"dynamic"},"protocols":[{"mpp":{"currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","intent":"charge","method":"evm"}}]},"x-quote-probe":{"description":"GET /mpp/linkedin-post-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"}}},"/mpp/linkedin-posts":{"post":{"description":"LinkedIn posts API for AI agents: send one LinkedIn profile or company page URL and get its recent posts as JSON, each with text, date, likes, comments, shares, author, post URL and the reposter when it is a repost. Up to 20 posts per call; pay per post in stablecoins. A URL with no posts 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/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. GET /mpp/linkedin-posts with no body answers the 402 quote for one result without starting a scrape.","operationId":"mppLinkedinPosts","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"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"},"url":{"description":"LinkedIn profile URL (https://www.linkedin.com/in/\u003cname\u003e/) or company page URL (https://www.linkedin.com/company/\u003cname\u003e/); one URL per call","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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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 posts of a profile or company","tags":["Scraping"],"x-payment-info":{"price":{"currency":"USD","max":"0.17105","min":"0.01905","mode":"dynamic"},"protocols":[{"mpp":{"currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","intent":"charge","method":"evm"}}]},"x-quote-probe":{"description":"GET /mpp/linkedin-posts with no body answers the 402 quote for one result without starting a scrape. A quote for a request-specific limit needs this POST body.","method":"GET"}}},"/mpp/linkedin-profile-email":{"post":{"description":"LinkedIn profile with a verified work email for AI agents: send one LinkedIn profile URL and get the public profile (headline, about, location, current and past positions, education, skills) plus the work email of its owner that passed a deliverability check (not a catch-all domain), with its status and quality score. Pay per profile in stablecoins; a profile with no verified email 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/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. GET /mpp/linkedin-profile-email with no body answers the 402 quote for one result without starting a scrape.","operationId":"mppLinkedinProfileEmail","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"url":{"description":"LinkedIn profile page URL, e.g. https://www.linkedin.com/in/jane-example/ (https only, no query string); one profile per call","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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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 with verified email","tags":["Scraping"],"x-payment-info":{"price":{"amount":"0.058","currency":"USD","mode":"fixed"},"protocols":[{"mpp":{"currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","intent":"charge","method":"evm"}}]},"x-quote-probe":{"description":"GET /mpp/linkedin-profile-email with no body answers the 402 quote for one result without starting a scrape. A quote for a request-specific limit needs this POST body.","method":"GET"}}},"/mpp/maps-contacts":{"post":{"description":"Local business contacts API for AI agents: send a Google Maps search and a location and get up to 8 places as JSON with name, address, category, rating, phone and website, plus the emails, extra phone numbers and Facebook, Instagram and YouTube links found on each place's website. Pay per place in stablecoins; places 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/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. Not offered on Solana: pay on Base or Polygon. GET /mpp/maps-contacts with no body answers the 402 quote for one result without starting a scrape.","operationId":"mppMapsContacts","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"limit":{"default":3,"description":"number of places wanted, 1 to 8 (default 3). A larger value is lowered to 8 and 0 or a negative one means the default; the quote follows the value used.","maximum":8,"minimum":1,"type":"integer"},"location":{"description":"area to search, e.g. \"Prague, Czech Republic\" (one location per call)","maxLength":500,"type":"string"},"query":{"description":"Google Maps search term, e.g. \"dentist\"","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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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 search that matched no places. 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":"Local businesses with emails and phones","tags":["Scraping"],"x-payment-info":{"price":{"currency":"USD","max":"0.13555","min":"0.03055","mode":"dynamic"},"protocols":[{"mpp":{"currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","intent":"charge","method":"evm"}}]},"x-quote-probe":{"description":"GET /mpp/maps-contacts with no body answers the 402 quote for one result without starting a scrape. A quote for a request-specific limit needs this POST body.","method":"GET"}}},"/mpp/meta-ads":{"post":{"description":"Meta ad library API for AI agents, for competitor research: send a keyword or an advertiser (name or page id) and get its public ads as JSON: advertiser, start and end date, whether it is still running, platforms, text, title, call to action, link, format and image URLs. Filter by country and by active or all ads; up to 100 per call, each ad once. Pay per call in stablecoins; an empty search is not charged and ads 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/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. Not offered on Solana: pay on Base or Polygon. GET /mpp/meta-ads with no body answers the 402 quote for one result without starting a scrape.","operationId":"mppMetaAds","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"oneOf":[{"required":["keyword"]},{"required":["page"]}],"properties":{"active":{"default":true,"description":"true: only ads running now; false: active and inactive ads (default true)","type":"boolean"},"country":{"default":"US","description":"two-letter country code the ads are shown in, or ALL (default US)","type":"string"},"keyword":{"description":"search the ads by this word or phrase (give this or page, not both)","maxLength":100,"minLength":2,"type":"string"},"limit":{"default":20,"description":"number of ads 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"},"page":{"description":"the advertiser: a page name or its numeric page id (give this or keyword, not both)","maxLength":100,"minLength":2,"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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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":"Public ads from the Meta ad library","tags":["Scraping"],"x-payment-info":{"price":{"currency":"USD","max":"0.09315","min":"0.03375","mode":"dynamic"},"protocols":[{"mpp":{"currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","intent":"charge","method":"evm"}}]},"x-quote-probe":{"description":"GET /mpp/meta-ads with no body answers the 402 quote for one result without starting a scrape. A quote for a request-specific limit needs this POST body.","method":"GET"}}},"/mpp/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/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. 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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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.1395","min":"0.0255","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"}}},"/mpp/screenshot":{"post":{"description":"Screenshot API for AI agents: send {url}, get JPEG, PNG, WebP or PDF as base64 JSON. Options: viewport, full page, dark mode, selector. It does not get past bot protection (use unblock for those pages' text). Failed or blank captures aren't 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/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. 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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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.01319","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"}}},"/mpp/shopify-products":{"post":{"description":"Shopify store products API for AI agents: send a store's domain and get up to 250 of its public products as JSON: title, vendor, product type, price range, compare-at price, sale and availability flags, tags, image, description and variants with SKU and price. A site that is not a Shopify store, or has no public products, is not charged; products you paid for but did not get are 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/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. GET /mpp/shopify-products with no body answers the 402 quote for one result without starting a scrape.","operationId":"mppShopifyProducts","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"limit":{"default":20,"description":"number of products wanted, 1 to 250 (default 20). A larger value is lowered to 250 and 0 or a negative one means the default; the quote follows the value used.","maximum":250,"minimum":1,"type":"integer"},"store":{"description":"the store's domain, e.g. \"example.com\" (an https URL of the bare domain is accepted too; no port, path or IP address)","maxLength":2048,"type":"string"}},"required":["store"],"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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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 site that is not a Shopify store, or has no public products. 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":"Public products of a Shopify store","tags":["Scraping"],"x-payment-info":{"price":{"currency":"USD","max":"1.01","min":"0.014","mode":"dynamic"},"protocols":[{"mpp":{"currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","intent":"charge","method":"evm"}}]},"x-quote-probe":{"description":"GET /mpp/shopify-products with no body answers the 402 quote for one result without starting a scrape. A quote for a request-specific limit needs this POST body.","method":"GET"}}},"/mpp/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/\u003cname\u003e and /mpp/\u003cname\u003e 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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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.3087","min":"0.0275","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"}}},"/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/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. 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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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.25925","min":"0.01175","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"}}},"/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/\u003cname\u003e and /mpp/\u003cname\u003e 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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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.0244","min":"0.0092","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"}}},"/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/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. 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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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.01255","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"}}},"/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/\u003cname\u003e and /mpp/\u003cname\u003e 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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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.036785","min":"0.018545","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"}}},"/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/\u003cname\u003e and /mpp/\u003cname\u003e 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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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.0484","min":"0.0092","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"}}},"/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/\u003cname\u003e and /mpp/\u003cname\u003e 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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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.332","min":"0.028","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"}}},"/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/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. 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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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.41","min":"0.014","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"}}},"/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/\u003cname\u003e and /mpp/\u003cname\u003e 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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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.02","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"}}},"/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/\u003cname\u003e and /mpp/\u003cname\u003e 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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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.413","min":"0.033","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"}}},"/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/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. 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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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.1898","min":"0.0134","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"}}},"/x402/domain-contacts":{"post":{"description":"Website contact finder API for AI agents: send up to 5 websites and get, for each, the emails, phone numbers and social profile links printed on its home, contact and about pages, as JSON with the contact page that was found. Pay per website in stablecoins; a site where no contact was found is not charged and you are refunded for it. Send the JSON body with no payment to get a 402 with an x402 challenge (PAYMENT-REQUIRED) and an MPP challenge (WWW-Authenticate); sign the x402 one (exact scheme) and retry with a PAYMENT-SIGNATURE header. Both paths take either protocol: /x402/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. Not offered on Solana: pay on Base or Polygon. GET /x402/domain-contacts with no body answers the 402 quote for one result without starting a scrape.","operationId":"x402DomainContacts","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"urls":{"description":"websites to read, 1 to 5, each a domain or URL such as example.com or https://example.com/ (only the host is used); the call is priced per website","items":{"maxLength":2048,"type":"string"},"maxItems":5,"minItems":1,"type":"array"}},"required":["urls"],"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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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: sites where no email, phone or social link was found. 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":"Emails and phones found on websites","tags":["Scraping"],"x-payment-info":{"price":{"currency":"USD","max":"0.054","min":"0.046","mode":"dynamic"},"protocols":[{"x402":{}}]},"x-quote-probe":{"description":"GET /x402/domain-contacts with no body answers the 402 quote for one result without starting a scrape. A quote for a request-specific limit needs this POST body.","method":"GET"}}},"/x402/ebay-sold":{"post":{"description":"eBay sold listings API for AI agents: send a keyword, get sold items as JSON for resale comps: sold price, currency, shipping, total, sale date, condition, listing type, bids, seller feedback. Eight eBay marketplaces, last 1 to 90 days, new or used. No seller names or thumbnails. A search with no results 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/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. GET /x402/ebay-sold with no body answers the 402 quote for one result without starting a scrape.","operationId":"x402EbaySold","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"condition":{"default":"any","description":"only new or only used items (default any)","enum":["any","new","used"],"type":"string"},"days":{"default":30,"description":"sold within the last this many days (1 to 90, default 30)","maximum":90,"minimum":1,"type":"integer"},"keyword":{"description":"what was sold, as typed into eBay's search, e.g. \"mechanical keyboard\" (2 to 100 characters)","maxLength":100,"minLength":2,"type":"string"},"limit":{"default":20,"description":"number of sold listings 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"},"site":{"default":"ebay.com","description":"the eBay marketplace searched","enum":["ebay.com","ebay.co.uk","ebay.de","ebay.fr","ebay.it","ebay.es","ebay.ca","ebay.com.au"],"type":"string"}},"required":["keyword"],"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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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 search that returned no sold listings. 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":"eBay sold prices for resale comps","tags":["Scraping"],"x-payment-info":{"price":{"currency":"USD","max":"1.61205","min":"0.02805","mode":"dynamic"},"protocols":[{"x402":{}}]},"x-quote-probe":{"description":"GET /x402/ebay-sold with no body answers the 402 quote for one result without starting a scrape. A quote for a request-specific limit needs this POST body.","method":"GET"}}},"/x402/email-verify":{"post":{"description":"Email verification API for AI agents: send up to 20 email addresses and get a verdict for each as JSON: status, score, whether the domain exists and has a mail server, disposable, role-based and free-provider flags, catch-all detection and a typo suggestion. Catch-all and strict servers are reported as risky or unknown, never as valid. Pay per address in stablecoins; addresses that got no verdict 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/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. Not offered on Solana: pay on Base or Polygon. GET /x402/email-verify with no body answers the 402 quote for one result without starting a scrape.","operationId":"x402EmailVerify","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"emails":{"description":"email addresses to check, 1 to 20 (duplicates are checked once); the call is priced per address","items":{"maxLength":254,"type":"string"},"maxItems":20,"minItems":1,"type":"array"}},"required":["emails"],"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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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: addresses that got no verdict. 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":"Verify email addresses","tags":["Scraping"],"x-payment-info":{"price":{"currency":"USD","max":"0.04449","min":"0.01067","mode":"dynamic"},"protocols":[{"x402":{}}]},"x-quote-probe":{"description":"GET /x402/email-verify with no body answers the 402 quote for one result without starting a scrape. A quote for a request-specific limit needs this POST body.","method":"GET"}}},"/x402/facebook-comments":{"post":{"description":"Facebook comments API for AI agents: send the URL of a public Facebook post, video 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/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. GET /x402/facebook-comments with no body answers the 402 quote for one result without starting a scrape.","operationId":"x402FacebookComments","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 public Facebook post, video or reel, e.g. https://www.facebook.com/nasa/posts/pfbid02Xk4Lm9Qa1","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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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 post with no readable comments. 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 Facebook post","tags":["Scraping"],"x-payment-info":{"price":{"currency":"USD","max":"0.5115","min":"0.0165","mode":"dynamic"},"protocols":[{"x402":{}}]},"x-quote-probe":{"description":"GET /x402/facebook-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"}}},"/x402/facebook-group-posts":{"post":{"description":"Read recent posts from one public Facebook group. Get post text, URLs, dates, group title and reaction, comment and share counts as JSON. Use it to research recurring questions and discussion topics. Member profiles and nested comments 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/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. Not offered on Solana: pay on Base or Polygon. GET /x402/facebook-group-posts with no body answers the 402 quote for one result without starting a scrape.","operationId":"x402FacebookGroupPosts","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"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"},"url":{"description":"public Facebook group URL","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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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":"Public Facebook group posts","tags":["Scraping"],"x-payment-info":{"price":{"currency":"USD","max":"0.414","min":"0.034","mode":"dynamic"},"protocols":[{"x402":{}}]},"x-quote-probe":{"description":"GET /x402/facebook-group-posts with no body answers the 402 quote for one result without starting a scrape. A quote for a request-specific limit needs this POST body.","method":"GET"}}},"/x402/facebook-page":{"post":{"description":"Facebook page API for AI agents: send the URL of a public Facebook page and get its public details as JSON: name, category, followers, intro, website, and the email, phone and address when the page lists them. One page per call; pay per call in stablecoins. A page that is private, unknown or not a page 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/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. GET /x402/facebook-page with no body answers the 402 quote for one result without starting a scrape.","operationId":"x402FacebookPage","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"url":{"description":"URL of a public Facebook page, e.g. https://www.facebook.com/nasa/ (not a profile or group)","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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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 page that is private, unknown or not a page. 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":"Public details of a Facebook page","tags":["Scraping"],"x-payment-info":{"price":{"amount":"0.044","currency":"USD","mode":"fixed"},"protocols":[{"x402":{}}]},"x-quote-probe":{"description":"GET /x402/facebook-page with no body answers the 402 quote for one result without starting a scrape. A quote for a request-specific limit needs this POST body.","method":"GET"}}},"/x402/facebook-posts":{"post":{"description":"Facebook posts API for AI agents: send the URL of a public Facebook page and get its most recent posts as JSON: text, time, reaction, comment and share counts, video views and the breakdown of reactions. Up to 20 posts per call; pay per post in stablecoins. A page with no readable posts is not charged; posts 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/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. GET /x402/facebook-posts with no body answers the 402 quote for one result without starting a scrape.","operationId":"x402FacebookPosts","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"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"},"url":{"description":"URL of a public Facebook page, e.g. https://www.facebook.com/nasa/","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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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 page with no readable posts. 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":"Recent posts of a Facebook page","tags":["Scraping"],"x-payment-info":{"price":{"currency":"USD","max":"0.214","min":"0.024","mode":"dynamic"},"protocols":[{"x402":{}}]},"x-quote-probe":{"description":"GET /x402/facebook-posts with no body answers the 402 quote for one result without starting a scrape. A quote for a request-specific limit needs this POST body.","method":"GET"}}},"/x402/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/\u003cname\u003e and /mpp/\u003cname\u003e 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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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.3322","min":"0.0282","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"}}},"/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/\u003cname\u003e and /mpp/\u003cname\u003e 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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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.12865","min":"0.01105","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"}}},"/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/\u003cname\u003e and /mpp/\u003cname\u003e 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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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.1533","min":"0.0199","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"}}},"/x402/google-play-reviews":{"post":{"description":"Google Play app reviews API for AI agents: send an Android package name or a Google Play app URL and get up to 200 reviews as JSON: rating, text, date, app version, language and helpful votes. Sort by newest, relevance or rating and filter by stars. Reviewer names and photos are not returned. An app 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/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. GET /x402/google-play-reviews with no body answers the 402 quote for one result without starting a scrape.","operationId":"x402GooglePlayReviews","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"app":{"description":"an Android package name (e.g. com.spotify.music) or a Google Play app URL (https://play.google.com/store/apps/details?id=com.spotify.music)","maxLength":2048,"type":"string"},"limit":{"default":20,"description":"number of reviews wanted, 1 to 200 (default 20). A larger value is lowered to 200 and 0 or a negative one means the default; the quote follows the value used.","maximum":200,"minimum":1,"type":"integer"},"rating":{"description":"keep only reviews with this many stars (1 to 5); omit for all","maximum":5,"minimum":1,"type":"integer"},"sort":{"default":"newest","description":"order of the reviews","enum":["newest","relevant","rating"],"type":"string"}},"required":["app"],"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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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: an app 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":"Google Play reviews of an Android app","tags":["Scraping"],"x-payment-info":{"price":{"currency":"USD","max":"0.12815","min":"0.00875","mode":"dynamic"},"protocols":[{"x402":{}}]},"x-quote-probe":{"description":"GET /x402/google-play-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"}}},"/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/\u003cname\u003e and /mpp/\u003cname\u003e 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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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.05755","min":"0.01885","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"}}},"/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/\u003cname\u003e and /mpp/\u003cname\u003e 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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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.0591","min":"0.0101","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"}}},"/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/\u003cname\u003e and /mpp/\u003cname\u003e 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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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.2267","min":"0.0215","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"}}},"/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/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. 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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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.5306","min":"0.0158","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"}}},"/x402/instagram-profile":{"post":{"description":"Look up one public Instagram account by username. Get its biography, website, follower and following counts, post count, business category and verification status as JSON. Use it for account research and creator comparisons; a profile that cannot be read 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/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. Not offered on Solana: pay on Base or Polygon. GET /x402/instagram-profile with no body answers the 402 quote for one result without starting a scrape.","operationId":"x402InstagramProfile","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"username":{"description":"Instagram username, without @; one public account per call","maxLength":500,"type":"string"}},"required":["username"],"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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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 profile details","tags":["Scraping"],"x-payment-info":{"price":{"amount":"0.021","currency":"USD","mode":"fixed"},"protocols":[{"x402":{}}]},"x-quote-probe":{"description":"GET /x402/instagram-profile with no body answers the 402 quote for one result without starting a scrape. A quote for a request-specific limit needs this POST body.","method":"GET"}}},"/x402/instagram-reels":{"post":{"description":"Read recent reels from one public Instagram account, or inspect a specific reel URL. Get captions, dates, views, likes, comment counts, duration and music as JSON. Use it to compare short-video performance. Returns structured metadata rather than media files. Send the JSON body with no payment to get a 402 with an x402 challenge (PAYMENT-REQUIRED) and an MPP challenge (WWW-Authenticate); sign the x402 one (exact scheme) and retry with a PAYMENT-SIGNATURE header. Both paths take either protocol: /x402/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. Not offered on Solana: pay on Base or Polygon. GET /x402/instagram-reels with no body answers the 402 quote for one result without starting a scrape.","operationId":"x402InstagramReels","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"limit":{"default":5,"description":"number of reels 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"},"target":{"description":"Instagram username, profile URL or direct reel URL; one target","maxLength":2048,"type":"string"}},"required":["target"],"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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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 reels and engagement","tags":["Scraping"],"x-payment-info":{"price":{"currency":"USD","max":"0.2196","min":"0.022","mode":"dynamic"},"protocols":[{"x402":{}}]},"x-quote-probe":{"description":"GET /x402/instagram-reels with no body answers the 402 quote for one result without starting a scrape. A quote for a request-specific limit needs this POST body.","method":"GET"}}},"/x402/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/\u003cname\u003e and /mpp/\u003cname\u003e 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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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.023","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"}}},"/x402/linkedin-comments":{"post":{"description":"Read top-level comments from one public LinkedIn post URL. Get comment text, dates, like counts and reply counts as JSON. Use it to understand questions and reactions around an announcement or discussion. Commenter identities and nested replies 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/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. Not offered on Solana: pay on Base or Polygon. GET /x402/linkedin-comments with no body answers the 402 quote for one result without starting a scrape.","operationId":"x402LinkedinComments","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"limit":{"default":5,"description":"number of comments 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"},"url":{"description":"LinkedIn post URL or /feed/update/urn:li:activity:... URL","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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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 post comments","tags":["Scraping"],"x-payment-info":{"price":{"currency":"USD","max":"0.17","min":"0.018","mode":"dynamic"},"protocols":[{"x402":{}}]},"x-quote-probe":{"description":"GET /x402/linkedin-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"}}},"/x402/linkedin-company":{"post":{"description":"LinkedIn company enrichment API for AI agents: send up to 10 LinkedIn company page URLs and get one JSON record per company: name, website, employee and follower counts, founding year, tagline, description, industries, specialities, headquarters and locations, company type. Pay per company in stablecoins; a company that is not found 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/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. GET /x402/linkedin-company with no body answers the 402 quote for one result without starting a scrape.","operationId":"x402LinkedinCompany","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"companies":{"description":"LinkedIn company page URLs, 1 to 10, e.g. https://www.linkedin.com/company/stripe/ (https only, no query string); the call is priced per company","items":{"maxLength":2048,"type":"string"},"maxItems":10,"minItems":1,"type":"array"}},"required":["companies"],"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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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 company enrichment","tags":["Scraping"],"x-payment-info":{"price":{"currency":"USD","max":"0.17205","min":"0.02805","mode":"dynamic"},"protocols":[{"x402":{}}]},"x-quote-probe":{"description":"GET /x402/linkedin-company with no body answers the 402 quote for one result without starting a scrape. A quote for a request-specific limit needs this POST body.","method":"GET"}}},"/x402/linkedin-company-search":{"post":{"description":"Find LinkedIn companies by keywords, with optional location, industry and company-size filters. Get company names, URLs, industries, location and search summaries as JSON. Use the returned URLs with company enrichment for further research. No employee search is performed. Send the JSON body with no payment to get a 402 with an x402 challenge (PAYMENT-REQUIRED) and an MPP challenge (WWW-Authenticate); sign the x402 one (exact scheme) and retry with a PAYMENT-SIGNATURE header. Both paths take either protocol: /x402/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. Not offered on Solana: pay on Base or Polygon. GET /x402/linkedin-company-search with no body answers the 402 quote for one result without starting a scrape.","operationId":"x402LinkedinCompanySearch","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"industry":{"description":"optional LinkedIn industry ID","maxLength":500,"type":"string"},"limit":{"default":5,"description":"number of companies 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 location, such as Prague","maxLength":500,"type":"string"},"query":{"description":"company search keywords","maxLength":500,"type":"string"},"size":{"description":"optional company size","enum":["1-10","11-50","51-200","201-500","501-1000","1001-5000","5001-10000","10001+"],"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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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":"Discover LinkedIn companies","tags":["Scraping"],"x-payment-info":{"price":{"currency":"USD","max":"0.171","min":"0.019","mode":"dynamic"},"protocols":[{"x402":{}}]},"x-quote-probe":{"description":"GET /x402/linkedin-company-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"}}},"/x402/linkedin-jobs":{"post":{"description":"LinkedIn jobs search: 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/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. 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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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.0894","min":"0.011","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"}}},"/x402/linkedin-post-search":{"post":{"description":"Search public LinkedIn posts by keywords or Boolean query, with optional author, age and sort filters. Get post text, dates and engagement as JSON. Use it to find company announcements, product mentions and relevant discussions without knowing the post URLs first. Send the JSON body with no payment to get a 402 with an x402 challenge (PAYMENT-REQUIRED) and an MPP challenge (WWW-Authenticate); sign the x402 one (exact scheme) and retry with a PAYMENT-SIGNATURE header. Both paths take either protocol: /x402/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. Not offered on Solana: pay on Base or Polygon. GET /x402/linkedin-post-search with no body answers the 402 quote for one result without starting a scrape.","operationId":"x402LinkedinPostSearch","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"author_url":{"description":"optional LinkedIn profile or company page URL","maxLength":2048,"type":"string"},"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"},"posted":{"description":"maximum post age","enum":["any","1h","24h","week","month","3months","6months","year"],"type":"string"},"query":{"description":"keywords or Boolean query","maxLength":500,"type":"string"},"sort":{"description":"result order","enum":["relevance","date"],"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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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":"Search LinkedIn posts","tags":["Scraping"],"x-payment-info":{"price":{"currency":"USD","max":"0.17105","min":"0.01905","mode":"dynamic"},"protocols":[{"x402":{}}]},"x-quote-probe":{"description":"GET /x402/linkedin-post-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"}}},"/x402/linkedin-posts":{"post":{"description":"LinkedIn posts API for AI agents: send one LinkedIn profile or company page URL and get its recent posts as JSON, each with text, date, likes, comments, shares, author, post URL and the reposter when it is a repost. Up to 20 posts per call; pay per post in stablecoins. A URL with no posts 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/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. GET /x402/linkedin-posts with no body answers the 402 quote for one result without starting a scrape.","operationId":"x402LinkedinPosts","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"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"},"url":{"description":"LinkedIn profile URL (https://www.linkedin.com/in/\u003cname\u003e/) or company page URL (https://www.linkedin.com/company/\u003cname\u003e/); one URL per call","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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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 posts of a profile or company","tags":["Scraping"],"x-payment-info":{"price":{"currency":"USD","max":"0.17105","min":"0.01905","mode":"dynamic"},"protocols":[{"x402":{}}]},"x-quote-probe":{"description":"GET /x402/linkedin-posts with no body answers the 402 quote for one result without starting a scrape. A quote for a request-specific limit needs this POST body.","method":"GET"}}},"/x402/linkedin-profile-email":{"post":{"description":"LinkedIn profile with a verified work email for AI agents: send one LinkedIn profile URL and get the public profile (headline, about, location, current and past positions, education, skills) plus the work email of its owner that passed a deliverability check (not a catch-all domain), with its status and quality score. Pay per profile in stablecoins; a profile with no verified email 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/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. GET /x402/linkedin-profile-email with no body answers the 402 quote for one result without starting a scrape.","operationId":"x402LinkedinProfileEmail","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"url":{"description":"LinkedIn profile page URL, e.g. https://www.linkedin.com/in/jane-example/ (https only, no query string); one profile per call","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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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 with verified email","tags":["Scraping"],"x-payment-info":{"price":{"amount":"0.058","currency":"USD","mode":"fixed"},"protocols":[{"x402":{}}]},"x-quote-probe":{"description":"GET /x402/linkedin-profile-email with no body answers the 402 quote for one result without starting a scrape. A quote for a request-specific limit needs this POST body.","method":"GET"}}},"/x402/maps-contacts":{"post":{"description":"Local business contacts API for AI agents: send a Google Maps search and a location and get up to 8 places as JSON with name, address, category, rating, phone and website, plus the emails, extra phone numbers and Facebook, Instagram and YouTube links found on each place's website. Pay per place in stablecoins; places 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/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. Not offered on Solana: pay on Base or Polygon. GET /x402/maps-contacts with no body answers the 402 quote for one result without starting a scrape.","operationId":"x402MapsContacts","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"limit":{"default":3,"description":"number of places wanted, 1 to 8 (default 3). A larger value is lowered to 8 and 0 or a negative one means the default; the quote follows the value used.","maximum":8,"minimum":1,"type":"integer"},"location":{"description":"area to search, e.g. \"Prague, Czech Republic\" (one location per call)","maxLength":500,"type":"string"},"query":{"description":"Google Maps search term, e.g. \"dentist\"","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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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 search that matched no places. 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":"Local businesses with emails and phones","tags":["Scraping"],"x-payment-info":{"price":{"currency":"USD","max":"0.13555","min":"0.03055","mode":"dynamic"},"protocols":[{"x402":{}}]},"x-quote-probe":{"description":"GET /x402/maps-contacts with no body answers the 402 quote for one result without starting a scrape. A quote for a request-specific limit needs this POST body.","method":"GET"}}},"/x402/meta-ads":{"post":{"description":"Meta ad library API for AI agents, for competitor research: send a keyword or an advertiser (name or page id) and get its public ads as JSON: advertiser, start and end date, whether it is still running, platforms, text, title, call to action, link, format and image URLs. Filter by country and by active or all ads; up to 100 per call, each ad once. Pay per call in stablecoins; an empty search is not charged and ads 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/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. Not offered on Solana: pay on Base or Polygon. GET /x402/meta-ads with no body answers the 402 quote for one result without starting a scrape.","operationId":"x402MetaAds","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"oneOf":[{"required":["keyword"]},{"required":["page"]}],"properties":{"active":{"default":true,"description":"true: only ads running now; false: active and inactive ads (default true)","type":"boolean"},"country":{"default":"US","description":"two-letter country code the ads are shown in, or ALL (default US)","type":"string"},"keyword":{"description":"search the ads by this word or phrase (give this or page, not both)","maxLength":100,"minLength":2,"type":"string"},"limit":{"default":20,"description":"number of ads 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"},"page":{"description":"the advertiser: a page name or its numeric page id (give this or keyword, not both)","maxLength":100,"minLength":2,"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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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":"Public ads from the Meta ad library","tags":["Scraping"],"x-payment-info":{"price":{"currency":"USD","max":"0.09315","min":"0.03375","mode":"dynamic"},"protocols":[{"x402":{}}]},"x-quote-probe":{"description":"GET /x402/meta-ads with no body answers the 402 quote for one result without starting a scrape. A quote for a request-specific limit needs this POST body.","method":"GET"}}},"/x402/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/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. 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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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.1395","min":"0.0255","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"}}},"/x402/screenshot":{"post":{"description":"Screenshot API for AI agents: send {url}, get JPEG, PNG, WebP or PDF as base64 JSON. Options: viewport, full page, dark mode, selector. It does not get past bot protection (use unblock for those pages' text). Failed or blank captures aren't 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/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. 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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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.01319","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"}}},"/x402/shopify-products":{"post":{"description":"Shopify store products API for AI agents: send a store's domain and get up to 250 of its public products as JSON: title, vendor, product type, price range, compare-at price, sale and availability flags, tags, image, description and variants with SKU and price. A site that is not a Shopify store, or has no public products, is not charged; products you paid for but did not get are 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/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. GET /x402/shopify-products with no body answers the 402 quote for one result without starting a scrape.","operationId":"x402ShopifyProducts","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"limit":{"default":20,"description":"number of products wanted, 1 to 250 (default 20). A larger value is lowered to 250 and 0 or a negative one means the default; the quote follows the value used.","maximum":250,"minimum":1,"type":"integer"},"store":{"description":"the store's domain, e.g. \"example.com\" (an https URL of the bare domain is accepted too; no port, path or IP address)","maxLength":2048,"type":"string"}},"required":["store"],"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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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 site that is not a Shopify store, or has no public products. 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":"Public products of a Shopify store","tags":["Scraping"],"x-payment-info":{"price":{"currency":"USD","max":"1.01","min":"0.014","mode":"dynamic"},"protocols":[{"x402":{}}]},"x-quote-probe":{"description":"GET /x402/shopify-products with no body answers the 402 quote for one result without starting a scrape. A quote for a request-specific limit needs this POST body.","method":"GET"}}},"/x402/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/\u003cname\u003e and /mpp/\u003cname\u003e 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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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.3087","min":"0.0275","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"}}},"/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/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. 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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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.25925","min":"0.01175","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"}}},"/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/\u003cname\u003e and /mpp/\u003cname\u003e 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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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.0244","min":"0.0092","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"}}},"/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/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. 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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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.01255","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"}}},"/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/\u003cname\u003e and /mpp/\u003cname\u003e 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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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.036785","min":"0.018545","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"}}},"/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/\u003cname\u003e and /mpp/\u003cname\u003e 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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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.0484","min":"0.0092","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"}}},"/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/\u003cname\u003e and /mpp/\u003cname\u003e 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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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.332","min":"0.028","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"}}},"/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/\u003cname\u003e and /mpp/\u003cname\u003e are the same endpoint. 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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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.41","min":"0.014","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"}}},"/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/\u003cname\u003e and /mpp/\u003cname\u003e 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-Archivum-Refund":{"description":"USDC base units refunded to the paying address for results not delivered (only when a refund is due).","schema":{"type":"string"}},"X-Archivum-Results-Delivered":{"description":"Number of results delivered.","schema":{"type":"string"}},"X-Archivum-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-Archivum-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-Archivum-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.02","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://archivum.dalaran.sh/v1"},{"description":"Unversioned compatibility routes.","url":"https://archivum.dalaran.sh"}],"tags":[{"description":"Synchronous data retrieval; each request completes in the HTTP response.","name":"Scraping"},{"description":"Free, unpaid API metadata.","name":"Discovery"}],"x-api-versioning":{"current":"v1","policy":"The /v1 prefix identifies the current stable API. Unversioned paths remain compatibility aliases. Breaking changes will use a new major path and be announced with a deprecation period; no fixed sunset date is promised."},"x-service-info":{"categories":["unblocker","screenshots","web-scraping","data","ai"],"docs":{"homepage":"https://archivum.dalaran.sh"}}}
