Skip to main content
The x402Go facilitator has three endpoints. The x402 SDKs (HTTPFacilitatorClient) call them for you, so most integrations never construct these requests by hand. This page is for when you need the exact formats, are debugging, or are calling the API directly.

Base URL

Authentication

Send your API key in the x-api-key header on /verify and /settle. Get the key from your x402Go dashboard. Authorization: Bearer YOUR_X402GO_API_KEY is also accepted.
Keep the key on your backend, never in browser or mobile code. GET /supported is public, and sending the key there is harmless. A request with a missing or unknown key returns 401:
Your key is tied to your account. A payment is accepted only if its payTo is your own payment address. Anything else is rejected with invalid_pay_to.

Choosing a network

Every endpoint also works under a network prefix, for example POST /celo/settle or GET /celo-sepolia/supported. The prefix is optional because the network is also in the payment itself. If you use one, it must match the payment’s network, or the request fails with invalid_network. A network can be written as a name or as a CAIP-2 identifier:

Endpoints

GET /supported

Returns what the facilitator accepts right now. Check it before you configure a token.
Tokens appear here only when x402Go has set a fee for them. A newly added token can take about a minute to show up. v1 entries list only eip3009 tokens, because permit2 needs v2. An unknown network returns 400:

POST /verify

Checks that a payment is valid and matches your requirements. Nothing is submitted on-chain. Request
paymentRequirements must match paymentPayload.accepted. Amounts are in the token’s smallest unit. Response
An invalid payment still returns 200. Check isValid.
Tokens whose assetTransferMethod is permit2 use a different payload. The payer must have approved Permit2 on the token beforehand, or verification fails with permit2_allowance_required.
Set extra.assetTransferMethod to "permit2" in both accepted and paymentRequirements.
v1 puts scheme and network on the payload, and requirements use maxAmountRequired instead of amount. v1 supports eip3009 tokens only.

POST /settle

Completes the payment on-chain. The request body is the same as /verify. x402Go checks the payment again before it submits anything, because things can change between the two calls. Response
How settlement behaves:
  • One transaction. The payment is collected and split between your payout wallet and the fee in a single transaction. Your first payment on a network also creates your payment address on-chain, so it takes a little longer.
  • Timeouts. Settlement can wait up to about a minute for confirmation. Set your HTTP timeout above 60 seconds, for example 90.
  • Retries are safe for successful payments. Sending the same payment again returns the original result. A failed attempt can be retried.
  • If the response has a transaction but success is false, the transaction may still land. Look the hash up on Celoscan before you retry or refuse the request.

Status codes

Error reasons

invalidReason (from /verify) and errorReason (from /settle) use the same values. Each response may also include an invalidMessage or errorMessage with more detail.