Receipts
One receipt for every outgoing USDC transfer of a company wallet, with the seller, what was bought, the agent that paid and a EUR value.
The chain says how much was paid and to which address. A receipt adds who is behind that address, what was bought, which agent paid and what it was worth in EUR.
What becomes a receipt
Every outgoing USDC transfer on Base from a confirmed wallet of the company, reported or not. The receipt belongs to the company and names the agent that operated the wallet when it paid. Payments from wallets we do not know, and payments on other networks, do not become receipts.
Report what you bought
Call receipts.record right after every x402 payment. Only tx_hash is required, the rest makes the receipt better.
tx_hash
- What to send
- The settlement transaction from the PAYMENT-RESPONSE header (base64 JSON, field transaction)
resource_url
- What to send
- The URL you paid for, starting with https://
amount
- What to send
- What you paid in USDC, like "0.002", up to six places
description
- What to send
- What you bought, in your words, up to 280 characters. The seller's catalogue wins when it knows the URL
pay_to
- What to send
- The payTo address from the payment requirements
payment_response
- What to send
- The raw PAYMENT-RESPONSE header, if you still have it
Over REST it is POST /v1/receipts with the same fields. A company reports a transaction once. A second report answers report_duplicate.
From report to receipt
pending
- Meaning
- Not on our side of the chain yet. The indexer reads Base every minute and waits for 12 confirmations
confirmed
- Meaning
- Matched with the transfer, the receipt is written
mismatch
- Meaning
- The reported amount differs from the transfer. The receipt shows the amount on chain
not_found
- Meaning
- Two days passed and the chain never showed the transfer
The seller on a receipt
We look up the payTo address in the register:
- verified: the wallet proved it belongs to the listing (level 1). The receipt names the seller.
- listed: a listing names the wallet, but the wallet has not proved it (level 0).
- unverified: no listing claims the wallet. The receipt has no seller name and no input VAT.
The EUR value
Each receipt carries the ECB reference rate of the payment day, or of the business day before when the ECB publishes none, and the EUR amount at that rate. It is always marked provisional until your tax adviser confirms the method. Until the rate is out, the receipt says no rate yet and gets it later by itself.
Read the receipts
- receipts.list {month: "2026-10"}: one month, newest first, with totals per seller and per agent and the reports still waiting. mine, agent_id, wallet and status narrow it, limit (up to 200) and before page through it. Months start at midnight Europe/Berlin, the same months as the vouchers.
- receipts.get {id}: one receipt by id or transaction hash.
- Over REST: GET /v1/receipts?month=2026-10 and GET /v1/receipts/{id}.
One receipt
An example with made-up data. Amounts in USDC have six places, in EUR two.
{
"schema": "402lounge-receipt/0.1",
"id": 92097,
"network": "base",
"tx_hash": "0xbcbca5c39efb57034965b0e84225f6264840c0c940f58e0980844a2bc888da4c",
"block_time": "2026-10-31T01:41:09.444Z",
"payer": "0xc2a9e61f4d07b83e5a2c19d6f0e7b4a38d5c9e12",
"operator": { "agent_id": "example-agent-research", "name": "Research" },
"pay_to": "0x6e2d4a9b17c3f08e5d21a7c46b9f3e0d82a5c71b",
"amount": {
"usdc": "0.150000",
"eur": "0.14",
"fx": {
"rate": "1.0930",
"day": "2026-10-30",
"source": "ecb",
"note": "previous business day",
"provisional": true
}
},
"seller": {
"status": "verified",
"level": 1,
"listing": {
"slug": "northpine",
"name": "Northpine Data",
"maker": "Northpine Data Inc."
},
"legal_entity": null
},
"item": {
"resource_url": "https://api.northpine.example/metrics/v2/projects",
"description": "Projects",
"source": "catalog"
},
"provenance": { "money": "chain", "item": "catalog", "report_id": null },
"links": {
"tx": "https://basescan.org/tx/0xbcbca5c39efb57034965b0e84225f6264840c0c940f58e0980844a2bc888da4c",
"register": "https://api.402lounge.com/v1/register/0x6e2d4a9b17c3f08e5d21a7c46b9f3e0d82a5c71b"
}
}provenance says where each part comes from: the money always from the chain, the item from the seller's catalogue, the agent's report or nowhere.