Parallel x402 facilitator
The payment service behind Parallel's x402 stack. An agent signs a payment credential, the facilitator verifies it and settles it on-chain, and the merchant is paid — without the agent ever holding native gas on Base, HyperEVM or Avalanche.
x402 is the HTTP 402 Payment Required flow for machine-to-machine payments:
a merchant answers an unpaid request with the payment it will accept, the agent signs an
EIP-712 authorization, and a facilitator does the on-chain work. This host is Parallel's
facilitator. It is an off-chain service; it does not custody funds, and it never asks an
agent for a private key.
Endpoints
| Method | Path | What it does |
|---|---|---|
POST | /x402/verify | Phase 1 — validate the signed credential and reserve the nonce. No on-chain transaction. |
POST | /x402/settle | Phase 2 — submit the payment on-chain and return the transaction hash. |
GET | /x402/verify?txHash=&chain= | Confirm a settled payment on-chain. |
POST | /mpp/verify · /mpp/settle | Same two phases for MPP charge intents; settle returns a signed receipt. |
GET | /capabilities?chain= | Payment routes available right now, with gas estimates and burn fees. |
GET | /quota?address=&chain= | Gas sponsoring quota left for an address this month. |
GET | /cashback/usage · /cashback/history | Cashback accrued by an address, current period or all periods. |
GET | /health | RPC, database and relayer status. |
network is a chain slug — ethereum, base,
avalanche, hyperevm — not a CAIP-2 identifier.
Try it
curl -sS 'https://agents.parallel.best/capabilities?chain=base'
{
"chain": "base",
"chainId": 8453,
"parallelizerDeployed": true,
"capabilities": [
{ "route": "A", "method": "transferWithAuthorization",
"tokenIn": "USDp", "tokenOut": "USDp",
"gasEstimate": 65000, "gasSponsored": true, "burnFee": "0%" },
{ "route": "B", "method": "swapExactOutputWithAuthorization",
"tokenIn": "USDp", "tokenOut": "USDC",
"gasEstimate": 120000, "gasSponsored": true, "burnFee": "0.00%" }
]
}
Charge for an API
Merchants do not call this service directly — the middleware does it for them. It is MIT-licensed and published on npm:
npm install @parallel-protocol/x402
import express from "express";
import { paymentMiddleware } from "@parallel-protocol/x402/express";
const app = express();
app.use(
paymentMiddleware({
facilitator: { url: "https://agents.parallel.best" },
routes: {
"/api/data": {
price: "0.01", // 0.01 USDp
network: "base",
payTo: "0xYourAddress",
},
},
}),
);
Express, Next.js, Fastify and Hono adapters ship in the same package.
What an agent can pay with
- An agent pays in USDp, USDC or sUSDp. What the merchant receives is a separate question: the facilitator picks a route that converts on the way through, so a merchant can be paid in a backing token it accepts.
- Routes are selected automatically from the pair (what the agent holds, what the merchant accepts) — a direct transfer, a swap, an ERC-4626 deposit or redeem, or a combination settled atomically.
- Gas sponsoring covers Base, HyperEVM and Avalanche, within a monthly
per-address quota you can read at
/quota. Ethereum is supported but not sponsored.
Facts worth getting right
- The settlement smart contracts are audited by Bailsec, Cyfrin and Certora. This facilitator is an off-chain service and is not audited.
- The Parallel SDKs are MIT-licensed. The facilitator itself is not open source and is not self-hostable.
- USDp is deployed on 24 chains. The Parallelizer (mint/redeem) and the Savings module are live on 4: Ethereum, Base, Avalanche and HyperEVM.
Elsewhere
| Documentation | docs.parallel.best |
|---|---|
| Protocol | parallel.best |
| MCP server | mcp.parallel.best |
| Merchant SDK | @parallel-protocol/x402 |
| Agent starter | parallel-x402-agent-starter |
| For LLMs | llms.txt · .well-known/x402 |