Network Identifiers (CAIP-2)
x402 uses CAIP-2 standard network identifiers (namespace:reference) for unambiguous cross-chain support:
- EVM networks:
eip155:<chainId>— any EVM chain is supported (e.g.,eip155:8453for Base) - Solana:
solana:<genesisHash>(first 32 bytes of the genesis block hash) - TON (TVM):
tvm:<workchain>(e.g.,tvm:-239for mainnet,tvm:-3for testnet) - Algorand:
algorand:<genesisHash>(base64-encoded genesis hash) - Stellar:
stellar:<network>(pubnetortestnet) - Aptos:
aptos:<chainId>(e.g.,aptos:1for mainnet) - Hedera:
hedera:<network>(mainnetortestnet)
Token Support
x402 supports tokens on EVM, Solana, TON, Stellar, Aptos, and Hedera networks:| Ecosystem | Supported Tokens | Transfer Method |
|---|---|---|
| EVM | Any ERC-20 token | EIP-3009 or Permit2 |
| Solana | Any SPL or Token-2022 token | SPL Transfer |
| TON (TVM) | Any TEP-74 jetton (e.g., USDT) | Signed W5R1 internal message |
| Stellar | Any Soroban token implementing SEP-41 | transfer(from, to, amount) |
| Aptos | Any fungible asset | primary_fungible_store::transfer |
| Hedera | HBAR or any HTS fungible token | Hedera Transfer Transaction |
EVM: Asset Transfer Methods
x402 supports two asset transfer methods on EVM, selected automatically based on token capabilities:| Method | When Used | How It Works |
|---|---|---|
| EIP-3009 | Tokens with transferWithAuthorization (e.g., USDC) | Single off-chain signature, simplest flow |
| Permit2 | Any ERC-20 token | Uses Uniswap’s Permit2 contract + x402ExactPermit2Proxy |
EVM: Batch settlement (batch-settlement)
For high-frequency or repeated micropayment flows where settling every request onchain is too costly, x402 supports the batch-settlement scheme on EVM: the buyer deposits once into an escrow contract, signs off-chain vouchers per request, and sellers redeem in batches onchain. Per-request pricing still uses an up-to ceiling (PaymentRequirements.amount); actual charges can vary per request within that limit—see Batch settlement.
Specifying Payment Amounts
When configuring payment requirements, you have two options:- Price String (e.g.,
"$0.01") — The system uses the chain’s default stablecoin. Only works on chains with a configured default. - TokenAmount — Specify exact
amountInAtomicUnits+ asset address. Works on any chain with no configuration needed.
Using Custom ERC-20 Tokens
To use a custom ERC-20 token, you need three key pieces of information:- Token Address: The contract address of your ERC-20 token
- EIP-712 Name: The token’s name for EIP-712 signatures
- EIP-712 Version: The token’s version for EIP-712 signatures
- Name: Read the
name()function - Example on Basescan - Version: Read the
version()function - Example on Basescan
eip712 nested object when configuring TokenAmount:
Default Assets for Dollar-String Pricing
When you use"$0.01" syntax, x402 needs to know which stablecoin to use. The following chains have pre-configured defaults. For chains not listed, use registerMoneyParser() or specify the price directly as a TokenAmount with amountInAtomicUnits. To contribute a new default asset, see Contributing a New Default Asset below.
EVM
| Chain | CAIP-2 | Token Address | EIP-712 Name | Decimals | Transfer Method |
|---|---|---|---|---|---|
| Base | eip155:8453 | 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 | USD Coin | 6 | EIP-3009 |
| Base Sepolia | eip155:84532 | 0x036CbD53842c5426634e7929541eC2318f3dCF7e | USDC | 6 | EIP-3009 |
| Polygon | eip155:137 | 0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359 | USD Coin | 6 | EIP-3009 |
| Arbitrum One | eip155:42161 | 0xaf88d065e77c8cC2239327C5EDb3A432268e5831 | USD Coin | 6 | EIP-3009 |
| Arbitrum Sepolia | eip155:421614 | 0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d | USD Coin | 6 | EIP-3009 |
| Monad | eip155:143 | 0x754704Bc059F8C67012fEd69BC8A327a5aafb603 | USD Coin | 6 | EIP-3009 |
| Stable | eip155:988 | 0x779Ded0c9e1022225f8E0630b35a9b54bE713736 | USDT0 | 6 | EIP-3009 |
| Stable Testnet | eip155:2201 | 0x78Cf24370174180738C5B8E352B6D14c83a6c9A9 | USDT0 | 6 | EIP-3009 |
| MegaETH | eip155:4326 | 0xFAfDdbb3FC7688494971a79cc65DCa3EF82079E7 | MegaUSD | 18 | Permit2 + EIP-2612 |
| Mezo | eip155:31612 | 0xdD468A1DDc392dcdbEf6db6e34E89AA338F9F186 | Mezo USD | 18 | Permit2 + EIP-2612 |
| Mezo Testnet | eip155:31611 | 0x118917a40FAf1CD7a13dB0Ef56C86De7973Ac503 | Mezo USD | 18 | Permit2 + EIP-2612 |
| Radius | eip155:723487 | 0x33ad9e4BD16B69B5BFdED37D8B5D9fF9aba014Fb | Stable Coin | 6 | Permit2 + EIP-2612 |
| Radius Testnet | eip155:72344 | 0x33ad9e4BD16B69B5BFdED37D8B5D9fF9aba014Fb | Stable Coin | 6 | Permit2 + EIP-2612 |
| ADI Chain | eip155:36900 | 0x9cb8142aEBBcdc60AF7c97Af897A67A8f3CA71C2 | USDC.e | 6 | EIP-3009 |
| HPP | eip155:190415 | 0x401eCb1D350407f13ba348573E5630B83638E30D | Bridged USDC | 6 | EIP-3009 |
| HPP Sepolia | eip155:181228 | 0x401eCb1D350407f13ba348573E5630B83638E30D | Bridged USDC | 6 | EIP-3009 |
| XDC Network | eip155:50 | 0xfA2958CB79b0491CC627c1557F441eF849Ca8eb1 | USDC | 6 | EIP-3009 |
| XDC Apothem Testnet | eip155:51 | 0xb5AB69F7bBada22B28e79C8FFAECe55eF1c771D4 | USDC | 6 | EIP-3009 |
Solana (SVM)
| Chain | CAIP-2 | Token Mint | Decimals |
|---|---|---|---|
| Solana Mainnet | solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp | EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v (USDC) | 6 |
| Solana Devnet | solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1 | 4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU (USDC) | 6 |
TON (TVM)
| Chain | CAIP-2 | Jetton Minter | Decimals |
|---|---|---|---|
| TON Mainnet | tvm:-239 | EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs (USDT) | 6 |
| TON Testnet | tvm:-3 | kQDNUDJC0iQvJoZp0ml-YteL1NtTXKphU03CTI5v4VtBhGYs (USDT) | 6 |
Algorand (AVM)
| Chain | CAIP-2 | ASA ID | Decimals |
|---|---|---|---|
| Algorand Mainnet | algorand:wGHE2Pwdvd7S12BL5FaOP20EGYesN73ktiC1qzkkit8= | 31566704 (USDC) | 6 |
| Algorand Testnet | algorand:SGO1GKSzyE7IEPItTxCByw9x8FmnrCDexi9/cOUJOiI= | 10458941 (USDC) | 6 |
Stellar
| Chain | CAIP-2 | Token Contract | Decimals |
|---|---|---|---|
| Stellar Pubnet | stellar:pubnet | CCW67TSZV3SSS2HXMBQ5JFGCKJNXKZM7UQUWUZPUTHXSTZLEO7SJMI75 (USDC) | 7 |
| Stellar Testnet | stellar:testnet | CBIELTK6YBZJU5UP2WWQEUCYKLPU6AUNZ2BQ4WWFEIE3USCIHMXQDAMA (USDC) | 7 |
Aptos
| Chain | CAIP-2 | Fungible Asset Address | Decimals |
|---|---|---|---|
| Aptos Mainnet | aptos:1 | 0xbae207659db88bea0cbead6da0ed00aac12edcdda169e591cd41c94180b46f3b (USDC) | 6 |
| Aptos Testnet | aptos:2 | 0x69091fbab5f7d635ee7ac5098cf0c1efbe31d68fec0f2cd565e8d168daf52832 (USDC) | 6 |
Hedera
| Chain | CAIP-2 | Token ID | Decimals |
|---|---|---|---|
| Hedera Mainnet | hedera:mainnet | 0.0.456858 (USDC) | 6 |
| Hedera Testnet | hedera:testnet | 0.0.429274 (USDC) | 6 |
0.0.0, with amounts in tinybars (1 HBAR = 10⁸ tinybars).
Adding Support for New Networks
There are two distinct paths, depending on your goal:- Runtime Registration — use any network in your own server code without modifying the x402 source. No PR required.
- Contributing a New Default Asset — upstream a chain so it appears in the default-asset tables above and supports
"$0.01"dollar-string pricing out of the box. Requires a PR updating the TypeScript, Go, and Python SDK registries.
Runtime Registration
x402 uses dynamic network registration — you can support any EVM network without modifying source files.- TypeScript
- Go
- Python
- Use CAIP-2 format:
eip155:<chainId>for any EVM network - The scheme implementation handles the network automatically
- You only need a facilitator that supports your target network (or run your own)
Contributing a New Default Asset
To add a chain to the default-asset tables above so that dollar-string pricing ("$0.01") works out of the box, open a PR against x402-foundation/x402. Follow the cross-SDK walkthrough in DEFAULT_ASSETS.md, which names every file in the TypeScript, Go, and Python registries that must be updated.
Facilitators
Network support in x402 depends on which facilitator you use. See Facilitators for recommended production options.x402.org Facilitator
- Supports:
eip155:84532(Base Sepolia),solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1(Solana Devnet),stellar:testnet(Stellar Testnet),aptos:2(Aptos Testnet),hedera:testnet(Hedera Testnet) - Notes: Recommended for testing and development. This is the default facilitator in the x402 packages and requires no setup.
Production Facilitators
Multiple production-ready facilitators are available supporting various networks including Base, Solana, Polygon, Avalanche, and more. See Facilitators for available options.Quick Reference
| Facilitator Type | Networks Supported | Production Ready | Requirements |
|---|---|---|---|
| x402.org (Default) | eip155:84532, solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1, stellar:testnet, aptos:2, hedera:testnet | Testnet only | None |
| Production Facilitators | Various (Base, Solana, Polygon, Avalanche, etc.) | Yes | Varies |
| Self-hosted | Any network | Yes | Technical setup |
Running Your Own Facilitator
If you need immediate support or want to test before contributing, you can run your own facilitator. Video Guide: Adding EVM Chains to x402 Prerequisites- Access to an RPC endpoint for your target network
- A wallet with native tokens for gas sponsorship
- The x402 facilitator code
Getting Help
- Join the x402 Discord community
- Check the x402 GitHub repository
Summary
Key takeaways:- Any EVM chain is supported via
eip155:<chainId>— plus Solana, TON (TVM), Algorand, Stellar, Aptos, and Hedera - Default assets are a convenience for
"$0.01"dollar-string pricing; explicitTokenAmountworks on any chain - Any ERC-20 token works on any EVM facilitator (via EIP-3009 or Permit2)
- CAIP-2 identifiers provide unambiguous cross-chain support
- Quickstart for Sellers — Start accepting payments on supported networks
- Core Concepts — Learn how x402 works under the hood
- Facilitator — Understand the role of facilitators
- MCP Server — Set up AI agents to use x402 payments