{
 "name": "Tanod charge policy",
 "version": "2026-10-13",
 "human_page": "https://tanod.dev/payments/",
 "applies_to": "every paid Tanod HTTP route and MCP tool",
 "unit": "one call; the price is fixed per route",
 "price_sources": [
  "the route's 402 response (accepts[].amount)",
  "https://tanod.dev/openapi.json",
  "https://tanod.dev/pricing/"
 ],
 "payment": {
  "protocol": "x402 v2",
  "scheme": "exact",
  "accepts_order": [
   {
    "network": "eip155:8453",
    "chain": "Base",
    "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
    "token": "USDC"
   },
   {
    "network": "eip155:137",
    "chain": "Polygon",
    "asset": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
    "token": "USDC"
   },
   {
    "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
    "chain": "Solana",
    "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "token": "USDC",
    "fee_paid_by": "seller"
   },
   {
    "network": "eip155:56",
    "chain": "BNB Chain",
    "asset": "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d",
    "token": "Binance-Peg USDC",
    "transfer_method": "permit2"
   },
   {
    "network": "eip155:42161",
    "chain": "Arbitrum",
    "asset": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
    "token": "USDC"
   }
  ],
  "same_price_on_every_network": true,
  "mpp": {
   "protocol": "MPP (Machine Payments Protocol, https://mpp.dev)",
   "offered": "on every priced route, in the same 402 as the x402 options, as the header WWW-Authenticate: Payment",
   "method": "tempo",
   "intent": "charge",
   "mode": "push",
   "how": "send the transfer on Tempo first (TIP-20 transferWithMemo with the challenge's memo), then present its transaction hash",
   "chain": "Tempo",
   "chain_id": 4217,
   "asset": "0x20C000000000000000000000b9537d11c60E8b50",
   "token": "USDC.e",
   "same_price_as_x402": true,
   "credential": "Authorization: Payment <base64url JSON with the challenge and payload.hash>",
   "receipt_header": "Payment-Receipt",
   "charge": "same policy as x402: a transaction hash is marked used only when the call returns HTTP 200, so a call that returns no answer can be retried with the same credential until its challenge expires",
   "guide": "https://tanod.dev/learn/pay-api-with-mpp-tempo.html"
  }
 },
 "mcp_payment": {
  "payment_required": "the tool returns an error result whose structuredContent is the x402 PaymentRequired object; _meta[\"x402/error\"] carries it too",
  "send_payment_in": "_meta[\"x402/payment\"]",
  "payment_encodings": [
   "JSON object",
   "base64-encoded JSON"
  ],
  "human_page": "https://tanod.dev/payments/#mcp"
 },
 "charged": "only when the call returns HTTP 200 (an answer, including a not-found answer where the route treats that as an answer)",
 "not_charged": [
  "any 5xx, or error codes such as busy, timeout, rpc_unavailable, response_too_large",
  "429 rate limited, or our connection to an upstream failed",
  "any 4xx bad input, for example 422 invalid or blocked input, 413 too large, 415 unsupported format",
  "a news search (/v1/news/search, MCP news_search) that finds nothing: count 0 and no articles; the free use is given back"
 ],
 "free_use_returned_when_not_charged": true,
 "retries": "a call that was not charged never settled its payment, so it can be retried at once without paying twice; resending the same signed payment cannot settle twice, but a new signature for a retry after a client-side timeout is a second payment unless the client sends an x402 payment ID (see payment_identifier), so set the client timeout to at least 90 s (https://tanod.dev/payments/#client-timeout)",
 "payment_identifier": "If a client sends an x402 payment ID, a retry with the same ID within 1 hour is never charged twice. Most routes return the kept answer (header Idempotent-Replayed: true; over MCP _meta[\"tanod/idempotent-replayed\"]) and delete it after the hour. Routes that never store what they are sent (PDF, image, ML and text tools) keep no answer and return 409 payment_identifier_not_kept; a new ID buys the answer again. The same ID with another request or payer returns 409 payment_identifier_conflict, with nothing charged.",
 "receipt": {
  "header": "PAYMENT-RESPONSE (also X-PAYMENT-RESPONSE)",
  "fields": [
   "network",
   "payer",
   "transaction hash"
  ]
 },
 "test_payment": {
  "method": "POST",
  "url": "https://tanod.dev/v1/x402/pay-test",
  "body": {},
  "price_usd": 0.001
 },
 "results": "automated and heuristic; see https://tanod.dev/terms/",
 "wrong_answer": {
  "report_to": "ops@tanod.dev",
  "include": [
   "transaction hash",
   "route or tool",
   "what was wrong"
  ],
  "refunds": false,
  "remedy": "reports are read, fixed where possible and counted publicly",
  "public_count": "https://tanod.dev/learn/x402-seller-revenue-ledger.html",
  "human_page": "https://tanod.dev/payments/#wrong-answer"
 },
 "contact": "ops@tanod.dev (send the route or tool, the time in UTC and the transaction hash)",
 "spec_check": {
  "date": "2026-10-12",
  "what": "every priced operation in /openapi.json was called once with no payment",
  "priced_operations": 231,
  "answered_402": 231,
  "served_free": 0,
  "other": 0
 },
 "release": "the answer is sent only after the payment has settled; if settlement fails the call returns 402 (or 503 when the facilitator is unavailable) and no answer is released"
}