Documentation Index
Fetch the complete documentation index at: https://docs.x402.org/llms.txt
Use this file to discover all available pages before exploring further.
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:8453 for Base)
- Solana:
solana:<genesisHash> (first 32 bytes of the genesis block hash)
- TON (TVM):
tvm:<workchain> (e.g., tvm:-239 for mainnet, tvm:-3 for testnet)
- Algorand:
algorand:<genesisHash> (base64-encoded genesis hash)
- Stellar:
stellar:<network> (pubnet or testnet)
- Aptos:
aptos:<chainId> (e.g., aptos:1 for mainnet)
- Hedera:
hedera:<network> (mainnet or testnet)
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 |
Facilitators support networks, not specific tokens — any compatible token works on any facilitator that supports that network.
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 |
Both methods provide gasless transfers (facilitator sponsors gas), signature-based authorization, and secure payments. EIP-3009 is preferred when available (simpler, no approval step). Permit2 serves as the universal fallback.
Permit2 approval: Requires a one-time onchain approval. x402 supports two gas sponsoring extensions that make this step gasless — see EIP-2612 Gas Sponsoring and ERC-20 Approval Gas Sponsoring.
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
You can retrieve these from any block explorer:
- Name: Read the
name() function - Example on Basescan
- Version: Read the
version() function - Example on Basescan
These values are used in the eip712 nested object when configuring TokenAmount:
{
eip712: {
name: "USD Coin", // From name() function
version: "2" // From version() function
}
}
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 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 |
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 |
HBAR (native token) is also supported using asset ID 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.
import { x402ResourceServer, HTTPFacilitatorClient } from "@x402/core/server";
import { ExactEvmScheme } from "@x402/evm/exact/server";
const facilitatorClient = new HTTPFacilitatorClient({
url: "https://your-facilitator.com" // Facilitator that supports your network
});
const server = new x402ResourceServer(facilitatorClient);
server.register("eip155:*", new ExactEvmScheme());
const routes = {
"GET /api/data": {
accepts: [{
scheme: "exact",
price: "$0.001",
network: "eip155:43114", // Avalanche mainnet
payTo: "0xYourAddress",
}],
},
};
import (
x402http "github.com/x402-foundation/x402/go/http"
evm "github.com/x402-foundation/x402/go/mechanisms/evm/exact/server"
)
facilitatorClient := x402http.NewHTTPFacilitatorClient(&x402http.FacilitatorConfig{
URL: "https://your-facilitator.com",
})
schemes := []ginmw.SchemeConfig{
{Network: x402.Network("eip155:43114"), Server: evm.NewExactEvmScheme()}, // Avalanche
}
from x402.http import FacilitatorConfig, HTTPFacilitatorClient, PaymentOption
from x402.http.types import RouteConfig
from x402.mechanisms.evm.exact import ExactEvmServerScheme
from x402.server import x402ResourceServer
facilitator = HTTPFacilitatorClient(
FacilitatorConfig(url="https://your-facilitator.com")
)
server = x402ResourceServer(facilitator)
server.register("eip155:43114", ExactEvmServerScheme()) # Avalanche mainnet
routes: dict[str, RouteConfig] = {
"GET /api/data": RouteConfig(
accepts=[
PaymentOption(
scheme="exact",
price="$0.001",
network="eip155:43114",
pay_to="0xYourAddress",
),
],
),
}
Key Points:
- 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)
- 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 | 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
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; explicit TokenAmount works 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
Next, explore: