Facilitator API
Complete API reference for the OpenX402 facilitator endpoints
The OpenX402 facilitator at facilitator.openx402.ai exposes a REST API that x402 middleware calls during the payment flow. These endpoints handle payment verification and on-chain settlement.
GET /
Health check endpoint. Returns facilitator status and metadata.
Response
{
"name": "OpenX402 Facilitator",
"version": "2.0.0",
"x402Version": 2,
"status": "healthy",
"endpoints": {
"verify": "/verify",
"settle": "/settle",
"supported": "/supported",
"discovery": "/discovery/resources",
"list": "/list",
"whitelist": "/whitelist/:address",
"register": "https://openx402.ai/register"
},
"networks": ["eip155:8453", "eip155:143", "eip155:84532", "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp"],
"schemes": ["exact"],
"features": [
"EIP-3009 TransferWithAuthorization",
"Solana SPL Token TransferChecked",
"CAIP-2 network identifiers",
"v2 HTTP headers",
"Discovery extension",
"v1 backward compatibility"
]
}GET /supported
Returns the list of supported payment methods, networks, and the facilitator's signer address.
Response
{
"kinds": [
{
"x402Version": 2,
"scheme": "exact",
"network": "eip155:8453",
"extra": {
"name": "USD Coin",
"version": "2",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
}
},
{
"x402Version": 2,
"scheme": "exact",
"network": "eip155:143",
"extra": {
"name": "USDC",
"version": "2",
"asset": "0x754704Bc059F8C67012fEd69BC8A327a5aafb603"
}
},
{
"x402Version": 2,
"scheme": "exact",
"network": "eip155:84532",
"extra": {
"name": "USD Coin",
"version": "2",
"asset": "0x036CbD53842c5426634e7929541eC2318f3dCF7e"
}
},
{
"x402Version": 2,
"scheme": "exact",
"network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
"extra": {
"name": "USDC",
"asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"feePayer": "5xvht4fYDs99yprfm4UeuHSLxMBRpotfBtUCQqM3oDNG"
}
}
],
"extensions": ["discovery"],
"signers": {
"eip155:*": ["0x97316FA4730BC7d3B295234F8e4D04a0a4C093e8"]
}
}POST /verify
Verifies a signed payment authorization without settling it on-chain. The middleware calls this to validate the payment before serving the protected resource.
Request Body
{
"paymentPayload": {
"x402Version": 2,
"resource": {
"url": "https://api.example.com/resource",
"description": "API access",
"mimeType": "application/json"
},
"accepted": {
"scheme": "exact",
"network": "eip155:8453",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"amount": "100000",
"payTo": "0xRecipient",
"maxTimeoutSeconds": 300,
"extra": {
"name": "USD Coin",
"version": "2"
}
},
"payload": {
"signature": "0x...",
"authorization": {
"from": "0xPayer",
"to": "0xRecipient",
"value": "100000",
"validAfter": "0",
"validBefore": "1700000000",
"nonce": "0x..."
}
}
},
"paymentRequirements": {
"scheme": "exact",
"network": "eip155:8453",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"amount": "100000",
"payTo": "0xRecipient",
"maxTimeoutSeconds": 300,
"extra": {
"name": "USD Coin",
"version": "2"
}
}
}Response (Success)
{
"isValid": true,
"payer": "0xPayerAddress"
}Response (Failure)
{
"isValid": false,
"invalidReason": "amount_too_low",
"invalidMessage": "Payment amount is less than required"
}POST /settle
Settles the payment on-chain by executing the transferWithAuthorization call on the USDC contract (EVM) or submitting the TransferChecked transaction (Solana).
Request Body
Same format as /verify.
Response (Success)
{
"success": true,
"transaction": "0xTransactionHash",
"network": "eip155:8453",
"payer": "0xPayerAddress"
}For Solana settlements, transaction is a Solana transaction signature:
{
"success": true,
"transaction": "4TH8CXutYEdMnJPTAHQqBRBpVRzJAz7USG24HYP9U43y...",
"network": "solana",
"payer": "5xvht4fYDs99yprfm4UeuHSLxMBRpotfBtUCQqM3oDNG"
}Response (Failure)
{
"success": false,
"errorReason": "settlement_failed",
"errorMessage": "Settlement processing failed",
"transaction": "",
"network": "",
"payer": ""
}GET /whitelist/:address
Check if an address is registered as a whitelisted payment receiver.
Response
{
"whitelisted": true,
"address": "0xRecipient"
}GET /discovery/resources
Lists registered resources using the discovery extension. Supports pagination.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
offset | number | Pagination offset (default: 0) |
limit | number | Max results per page (default: 100) |
Response
{
"x402Version": 2,
"items": [
{
"x402Version": 2,
"type": "http",
"resource": "https://api.example.com/resource",
"accepts": [
{
"scheme": "exact",
"network": "eip155:8453",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"amount": "10000",
"payTo": "0xRecipient",
"maxTimeoutSeconds": 60,
"extra": { "name": "USD Coin", "version": "2" }
}
],
"metadata": {},
"lastUpdated": "2026-01-01T00:00:00.000Z"
}
],
"pagination": {
"limit": 100,
"offset": 0,
"total": 1
}
}Error Codes
| Error | Description |
|---|---|
unsupported_scheme | Payment scheme is not exact |
unsupported_network | Network not supported by this facilitator |
amount_too_low | Payment amount less than required |
recipient_mismatch | to address doesn't match payTo |
expired | Authorization has expired (validBefore in the past) |
invalid_signature | EIP-3009 signature verification failed |
nonce_already_used | The authorization nonce was already settled |
settlement_failed | On-chain transaction reverted |
rate_limited | Too many settle requests (10/min per payer) |
insufficient_balance | Payer doesn't have enough USDC |
Backward Compatibility
The facilitator also supports POST /v1/verify and POST /v1/settle for x402 v1 payloads. V1 requests are automatically converted to v2 format internally.
For Solana networks, both CAIP-2 identifiers (e.g. solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp) and legacy names (solana, solana-devnet) are accepted in verify and settle requests. CAIP-2 identifiers are automatically normalized to legacy format internally before processing.