Every agent payment rail,
one ledger.
askReceipts records what autonomous agents buy — over anypayment rail — and what people upload by hand, all in one receipt ledger. The rail changes; the receipt doesn't. The two stores below settle on different rails to prove it.
buy_resourcesave_receiptTwo sources, one book: an agent's buy_resource call pays a store and files the receipt; a person scans or forwards theirs. Both land in the same ledger — get_spending_summary and ask_receipts answer across every source.
AgentEats
get_menubuy_resourceExercises the x402 rail — an open, HTTP-native payment standard. The agent hits a paid order, gets a 402 quoting the price, signs a payment authorization, and a facilitator settles it on Base Sepolia. The payer never spends gas. askReceipts files the purchase tagged paymentRail: x402.
HTTP/1.1 402 Payment Required
Payment-Required: <base64url>
{ "x402Version": 2, "accepts": [{
"scheme": "exact",
"network": "eip155:84532",
"amount": "3490000"
}] }AgentBrew
get_menubuy_resourceExercises MPP — Stripe and Tempo's Machine Payments Protocol. The agent gets a 402 carrying a WWW-Authenticate: Payment challenge, then settles a stablecoin transfer directly on Tempo's Moderato testnet. Same buy_resource, same receipt shape — askReceipts files it tagged paymentRail: tempo.
HTTP/1.1 402 Payment Required WWW-Authenticate: Payment method="tempo", intent="charge", request="…chainId:42431, pathUSD…"
Proof of Spend
adapter mergedbuyer not wired yetA third-party seller, and the first rail here that is not EVM. The same x402 handshake, but the challenge names a Hedera account id (0.0.10407798) rather than an 0x address, prices in tinybar, and carries a feePayer — so the buyer signs a partially-signed transfer and the facilitator pays the gas and submits. Our rail adapter and funding provider are merged and tested against this exact challenge; apps/buyer does not register a hedera provider yet, so no purchase has been filed. Built by Andres Bodero at ETHOnline 2026, where the same store anchors its spend decisions to HCS before the money moves.
HTTP/1.1 402 Payment Required
Payment-Required: <base64>
{ "x402Version": 2, "accepts": [{
"scheme": "exact",
"network": "hedera:testnet",
"amount": "15000000",
"asset": "0.0.0",
"payTo": "0.0.10407798",
"extra": { "feePayer": "0.0.7162784" }
}] }People write to the same ledger
askReceipts isn't only a machine-payment ledger. People add their own receipts directly — snap a photo or PDF, or forward an email receipt to a personal inbox address. Those land in the same ledgerthe agents write to, so a person's coffee receipt and an agent's on-chain purchase sit side by side — get_spending_summary and ask_receipts answer across both.
The first two are rails: each drops in as one adapter behind the same buy_resource, and the receipt askReceipts files is identical. The last two are not rails — AP2 authorizes a purchase without moving money, and ACP replaces the 402handshake with a checkout session, so each attaches somewhere different. What holds across all four is the part that matters: the store and the protocol change; the ledger doesn't.
Get set up to pay
Four steps to a working ledger, a funded test wallet, and an agent that can spend from it. Both rails run on EVM testnets, so one wallet address works on Base Sepolia and Tempo alike — a receiving wallet needs nothing; only the buyer needs funds.
- 1Sign up for askReceipts
Create your ledger account — it's where receipts land, and where you mint an agent key so an agent can file on your behalf.
- 2Create a test wallet
Any EVM wallet works — the same
0x…address is a valid recipient on both chains. - 3Add faucet funds
Fund the buyer wallet on each testnet. On Base Sepolia the x402 payer spends no gas, so testnet USDC alone is enough.
- 4Request the buyer, then buy something
The sample buyer is a small MCP server you run locally. It holds your keys on your machine — nothing is hosted, and it refuses to start against anything but a testnet.
The repository is private for nowwhile it's being finished. Ask for access and we'll add you — tell us briefly what you want to try, it helps us prioritise.
Once you're in:
git clone https://github.com/abodero/payment-rails-buyer cd payment-rails-buyer && npm ci
needs Node ≥ 20.19.2 and npm ≥ 11.10.0 · npm ci also builds dist/buyer.mjs Point your MCP client at it —
.mcp.jsonfor Claude Code,claude_desktop_config.jsonfor Claude Desktop — then start a new session, since MCP servers load at session start.{ "mcpServers": { "commerce": { "command": "node", "args": ["/absolute/path/to/payment-rails-buyer/dist/buyer.mjs"], "env": { "ASKRECEIPTS_AGENT_KEY": "ar_agent_live_...", "EVM_PRIVATE_KEY": "0x...", "MPP_BUYER_KEY": "0x...", "EVM_RPC_URL": "https://sepolia.base.org" } }}}all four are required · keys live here, never in a chat Then ask your agent: “show me the AgentBrew menu, buy a flat white, then tell me what I've spent.” Buy from AgentEats too — that settles over the other rail — and ask again. Both receipts come back in one shape. That is the whole point.