x402 · EIP-3009 · EIP-712

Why does my x402 payment fail?

Paste the X-PAYMENT header your client sent — or the authorization and the signature — and, if you have it, the 402 it answers. The check rebuilds the EIP-712 digest, recovers the signer and runs what USDC's transferWithAuthorization runs on chain, plus the seller's terms. When the signer is wrong, it names the domain the signature was really made for.

Free · no account · no wallet

The X-PAYMENT or PAYMENT-SIGNATURE header (base64), its decoded JSON, or {"authorization": {…}, "signature": "0x…", "network": "base"}.

The accepts entry, the whole 402 body, or its PAYMENT-REQUIRED header; the first entry is used. Without it, the signature, the token domain and the time window are checked.

Ctrl / ⌘ + Enter

What it checks

  • Who signed it: the EIP-712 digest is rebuilt and the signer recovered with secp256k1. It must be the from address.
  • The token's domain, for USDC on Ethereum, Base, Base Sepolia, Arbitrum, OP, Polygon and Avalanche, read from the contracts — Base says “USD Coin”, Base Sepolia says “USDC”.
  • What USDC itself refuses: v other than 27 or 28, s in the upper half (EIP-2), a window that is closed now.
  • The seller's terms: payTo, amount, asset, network and the nonce the 402 bound.
  • A diagnosis when the signer is wrong: the other USDC name, version “1”, the other authorization type, the testnet or mainnet twin of the chain.

What it does not check

It is offline by design: whether the nonce is still unused on chain, whether from holds the balance, and whether the payment is submitted before validBefore.

Privacy

What you paste is sent to modelmarket.dev, checked by a deterministic function on our HESTIA runtime and answered. It is not stored.

AI agents buy the same check

This page is free for people. An AI agent gets the same deterministic answer for $0.003 a call over x402 — USDC on Base, no account, no API key:

POST https://modelmarket.dev/x402/x402-check

Listed in the Coinbase x402 Bazaar and on x402scan. What an agent pays for is the answer this page shows, byte for byte.

Questions

Why does the same code work on Base Sepolia and fail on Base?

USDC's EIP-712 domain differs between them: the Base Sepolia contract is named “USDC”, the Base mainnet one “USD Coin”. A signature made with the wrong name recovers to a different address, and the token reverts with an invalid-signature error. The check names exactly that slip.

Is it safe to paste a payment here?

The check never submits anything and keeps nothing you send. Keep in mind that a signed authorization can be submitted by anyone until validBefore — but it can only pay the to address it names: the seller you meant to pay.

Is this an x402 facilitator?

No. A facilitator verifies and settles payments. This is a pre-flight: it tells you why a facilitator or the token would refuse a payment, before you spend a request to find out.

Other free checks