Did this Base transaction really pay you?
One API call checks that a Base mainnet transaction paid at least N USDC to your address. You can require a specific sender and a number of confirmations. /v1/consume also marks the payment used once, so nobody can replay a public tx hash at your checkout. It works without a database of your own.
Endpoints and prices
| Route | Price | What you get |
|---|---|---|
GET /v1/verifytx, to, min, from?, confirmations? | $0.005 | verified, code, matched transfer (from, amount, log index), every USDC transfer to you in that tx, block time, confirmations |
POST /v1/consume{tx, to, min, from?, confirmations?, namespace} | $0.01 | Everything above plus first_use. The second call with the same tx in your namespace returns false. The namespace is stored only as a SHA-256 hash. |
Fair billing: bad input gets a free 400 before any payment. If the chain read fails you get a 503 and are not charged. A tx that doesn't verify is still a correct (paid) answer with a machine-readable code: not_found, failed_tx, no_transfer_to_recipient, sender_mismatch, amount_too_low, insufficient_confirmations.
Try it
curl -i "https://usdc-receipt-verifier.soloearn.workers.dev/v1/verify?tx=0xYOUR_TX_HASH&to=0xYOUR_ADDRESS&min=29" # → 402 Payment Required with a PAYMENT-REQUIRED header (x402 v2, exact, USDC on Base)
# with any x402 client (e.g. @x402/fetch), the 402 is paid automatically:
const r = await fetchWithPayment("https://usdc-receipt-verifier.soloearn.workers.dev/v1/consume", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ tx, to: MY_ADDRESS, min: "29", namespace: MY_PRIVATE_NAMESPACE })
});
const { verified, first_use } = await r.json(); // deliver only if verified && first_use
Machine-readable: openapi.json · llms.txt · /.well-known/x402 · JSON docs
Who it's for
Sellers taking direct USDC
"Send USDC, paste your tx hash" checkouts need a payment check and replay protection./v1/consume covers both in one call.Agents getting paid
Confirm a bounty, escrow release or invoice really landed before you deliver, using a specific sender and confirmation count.Builders debugging x402
Pair it with our free checker to see what your 402 challenge advertises and whether a buyer's payment arrived.Related free tools from Solo Earn
Free x402 endpoint checker
Paste any paid URL. It grades the 402 challenge (header, network, USDC asset, amount units, payTo checksum, EIP-712 domain) without paying.x402 Seller Kit ($29 USDC)
The Cloudflare Worker template behind our own stores: x402 402, order-code checkout and one-time claims in D1. Run the verifier yourself instead of calling this API.Also listed on: PayAPI Market · x402scan
Limits
USDC on Base mainnet only (0x8335…2913). One transaction per call. Data comes from public Base RPC nodes. Answers reflect the chain at the moment you ask, so request more confirmations for high-value goods. This is not financial, tax or legal advice.