Core Concepts

Supported networks

Which chains and stablecoins the gateway accepts, and how coverage differs by top-up method.

The gateway accepts USDC and USDT on four mainnets. Coverage is not the same for both on-chain top-up methods — x402 is limited to Base and Arbitrum, while a plain token transfer works on all four.

NetworkChain IDDecimalsx402Direct transfer
Base84536USDC, USDTUSDC, USDT
Arbitrum One421616USDC, USDTUSDC, USDT
Ethereum16USDC, USDT
BNB Smart Chain5618USDC, USDT

There is no Solana, Polygon, or Optimism support, and no native-ETH payment — only the ERC-20 stablecoins listed above.

x402 — Base and Arbitrum only

The x402 flow signs a gasless transfer authorization rather than sending a transaction, so it needs USDC's ERC-3009 transferWithAuthorization (or Permit2 for USDT) plus facilitator settlement on that chain. Only Base and Arbitrum satisfy both, which is why the 402 response's accepts array never offers Ethereum or BNB Chain.

Treat the live accepts array as the source of truth — it is generated from the deployment's own chain config, so a staging deployment offers testnets instead.

Direct transfer

Send USDC or USDT to the gateway's collection wallet from any of the four networks. An indexer polls all of them and credits the sending wallet, typically within about a minute. No signature or API call is required.

Read the destination address from the gateway rather than hardcoding it:

curl https://api.tk24.ai/v1/config
# { "gatewayWalletAddress": "0x...", "minTopupUsd": 1, "networkMode": "mainnet" }

Send only from a wallet you control — the credit goes to the sending address, and transfers out of an exchange account cannot be credited to you.

Claiming a missed transfer

If a transfer is not credited, submit its hash. The gateway re-verifies the receipt on-chain before crediting, and the same hash can never be credited twice.

curl -X POST https://api.tk24.ai/v1/topup/direct \
  -H "Content-Type: application/json" \
  -d '{ "txHash": "0x...", "network": "1" }'
FieldTypeDescription
txHashstringThe transfer's transaction hash
networkstringOptional. Chain ID or alias (ethereum, base, arbitrum, bsc). Omit to scan every supported chain
walletAddressstringOptional. Expected sender, rejected on mismatch

/v1/topup/inflow and /v1/topup/appeal are aliases for the same handler.

Conversion rates

TokenCredit
USDC1 USDC = $1.00
USDT1 USDT = $0.999

The USDT haircut applies to both x402 and direct transfers. BNB Chain's USDC and USDT carry 18 decimals rather than 6; the gateway normalises this, so send whole-token amounts as you normally would.

Testnets

Staging (https://agent-router.gaib.cloud) runs the testnet equivalents — Base Sepolia (84532), Arbitrum Sepolia (421614), Ethereum Sepolia (11155111) and BSC Testnet (97). Production rejects testnet chains outright. Check which mode a deployment is in with networkMode from GET /v1/config.

SIWE and chain IDs

The chainId in a SIWE message is not checked — the gateway verifies the signature, the address, and that issuedAt is under an hour old, nothing else. Any chain ID your wallet is on will authenticate. The examples use 8453 purely as a convention.

On this page