---
title: "Verify payment"
method: POST
path: "/v1/payments/x402/verify"
tags: ["x402"]
---

# Verify payment

`POST /v1/payments/x402/verify`

Verify an x402 payment payload against the provided payment requirements. Compatible with any standard x402 middleware.

## Request body

- object — Request body for x402 facilitator 'verify'
  - `paymentPayload` object, required
    - `x402Version` union
      - 1
      - 2
    - `scheme` union
      - 'exact'
      - 'upto'
    - `network` union, required — CAIP-2 blockchain identifier (e.g., 'eip155:1' for Ethereum, 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' for Solana mainnet). Also accepts numeric EVM chain IDs (e.g., 1, 137) or aliases ('solana:mainnet', 'solana:devnet') for backward compatibility.
      - string
      - integer
    - `payload` union, required
      - object
        - `signature` string, required
        - `authorization` object, required
          - `from` string, required
          - `to` string, required
          - `value` string, required
          - `validAfter` string, required
          - `validBefore` string, required
          - `nonce` string, required
      - object
        - `transaction` string, required
  - `paymentRequirements` object, required
    - `scheme` union
      - 'exact'
      - 'upto'
    - `network` union, required — CAIP-2 blockchain identifier (e.g., 'eip155:1' for Ethereum, 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' for Solana mainnet). Also accepts numeric EVM chain IDs (e.g., 1, 137) or aliases ('solana:mainnet', 'solana:devnet') for backward compatibility.
      - string
      - integer
    - `maxAmountRequired` string, required
    - `resource` string, uri, required
    - `description` string, required
    - `mimeType` string, required
    - `outputSchema` object
    - `payTo` union, required
      - string
      - string
    - `maxTimeoutSeconds` integer, required
    - `asset` union, required
      - string
      - string
    - `extra` object

## Response `200`

Verification successful

- object — Response returned by x402 facilitator 'verify'
  - `isValid` boolean, required
  - `invalidReason` 'insufficient_funds' | 'invalid_exact_evm_payload_authorization_valid_after' | 'invalid_exact_evm_payload_authorization_valid_before' | 'invalid_exact_evm_payload_authorization_value' | 'invalid_exact_evm_payload_signature' | 'invalid_exact_evm_payload_recipient_mismatch' | '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_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' | 'invalid_network' | 'invalid_payload' | 'invalid_payment_requirements' | 'invalid_scheme' | 'invalid_payment' | 'payment_expired' | 'unsupported_scheme' | 'invalid_x402_version' | 'invalid_transaction_state' | 'invalid_x402_version' | 'settle_exact_svm_block_height_exceeded' | 'settle_exact_svm_transaction_confirmation_timed_out' | 'unsupported_scheme' | 'unexpected_settle_error' | 'unexpected_verify_error'
  - `payer` union
    - string
    - string
  - `fundWalletLink` string
  - `errorMessage` string
  - `balance` string — Payer's token balance in base units
  - `allowance` string — Current ERC20 allowance from payer to spender (only for 'upto' scheme)

## Other responses

- `400` — Invalid request parameters
- `401` — Authentication required. For backend usage, include `x-secret-key` header.
- `500` — Internal server error

---

[API](https://skmtc.net/thirdweb/apis/thirdweb-api.md) · [All operations](https://skmtc.net/thirdweb/apis/thirdweb-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/thirdweb/thirdweb-api/revisions/fb4cb67da1c7/schema)
