Use Arch Tools as your x402 facilitator. We verify payments, settle on-chain, and handle gas — so you can focus on building your API.
In the x402 protocol, a facilitator is a service that verifies and settles crypto payments on behalf of API servers. Instead of running your own blockchain nodes and implementing payment verification, you delegate that to us.
We validate signatures, check balances, prevent replay attacks, and confirm the payment meets your requirements.
We submit the payment transaction to the blockchain, pay gas fees, and wait for confirmation. You get the funds.
Neither you nor your customers need to hold native tokens. We handle gas costs, included in our fee.
Track your payments, revenue, top endpoints, and fees in real-time through our API.
POST archtools.dev/api/v1/facilitator/verifyPOST /api/v1/facilitator/settlecurl -X POST https://archtools.dev/api/v1/facilitator/register \
-H "Content-Type: application/json" \
-d '{
"name": "My API",
"email": "[email protected]",
"walletAddress": "0xYourWalletAddress",
"networks": ["eip155:8453"]
}'
Save the apiKey from the response — it's only shown once.
When a client sends an x402 payment to your API, forward it to us for verification:
curl -X POST https://archtools.dev/api/v1/facilitator/verify \
-H "Authorization: Bearer fac_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"payment": "<base64-encoded-payment-payload>",
"paymentDetails": {
"scheme": "exact",
"network": "eip155:8453",
"maxAmountRequired": "1000",
"resource": "https://myapi.com/v1/endpoint",
"payTo": "0xYourWalletAddress",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
}
}'
After fulfilling the request, settle the payment on-chain:
curl -X POST https://archtools.dev/api/v1/facilitator/settle \
-H "Authorization: Bearer fac_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"payment": "<base64-encoded-payment-payload>",
"paymentDetails": {
"scheme": "exact",
"network": "eip155:8453",
"maxAmountRequired": "1000",
"resource": "https://myapi.com/v1/endpoint",
"payTo": "0xYourWalletAddress",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
}
}'
curl https://archtools.dev/api/v1/facilitator/dashboard \
-H "Authorization: Bearer fac_your_api_key"
import express from "express";
import axios from "axios";
const FACILITATOR_URL = "https://archtools.dev/api/v1/facilitator";
const FACILITATOR_KEY = process.env.ARCH_FACILITATOR_KEY;
const MY_WALLET = process.env.MY_WALLET_ADDRESS;
// Middleware: check for x402 payment
async function x402Middleware(req, res, next) {
const payment = req.headers["x-payment"];
if (!payment) {
// Return 402 Payment Required
return res.status(402).json({
x402Version: 1,
accepts: [{
scheme: "exact",
network: "eip155:8453",
maxAmountRequired: "1000", // 0.001 USDC
resource: `https://myapi.com${req.path}`,
payTo: MY_WALLET,
asset: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
maxTimeoutSeconds: 60,
}],
});
}
// Verify payment with Arch Tools
const { data } = await axios.post(`${FACILITATOR_URL}/verify`, {
payment,
paymentDetails: {
scheme: "exact",
network: "eip155:8453",
maxAmountRequired: "1000",
resource: `https://myapi.com${req.path}`,
payTo: MY_WALLET,
asset: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
},
}, {
headers: { Authorization: `Bearer ${FACILITATOR_KEY}` },
});
if (!data.isValid) {
return res.status(402).json({ error: "payment_invalid", reason: data.invalidReason });
}
// Payment verified — proceed with request
req.x402Payment = payment;
next();
}
// After fulfilling request, settle payment
async function settleAfterResponse(req) {
if (!req.x402Payment) return;
await axios.post(`${FACILITATOR_URL}/settle`, {
payment: req.x402Payment,
paymentDetails: {
scheme: "exact",
network: "eip155:8453",
maxAmountRequired: "1000",
resource: `https://myapi.com${req.path}`,
payTo: MY_WALLET,
asset: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
},
}, {
headers: { Authorization: `Bearer ${FACILITATOR_KEY}` },
});
}
const app = express();
app.use(express.json());
app.post("/v1/my-tool", x402Middleware, async (req, res) => {
// Do your thing
const result = { ok: true, data: "Hello, paying customer!" };
res.json(result);
// Settle in background (don't block response)
settleAfterResponse(req).catch(console.error);
});
app.listen(3000);
Register as a new facilitator provider. No auth required.
| Field | Type | Required | Description |
|---|---|---|---|
| name | string | ✅ | Your API/company name |
| string | ✅ | Contact email | |
| walletAddress | string | ✅ | EVM wallet for receiving payments (0x...) |
| webhookUrl | string | — | URL for payment event webhooks |
| networks | string[] | — | Networks to enable (default: ["eip155:8453"]) |
| endpoints | object | — | Your endpoints and pricing |
Verify an x402 payment. Requires facilitator API key.
| Field | Type | Description |
|---|---|---|
| payment | string | Base64-encoded x402 payment payload |
| paymentDetails.scheme | string | "exact" |
| paymentDetails.network | string | Chain ID (e.g. "eip155:8453") |
| paymentDetails.maxAmountRequired | string | Minimum amount in atomic units |
| paymentDetails.resource | string | URL of the resource being paid for |
| paymentDetails.payTo | string | Your wallet address |
| paymentDetails.asset | string | Token contract address |
Settle a verified payment on-chain. Same request body as verify.
Get your payment stats, revenue, and recent transactions. Requires facilitator API key.
List all supported networks. No auth required.
Check facilitator service status. No auth required.
| Network | Chain ID | Token | Settlement Time |
|---|---|---|---|
| Base | eip155:8453 | USDC | ~2 seconds |
| Ethereum | eip155:1 | USDC | ~12 seconds |
| Arbitrum | eip155:42161 | USDC | ~2 seconds |
| Polygon | eip155:137 | USDC | ~2 seconds |
| Optimism | eip155:10 | USDC | ~2 seconds |
| Avalanche | eip155:43114 | USDC | ~2 seconds |
| Base Sepolia (testnet) | eip155:84532 | USDC | ~2 seconds |
Simple, transparent pricing. We take a small percentage of each settled payment.
| Tier | Monthly Payments | Fee |
|---|---|---|
| Free | Up to 100 | 0% (try it free) |
| Growth | 101 – 10,000 | 1.0% |
| Scale | 10,001 – 100,000 | 0.5% |
| Enterprise | 100,000+ | Custom (contact us) |
Gas fees are included — we pay for settlement. No hidden costs.
⚠️ Beta: This service is in beta. Settlement is available on Base mainnet. Other networks are in verification-only mode during beta. Contact us for enterprise needs.