x402 v2 · USDC on Base · no account

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

RoutePriceWhat you get
GET /v1/verify
tx, to, min, from?, confirmations?
$0.005verified, 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.01Everything 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.