Pay per call, with no account

Pay per call with a wallet and no account. The first answer from a metered route is a quote: HTTP 402 with the price, every way to pay, and what the payment buys. The quote costs nothing (X-Assay-Quote: 1 asks for it without spending a free sample). Pay, and the answer comes back with a receipt you can check without trusting us.

2calls answered
1receipt re-hashed
0records verified
$0.005list price for a stranger
323ms end to end
delivered

Run 2026-10-11 05:26 UTC against api.s2ar.dev 0.1.1 · 2 calls · 323 ms · list price $0.005 for a stranger (these ran on the operator's key and cost nothing) · every number on this page re-derived by tools/walkthrough.py before it was written

1. The quote: HTTP 402

Everything an agent needs to decide is in the body: the price, the rails, the evidence it will get, the refund rule, and where the rules and the record of how we kept them live.

curl -s -X POST 'https://api.s2ar.dev/v1/sym/read' \
  -H 'X-Assay-Quote: 1' \
  -H 'content-type: application/json' \
  -d '{"repo": "https://github.com/BurntSushi/ripgrep", "ref": "14.1.1", "file": "crates/core/flags/defs.rs", "symbol": "Glob as Flag"}'

→ HTTP 402 · 147 ms

price_usd0.005
rails["x402", "credits"]
accepts.0.schemeexact
accepts.0.networkbase
accepts.0.asset0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913
accepts.0.maxAmountRequired5000
accepts.0.payTo0x2c4938626788e8e4fd803bfd1353eca64c1b5452
accepts.0.extra{"name": "USD Coin", "version": "2"}
evidenceassay
determinismreplayable
witnesses[]
expected_latency_ms400
refund_rulea paid call that is not delivered is credited automatically and counted in the proceedings
free.per_day_keyless10
charterhttps://api.s2ar.dev/charter
proceedingshttps://api.s2ar.dev/.well-known/proceedings.json
the answer, as JSON
{
  "price_usd": 0.005,
  "rails": [
    "x402",
    "credits"
  ],
  "accepts.0.scheme": "exact",
  "accepts.0.network": "base",
  "accepts.0.asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
  "accepts.0.maxAmountRequired": "5000",
  "accepts.0.payTo": "0x2c4938626788e8e4fd803bfd1353eca64c1b5452",
  "accepts.0.extra": {
    "name": "USD Coin",
    "version": "2"
  },
  "evidence": "assay",
  "determinism": "replayable",
  "witnesses": [],
  "expected_latency_ms": 400,
  "refund_rule": "a paid call that is not delivered is credited automatically and counted in the proceedings",
  "free.per_day_keyless": 10,
  "charter": "https://api.s2ar.dev/charter",
  "proceedings": "https://api.s2ar.dev/.well-known/proceedings.json"
}

2. The paid answer and its receipt

The receipt’s evidence_hash is sha256 over the canonical answer (sorted keys, compact), so the buyer can recompute it from what they received. The generator did, below.

curl -s -X POST 'https://api.s2ar.dev/v1/sym/read' \
  -H "Authorization: Bearer $S2AR_KEY" \
  -H 'content-type: application/json' \
  -d '{"repo": "https://github.com/BurntSushi/ripgrep", "ref": "14.1.1", "file": "crates/core/flags/defs.rs", "symbol": "Glob as Flag"}'

→ HTTP 200 · 176 ms · list price $0.005 · receipt sha256:598d5e19ec2bace6…

tokens_est565
receipt.evidence_hashsha256:598d5e19ec2bace6…
receipt.whatread
receipt.determinismreplayable
receipt.witnesses[]
receipt.refund_rulea paid call that is not delivered is credited automatically and counted in the proceedings
x-assay-receiptsha256:598d5e19ec2bace6…
the answer, as JSON
{
  "tokens_est": 565,
  "receipt.evidence_hash": "sha256:598d5e19ec2bace68778add369e74f054ca7dc43c2583e0e1e0c4cbefa58a832",
  "receipt.what": "read",
  "receipt.determinism": "replayable",
  "receipt.witnesses": [],
  "receipt.refund_rule": "a paid call that is not delivered is credited automatically and counted in the proceedings",
  "x-assay-receipt": "sha256:598d5e19ec2bace68778add369e74f054ca7dc43c2583e0e1e0c4cbefa58a832"
}
re-derived by the generator
✓receipt sha256:598d5e19ec2bace6… re-derived: sha256 over the canonical answer, header and body agree

The quote lists only the rails that can settle right now. When the x402 rail is open it adds an x402 offer: USDC on Base, in both protocol versions (the v1 JSON body and the v2 PAYMENT-REQUIRED header), with the token’s signing domain, settled through Coinbase’s facilitator only after the answer exists. Directories and facilitators probe the /x402/… mirror of each route, which answers every unpaid request with this quote. Credits (a key bought once, good on every s2ar route) work today; from $0.50, so does Stripe’s Machine Payments Protocol.

What this cannot buy

From the signed proceedings (/.well-known/proceedings.json), verbatim:

Failed calls are never charged. Nothing about a caller is kept. The rules: the charter.