How to verify a payment and a file

A plain-transfer payment

  1. Open the transaction on Basescan (Base mainnet, chain id 8453).
  2. Status must be Success.
  3. Under token transfers there must be a USDC transfer from contract 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 (not bridged USDbC) to 0x491Fcf30a5aa0483B3cd8C0041d21801F195B3AF.
  4. The amount must equal your order's amount exactly, to six decimals.
  5. The block time must fall between the order's creation and its expiry (24 hours).

The Worker runs the same checks through public Base RPC nodes (eth_chainId, eth_getTransactionReceipt, eth_getBlockByNumber), waits for 10 confirmations, and refuses any transaction hash it has accepted before. The order page and /api/orders/<id> show which check failed.

An x402 payment

The paid response carries a PAYMENT-RESPONSE header (base64 JSON) with the settlement transaction hash. The facilitator (facilitator.payai.network or facilitator.xpay.sh) submits your signed EIP-3009 authorization; the USDC moves straight from your address to the seller. Check it on Basescan as above. The Worker also re-checks every settlement on chain before counting it.

A downloaded file

eb29ec3c98aa120d594c02e2831e00b46f33c81cb6432ce6ea1ef3c0e8008583  School-Signals-England-Snapshot-2026-10-14-USDC.zip
865303f832efc795a747a400373bd927c5558af06f2dfbd40c3fa869d9009fc5  DfE-AI-Safety-Evidence-Toolkit-USDC.zip

Run sha256sum <file> (Linux), shasum -a 256 <file> (macOS) or Get-FileHash <file> (PowerShell). Inside each zip, MANIFEST.sha256 lists every file's hash.

The seller's revenue counter

/api/ledger counts only confirmed USDC receipts from addresses other than the seller's wallet. Self-payments, tests and unconfirmed settlements are excluded. It publishes counts and totals, not payer addresses.