Stablecoin bookkeeping

How to get a receipt for a USDC payment

October 26, 2026 · SpendPreflight · AI-assisted, checked against the official sources below.

A transaction hash is a starting point. A useful payment record also identifies the token, network, sender, recipient and exact amount. It distinguishes an observed transfer from an invoice, a tax treatment or a guarantee of finality.

1. Identify the network and native token

This guide covers native USDC on Base mainnet (chain ID 8453). Circle lists its contract as 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 in the official contract directory. A similarly named token or bridged USDbC is a different asset. Check the contract, not the ticker alone.

2. Find the actual Transfer event

Look up the transaction receipt. A pending transaction has no mined receipt; a failed transaction does not prove payment. A successful transaction can contain several token transfers. Select the USDC Transfer event that matches the intended recipient and amount, and retain its log index. The event’s sender can differ from the transaction sender when contracts route payments.

The Ethereum JSON-RPC receipt documentation defines transaction status, block and logs. Verify that the log belongs to the canonical block returned by the provider.

3. Save a dated observation

Stablecoin Books provides a $0.01 x402 receipt API and MCP payment_receipt. Submit a transaction hash, adding log_index if multiple transfers match. Alternatively, match an exact payee and decimal amount in a past time window; zero or multiple matches return an error without charge.

POST https://api.spendpreflight.com/v1/books/receipt
Content-Type: application/json

{"tx_hash":"0x…64 hexadecimal characters…","log_index":0}

The ellipsis is a placeholder; use your actual hash. An unpaid request returns a 402 challenge. Your budgeted x402 client decides whether to authorize the $0.01 service fee. The tool reads an existing transfer; it never sends the original payment again.

4. Retain JSON as well as the printed view

The result includes payer, payee, exact decimal amount, UTC block time, block hash, log index, L2 confirmations and dated OFAC address-match flags. Save the signed JSON envelope privately and print the returned HTML or use the local viewer. Its Ed25519 signature attests to the exact observation hash. Free POST /v1/books/verify checks that signature and hash; it performs no fresh chain lookup.

Public keys are available at our existing key set. Preserve trusted keys and the JSON for archival verification; key rotation and revocation can change verification results. A service signature is not a blockchain inclusion proof or proof that an invoice was fulfilled.

5. Understand confirmations and screening limits

A count of later L2 blocks is an observation, not irreversible finality. Base distinguishes unsafe, safe and finalized chain state in its derivation specification. An OFAC non-match is also not clearance: public listed-address screening does not identify every person, beneficial owner or risky counterparty. Verify matches before acting.

6. Export activity for reconciliation

For multiple payments, the $0.05 wallet_statement tool exports native USDC in/out/self transfers as CSV or JSON for up to 90 days. It starts from the historical opening balance and reconciles ordered events against the closing balance. Requests above 1,000 transfers, the bounded RPC budget or provider history limits fail without a paid partial export. Narrow the date range. Gas, other tokens, tax lots and fiat conversion are outside this export.

Informational, not tax advice. Keep invoices and commercial context separately. No custody, exchange, transmission, lending or personalized advice is provided. SpendPreflight retains no Books request bodies, results or queried wallet identifiers; only aggregate counts/revenue. Infura processes the read-only chain requests under its policies.

Building an x402 seller?

Check your public challenge with free x402 Lint and the free GitHub Action. These are unpaid diagnostics and do not prove paid delivery.

14 days free for founding sellers

First 10 eligible Basic registrations, subject to availability. No payment to start; confirm your email. Hourly endpoint checks and best-effort daily listing checks; delivery can be delayed. Manual renewal afterward: 9 USDC per 31 days.