Skip to main content
POST
/
v1
/
verify
curl -X POST https://facilitator.0xmeta.ai/v1/verify \
  -H "Content-Type: application/json" \
  -d '{
    "transaction_hash": "0xee232e308a6647938a68aee1ae355b85a262e4e450b7fde55cd4e729e6444ce9",
    "chain": "base-sepolia",
    "seller_address": "0xa821f428ef8cc9f54a9915336a82220853059090",
    "expected_amount": "10000",
    "expected_token": "0x036CbD53842c5426634e7929541eC2318f3dCF7e",
    "metadata": {
      "source": "my_merchant_app",
      "resource": "http://localhost:8080/photos",
      "paymentPayload": {
        "x402Version": 1,
        "scheme": "exact",
        "network": "base-sepolia",
        "payload": {
          "authorization": {
            "from": "0x78b6b8c55d5ea96be6ca8213e61b0fa53e862480",
            "to": "0xa821f428ef8cc9f54a9915336a82220853059090",
            "value": "10000",
            "validAfter": "0",
            "validBefore": "1735689600",
            "nonce": "0xee232e308a6647938a68aee1ae355b85a262e4e450b7fde55cd4e729e6444ce9",
            "token": "0x036CbD53842c5426634e7929541eC2318f3dCF7e"
          },
          "signature": "0x1e112204abec0856f56559b2d9a58d4e7bb5daec70e121c0ef8a2a7acb01619d498d8b0a68a180cc80a1cf7eba9b84bbd123140600e6b199edd79dc19ad0453d1c"
        }
      },
      "payer": "0x78b6b8c55d5ea96be6ca8213e61b0fa53e862480"
    }
  }'
{
  "verification_id": "vrf_b183c9692fac4481",
  "status": "verified",
  "transaction_hash": "0xee232e308a6647938a68aee1ae355b85a262e4e450b7fde55cd4e729e6444ce9",
  "chain": "base-sepolia",
  "verified_amount": "10000",
  "verified_token": "0x036cbd53842c5426634e7929541ec2318f3dcf7e",
  "seller_address": "0xa821f428ef8cc9f54a9915336a82220853059090",
  "payer_address": "0x78b6b8c55d5ea96be6ca8213e61b0fa53e862480",
  "verified_at": "2025-11-24T07:42:40Z",
  "upstream_response": {
    "authorization": {
      "from": "0x78b6b8c55d5ea96be6ca8213e61b0fa53e862480",
      "to": "0xa821f428ef8cc9f54a9915336a82220853059090",
      "value": "10000",
      "validAfter": "0",
      "validBefore": "1735689600",
      "nonce": "0xee232e308a6647938a68aee1ae355b85a262e4e450b7fde55cd4e729e6444ce9",
      "signature": "0x1e112204abec0856f56559b2d9a58d4e7bb5daec70e121c0ef8a2a7acb01619d498d8b0a68a180cc80a1cf7eba9b84bbd123140600e6b199edd79dc19ad0453d1c",
      "valid": true
    }
  }
}

Endpoint

