Receipts (your settled calls, as accounting rows)
POST /api/receiptsYour own settled calls in the shape a finance system posts: one row per payment with what was bought, the amount settled, the quoted ceiling where one applied, and the evidence - settlement transaction, sha256 of the bytes delivered, and the on-chain attestation id where one exists. Keyed to the wallet that pays for the call, so nobody can read another wallet's payables; no account, no export request, no support ticket. Requires an EIP-3009 payment (USDC on Base, Polygon, or Arbitrum). Use format "csv" for a subledger import.
Input
| Field | Type | Description |
|---|---|---|
from | string | ISO date or timestamp, inclusive. Default 90 days ago. |
to | string | ISO date or timestamp, inclusive. Default now. |
limit | number | Max rows per page, 1-5000 (default 500). `total` is the uncapped count for the window and `truncated` says when the page is short of it. |
format | string | "json" (default) or "csv" - the flat form a subledger imports. |
Example output
{
"wallet": "0x902dcf34e53695bdea2ffb354b1a2e58bd598256",
"from": "2026-09-01T00:00:00.000Z",
"to": "2026-09-11T00:00:00.000Z",
"returned": 2,
"total": 2,
"truncated": false,
"currency": "USD",
"rows": [
{
"settledAt": "2026-09-09T10:03:05.816Z",
"item": "v1-chat-metered",
"amountUsd": 0.642466,
"quotedUsd": 0.74,
"rail": "usdc",
"network": "solana",
"wire": "x402",
"settlementTx": "5Nk…",
"responseSha256": "9f86d0…",
"attestationUid": null
},
{
"settledAt": "2026-09-08T13:15:07.000Z",
"item": "hash",
"amountUsd": 0.001,
"quotedUsd": null,
"rail": "usdc",
"network": "base",
"wire": "x402",
"settlementTx": "0x6563…",
"responseSha256": "2c26b4…",
"attestationUid": "0x76e736…"
}
],
"note": "Every row's settlementTx is verifiable on the named chain without asking us."
}
Try it - see the 402 challenge (free)
curl -i -X POST https://agent402.tools/api/receipts \
-H "Content-Type: application/json" \
-d '{"from":"2026-09-01","limit":100}'
The response is HTTP 402 Payment Required with exact payment requirements. Any x402 v2 client pays automatically and retries:
Paid call (JavaScript agent)
import { wrapFetchWithPayment } from "@x402/fetch";
import { x402Client } from "@x402/core/client";
import { registerExactEvmScheme } from "@x402/evm/exact/client";
import { privateKeyToAccount } from "viem/accounts";
import { metaTitle, metaDescription } from "./seo-meta.js";
const client = new x402Client();
registerExactEvmScheme(client, { signer: privateKeyToAccount(KEY) });
const payFetch = wrapFetchWithPayment(fetch, client);
const res = await payFetch("https://agent402.tools/api/receipts", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
"from": "2026-09-01",
"limit": 100
}),
});
Related tools
x402 market pulse
GET /api/x402-market-pulseLive cross-provider x402 market sentiment. topProviders: the top x402 sellers ecosystem-wide, ranked by REAL on-chain ac…
try in playground →x402 quote
GET /api/x402-quoteProbe any URL and decode its HTTP 402 payment requirements (price, asset, network, pay-to) into clean JSON - what an age…
try in playground →USDC balance
GET /api/usdc-balanceRead the USDC balance of any address on Base, Polygon, Arbitrum, Optimism, Ethereum, Monad, Celo, Avalanche, or Sei. Rea…
try in playground →