Vai al contenuto
For developers and agents

Your first call in a minute

Ask for a product's price at real shops and get each price with its proof, its check time and a receipt anyone can check. Nothing is ranked for money.

1. Get a free key

New accounts get 25,000 free credits a month, enough for about 1,000 price answers, no card. One key works for the API and for MCP, with a monthly spending cap you set.

Sign up free and get a key

No account? Pay per call with x402: call with no key, read the price in the 402 answer, sign the USDC payment and send the same call again. Live checks and market scans need a key.

2. Make the call

Put your key in AGORANTIS_KEY, then:

curl -X POST https://api.agorantis.com/v1/cheapest \ -H "Authorization: Bearer $AGORANTIS_KEY" \ -H "content-type: application/json" \ -d '{"product":"Nescafe Gold 200g","country":"EG"}'

3. Or connect your AI over MCP

The MCP address is https://mcp.agorantis.com/mcp. Claude and ChatGPT sign in with your Agorantis account, so no key is pasted.

Claude

In Claude, open Customize, then Connectors, press + Add, then Add custom connector, paste the address and press Add. Then sign in.

https://mcp.agorantis.com/mcp

Claude Code

claude mcp add --transport http agorantis https://mcp.agorantis.com/mcp

ChatGPT

In ChatGPT, open Plugins, press +, choose Add custom MCP server, name it Agorantis, paste the address and press Create. Then sign in.

https://mcp.agorantis.com/mcp

Any MCP client, with a key

{ "mcpServers": { "agorantis": { "type": "http", "url": "https://mcp.agorantis.com/mcp", "headers": { "Authorization": "Bearer YOUR_AGORANTIS_KEY" } } } }

Cursor, VS Code, Gemini and more, one press each: connect your AI.

What a real answer looks like

Shops come cheapest first, then by check time, and nothing else. Every price carries its currency, shipping (or unknown), stock, its shop, checked_at, a receipt_url anyone can open, match_confidence and ranked_for_money: false. A shop with no price says why instead, never a guess.

{
  "ok": true,
  "product": {
    "id": 1042,
    "name": "Nescafe Gold Instant Coffee 200g",
    "brand": "Nescafe",
    "size": "200g"
  },
  "results": [
    {
      "state": "priced",
      "shop": {
        "name": "Shop A",
        "domain": "shop-a.example",
        "country": "EG"
      },
      "address": "https://shop-a.example/nescafe-gold-200g",
      "price": {
        "minor": 39500,
        "amount": "395.00",
        "currency": "EGP",
        "was_minor": 42000,
        "from": false
      },
      "currency": "EGP",
      "shipping": {
        "state": "free",
        "minor": 0,
        "amount": "0.00"
      },
      "stock": "in_stock",
      "checked_at": "2026-11-15T07:41:00.000Z",
      "proof": {
        "listing": "https://shop-a.example/nescafe-gold-200g",
        "fingerprint": "pf_8c41e2",
        "snippet": "EGP 395.00",
        "checked_at": "2026-11-15T07:41:00.000Z"
      },
      "receipt": {
        "v": "0.1",
        "key_id": "21fe31dfa154a261",
        "issued_at": "2026-11-15T09:12:03.000Z",
        "read": "page",
        "sig": "kOiq03shA3BWL9XCt0m26hHYS68zfzVI5YyHpJXLHXUS3mSA86vP_vaTX1dx9W-oTCfm85zsof5aKoBqLw5tBA"
      },
      "receipt_url": "https://api.agorantis.com/receipt/pf_8c41e2",
      "match_confidence": 0.9,
      "ranked_for_money": false,
      "store": null,
      "fresh": false,
      "fresh_check": "not_available",
      "why": "read from the shop's own page; last checked 2026-11-15T07:41:00.000Z; call live_check for a fresh check of this shop"
    },
    {
      "state": "not_sold_here",
      "shop": {
        "name": "Shop B",
        "domain": "shop-b.example",
        "country": "EG"
      },
      "address": "https://shop-b.example/search?q=nescafe+gold",
      "price": null,
      "currency": null,
      "shipping": {
        "state": "unknown",
        "minor": null,
        "amount": null
      },
      "stock": "not_shown",
      "checked_at": "2026-11-15T06:58:00.000Z",
      "proof": null,
      "receipt_url": null,
      "match_confidence": 0.9,
      "ranked_for_money": false,
      "store": null,
      "fresh": false,
      "fresh_check": "not_available",
      "why": "the shop's own search does not list it; last checked 2026-11-15T06:58:00.000Z; call live_check for a fresh check of this shop"
    }
  ],
  "cheapest": {
    "state": "priced",
    "shop": {
      "name": "Shop A",
      "domain": "shop-a.example",
      "country": "EG"
    },
    "address": "https://shop-a.example/nescafe-gold-200g",
    "price": {
      "minor": 39500,
      "amount": "395.00",
      "currency": "EGP",
      "was_minor": 42000,
      "from": false
    },
    "currency": "EGP",
    "shipping": {
      "state": "free",
      "minor": 0,
      "amount": "0.00"
    },
    "stock": "in_stock",
    "checked_at": "2026-11-15T07:41:00.000Z",
    "proof": {
      "listing": "https://shop-a.example/nescafe-gold-200g",
      "fingerprint": "pf_8c41e2",
      "snippet": "EGP 395.00",
      "checked_at": "2026-11-15T07:41:00.000Z"
    },
    "receipt": {
      "v": "0.1",
      "key_id": "21fe31dfa154a261",
      "issued_at": "2026-11-15T09:12:03.000Z",
      "read": "page",
      "sig": "kOiq03shA3BWL9XCt0m26hHYS68zfzVI5YyHpJXLHXUS3mSA86vP_vaTX1dx9W-oTCfm85zsof5aKoBqLw5tBA"
    },
    "receipt_url": "https://api.agorantis.com/receipt/pf_8c41e2",
    "match_confidence": 0.9,
    "ranked_for_money": false,
    "store": null,
    "fresh": false,
    "fresh_check": "not_available",
    "why": "read from the shop's own page; last checked 2026-11-15T07:41:00.000Z; call live_check for a fresh check of this shop"
  },
  "ranked_for_money": false,
  "usage": {
    "free": true,
    "price_credits": 25,
    "price_usd": "0.005",
    "credits": 25,
    "charged": true
  }
}

