Docs

Payment Status

After you pay: did it land, and is it safe to sign again? With the full worked example.

After you pay: payment status

Your paid call timed out, or came back 5xx or an empty 402. Did the money move? POST https://api.402xagent.com/v1/products/payment-status with JSON {"payment_payload":"<base64 PAYMENT-SIGNATURE you sent>","seller_url":"<url you paid>"} (or tx_hash, or from + nonce + valid_before). Base USDC (EIP-3009 exact) only for now.

  • status: landed (on-chain, 10+ confirmations), not_landed, pending (could still land, or too few confirmations), canceled, unknown.
  • safe_to_retry_same_payload: always true. An EIP-3009 nonce is single-use, so resending the same signed payment can never charge twice.
  • safe_to_resign: true only when two independent RPC sources agree the nonce is unused and the chain is past validBefore + 120 s. Any doubt, disagreement, single source or error means false: don't sign a new payment yet (see wait_until).
  • Also: the tx (amount, payTo, block, confirmations), a match against the seller's 402 terms, who to claim from and with what evidence, and what we can't know (delivery, seller state, facilitator internals, reorgs).
  • Every answer carries a signed copy in receipt (same keys as below). Same price as the check, $0.02, and the same 5 free per day. A bare request returns the x402 402. In x402-spotcheck 1.2.0: afterPay() or spotCheckFetch(fetch, { afterPay: true }).

Worked example: a paid call that timed out but settled (402rates-ping, Oct 16, 2026)

A real case from our own client. Facts only; times are Pacific (UTC-7).

  • 10:49:28: the seller's 402 asked $0.001 (amount 1000, USDC on Base) to payTo 0xf567…cb98, maxTimeoutSeconds 300. The client signed and sent the paid retry.
  • ~10:49:48: the client gave up after 20,359 ms. No response body was delivered.
  • 10:51:19: the authorization settled on-chain in block 52691866 (tx 0x2b4cc694…13ee, from 0x37cf…8674 (our payTo; Verified owner), relayer 0xa32c…d101).
  • 11:12:28: one free payment-status check with tx_hash, from, nonce and seller_url (no payload needed when you have these).

Answer: status landed (reason settled_onchain, 634 confirmations), amount and payTo match the seller's 402 terms, two RPC sources (Alchemy and Infura) agreed, safe_to_resign false. So: don't sign a new payment; the money moved, and the next step is to ask the seller for the response or a refund, using the tx as evidence. Signed receipt: https://402xagent.com/v1/receipts/ps-65a4fdffae01d2b6.