Verify that an EIP-3009 transferWithAuthorization signature is valid and meets expected criteria.
transaction_hash
string
required
The nonce from the EIP-3009 authorization (used as transaction reference) Example: 0xee232e308a6647938a68aee1ae355b85a262e4e450b7fde55cd4e729e6444ce9
chain
string
required
Blockchain network: base or base-sepolia
seller_address
string
required
The merchant’s receiving address (42 characters, must start with 0x) Example: 0xa821f428ef8cc9f54a9915336a82220853059090
expected_amount
string
required
Expected payment amount in token’s smallest unit (string to avoid precision loss) Example: "10000" (0.01 USDC with 6 decimals)
expected_token
string
required
Token contract address for the payment Example: 0x036CbD53842c5426634e7929541eC2318f3dCF7e (USDC on Base Sepolia)
metadata
object
required
Payment metadata including the EIP-3009 authorization
{
  "source": "your_app_name",
  "resource": "https://your-app.com/resource",
  "paymentPayload": {
    "x402Version": 1,
    "scheme": "exact",
    "network": "base-sepolia",
    "payload": {
      "authorization": {
        "from": "0x78b6b8c55d5ea96be6ca8213e61b0fa53e862480",
        "to": "0xa821f428ef8cc9f54a9915336a82220853059090",
        "value": "10000",
        "validAfter": "0",
        "validBefore": "1735689600",
        "nonce": "0xee232e308a6647938a68aee1ae355b85a262e4e450b7fde55cd4e729e6444ce9",
        "token": "0x036CbD53842c5426634e7929541eC2318f3dCF7e"
      },
      "signature": "0x1e112204abec0856f56559b2d9a58d4e7bb5daec..."
    }
  },
  "payer": "0x78b6b8c55d5ea96be6ca8213e61b0fa53e862480"
}
curl -X POST https://facilitator.0xmeta.ai/v1/verify \
  -H "Content-Type: application/json" \
  -d '{
    "transaction_hash": "0xee232e308a6647938a68aee1ae355b85a262e4e450b7fde55cd4e729e6444ce9",
    "chain": "base-sepolia",
    "seller_address": "0xa821f428ef8cc9f54a9915336a82220853059090",
    "expected_amount": "10000",
    "expected_token": "0x036CbD53842c5426634e7929541eC2318f3dCF7e",
    "metadata": {
      "source": "my_merchant_app",
      "resource": "http://localhost:8080/photos",
      "paymentPayload": {
        "x402Version": 1,
        "scheme": "exact",
        "network": "base-sepolia",
        "payload": {
          "authorization": {
            "from": "0x78b6b8c55d5ea96be6ca8213e61b0fa53e862480",
            "to": "0xa821f428ef8cc9f54a9915336a82220853059090",
            "value": "10000",
            "validAfter": "0",
            "validBefore": "1735689600",
            "nonce": "0xee232e308a6647938a68aee1ae355b85a262e4e450b7fde55cd4e729e6444ce9",
            "token": "0x036CbD53842c5426634e7929541eC2318f3dCF7e"
          },
          "signature": "0x1e112204abec0856f56559b2d9a58d4e7bb5daec70e121c0ef8a2a7acb01619d498d8b0a68a180cc80a1cf7eba9b84bbd123140600e6b199edd79dc19ad0453d1c"
        }
      },
      "payer": "0x78b6b8c55d5ea96be6ca8213e61b0fa53e862480"
    }
  }'
{
  "verification_id": "vrf_b183c9692fac4481",
  "status": "verified",
  "transaction_hash": "0xee232e308a6647938a68aee1ae355b85a262e4e450b7fde55cd4e729e6444ce9",
  "chain": "base-sepolia",
  "verified_amount": "10000",
  "verified_token": "0x036cbd53842c5426634e7929541ec2318f3dcf7e",
  "seller_address": "0xa821f428ef8cc9f54a9915336a82220853059090",
  "payer_address": "0x78b6b8c55d5ea96be6ca8213e61b0fa53e862480",
  "verified_at": "2025-11-24T07:42:40Z",
  "upstream_response": {
    "authorization": {
      "from": "0x78b6b8c55d5ea96be6ca8213e61b0fa53e862480",
      "to": "0xa821f428ef8cc9f54a9915336a82220853059090",
      "value": "10000",
      "validAfter": "0",
      "validBefore": "1735689600",
      "nonce": "0xee232e308a6647938a68aee1ae355b85a262e4e450b7fde55cd4e729e6444ce9",
      "signature": "0x1e112204abec0856f56559b2d9a58d4e7bb5daec70e121c0ef8a2a7acb01619d498d8b0a68a180cc80a1cf7eba9b84bbd123140600e6b199edd79dc19ad0453d1c",
      "valid": true
    }
  }
}

Response Fields

verification_id
string
required
Unique identifier for this verification. Use this for settlement.
status
string
required
Verification status: verified, pending, failed, or rejected
transaction_hash
string
required
The nonce hash used as transaction reference
chain
string
required
The blockchain network (base or base-sepolia)
verified_amount
string
Verified payment amount in token’s smallest unit
verified_token
string
Verified token contract address
seller_address
string
Merchant’s receiving address
payer_address
string
Customer’s wallet address (from authorization)
verified_at
string
ISO 8601 timestamp when verification completed
upstream_response
object
Full authorization details including signature validation result

Verification Process

What Gets Verified

1

Signature Validation

EIP-712 signature is cryptographically verified using ecrecover
2

Address Matching

  • from address matches recovered signer - to address matches expected seller_address
3

Amount Validation

Authorization value matches expected_amount exactly
4

Token Validation

Token address matches expected_token
5

Expiry Check

Current time is between validAfter and validBefore
6

Nonce Uniqueness

Nonce hasn’t been used in a previous settlement

Common Use Cases

{
  "transaction_hash": "0x...",
  "chain": "base-sepolia",
  "seller_address": "0xa821f428ef8cc9f54a9915336a82220853059090",
  "expected_amount": "10000",
  "expected_token": "0x036CbD53842c5426634e7929541eC2318f3dCF7e",
  "metadata": {
    "source": "my_app",
    "paymentPayload": { /* ... */ }
  }
}
{
  "transaction_hash": "0x...",
  "chain": "base",
  "seller_address": "0x...",
  "expected_amount": "1000000",
  "expected_token": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
  "metadata": {
    "source": "my_app",
    "paymentPayload": { /* ... */ }
  }
}

Important Notes

Verifications are processed in under 2 seconds. The authorization is validated against EIP-3009 standards without any on-chain interaction.
Each nonce can only be used once. Generate a unique random nonce for every payment to prevent conflicts.
Cache the verification_id - you’ll need it for settlement! Store it with your order/transaction record.
Verification is FREE - no fees charged for validating payment authorizations.