MeshGateway / Docs
Facilitator

x402 Facilitator

Verify and settle x402 exact-scheme payments through Mesh: no chain infra, gasless for buyers, non-custodial.

MeshGateway runs an open x402 facilitator at:

https://facilitator.meshgateway.co

A facilitator does the on-chain work of an x402 payment so resource servers don't have to. Your server receives a signed payment payload from a buyer and forwards it to the facilitator: /verify checks it, /settle broadcasts it. The facilitator wallet pays only gas. Funds always move directly from payer to merchant via the signed authorization, so the facilitator never holds or custodies funds.

Supported networks

NetworkCAIP-2AssetTransfer method
Baseeip155:8453USDCEIP-3009
Base Sepolia (testnet)eip155:84532USDCEIP-3009
Robinhood Chaineip155:4663USDGPermit2 (x402ExactPermit2Proxy)

Scheme: exact · Protocol: x402 v2.

Endpoints

GET /supported

Payment kinds, networks, and settlement signer addresses.

curl https://facilitator.meshgateway.co/supported
{
  "kinds": [
    { "x402Version": 2, "scheme": "exact", "network": "eip155:8453" },
    { "x402Version": 2, "scheme": "exact", "network": "eip155:84532" },
    { "x402Version": 2, "scheme": "exact", "network": "eip155:4663" }
  ],
  "extensions": [],
  "signers": { "eip155:*": ["0xc231248d8f821Cf5e03Dcc11A9258ff8596b1dc3"] }
}

POST /verify

Checks a signed payment payload against the payment requirements without settling: signature recovery, expiry window, payer balance, and a full on-chain simulation of the transfer.

{
  "x402Version": 2,
  "paymentPayload": { "x402Version": 2, "payload": { "..." : "..." }, "accepted": { "...": "..." } },
  "paymentRequirements": { "scheme": "exact", "network": "eip155:8453", "...": "..." }
}

Responds { "isValid": true, "payer": "0x..." }, or isValid: false with a machine-readable invalidReason (for example invalid_exact_evm_insufficient_balance).

POST /settle

Same request body as /verify. Re-verifies, then broadcasts the transfer from the facilitator wallet and waits for the receipt:

{ "success": true, "payer": "0x...", "transaction": "0x...", "network": "eip155:8453" }

If confirmation outlasts the request deadline the response reports the broadcast transaction hash with a pending status rather than failing.

Use it from a resource server

Any x402 v2 server SDK works. Point the facilitator config at Mesh:

import { x402HTTPResourceServer } from '@x402/core/http';

const server = new x402HTTPResourceServer({
  facilitator: { url: 'https://facilitator.meshgateway.co' },
  routes: {
    'GET /report': { price: '$0.01', network: 'eip155:8453' },
  },
});

For USDG on Robinhood Chain, price routes on eip155:4663. Buyers pay gasless in both cases: EIP-3009 and Permit2 authorizations are plain signatures, and the facilitator pays the settlement gas.

Guarantees and limits

  • Non-custodial. The settlement wallet can never move funds without a payer's signed authorization; it spends gas only.
  • Verified before settled. Every settle re-runs verification, including on-chain simulation, before broadcasting.
  • Replay-safe. EIP-3009 nonces and Permit2 nonces are enforced by the token contracts themselves; a payload can settle at most once.
  • Rate limits. Verify and settle are rate limited per client IP. If you need sustained throughput, contact us.

On this page