> ## 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.

# Networks & Token Support

> This page explains which blockchain networks and tokens are supported by x402, and how to extend support to additional networks.

## Network Identifiers (CAIP-2)

x402 uses [CAIP-2](https://chainagnostic.org/CAIPs/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)
* **Hedera**: `hedera:<network>` (`mainnet` or `testnet`)

## Token Support

x402 supports tokens on EVM, Solana, 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                       |
| **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](https://docs.uniswap.org/contracts/v4/deployments) 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](/extensions/eip2612-gas-sponsoring) and [ERC-20 Approval Gas Sponsoring](/extensions/erc20-approval-gas-sponsoring).

### Specifying Payment Amounts

When configuring payment requirements, you have two options:

1. **Price String** (e.g., `"$0.01"`) — The system uses the chain's [default stablecoin](#default-assets-for-dollar-string-pricing). Only works on chains with a configured default.
2. **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:

1. **Token Address**: The contract address of your ERC-20 token
2. **EIP-712 Name**: The token's name for EIP-712 signatures
3. **EIP-712 Version**: The token's version for EIP-712 signatures

You can retrieve these from any block explorer:

1. **Name**: Read the `name()` function - [Example on Basescan](https://basescan.org/token/0x833589fcd6edb6e08f4c7c32d4f71b54bda02913#readProxyContract#F16)
2. **Version**: Read the `version()` function - [Example on Basescan](https://basescan.org/token/0x833589fcd6edb6e08f4c7c32d4f71b54bda02913#readProxyContract#F24)

These values are used in the `eip712` nested object when configuring TokenAmount:

```typescript theme={null}
{
  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](#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 |

### 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        |

### 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:

1. **[Runtime Registration](#runtime-registration)** — use any network in your own server code without modifying the x402 source. No PR required.
2. **[Contributing a New Default Asset](#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.

<Tabs>
  <Tab title="TypeScript">
    ```typescript theme={null}
    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",
        }],
      },
    };
    ```
  </Tab>

  <Tab title="Go">
    ```go theme={null}
    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
    }
    ```
  </Tab>

  <Tab title="Python">
    ```python theme={null}
    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",
                ),
            ],
        ),
    }
    ```
  </Tab>
</Tabs>

**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](#default-assets-for-dollar-string-pricing) so that dollar-string pricing (`"$0.01"`) works out of the box, open a PR against [x402-foundation/x402](https://github.com/x402-foundation/x402). Follow the cross-SDK walkthrough in [DEFAULT\_ASSETS.md](https://github.com/x402-foundation/x402/blob/main/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](https://www.x402.org/ecosystem?filter=facilitators).

### 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](https://www.x402.org/ecosystem?filter=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](https://www.x402.org/ecosystem?filter=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](https://x.com/jaycoolh/status/1920851551905575164/video/1)

**Prerequisites**

1. Access to an RPC endpoint for your target network
2. A wallet with native tokens for gas sponsorship
3. The x402 facilitator code

## Getting Help

* Join the [x402 Discord community](https://discord.gg/cdp)
* Check the [x402 GitHub repository](https://github.com/x402-foundation/x402)

## Summary

Key takeaways:

* **Any EVM chain** is supported via `eip155:<chainId>` — plus Solana, Stellar, Aptos, and Hedera
* [Default assets](#default-assets-for-dollar-string-pricing) 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:

* [Quickstart for Sellers](/getting-started/quickstart-for-sellers) — Start accepting payments on supported networks
* [Core Concepts](/core-concepts/http-402) — Learn how x402 works under the hood
* [Facilitator](/core-concepts/facilitator) — Understand the role of facilitators
* [MCP Server](/guides/mcp-server-with-x402) — Set up AI agents to use x402 payments
