Authorization Methods
| Method | x402 V2 scheme | Description | Token support |
|---|---|---|---|
eip3009 | exact | Native transferWithAuthorization; no prior approval | U and USD1 |
permit2-exact | exact | Permit2 authorization for one exact transfer amount | Any configured ERC-20 |
permit2-upto | upto | Permit2 authorization for an upper bound; settle a smaller amount | Any configured ERC-20 |
permit2-exact and permit2-upto require the payer to grant a one-time ERC-20 allowance to the
canonical Permit2 contract. The payer then signs a new EIP-712
authorization for each payment; no additional approval transaction is needed while sufficient
allowance remains.
eip3009 requires no approval transaction because supported tokens implement
transferWithAuthorization directly.
Supported Networks
| Network | CAIP-2 ID | Chain ID | Usage |
|---|---|---|---|
| BNB Smart Chain Mainnet | eip155:56 | 56 | Production |
| BNB Smart Chain Testnet | eip155:97 | 97 | QA only |
Production Assets
| Token | Contract address | Decimals | EIP-3009 | Permit2 |
|---|---|---|---|---|
| U | 0xcE24439F2D9C6a2289F741120FE202248B666666 | 18 | Yes | Yes |
| USD1 | 0x8d0D000Ee44948FC98c9B98A4FA4921476f08B0d | 18 | Yes | Yes |
| USDC | 0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d | 18 | No | Yes |
| USDT | 0x55d398326f99059fF775485246999027B3197955 | 18 | No | Yes |
Configuration returned by POST /api/v2/b402/supported is authoritative. Only
advertise an asset/method combination that appears in kinds[], even if it is
listed on this page.
Amount Encoding
All amounts are unsigned decimal strings in the token's smallest unit. Do not send human-readable decimal values.
For an 18-decimal token:
1token ="1000000000000000000"0.01token ="10000000000000000"
Read decimals() from the asset contract or trusted token metadata before encoding an amount. Use
integer arithmetic; never use floating-point numbers for token values.
Permit2 Contract
The canonical Permit2 contract on BSC mainnet and testnet is:
Code
This is the contract the payer approves. It is not the same as the B402 Permit2 proxy address placed
in permit2Authorization.spender; obtain that proxy from kinds[].extra.spenderAddress.
See Permit2 Signing for the typed-data fields and witness rules.