Verify an x402 payment
Validates an x402 payment payload without creating a payment, consuming keyless trial usage, or submitting anything onchain. Use this endpoint for verification purposes. To settle a payment, see Settle an x402 payment.
For the upto scheme, paymentRequirements.amount must equal the
maximum the buyer signed, and Facilitator Service checks the buyer’s
USDC balance and Permit2 allowance against that maximum. If the
allowance is short, an eip2612GasSponsoring permit in
paymentPayload.extensions can stand in for an onchain approval.
Example signatures come from a public test key. Never fund it.
Authorizations
Bearer token authentication with a Circle API key. Use this for
production settlement. Settling with an API key also binds the payTo
to your Circle account, which ends the keyless trial allowance.
Body
x402 protocol version. Facilitator Service supports version 2.
2 x402 v2 payment payload. Includes the payment terms the buyer accepted and
the signed authorization for the USDC transfer: an EIP-3009 authorization
for exact, or a Permit2 authorization for upto.
Payment terms the seller advertises for an x402 resource. Facilitator Service validates that the buyer's authorization matches these requirements.
Response
Verification result
Whether the payload passed every check Facilitator Service runs before submission.
true
Buyer address recovered from the signed authorization. Always rendered, including on invalid results, so callers can correlate.
"0x9aE2..."
Reason code. Present when isValid is false.
invalid_x402_version, unsupported_scheme, invalid_network, invalid_payment_requirements, invalid_payload, invalid_exact_evm_payload_recipient_mismatch, invalid_exact_evm_payload_authorization_value_mismatch, invalid_exact_evm_payload_authorization_valid_after, invalid_exact_evm_payload_authorization_valid_before, invalid_exact_evm_payload_signature, invalid_transaction_state, insufficient_funds, invalid_permit2_spender, invalid_permit2_recipient_mismatch, permit2_token_mismatch, permit2_amount_mismatch, permit2_not_yet_valid, permit2_deadline_expired, upto_facilitator_mismatch, invalid_permit2_signature, permit2_invalid_nonce, invalid_eip2612_extension_format, eip2612_from_mismatch, eip2612_asset_mismatch, eip2612_spender_not_permit2, eip2612_deadline_expired, permit2_2612_amount_mismatch, permit2_simulation_failed "invalid_exact_evm_payload_signature"