x402: verify a payment
Checks a payment payload against its requirements without broadcasting. Request and response bodies follow the x402 v2 facilitator protocol. Protocol failures are HTTP 200 with isValid: false / success: false and a reason code, so stock x402 clients can read them.
Required scope: x402.verify.
Authorizations
Section titled “Authorizations”Request Bodyrequired
Section titled “Request Bodyrequired”object
Example
2object
Example
2object
The accepts[] entry the buyer chose.
object
Only exact is supported.
Example
exactCAIP-2 network id. Must match this environment (GET /x402/supported).
Example
eip155:84532Price in atomic units of asset (USDC has 6 decimals).
Example
1000ERC-20 contract of a registered asset.
Example
0x036CbD53842c5426634e7929541eC2318f3dCF7eThe merchant’s own address. The asset is transferred here.
Example
0x209693Bc6afc0C5328bA36FaF03C514EF312287CExample
60EIP-712 domain of the token (name, version) and, optionally, assetTransferMethod (eip3009 or permit2).
object
Example
{ "name": "USDC", "version": "2", "assetTransferMethod": "eip3009"}object
65-byte hex.
Example
0x1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111object
Example
0x857b06519E91e3A54538791bDbb0E22373e36b66Example
0x209693Bc6afc0C5328bA36FaF03C514EF312287CAtomic units.
Example
1000Unix seconds.
Example
0Unix seconds.
Example
179000000032-byte hex.
Example
0xababababababababababababababababababababababababababababababababobject
object
Example
0x036CbD53842c5426634e7929541eC2318f3dCF7eAtomic units.
Example
1000Example
0x857b06519E91e3A54538791bDbb0E22373e36b66Canonical x402ExactPermit2Proxy.
Example
0x402085c248EeA27D92E8b30b2C58ed07f9E20001Permit2 nonce, decimal uint256.
Example
1Unix seconds.
Example
1790000000object
Example
0x209693Bc6afc0C5328bA36FaF03C514EF312287CUnix seconds.
Example
0object
The requirements the seller is enforcing for this request.
object
Only exact is supported.
Example
exactCAIP-2 network id. Must match this environment (GET /x402/supported).
Example
eip155:84532Price in atomic units of asset (USDC has 6 decimals).
Example
1000ERC-20 contract of a registered asset.
Example
0x036CbD53842c5426634e7929541eC2318f3dCF7eThe merchant’s own address. The asset is transferred here.
Example
0x209693Bc6afc0C5328bA36FaF03C514EF312287CExample
60EIP-712 domain of the token (name, version) and, optionally, assetTransferMethod (eip3009 or permit2).
object
Example
{ "name": "USDC", "version": "2", "assetTransferMethod": "eip3009"}Responses
Section titled “Responses”object
Set when isValid is false.
authorization.from, once the payload parses.
Example
{ "isValid": true, "invalidReason": "insufficient_funds", "payer": "0x857b06519E91e3A54538791bDbb0E22373e36b66"}Request validation failed (e.g. missing or malformed body / query).
object
Stable machine-readable error code, namespaced under exceptions.. Always prefer branching on this value over message. See the per-route descriptions for the codes that route emits.
Human-readable explanation. Subject to wording changes; for programmatic checks use code instead.
Optional structured payload accompanying the error. For exceptions.rateLimit.exceeded includes msBeforeNext; for validation errors includes the offending field info.
object
Example
{ "code": "exceptions.auth.invalidApiKey", "message": "Invalid or missing API key"}Missing or invalid x-tenant-api-key header. Code: exceptions.auth.invalidApiKey.
object
Stable machine-readable error code, namespaced under exceptions.. Always prefer branching on this value over message. See the per-route descriptions for the codes that route emits.
Human-readable explanation. Subject to wording changes; for programmatic checks use code instead.
Optional structured payload accompanying the error. For exceptions.rateLimit.exceeded includes msBeforeNext; for validation errors includes the offending field info.
object
Example
{ "code": "exceptions.auth.invalidApiKey", "message": "Invalid or missing API key"}Request origin IP is not on the tenant API allowlist (exceptions.auth.ipNotAllowed), or the API key is missing the scope required by this operation (exceptions.auth.insufficientScope).
object
Stable machine-readable error code, namespaced under exceptions.. Always prefer branching on this value over message. See the per-route descriptions for the codes that route emits.
Human-readable explanation. Subject to wording changes; for programmatic checks use code instead.
Optional structured payload accompanying the error. For exceptions.rateLimit.exceeded includes msBeforeNext; for validation errors includes the offending field info.
object
Example
{ "code": "exceptions.auth.invalidApiKey", "message": "Invalid or missing API key"}Rate limit exceeded for this endpoint. Retry after the window resets. Code: exceptions.rateLimit.exceeded. The extension.msBeforeNext field tells you how long to wait.
object
Stable machine-readable error code, namespaced under exceptions.. Always prefer branching on this value over message. See the per-route descriptions for the codes that route emits.
Human-readable explanation. Subject to wording changes; for programmatic checks use code instead.
Optional structured payload accompanying the error. For exceptions.rateLimit.exceeded includes msBeforeNext; for validation errors includes the offending field info.
object
Example
{ "code": "exceptions.auth.invalidApiKey", "message": "Invalid or missing API key"}Unexpected server error. Safe to retry idempotent operations after a backoff.
object
Stable machine-readable error code, namespaced under exceptions.. Always prefer branching on this value over message. See the per-route descriptions for the codes that route emits.
Human-readable explanation. Subject to wording changes; for programmatic checks use code instead.
Optional structured payload accompanying the error. For exceptions.rateLimit.exceeded includes msBeforeNext; for validation errors includes the offending field info.
object
Example
{ "code": "exceptions.auth.invalidApiKey", "message": "Invalid or missing API key"}