{"openapi":"3.1.0","servers":[{"url":"https://api.agorantis.com"}],"info":{"title":"Agorantis prices for AI assistants","version":"0.3.0","description":"Product prices and stock at shops, with proof and check time: a price at a shop, the cheapest in a country, 90-day history, a fresh check now, a market scan. Pay by key balance or per call with x402 (USDC). A call that finds nothing costs nothing. Get an agent key, add credits and set each key's monthly spending cap at https://agorantis.com/connections (sign in or sign up there)."},"components":{"securitySchemes":{"key":{"type":"http","scheme":"bearer","description":"An Agorantis agent key. Calls cost credits from the account's balance. Free credits are for businesses allowed them at sign-up: 25,000 a month, shared by all the business's keys. They pay for saved prices, product matches and history only, never for live checks or market scans (those need bought or plan credits, and a key). Get an agent key, add credits and set each key's monthly spending cap at https://agorantis.com/connections (sign in or sign up there). Pay as you go: $1 = 5,000 credits, top-ups from $10, 10% extra credits on top-ups of $25 or more; bought credits last 12 months and are not refunded; paid before use, at https://agorantis.com/connections."},"x402":{"type":"apiKey","in":"header","name":"PAYMENT-SIGNATURE","description":"Pay per call in USDC with x402 (version 2), no account, for answers given at once: call once with no key to get the price in the PAYMENT-REQUIRED header, then again with the signed payment. Each signed payment pays once, for one request: a 503 payment_pending means it is being confirmed, so send the same request with the same payment again in a minute and do not pay again. Sent again within 10 minutes of settling, it gives the very answer it got."}}},"paths":{"/v1/price-at":{"post":{"operationId":"price_at","summary":"Price at a shop","description":"Use when a person asks what a product costs at a shop or brand they name. Send the product and the shop (name or website). Prices come from Agorantis, a neutral price index: shops are ordered by price, then check time, and nothing else; no shop can pay to rank. Every price carries: price (amount and currency), currency, shipping (free, paid with its amount, or unknown), stock, shop (the store: name, domain, country) and store (the branch, when the shop prices by branch), checked_at, proof (the listing and its fingerprint), receipt_url (a public page with the price's proof, no key needed), match_confidence (0 to 1: how sure it is the product asked for; 1 when sent by product_id) and ranked_for_money: false. When you tell a person a price, give its shop, its check time and its receipt_url. A price that was not read right comes back as an honest state instead (unsure, not_sold_here, no_public_price or could_not_check), never a guess: tell the person the state and its reason. If the answer is not_sure with candidates, ask the person which product they mean and call again with its product_id. An error says its code (error), and most say their cause and fix apart: follow fix; on too_many_requests wait retry_after seconds; on payment_needed or cap_reached tell the person the fix, never pay for them. Price: 25 credits ($0.005).","security":[{"key":[]},{"x402":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"product":{"type":"string","minLength":1,"maxLength":200,"description":"The product as a person would say it: brand, name and size, or a barcode."},"product_id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"A product id from find, when you already have one."},"shop":{"type":"string","minLength":1,"maxLength":200,"description":"The shop or brand by name or by its website, such as \"shop-a\" or \"shop-a.example\"."},"country":{"type":"string","pattern":"^[A-Za-z]{2}$","description":"Two-letter country code, one of the covered countries: EG, AE, SA, KW, QA, BH, OM, JO, MA, US, GB, DE. Any other finds nothing and costs nothing."}},"required":["shop"],"additionalProperties":false}}}},"responses":{"200":{"description":"The answer, with what it cost in usage. Every price carries: price (amount and currency), currency, shipping (free, paid with its amount, or unknown), stock, shop (the store: name, domain, country) and store (the branch, when the shop prices by branch), checked_at, proof (the listing and its fingerprint), receipt_url (a public page with the price's proof, no key needed), match_confidence (0 to 1: how sure it is the product asked for; 1 when sent by product_id) and ranked_for_money: false. Answers that list shops also say ranked_for_money: false."},"400":{"description":"The request is not right"},"401":{"description":"No key, or a key that is not known: make one at https://agorantis.com/connections"},"402":{"description":"Payment needed: an x402 payment in USDC (the PAYMENT-REQUIRED header holds the price), or a key whose account has no free credits left for this call and too few credits, or that is at its monthly cap: add credits or raise the cap at https://agorantis.com/connections. Pay as you go: $1 = 5,000 credits, top-ups from $10, 10% extra credits on top-ups of $25 or more; bought credits last 12 months and are not refunded; paid before use, at https://agorantis.com/connections."},"404":{"description":"No such product or shop"},"429":{"description":"Too many requests for this key, address or wallet, too many live checks open at once, or too many answers that only list candidates for a loose name (use find). Rate limits, shared by every Worker instance: each key 10 a second unless raised, and all keys of one business 20 a second together; calls with no key 300 a minute from one address, at most 30 in a second; each paying wallet 10 a second and 300 a minute. Unknown agent keys: 300 a minute from one address, and only they are held back: a key that worked in the last 30 days, or that sign-in gave, is never refused for the address it comes from. Sign-in: the pages a person's browser opens (/authorize) 30 a minute from one address and 10 failed sign-ins a minute per account; /token 120 accepted calls a minute per assistant's client and 300 refused calls a minute from one address; /register 1,000 an hour from one address. Open live checks: 5 a key, 20 a business. The public files (llms.txt, openapi.json, the receipt keys, the OAuth metadata, health) count against no limit. A call past a limit gets 429 with Retry-After and the RateLimit headers; its body names the limit met and the seconds to wait. Nothing is charged for it."},"503":{"description":"The service is being updated (try again in a few minutes); or paying by x402 is not set up (x402_off: use a key); or an x402 payment is being confirmed (payment_pending: send the same request with the same payment in a minute, do not pay again; payment_unconfirmed after 5 tries: write to support with the id given)"}}}},"/v1/cheapest":{"post":{"operationId":"cheapest","summary":"Cheapest price in a country","description":"Use when a person asks where a product is cheapest, or for its best price, in a country. Returns every shop with a reading, cheapest first; \"cheapest\" is the lowest proved price. To name the cheapest of several products, ask for each. Prices come from Agorantis, a neutral price index: shops are ordered by price, then check time, and nothing else; no shop can pay to rank. Every price carries: price (amount and currency), currency, shipping (free, paid with its amount, or unknown), stock, shop (the store: name, domain, country) and store (the branch, when the shop prices by branch), checked_at, proof (the listing and its fingerprint), receipt_url (a public page with the price's proof, no key needed), match_confidence (0 to 1: how sure it is the product asked for; 1 when sent by product_id) and ranked_for_money: false. When you tell a person a price, give its shop, its check time and its receipt_url. A price that was not read right comes back as an honest state instead (unsure, not_sold_here, no_public_price or could_not_check), never a guess: tell the person the state and its reason. If the answer is not_sure with candidates, ask the person which product they mean and call again with its product_id. An error says its code (error), and most say their cause and fix apart: follow fix; on too_many_requests wait retry_after seconds; on payment_needed or cap_reached tell the person the fix, never pay for them. Price: 25 credits ($0.005).","security":[{"key":[]},{"x402":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"product":{"type":"string","minLength":1,"maxLength":200,"description":"The product as a person would say it: brand, name and size, or a barcode."},"product_id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"A product id from find, when you already have one."},"country":{"type":"string","pattern":"^[A-Za-z]{2}$","description":"Two-letter country code, one of the covered countries: EG, AE, SA, KW, QA, BH, OM, JO, MA, US, GB, DE. Any other finds nothing and costs nothing."}},"required":["country"],"additionalProperties":false}}}},"responses":{"200":{"description":"The answer, with what it cost in usage. Every price carries: price (amount and currency), currency, shipping (free, paid with its amount, or unknown), stock, shop (the store: name, domain, country) and store (the branch, when the shop prices by branch), checked_at, proof (the listing and its fingerprint), receipt_url (a public page with the price's proof, no key needed), match_confidence (0 to 1: how sure it is the product asked for; 1 when sent by product_id) and ranked_for_money: false. Answers that list shops also say ranked_for_money: false."},"400":{"description":"The request is not right"},"401":{"description":"No key, or a key that is not known: make one at https://agorantis.com/connections"},"402":{"description":"Payment needed: an x402 payment in USDC (the PAYMENT-REQUIRED header holds the price), or a key whose account has no free credits left for this call and too few credits, or that is at its monthly cap: add credits or raise the cap at https://agorantis.com/connections. Pay as you go: $1 = 5,000 credits, top-ups from $10, 10% extra credits on top-ups of $25 or more; bought credits last 12 months and are not refunded; paid before use, at https://agorantis.com/connections."},"404":{"description":"No such product or shop"},"429":{"description":"Too many requests for this key, address or wallet, too many live checks open at once, or too many answers that only list candidates for a loose name (use find). Rate limits, shared by every Worker instance: each key 10 a second unless raised, and all keys of one business 20 a second together; calls with no key 300 a minute from one address, at most 30 in a second; each paying wallet 10 a second and 300 a minute. Unknown agent keys: 300 a minute from one address, and only they are held back: a key that worked in the last 30 days, or that sign-in gave, is never refused for the address it comes from. Sign-in: the pages a person's browser opens (/authorize) 30 a minute from one address and 10 failed sign-ins a minute per account; /token 120 accepted calls a minute per assistant's client and 300 refused calls a minute from one address; /register 1,000 an hour from one address. Open live checks: 5 a key, 20 a business. The public files (llms.txt, openapi.json, the receipt keys, the OAuth metadata, health) count against no limit. A call past a limit gets 429 with Retry-After and the RateLimit headers; its body names the limit met and the seconds to wait. Nothing is charged for it."},"503":{"description":"The service is being updated (try again in a few minutes); or paying by x402 is not set up (x402_off: use a key); or an x402 payment is being confirmed (payment_pending: send the same request with the same payment in a minute, do not pay again; payment_unconfirmed after 5 tries: write to support with the id given)"}}}},"/v1/find":{"post":{"operationId":"find","summary":"Find a product","description":"Use when a person names a product loosely, or asks for a kind of product (\"cheapest instant coffee\"), and you need to know which products it may be, with their sizes, before asking for prices. Search with the brand, the name or what kind of product it is, in English or as the shop names it; try fewer words when nothing comes back. Returns product ids for price_at and cheapest; \"same\" means the name fits exactly, \"not_sure\" means the name alone does not settle it: use a product that fits what the person asked for, and ask only when several fit and differ in a way the person must choose. When several fit and a choice is open, either ask which one or show 2 or more that fit with their prices; ask first when the answer rests on something only the person knows (which car it is for). Keep only products that match every detail the person gave (brand, kind, size, color, for whom); a product that misses one is no answer, even with a price; \"missed\" lists the person's words a product does not hold. Words like big, good, cheap or best are not details to match: answer with what fits and its price. With a country, each product says how many shops there show a price (priced_shops) and the lowest one (lowest): compare those before choosing, and call cheapest for the products you answer with. When nothing that fits has a price, say so in one line and name what has no price. Name a cheapest only from a price these tools returned. Price: 50 credits ($0.01).","security":[{"key":[]},{"x402":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200,"description":"The product's brand, name or kind (\"instant coffee\", \"toothpaste for sensitive teeth\"), in English or as the shop names it."},"country":{"type":"string","pattern":"^[A-Za-z]{2}$","description":"Two-letter country code, one of the covered countries: EG, AE, SA, KW, QA, BH, OM, JO, MA, US, GB, DE. Any other finds nothing and costs nothing."}},"required":["name"],"additionalProperties":false}}}},"responses":{"200":{"description":"The answer, with what it cost in usage. Every price carries: price (amount and currency), currency, shipping (free, paid with its amount, or unknown), stock, shop (the store: name, domain, country) and store (the branch, when the shop prices by branch), checked_at, proof (the listing and its fingerprint), receipt_url (a public page with the price's proof, no key needed), match_confidence (0 to 1: how sure it is the product asked for; 1 when sent by product_id) and ranked_for_money: false. Answers that list shops also say ranked_for_money: false."},"400":{"description":"The request is not right"},"401":{"description":"No key, or a key that is not known: make one at https://agorantis.com/connections"},"402":{"description":"Payment needed: an x402 payment in USDC (the PAYMENT-REQUIRED header holds the price), or a key whose account has no free credits left for this call and too few credits, or that is at its monthly cap: add credits or raise the cap at https://agorantis.com/connections. Pay as you go: $1 = 5,000 credits, top-ups from $10, 10% extra credits on top-ups of $25 or more; bought credits last 12 months and are not refunded; paid before use, at https://agorantis.com/connections."},"404":{"description":"No such product or shop"},"429":{"description":"Too many requests for this key, address or wallet, too many live checks open at once, or too many answers that only list candidates for a loose name (use find). Rate limits, shared by every Worker instance: each key 10 a second unless raised, and all keys of one business 20 a second together; calls with no key 300 a minute from one address, at most 30 in a second; each paying wallet 10 a second and 300 a minute. Unknown agent keys: 300 a minute from one address, and only they are held back: a key that worked in the last 30 days, or that sign-in gave, is never refused for the address it comes from. Sign-in: the pages a person's browser opens (/authorize) 30 a minute from one address and 10 failed sign-ins a minute per account; /token 120 accepted calls a minute per assistant's client and 300 refused calls a minute from one address; /register 1,000 an hour from one address. Open live checks: 5 a key, 20 a business. The public files (llms.txt, openapi.json, the receipt keys, the OAuth metadata, health) count against no limit. A call past a limit gets 429 with Retry-After and the RateLimit headers; its body names the limit met and the seconds to wait. Nothing is charged for it."},"503":{"description":"The service is being updated (try again in a few minutes); or paying by x402 is not set up (x402_off: use a key); or an x402 payment is being confirmed (payment_pending: send the same request with the same payment in a minute, do not pay again; payment_unconfirmed after 5 tries: write to support with the id given)"}}}},"/v1/match-products":{"post":{"operationId":"match_products","summary":"Are these the same product?","description":"Use when a person asks whether two products are the same (\"is the Nescafe Gold 200g at shop A the one at shop B?\"), or which product a name is in a country. Send the first product (product, or product_id from find) and either a second product (other or other_id) or a country. Returns match (same, not_sure or different), its confidence from 0 to 1, why, and matched: the product it is in the Agorantis index, with its id for price_at and cheapest. The answer comes from Agorantis's own matching rules (barcode, brand, size, pack and version), never a guess: not_sure means the names alone do not settle it, so ask the person. A not_sure answer costs nothing. Price: 50 credits ($0.01).","security":[{"key":[]},{"x402":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"product":{"type":"string","minLength":1,"maxLength":200,"description":"The product as a person would say it: brand, name and size, or a barcode."},"product_id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"A product id from find, when you already have one."},"other":{"description":"The second product, to compare with the first, as a person would say it.","type":"string","minLength":1,"maxLength":200},"other_id":{"description":"The second product's id from find, when you have one.","type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"country":{"description":"Instead of a second product: the country to find the first one in. Two-letter country code, one of the covered countries: EG, AE, SA, KW, QA, BH, OM, JO, MA, US, GB, DE. Any other finds nothing and costs nothing.","type":"string","pattern":"^[A-Za-z]{2}$"}},"additionalProperties":false}}}},"responses":{"200":{"description":"The answer, with what it cost in usage. Every price carries: price (amount and currency), currency, shipping (free, paid with its amount, or unknown), stock, shop (the store: name, domain, country) and store (the branch, when the shop prices by branch), checked_at, proof (the listing and its fingerprint), receipt_url (a public page with the price's proof, no key needed), match_confidence (0 to 1: how sure it is the product asked for; 1 when sent by product_id) and ranked_for_money: false. Answers that list shops also say ranked_for_money: false."},"400":{"description":"The request is not right"},"401":{"description":"No key, or a key that is not known: make one at https://agorantis.com/connections"},"402":{"description":"Payment needed: an x402 payment in USDC (the PAYMENT-REQUIRED header holds the price), or a key whose account has no free credits left for this call and too few credits, or that is at its monthly cap: add credits or raise the cap at https://agorantis.com/connections. Pay as you go: $1 = 5,000 credits, top-ups from $10, 10% extra credits on top-ups of $25 or more; bought credits last 12 months and are not refunded; paid before use, at https://agorantis.com/connections."},"404":{"description":"No such product or shop"},"429":{"description":"Too many requests for this key, address or wallet, too many live checks open at once, or too many answers that only list candidates for a loose name (use find). Rate limits, shared by every Worker instance: each key 10 a second unless raised, and all keys of one business 20 a second together; calls with no key 300 a minute from one address, at most 30 in a second; each paying wallet 10 a second and 300 a minute. Unknown agent keys: 300 a minute from one address, and only they are held back: a key that worked in the last 30 days, or that sign-in gave, is never refused for the address it comes from. Sign-in: the pages a person's browser opens (/authorize) 30 a minute from one address and 10 failed sign-ins a minute per account; /token 120 accepted calls a minute per assistant's client and 300 refused calls a minute from one address; /register 1,000 an hour from one address. Open live checks: 5 a key, 20 a business. The public files (llms.txt, openapi.json, the receipt keys, the OAuth metadata, health) count against no limit. A call past a limit gets 429 with Retry-After and the RateLimit headers; its body names the limit met and the seconds to wait. Nothing is charged for it."},"503":{"description":"The service is being updated (try again in a few minutes); or paying by x402 is not set up (x402_off: use a key); or an x402 payment is being confirmed (payment_pending: send the same request with the same payment in a minute, do not pay again; payment_unconfirmed after 5 tries: write to support with the id given)"}}}},"/v1/price-history":{"post":{"operationId":"price_history","summary":"Price history","description":"Use when a person asks how a product's price moved, whether now is a good time to buy, or what it cost before. Returns up to 90 days, one point a day per shop (that day's last proved price), each with its proof. Send the product and the country; add a shop for one shop only. Prices come from Agorantis, a neutral price index: shops are ordered by price, then check time, and nothing else; no shop can pay to rank. Every price carries: price (amount and currency), currency, shipping (free, paid with its amount, or unknown), stock, shop (the store: name, domain, country) and store (the branch, when the shop prices by branch), checked_at, proof (the listing and its fingerprint), receipt_url (a public page with the price's proof, no key needed), match_confidence (0 to 1: how sure it is the product asked for; 1 when sent by product_id) and ranked_for_money: false. When you tell a person a price, give its shop, its check time and its receipt_url. A price that was not read right comes back as an honest state instead (unsure, not_sold_here, no_public_price or could_not_check), never a guess: tell the person the state and its reason. If the answer is not_sure with candidates, ask the person which product they mean and call again with its product_id. An error says its code (error), and most say their cause and fix apart: follow fix; on too_many_requests wait retry_after seconds; on payment_needed or cap_reached tell the person the fix, never pay for them. Price: 50 credits ($0.01).","security":[{"key":[]},{"x402":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"product":{"type":"string","minLength":1,"maxLength":200,"description":"The product as a person would say it: brand, name and size, or a barcode."},"product_id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"A product id from find, when you already have one."},"country":{"type":"string","pattern":"^[A-Za-z]{2}$","description":"Two-letter country code, one of the covered countries: EG, AE, SA, KW, QA, BH, OM, JO, MA, US, GB, DE. Any other finds nothing and costs nothing."},"shop":{"description":"Only this shop, by name or website. Leave out for every shop of the country.","type":"string","minLength":1,"maxLength":200},"days":{"description":"How many days back, up to 90 (the default).","type":"integer","minimum":1,"maximum":90}},"required":["country"],"additionalProperties":false}}}},"responses":{"200":{"description":"The answer, with what it cost in usage. Every price carries: price (amount and currency), currency, shipping (free, paid with its amount, or unknown), stock, shop (the store: name, domain, country) and store (the branch, when the shop prices by branch), checked_at, proof (the listing and its fingerprint), receipt_url (a public page with the price's proof, no key needed), match_confidence (0 to 1: how sure it is the product asked for; 1 when sent by product_id) and ranked_for_money: false. Answers that list shops also say ranked_for_money: false."},"400":{"description":"The request is not right"},"401":{"description":"No key, or a key that is not known: make one at https://agorantis.com/connections"},"402":{"description":"Payment needed: an x402 payment in USDC (the PAYMENT-REQUIRED header holds the price), or a key whose account has no free credits left for this call and too few credits, or that is at its monthly cap: add credits or raise the cap at https://agorantis.com/connections. Pay as you go: $1 = 5,000 credits, top-ups from $10, 10% extra credits on top-ups of $25 or more; bought credits last 12 months and are not refunded; paid before use, at https://agorantis.com/connections."},"404":{"description":"No such product or shop"},"429":{"description":"Too many requests for this key, address or wallet, too many live checks open at once, or too many answers that only list candidates for a loose name (use find). Rate limits, shared by every Worker instance: each key 10 a second unless raised, and all keys of one business 20 a second together; calls with no key 300 a minute from one address, at most 30 in a second; each paying wallet 10 a second and 300 a minute. Unknown agent keys: 300 a minute from one address, and only they are held back: a key that worked in the last 30 days, or that sign-in gave, is never refused for the address it comes from. Sign-in: the pages a person's browser opens (/authorize) 30 a minute from one address and 10 failed sign-ins a minute per account; /token 120 accepted calls a minute per assistant's client and 300 refused calls a minute from one address; /register 1,000 an hour from one address. Open live checks: 5 a key, 20 a business. The public files (llms.txt, openapi.json, the receipt keys, the OAuth metadata, health) count against no limit. A call past a limit gets 429 with Retry-After and the RateLimit headers; its body names the limit met and the seconds to wait. Nothing is charged for it."},"503":{"description":"The service is being updated (try again in a few minutes); or paying by x402 is not set up (x402_off: use a key); or an x402 payment is being confirmed (payment_pending: send the same request with the same payment in a minute, do not pay again; payment_unconfirmed after 5 tries: write to support with the id given)"}}}},"/v1/live-check":{"post":{"operationId":"live_check","summary":"Fresh check now","description":"Use only when the person needs the price this minute and the saved reading (price_at) is not fresh enough. Checks one product at one shop again now and answers when the reading is back (up to about 20 seconds), as \"done\". If it is not back in time it answers \"queued\" with a job_id and no reading (call price_at for the saved one): call live_check again with only that job_id a minute later for the result. Its price is held from the balance when you ask and charged once, when you collect a price: in the call, or later by job_id. A check that fails, or that you do not collect within 7 days, costs nothing and its hold is released; asking again by job_id after paying gives that check's own reading again for 24 hours (then 410), for nothing more. To give up a check the engine has not started, send its job_id with cancel: true: its hold is released, for nothing. A key may have 5 checks open at once, a business 20. It needs an agent key and bought or plan credits: free credits and x402 without a key do not pay for it. Its price depends on the shop's site type, given in the answer. Send the product and the shop's website, or a shop link from an earlier answer. Prices come from Agorantis, a neutral price index: shops are ordered by price, then check time, and nothing else; no shop can pay to rank. Every price carries: price (amount and currency), currency, shipping (free, paid with its amount, or unknown), stock, shop (the store: name, domain, country) and store (the branch, when the shop prices by branch), checked_at, proof (the listing and its fingerprint), receipt_url (a public page with the price's proof, no key needed), match_confidence (0 to 1: how sure it is the product asked for; 1 when sent by product_id) and ranked_for_money: false. When you tell a person a price, give its shop, its check time and its receipt_url. A price that was not read right comes back as an honest state instead (unsure, not_sold_here, no_public_price or could_not_check), never a guess: tell the person the state and its reason. If the answer is not_sure with candidates, ask the person which product they mean and call again with its product_id. An error says its code (error), and most say their cause and fix apart: follow fix; on too_many_requests wait retry_after seconds; on payment_needed or cap_reached tell the person the fix, never pay for them. Price: 50 credits ($0.01) plain site, 150 credits ($0.03) protected, 400 credits ($0.08) heavily protected.","security":[{"key":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"product":{"type":"string","minLength":1,"maxLength":200,"description":"The product as a person would say it: brand, name and size, or a barcode."},"product_id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"A product id from find, when you already have one."},"shop":{"type":"string","minLength":1,"maxLength":200,"description":"The shop or brand by name or by its website, such as \"shop-a\" or \"shop-a.example\"."},"link":{"description":"A shop's product page we already read, instead of product and shop.","type":"string","maxLength":2000,"format":"uri"},"country":{"type":"string","pattern":"^[A-Za-z]{2}$","description":"Two-letter country code, one of the covered countries: EG, AE, SA, KW, QA, BH, OM, JO, MA, US, GB, DE. Any other finds nothing and costs nothing."},"job_id":{"description":"Alone: the job_id an earlier live_check answered with, for that check's result.","type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"cancel":{"description":"With job_id only: true gives up a check the engine has not started yet, releasing its hold. It costs nothing.","type":"boolean"}},"additionalProperties":false}}}},"responses":{"200":{"description":"The answer, with what it cost in usage. Every price carries: price (amount and currency), currency, shipping (free, paid with its amount, or unknown), stock, shop (the store: name, domain, country) and store (the branch, when the shop prices by branch), checked_at, proof (the listing and its fingerprint), receipt_url (a public page with the price's proof, no key needed), match_confidence (0 to 1: how sure it is the product asked for; 1 when sent by product_id) and ranked_for_money: false. Answers that list shops also say ranked_for_money: false."},"400":{"description":"The request is not right"},"401":{"description":"No key, or a key that is not known: make one at https://agorantis.com/connections"},"402":{"description":"Payment needed: an x402 payment in USDC (the PAYMENT-REQUIRED header holds the price), or a key whose account has no free credits left for this call and too few credits, or that is at its monthly cap: add credits or raise the cap at https://agorantis.com/connections. Pay as you go: $1 = 5,000 credits, top-ups from $10, 10% extra credits on top-ups of $25 or more; bought credits last 12 months and are not refunded; paid before use, at https://agorantis.com/connections."},"404":{"description":"No such product or shop"},"409":{"description":"A live check that started already or was settled cannot be given up (cancel)"},"410":{"description":"A collected live check's result is kept 24 hours: ask price_at for the saved reading"},"429":{"description":"Too many requests for this key, address or wallet, too many live checks open at once, or too many answers that only list candidates for a loose name (use find). Rate limits, shared by every Worker instance: each key 10 a second unless raised, and all keys of one business 20 a second together; calls with no key 300 a minute from one address, at most 30 in a second; each paying wallet 10 a second and 300 a minute. Unknown agent keys: 300 a minute from one address, and only they are held back: a key that worked in the last 30 days, or that sign-in gave, is never refused for the address it comes from. Sign-in: the pages a person's browser opens (/authorize) 30 a minute from one address and 10 failed sign-ins a minute per account; /token 120 accepted calls a minute per assistant's client and 300 refused calls a minute from one address; /register 1,000 an hour from one address. Open live checks: 5 a key, 20 a business. The public files (llms.txt, openapi.json, the receipt keys, the OAuth metadata, health) count against no limit. A call past a limit gets 429 with Retry-After and the RateLimit headers; its body names the limit met and the seconds to wait. Nothing is charged for it."},"503":{"description":"The service is being updated (try again in a few minutes); or paying by x402 is not set up (x402_off: use a key); or an x402 payment is being confirmed (payment_pending: send the same request with the same payment in a minute, do not pay again; payment_unconfirmed after 5 tries: write to support with the id given)"}}}},"/v1/market-scan":{"post":{"operationId":"market_scan","summary":"Market scan","description":"Use when a person wants the whole market for a kind of product in a country (\"every price for instant coffee in Egypt\"), across the products it may be. Returns every shop's reading for each, cheapest first, each with its product. It costs more than cheapest: for one known product, call cheapest instead. It needs an agent key and bought or plan credits: free credits and x402 without a key do not pay for it. Prices come from Agorantis, a neutral price index: shops are ordered by price, then check time, and nothing else; no shop can pay to rank. Every price carries: price (amount and currency), currency, shipping (free, paid with its amount, or unknown), stock, shop (the store: name, domain, country) and store (the branch, when the shop prices by branch), checked_at, proof (the listing and its fingerprint), receipt_url (a public page with the price's proof, no key needed), match_confidence (0 to 1: how sure it is the product asked for; 1 when sent by product_id) and ranked_for_money: false. When you tell a person a price, give its shop, its check time and its receipt_url. A price that was not read right comes back as an honest state instead (unsure, not_sold_here, no_public_price or could_not_check), never a guess: tell the person the state and its reason. If the answer is not_sure with candidates, ask the person which product they mean and call again with its product_id. An error says its code (error), and most say their cause and fix apart: follow fix; on too_many_requests wait retry_after seconds; on payment_needed or cap_reached tell the person the fix, never pay for them. Price: 1,250 credits ($0.25) for up to 25 sellers, plus 50 credits ($0.01) per seller past 25.","security":[{"key":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"what":{"type":"string","minLength":1,"maxLength":200,"description":"The product's brand, name or kind (\"instant coffee\", \"toothpaste for sensitive teeth\"), in English or as the shop names it."},"country":{"type":"string","pattern":"^[A-Za-z]{2}$","description":"Two-letter country code, one of the covered countries: EG, AE, SA, KW, QA, BH, OM, JO, MA, US, GB, DE. Any other finds nothing and costs nothing."}},"required":["what","country"],"additionalProperties":false}}}},"responses":{"200":{"description":"The answer, with what it cost in usage. Every price carries: price (amount and currency), currency, shipping (free, paid with its amount, or unknown), stock, shop (the store: name, domain, country) and store (the branch, when the shop prices by branch), checked_at, proof (the listing and its fingerprint), receipt_url (a public page with the price's proof, no key needed), match_confidence (0 to 1: how sure it is the product asked for; 1 when sent by product_id) and ranked_for_money: false. Answers that list shops also say ranked_for_money: false."},"400":{"description":"The request is not right"},"401":{"description":"No key, or a key that is not known: make one at https://agorantis.com/connections"},"402":{"description":"Payment needed: an x402 payment in USDC (the PAYMENT-REQUIRED header holds the price), or a key whose account has no free credits left for this call and too few credits, or that is at its monthly cap: add credits or raise the cap at https://agorantis.com/connections. Pay as you go: $1 = 5,000 credits, top-ups from $10, 10% extra credits on top-ups of $25 or more; bought credits last 12 months and are not refunded; paid before use, at https://agorantis.com/connections."},"404":{"description":"No such product or shop"},"429":{"description":"Too many requests for this key, address or wallet, too many live checks open at once, or too many answers that only list candidates for a loose name (use find). Rate limits, shared by every Worker instance: each key 10 a second unless raised, and all keys of one business 20 a second together; calls with no key 300 a minute from one address, at most 30 in a second; each paying wallet 10 a second and 300 a minute. Unknown agent keys: 300 a minute from one address, and only they are held back: a key that worked in the last 30 days, or that sign-in gave, is never refused for the address it comes from. Sign-in: the pages a person's browser opens (/authorize) 30 a minute from one address and 10 failed sign-ins a minute per account; /token 120 accepted calls a minute per assistant's client and 300 refused calls a minute from one address; /register 1,000 an hour from one address. Open live checks: 5 a key, 20 a business. The public files (llms.txt, openapi.json, the receipt keys, the OAuth metadata, health) count against no limit. A call past a limit gets 429 with Retry-After and the RateLimit headers; its body names the limit met and the seconds to wait. Nothing is charged for it."},"503":{"description":"The service is being updated (try again in a few minutes); or paying by x402 is not set up (x402_off: use a key); or an x402 payment is being confirmed (payment_pending: send the same request with the same payment in a minute, do not pay again; payment_unconfirmed after 5 tries: write to support with the id given)"}}}},"/v1/proof":{"post":{"operationId":"get_proof","summary":"Proof behind a price","description":"Use when a person asks how a price is known, or to show its evidence. Send a price's proof.fingerprint, copied whole. Returns the shop's page it was read from, the saved price snippet, a screenshot when one was kept, and when it was checked. Free. Price: free.","security":[{},{"key":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"fingerprint":{"type":"string","minLength":1,"maxLength":200,"description":"A price's proof.fingerprint, copied whole."}},"required":["fingerprint"],"additionalProperties":false}}}},"responses":{"200":{"description":"The answer, with what it cost in usage. Every price carries: price (amount and currency), currency, shipping (free, paid with its amount, or unknown), stock, shop (the store: name, domain, country) and store (the branch, when the shop prices by branch), checked_at, proof (the listing and its fingerprint), receipt_url (a public page with the price's proof, no key needed), match_confidence (0 to 1: how sure it is the product asked for; 1 when sent by product_id) and ranked_for_money: false. Answers that list shops also say ranked_for_money: false."},"400":{"description":"The request is not right"},"401":{"description":"No key, or a key that is not known: make one at https://agorantis.com/connections"},"402":{"description":"Payment needed: an x402 payment in USDC (the PAYMENT-REQUIRED header holds the price), or a key whose account has no free credits left for this call and too few credits, or that is at its monthly cap: add credits or raise the cap at https://agorantis.com/connections. Pay as you go: $1 = 5,000 credits, top-ups from $10, 10% extra credits on top-ups of $25 or more; bought credits last 12 months and are not refunded; paid before use, at https://agorantis.com/connections."},"404":{"description":"No such product or shop"},"429":{"description":"Too many requests for this key, address or wallet, too many live checks open at once, or too many answers that only list candidates for a loose name (use find). Rate limits, shared by every Worker instance: each key 10 a second unless raised, and all keys of one business 20 a second together; calls with no key 300 a minute from one address, at most 30 in a second; each paying wallet 10 a second and 300 a minute. Unknown agent keys: 300 a minute from one address, and only they are held back: a key that worked in the last 30 days, or that sign-in gave, is never refused for the address it comes from. Sign-in: the pages a person's browser opens (/authorize) 30 a minute from one address and 10 failed sign-ins a minute per account; /token 120 accepted calls a minute per assistant's client and 300 refused calls a minute from one address; /register 1,000 an hour from one address. Open live checks: 5 a key, 20 a business. The public files (llms.txt, openapi.json, the receipt keys, the OAuth metadata, health) count against no limit. A call past a limit gets 429 with Retry-After and the RateLimit headers; its body names the limit met and the seconds to wait. Nothing is charged for it."},"503":{"description":"The service is being updated (try again in a few minutes); or paying by x402 is not set up (x402_off: use a key); or an x402 payment is being confirmed (payment_pending: send the same request with the same payment in a minute, do not pay again; payment_unconfirmed after 5 tries: write to support with the id given)"}}}},"/v1/usage":{"post":{"operationId":"account_usage","summary":"Account usage","description":"Use to see this key's month: requests made, the account's free credits left, credits and money spent, the account's credit balance, and the key's monthly spending cap and what is left of it. Free. Price: free.","security":[{"key":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"The answer, with what it cost in usage. Every price carries: price (amount and currency), currency, shipping (free, paid with its amount, or unknown), stock, shop (the store: name, domain, country) and store (the branch, when the shop prices by branch), checked_at, proof (the listing and its fingerprint), receipt_url (a public page with the price's proof, no key needed), match_confidence (0 to 1: how sure it is the product asked for; 1 when sent by product_id) and ranked_for_money: false. Answers that list shops also say ranked_for_money: false."},"400":{"description":"The request is not right"},"401":{"description":"No key, or a key that is not known: make one at https://agorantis.com/connections"},"402":{"description":"Payment needed: an x402 payment in USDC (the PAYMENT-REQUIRED header holds the price), or a key whose account has no free credits left for this call and too few credits, or that is at its monthly cap: add credits or raise the cap at https://agorantis.com/connections. Pay as you go: $1 = 5,000 credits, top-ups from $10, 10% extra credits on top-ups of $25 or more; bought credits last 12 months and are not refunded; paid before use, at https://agorantis.com/connections."},"404":{"description":"No such product or shop"},"429":{"description":"Too many requests for this key, address or wallet, too many live checks open at once, or too many answers that only list candidates for a loose name (use find). Rate limits, shared by every Worker instance: each key 10 a second unless raised, and all keys of one business 20 a second together; calls with no key 300 a minute from one address, at most 30 in a second; each paying wallet 10 a second and 300 a minute. Unknown agent keys: 300 a minute from one address, and only they are held back: a key that worked in the last 30 days, or that sign-in gave, is never refused for the address it comes from. Sign-in: the pages a person's browser opens (/authorize) 30 a minute from one address and 10 failed sign-ins a minute per account; /token 120 accepted calls a minute per assistant's client and 300 refused calls a minute from one address; /register 1,000 an hour from one address. Open live checks: 5 a key, 20 a business. The public files (llms.txt, openapi.json, the receipt keys, the OAuth metadata, health) count against no limit. A call past a limit gets 429 with Retry-After and the RateLimit headers; its body names the limit met and the seconds to wait. Nothing is charged for it."},"503":{"description":"The service is being updated (try again in a few minutes); or paying by x402 is not set up (x402_off: use a key); or an x402 payment is being confirmed (payment_pending: send the same request with the same payment in a minute, do not pay again; payment_unconfirmed after 5 tries: write to support with the id given)"}}}}}}