Validates a buyer's payment against your requirements **without** moving any money. It decodes the buyer's signed transaction, screens both the payer and your payee address against Chainalysis, checks the `amount`/ `mint`/ `recipient` / `fee-payer` match what you asked for, and simulate the transaction. Call this before you hand over the protected resource — it's your "is this payment going to work?" check.

**Response**`200 OK` — payment is valid

JSON

```json
{
  "isValid": true,
  "payer": "BuyerWalletAddress…"
}
```

**Response**`200 OK` — payment is rejected (still HTTP 200)

JSON

```json
{
  "isValid": false,
  "invalidReason": "invalid_exact_svm_payload_amount_mismatch",
  "payer": "BuyerWalletAddress…"
}
```

| Field | Type | Description |
| --- | --- | --- |
| `isValid` | boolean | `true` only if the payment passed screening, requirement checks, and simulation. |
| `invalidReason` | string | Present when `isValid` is `false`. Machine-readable code (see [Reason codes](https://docs.figment.io/reference/post_x402-verify#reason-codes)). |
| `invalidMessage` | string | _(optional)_ Human-readable elaboration on `invalidReason`. |
| `payer` | string | The buyer's wallet address, when it could be extracted from the transaction. |

### Error reason codes (non-exhaustive)

| Code | Meaning |
| --- | --- |
| `sanctioned_address` | Payer or payee flagged by compliance screening. |
| `screener_unavailable` | Screening provider errored and the facilitator is fail-closed. Retry later. |
| `fee_payer_not_managed_by_facilitator` | The `extra.feePayer` isn't one of our signers — wrong/stale value from `/supported`. |
| `invalid_exact_svm_payload_amount_mismatch` | Transaction transfers a different amount than `paymentRequirements.amount`. |
| `invalid_exact_svm_payload_mint_mismatch` | Transaction uses a different token mint than `asset`. |
| `invalid_exact_svm_payload_recipient_mismatch` | Transaction pays a different recipient than `payTo`. |
| `network_mismatch` | Payload network doesn't match requirements. |
| `transaction_simulation_failed` | The transfer would fail on-chain (e.g. insufficient buyer balance). |
| `unsupported_scheme` | Scheme isn't registered on this facilitator. |
| `unexpected_verify_error` | Unhandled internal error. |

x402Version

number

enum

required

x402 protocol version. Must be 2; this facilitator does not accept V1.

2

Allowed:

`2`

paymentPayload

object

required

x402 V2 payment payload envelope. The inner `payload` field is scheme-specific; see the examples for each supported (scheme, network) combination.

paymentPayloadobject

paymentRequirements

object

required

x402 V2 payment requirements envelope. The `extra` field is scheme-specific; see the examples for each supported (scheme, network) combination.

paymentRequirementsobject

# ``200      Verification result (valid or invalid).

object

isValid

boolean

required

invalidReason

string

invalidMessage

string

payer

string

extensions

object

Has additional fields

extra

object

Has additional fields

# ``400      Malformed request body.

```bash
curl --request POST \
     --url https://api.figment.io/x402/verify \
     --header 'accept: application/json' \
     --header 'content-type: application/json' \
     --header 'x-api-key: your-api-key-here' \
     --data '
{
  "x402Version": 2,
  "paymentPayload": {
    "x402Version": 2
  }
}
'
```

```

{
  "isValid": true,
  "invalidReason": "string",
  "invalidMessage": "string",
  "payer": "string",
  "extensions": {},
  "extra": {}
}
```
