POST
/
v2
/
x402
/
verify
Verify a payment
curl --request POST \
  --url https://api.cdp.coinbase.com/platform/v2/x402/verify \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
  "x402Version": 1,
  "paymentPayload": {
    "x402Version": 1,
    "scheme": "exact",
    "network": "base",
    "payload": {
      "signature": "0xf3746613c2d920b5fdabc0856f2aeb2d4f88ee6037b8cc5d04a71a4462f13480",
      "authorization": {
        "from": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
        "to": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
        "value": "1000000000000000000",
        "validAfter": "1716150000",
        "validBefore": "1716150000",
        "nonce": "0x1234567890abcdef1234567890abcdef12345678"
      }
    }
  },
  "paymentRequirements": {
    "scheme": "exact",
    "network": "base",
    "maxAmountRequired": "1000000",
    "resource": "https://api.example.com/premium/resource/123",
    "description": "Premium API access for data analysis",
    "mimeType": "application/json",
    "outputSchema": {
      "data": "string"
    },
    "payTo": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
    "maxTimeoutSeconds": 10,
    "asset": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
    "extra": {
      "gasLimit": "1000000"
    }
  }
}'
{
  "isValid": false,
  "invalidReason": "insufficient_funds",
  "payer": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e"
}

Authorizations

Authorization
string
header
required

A JWT signed using your CDP API Key Secret, encoded in base64. Refer to the Generate Bearer Token section of our Authentication docs for information on how to generate your Bearer Token.

Body

application/json
x402Version
enum<integer>
required

The version of the x402 protocol.

Available options:
1
Example:

1

paymentPayload
object
required

The x402 protocol payment payload that the client attaches to x402-paid API requests to the resource server in the X-PAYMENT header.

Example:
{
"x402Version": 1,
"scheme": "exact",
"network": "base",
"payload": {
"signature": "0xf3746613c2d920b5fdabc0856f2aeb2d4f88ee6037b8cc5d04a71a4462f13480",
"authorization": {
"from": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
"to": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
"value": "1000000000000000000",
"validAfter": "1716150000",
"validBefore": "1716150000",
"nonce": "0x1234567890abcdef1234567890abcdef12345678"
}
}
}
paymentRequirements
object
required

The x402 protocol payment requirements that the resource server expects the client's payment payload to meet.

Response

Successfully verified payment on the x402 protocol.

isValid
boolean
required

Indicates whether the payment is valid.

Example:

false

payer
string
required

The onchain address of the client that is paying for the resource.

For EVM networks, the payer will be a 0x-prefixed, checksum EVM address.

For Solana-based networks, the payer will be a base58-encoded Solana address.

Example:

"0x742d35Cc6634C0532925a3b844Bc454e4438f44e"

invalidReason
enum<string>

The reason the payment is invalid on the x402 protocol.

Available options:
insufficient_funds,
invalid_scheme,
invalid_network,
invalid_x402_version,
invalid_payment_requirements,
invalid_payload,
invalid_exact_evm_payload_authorization_value,
invalid_exact_evm_payload_authorization_valid_after,
invalid_exact_evm_payload_authorization_valid_before,
invalid_exact_evm_payload_authorization_typed_data_message,
invalid_exact_evm_payload_authorization_from_address_kyt,
invalid_exact_evm_payload_authorization_to_address_kyt,
invalid_exact_evm_payload_signature,
invalid_exact_evm_payload_signature_address,
invalid_exact_svm_payload_transaction,
invalid_exact_svm_payload_transaction_amount_mismatch,
invalid_exact_svm_payload_transaction_create_ata_instruction,
invalid_exact_svm_payload_transaction_create_ata_instruction_incorrect_payee,
invalid_exact_svm_payload_transaction_create_ata_instruction_incorrect_asset,
invalid_exact_svm_payload_transaction_instructions,
invalid_exact_svm_payload_transaction_instructions_length,
invalid_exact_svm_payload_transaction_instructions_compute_limit_instruction,
invalid_exact_svm_payload_transaction_instructions_compute_price_instruction,
invalid_exact_svm_payload_transaction_instructions_compute_price_instruction_too_high,
invalid_exact_svm_payload_transaction_instruction_not_spl_token_transfer_checked,
invalid_exact_svm_payload_transaction_instruction_not_token_2022_transfer_checked,
invalid_exact_svm_payload_transaction_not_a_transfer_instruction,
invalid_exact_svm_payload_transaction_cannot_derive_receiver_ata,
invalid_exact_svm_payload_transaction_receiver_ata_not_found,
invalid_exact_svm_payload_transaction_sender_ata_not_found,
invalid_exact_svm_payload_transaction_simulation_failed,
invalid_exact_svm_payload_transaction_transfer_to_incorrect_ata
Example:

"insufficient_funds"