When you show a price, give its shop, its check time and its receipt_url. A saved price is never live: say when it was checked. Check a signed receipt at agorantis.com/receipts.

Prices in plain units

One saved price = USD 0.005 = 25 credits. A call that finds nothing costs nothing.

ToolCreditsUS dollarsNo account (x402)
price_atA product at a shop you name250.0050.005
cheapestA product across every shop of a country, cheapest first250.0050.005
findWhich products a name may be, with sizes and ids500.010.01
match_productsWhether two products are the same (not sure is free)500.010.01
price_historyUp to 90 days, a point a day per shop500.010.01
live_checkOne product at one shop, checked again now50+0.01+Key only
market_scanEvery shop of a country for a kind of product1,250+0.25+Key only
get_proofThe proof behind a price, no key neededFreeFreeFree
account_usageThis key's month and balanceFreeFreeKey only

live_check: 50, 150 or 400 credits, by how hard the shop's site is to read.

market_scan: 1,250 credits for up to 25 sellers, then 50 credits a seller.

With no key, a call answers 402 with its price and the USDC payment to sign. Send the same call again with the payment. Live checks and market scans need a key.

What the 402 answer looks like

HTTP/1.1 402 Payment Required
PAYMENT-REQUIRED: <the same requirements, as base64 JSON>

{
  "ok": false,
  "error": "payment_required",
  "cause": "This call needs a payment or an agent key.",
  "fix": "Pay $0.005 in USDC by x402 (the requirements are in accepts) and send the call again, or make an agent key at https://agorantis-app.eyad-172.workers.dev/connections and send it as \"Authorization: Bearer <key>\".",
  "message": "This call needs a payment or an agent key. Pay $0.005 in USDC by x402 (the requirements are in accepts) and send the call again, or make an agent key at https://agorantis-app.eyad-172.workers.dev/connections and send it as \"Authorization: Bearer <key>\".",
  "price": {
    "credits": 25,
    "usd": "0.005",
    "usdc_base_units": "5000"
  },
  "x402Version": 2,
  "resource": {
    "url": "https://mcp.agorantis.com/mcp#cheapest",
    "description": "Agorantis cheapest, $0.005",
    "mimeType": "application/json"
  },
  "accepts": [
    {
      "scheme": "exact",
      "network": "eip155:8453",
      "amount": "5000",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "payTo": "<our wallet>",
      "maxTimeoutSeconds": 60,
      "extra": {
        "name": "USD Coin",
        "version": "2"
      }
    }
  ]
}

When something is wrong

Every error is { ok: false, error, message }, the same over HTTP and MCP; these also carry cause and fix apart. Nothing is charged for an error.

  • too_many_requests: A rate limit. Wait retry_after seconds (also the Retry-After header), then send the same call.
  • payment_needed: Out of credits. Add credits at agorantis.com/connections; the answer names the price.
  • cap_reached: The key's monthly spending cap is met. Raise it at agorantis.com/connections, or wait for next month.
  • payment_required: No key, paying by x402: pay the price in accepts and send the same call again.
  • bad_input: The request is not right. cause says what, fix says what to send.

Read more