Skip to main content
x402 payments settle on EVM-compatible blockchains in ERC-20 tokens, most commonly USDC. This page covers which networks and assets work, how they are identified, and how the testnet-only default protects you until you are ready for real value. For the terms used here, see x402 Concepts and Glossary.

How networks and assets are identified

A network is an EVM chain, written in CAIP-2 form as eip155:<chainId> in payment requirements (for example, eip155:8453 for Base). An asset is a token on one of those chains, identified to the facilitator by a Fireblocks-native asset ID such as USDC_BASE or USDC_BASECHAIN_ETH_TEST5_8SH8. The asset entry carries everything the facilitator needs: contract address, decimals, chain ID, and the EIP-712 domain fields used to verify signatures. The facilitator does not ship a fixed network list. It accepts any EVM asset you import from your Fireblocks workspace with x402 assets import, and fills the contract address, decimals, and chain ID from Fireblocks at import time. What you can settle is therefore what your Fireblocks workspace supports, subject to the testnet policy below.

Networks the agent signs on

The x402 Agent maps chain IDs to Fireblocks asset IDs for signing, which fixes the set of networks it pays on: Base and Base Sepolia are the common choice for x402 because settlement is fast and gas is a fraction of a cent.

Assets and pricing

The common payment asset is USDC, a USD-pegged stablecoin that implements EIP-3009 and so works with the default eip-3009 transfer mechanism. The facilitator also settles other ERC-20s through the Permit2 mechanisms. To be quotable, each imported asset needs one of two pricing signals:
  • stable: true for USD-pegged stablecoins, which the facilitator prices at 1:1 with USD without a network call.
  • price_symbol: "<coingecko-id>" for live-priced assets (for example, ethereum, weth, matic-network), which the facilitator converts at request time.
An asset with neither signal cannot be priced in USD and is dropped from a 402 response rather than rejected; other accepted assets stay available. For how products convert from USD and mix assets, see Pricing modes.
Stablecoins such as USDC and USDT include issuer-controlled blacklist and pause functions. A frozen or paused token can block a transfer outside your control. Review the third-party contract risks in the facilitator’s DISCLAIMER.md before accepting an asset on mainnet.

Testnet-only by default

The Fireblocks facilitator refuses to handle mainnet value unless you explicitly opt in. Each asset records an is_testnet flag, populated from Fireblocks at import:
  • At boot, the server refuses to start if any configured asset is mainnet and X402_ALLOW_MAINNET is not true, listing the offending assets.
  • At import, x402 assets import (and the admin API) returns 403 for a mainnet asset while the flag is off.
To opt in, set the flag explicitly:
The startup banner states which policy is active, so there is no ambiguity. See Network policy.

Cost and the network you accept

Settlement gas is paid by the facilitator’s vault and varies sharply by network: cents or less on Base and other L2s, potentially more than a dollar on Ethereum mainnet. For small payments this matters. A product quoted at $0.01 should not accept a mainnet chain whose settlement gas exceeds the payment, or the merchant loses money on every sale. The facilitator includes a gas-cost estimation interface for chain-aware pricing; see Pricing modes.