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.
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"}'
| 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 |
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"}'
| tokens_est | 565 |
|---|---|
| receipt.evidence_hash | sha256:598d5e19ec2bace6… |
| 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: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:
- placement or routing position
- a different verdict or grade
- buyer data
- amendment access
- a revocation
Failed calls are never charged. Nothing about a caller is kept. The rules: the charter.