Endpoint
Verify that an EIP-3009 transferWithAuthorization signature is valid and meets expected criteria.
The nonce from the EIP-3009 authorization (used as transaction reference)
Example: 0xee232e308a6647938a68aee1ae355b85a262e4e450b7fde55cd4e729e6444ce9
Blockchain network: base or base-sepolia
The merchant’s receiving address (42 characters, must start with 0x) Example:
0xa821f428ef8cc9f54a9915336a82220853059090
Expected payment amount in token’s smallest unit (string to avoid precision
loss) Example: "10000" (0.01 USDC with 6 decimals)
Token contract address for the payment Example:
0x036CbD53842c5426634e7929541eC2318f3dCF7e (USDC on Base Sepolia)
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
Unique identifier for this verification. Use this for settlement.
Verification status: verified, pending, failed, or rejected
The nonce hash used as transaction reference
The blockchain network (base or base-sepolia)
Verified payment amount in token’s smallest unit
Verified token contract address
Merchant’s receiving address
Customer’s wallet address (from authorization)
ISO 8601 timestamp when verification completed
Full authorization details including signature validation result
Verification Process
What Gets Verified
Signature Validation
EIP-712 signature is cryptographically verified using ecrecover
Address Matching
from address matches recovered signer - to address matches expected
seller_address
Amount Validation
Authorization value matches expected_amount exactly
Token Validation
Token address matches expected_token
Expiry Check
Current time is between validAfter and validBefore
Nonce Uniqueness
Nonce hasn’t been used in a previous settlement
Common Use Cases
USDC Payment on Base Sepolia
{
"transaction_hash": "0x...",
"chain": "base-sepolia",
"seller_address": "0xa821f428ef8cc9f54a9915336a82220853059090",
"expected_amount": "10000",
"expected_token": "0x036CbD53842c5426634e7929541eC2318f3dCF7e",
"metadata": {
"source": "my_app",
"paymentPayload": { /* ... */ }
}
}
USDC Payment on Base Mainnet
{
"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.