Built for Radius

Parallel x402 Payment
Facilitator

High-throughput stablecoin settlement for the Radius network. Wallet pooling, sub-second finality, and zero nonce conflicts.

POST /settle
Purpose-built for Radius
Radius isn't a typical blockchain. Its unique execution model makes it ideal for real-time payments — and this facilitator is designed to take full advantage.

Synchronous Settlement

On Radius, eth_sendRawTransaction returns only after the transaction is settled. No polling, no confirmations — your payment is final the instant you get a response.

$

Stablecoin Native

RUSD for gas, SBC for payments. No volatile tokens. The Turnstile mechanism auto-converts SBC to cover gas, so wallets always stay funded.

Parallel Wallet Pool

Traditional facilitators serialize through one wallet. This facilitator maintains thousands of HD-derived wallets, processing settlements concurrently with zero nonce conflicts.

<1s

Sub-Second Finality

Radius settles transactions in milliseconds. Combined with parallel wallet checkout, payment-to-receipt latency is measured in hundreds of milliseconds.

Auto-Scaling

The wallet pool grows automatically when utilization exceeds 80%. Gas funding, stale wallet recovery, and balance syncing are all handled in the background.

🔒

Idempotent & Secure

Every settlement is keyed by keccak256(payload + sig). Duplicate requests return cached results. Private keys are AES-256-GCM encrypted at rest.

How x402 Payments Work
x402 extends HTTP with native payment negotiation. A server returns 402 Payment Required, the client signs a stablecoin authorization, and the facilitator settles it on-chain.
1

Client requests a paid resource

The resource server responds with 402 Payment Required and an X-PAYMENT header describing the price, token, and recipient.

2

Client signs a payment authorization

Using EIP-3009 transferWithAuthorization or EIP-2612 permit, the client signs an EIP-712 message authorizing the exact payment — no on-chain transaction needed from the client.

3

Resource server forwards to the facilitator

The signed authorization is sent to POST /settle. The facilitator verifies the signature, amount, recipient, time window, nonce, and balance.

4

Facilitator settles on-chain

A wallet is checked out from the pool, the authorization is submitted to Radius, and settlement is confirmed synchronously. The wallet is released back to the pool immediately.

5

Client gets the resource

The facilitator returns a transaction hash. The resource server delivers the content. The entire flow completes in under a second.

Endpoints
The facilitator exposes a minimal HTTP API. Integrate with any language or framework.
POST /settle Verify and settle a signed payment on-chain
POST /verify Validate a payment signature without settling
GET /supported List supported networks, tokens, and EIP schemes
GET /health Instance status and wallet pool utilization
Getting Started
Integrate x402 payments into your application in three steps.

1. Check supported tokens

curl https://facilitator.radiustech.xyz/supported

2. Return 402 from your resource server

// When a client requests a paid resource:
const paymentHeader = Buffer.from(JSON.stringify({
  x402Version: 1,
  accepts: [{
    scheme: "exact",
    network: "eip155:723487",
    maxAmountRequired: "100000",  // 0.1 SBC
    asset: "0x33ad9e4BD16B69B5BFdED37D8B5D9fF9aba014Fb",
    payTo: YOUR_WALLET_ADDRESS,
    maxTimeoutSeconds: 60,
  }]
})).toString("base64");

res.status(402)
   .set("X-PAYMENT", paymentHeader)
   .send("Payment Required");

3. Settle the signed payment

// When the client retries with a signed authorization:
const response = await fetch("https://facilitator.radiustech.xyz/settle", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    payload: signedPayload,     // from client's X-PAYMENT header
    requirements: {
      network: "eip155:723487",
      tokenAddress: "0x33ad9e4BD16B69B5BFdED37D8B5D9fF9aba014Fb",
      amount: "100000",
      recipient: YOUR_WALLET_ADDRESS,
    },
    signature: clientSignature,
  })
});

const { success, txHash } = await response.json();
// success === true, txHash is the on-chain settlement