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)
- Algorand:
algorand:<genesisHash> (base64-encoded genesis hash)
- Stellar:
stellar:<network> (pubnet or testnet)
- Aptos:
aptos:<chainId> (e.g., aptos:1 for mainnet)
Token Support
x402 supports tokens on EVM, Solana, Stellar, and Aptos networks:
| Ecosystem | Supported Tokens | Transfer Method |
|---|
| EVM | Any ERC-20 token | EIP-3009 or Permit2 |
| Solana | Any SPL or Token-2022 token | SPL Transfer |
| Stellar | Any Soroban token implementing SEP-41 | transfer(from, to, amount) |
| Aptos | Any fungible asset | primary_fungible_store::transfer |
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 on-chain approval. x402 supports two gas sponsoring extensions that make this step gasless — see EIP-2612 Gas Sponsoring and ERC-20 Approval Gas Sponsoring.
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 |
Solana (SVM)
| Chain | CAIP-2 | Token Mint | Decimals |
|---|
| Solana Mainnet | solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp | EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v (USDC) | 6 |
| Solana Devnet | solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1 | 4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU (USDC) | 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 |
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. For a complete list, see the x402 Ecosystem.
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 the x402 Ecosystem 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, Stellar, and Aptos
- 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: