PipRail

28 chains · 10 families · one parameter

Every chain that matters, one line.

PipRail accepts and makes x402 payments on 19 EVM mainnets plus Solana, TON, Tron, NEAR, Sui, Aptos, Algorand, Stellar, and the XRP Ledger — 28 chains in all. USDC almost everywhere, USDT on most, the native coin on every one, any other token by address. Switch by changing a single string.

Not on the list? Still works.

Built-in presets are a convenience, not an allowlist. Any other EVM chain works by passing a { id, rpcUrl } and the token by address; the non-EVM families auto-mount the moment you name one.

Any other EVM chain

// Any chain we don't ship — no allowlist.
requirePayment({
  chain: { id: 1313161554, rpcUrl: 'https://…' },
  token: { address: '0x…', decimals: 6 },
  amount: '0.05', payTo,
})

Beyond EVM — auto-mounts on first use

// Name the chain — pay in its
// stablecoin, or its native coin.
requirePayment({
  chain: 'solana', token: 'USDC',
  amount: '0.05', payTo,
})
requirePayment({
  chain: 'sui', token: 'native',
  amount: '0.5', payTo, // pay in SUI
})

One-time setup, where it applies.

Most chains need nothing beyond a wallet — pay in the native coin or a stablecoin, anywhere. These are the only chains with a one-time, recipient-side step. The native coin is always zero-setup.

Full per-chain setup, wallet formats, and proof-binding notes: CHAINS.md →

Chains FAQ.

Coverage, tokens, and the handful of one-time setup steps.

Which chains and tokens does PipRail support?

28 chains across 10 families: 19 EVM mainnets (Ethereum, Base, Arbitrum, Optimism, Polygon, BNB Chain, Avalanche, HyperEVM, Monad, Mantle, Sonic, Linea, Scroll, Celo, zkSync, Unichain, World Chain, Sei, Injective) plus Solana, TON, Tron, NEAR, Sui, Aptos, Algorand, Stellar, and the XRP Ledger. USDC almost everywhere, USDT on most chains, EURC on Stellar, RLUSD on XRPL, the native coin on every chain, or any other token by address. One parameter — chain — picks everything.

Do any chains need extra setup before they work?

Most don't — on EVM, Solana, Sui, and Aptos you install, add a wallet, and pay or get paid with no extra steps, in the native coin or a stablecoin. A few have one-time caveats. On Algorand, native ALGO is the zero-setup path, while receiving USDC needs a one-time ASA opt-in on the recipient. TON ships USD₮ (no native USDC) and needs an API-keyed RPC — one parameter, rpcUrl with a free toncenter key in the URL. Tron pays in USD₮ or native TRX, and gas is real TRX. On NEAR, native NEAR is zero-setup while a NEP-141 token like USDC needs a one-time storage_deposit on the recipient. Stellar and the XRP Ledger require the recipient to hold a one-time trustline and to be an activated, reserve-funded account; native XLM/XRP need no trustline. Native coin is a valid payment asset on every chain. Full per-chain setup and wallet formats are in CHAINS.md.

Can I use a chain PipRail doesn't ship a preset for?

Yes — there is no allowlist. Any other EVM chain works by passing a viem Chain or a plain { id, rpcUrl }, with the token as { address, decimals }. Built-in presets (with canonical USDC pre-filled) are a convenience, not a gate. Non-EVM families auto-mount: name a non-EVM chain and the SDK lazily imports just that family's libraries on first use, so pure-EVM installs stay lean.

How do I accept several chains in one request?

Pass an accept array to requirePayment or createPaymentGate — one challenge that offers several chains/tokens under a shared nonce, and the paying agent picks whatever it holds. Verification matches by network + asset and re-derives every field from its own trusted spec, so a forged echo can't redirect it and a proof can't be redeemed twice.

Pick a chain. Ship in one line.

The same integration pays and gets paid across all 28 — swap one word.