x402
Payments made with x402 on Monad, Arc and Base: who settled them, who was paid, who paid, and how much of the volume looks genuine. An x402 payment is a stablecoin transfer that the payer signs and a facilitator submits to the chain for them, usually to pay for an API call. Sona reads every such payment on Monad since the start of the chain and on Base since 2026-09-13, classifies it by published rules and serves the result. Monad, eip155:143, Arc, eip155:5042, and Base, eip155:8453, are covered. Base keeps the payments of the last 90 days and its daily totals and rankings without limit, and the Coinbase CDP facilitator there is recognized by the ERC-8021 builder code cdp_facil1 in the calldata, because it publishes no signer list.
Tiers. A: the sender of the settling transaction (the relayer) is a facilitator listed in the registry (/registry), whether it called the token directly or through another contract such as Multicall3 (eip3009_routed). B: the payment has the x402 shape but its relayer is no listed facilitator, so it can also be an ordinary gasless transfer. X: not counted, and reason says why: not_x402 for a batch deposit, a receive call or a call through another contract whose payee is not decoded (other), routed_unlisted for a call through another contract by a relayer that is no listed facilitator, which can as well be a smart-wallet transfer or a bridge, and test_relayer for a registered test relayer; it shows up only in the payment list with tier=all and in the transaction lookup, never in totals. Routes count tier A unless you pass tier=AB.
Genuine volume. Raw numbers count every tier A and B payment. Genuine numbers leave out payments that look like generated traffic. A payment is genuine unless its payer paid itself (self_payment) or at least two of these signals fire: fixed_amount (its seller got at least 100 payments that day, 90% of them of this amount), payee_concentration (its relayer settled at least 100 payments that day, 90% of them to this seller), no_other_activity (its payer made at least 5 payments, all to one seller, and never received or relayed one) and bridge_funded (its payer got a USDC mint from a batch of at least 10 identical mints to different wallets). Every payment lists the signals that fired in rules_fired, so each verdict can be checked. It is a heuristic: one signal alone also fits a real, busy seller, which is why it takes two.
Amounts and freshness. Volume counts USDC only, as a decimal string of base units (6 decimals, so "1000000" is 1 USDC); a payment in another token counts in the payment counts and adds 0 to volume. Gas costs are in wei of the chain's native coin, MON on Monad, USDC on Arc and ETH on Base. Addresses are lowercase. The data trails the chain by 10 blocks and is refreshed every 30 seconds, and Sona's indexer source itself can trail the chain head by up to a minute or more, so a new payment usually appears within one to two minutes. meta.as_of names the newest block served, and every answer is finalized, because the 10-block margin keeps chain reorganizations out.
Endpoints
| Endpoint | Request |
|---|---|
| Payments | GET/v1/chains/{chain}/x402/payments |
| Payments of a transaction | GET/v1/chains/{chain}/x402/payments/{tx} |
| Leaderboards | GET/v1/chains/{chain}/x402/leaderboards/{kind} |
| Flows | GET/v1/chains/{chain}/x402/flows |
| Daily history | GET/v1/chains/{chain}/x402/{kind}/{id}/daily |
| Signals by day | GET/v1/chains/{chain}/x402/rules/daily |
| Facilitator registry | GET/v1/chains/{chain}/x402/registry |
| Status | GET/v1/chains/{chain}/x402/status |