x402 payments
x402 is a way to pay for an API call with a stablecoin transfer. The payer signs an authorization, and a facilitator submits it to the chain for them. 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.
| Chain | ID | Coverage |
|---|---|---|
| Monad | eip155:143 | Every payment since the start of the chain |
| Base | eip155:8453 | From 2026-09-13, payment rows for 90 days |
Base keeps daily totals and rankings without limit. The Coinbase CDP facilitator there is recognized by the ERC-8021 builder code cdp_facil1 in the calldata, because it publishes no signer list. PayAI is listed on Base by the signers from its published list that settle there, and most of its payments go through Multicall3 (eip3009_routed).
Roles
| Role | Meaning |
|---|---|
| Payer | The wallet that signed the authorization |
| Seller | The address that was paid (payee in a payment) |
| Facilitator | The service that submits the signed payment to the chain |
| Relayer | The address that sent the settling transaction |
Tiers
Every payment has a tier. Routes count tier A unless you pass tier=AB.
| Tier | Meaning | Counted in totals |
|---|---|---|
A | The relayer is a facilitator in the registry, whether it called the token directly or through another contract such as Multicall3 | Yes |
B | The payment has the x402 shape, but its relayer is not listed, so it can also be an ordinary gasless transfer | Only with tier=AB |
X | Not counted: a batch deposit, a receive call or a call through another contract whose payee is not decoded (not_x402), a call through another contract by a relayer that is not listed, which can as well be a smart-wallet transfer or a bridge (routed_unlisted), or a registered test relayer (test_relayer) | Never. Shown only with tier=all on the payment list and in the transaction lookup. |
The registry (/x402/registry) lists the facilitators, their relayer addresses and the block range each address applies to. A registry change gets a new version and every payment is classified again.
Genuine and raw volume
Raw numbers count every payment of the tiers you ask for. 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.
| Signal | Fires when |
|---|---|
fixed_amount | The seller got at least 100 payments that day, and 90% of them were of this amount |
payee_concentration | The payment's relayer settled at least 100 payments that day, and 90% of them went to this seller |
no_other_activity | The payer made at least 5 payments, all to one seller, and never received or relayed one |
bridge_funded | The 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. One signal alone also fits a real, busy seller, which is why the rule asks for two.
Volume counts USDC only, as a decimal string of base units with 6 decimals, so "1000000" is 1 USDC. A payment in another token counts in the payment counts and adds 0 to volume.
Freshness
The data trails the chain by 10 blocks and refreshes every 30 seconds. The indexer source can itself trail the head by a minute or more, so a new payment usually appears within one to two minutes. Every answer is finalized, and meta.as_of names the newest block served. /x402/status shows the indexer and engine progress and the coverage notes of the chain.
Leaderboards
Rank facilitators, sellers or payers over a window of UTC days. The window defaults to the 30 days that end on the day of the newest data and spans at most 366 days.
curl -s "https://api.sonaintel.com/v1/chains/eip155:143/x402/leaderboards/facilitators?limit=5"| Parameter | Values |
|---|---|
kind (path) | facilitators, sellers, payers |
from, to | Inclusive days, YYYY-MM-DD |
tier | A (default) or AB |
order | genuine_volume (default), raw_volume, genuine_payments, raw_payments |
limit | 1 to 100, default 25 |
| Item field | Meaning |
|---|---|
id | Registry id, relayer address or unknown on the facilitator board, an address on the others |
raw_payments, raw_volume | Totals over the window for the tiers asked |
genuine_payments, genuine_volume | The same after the genuine-volume rules |
active_days, first_day, last_day | Days with at least one payment |
name, gas_cost | Facilitator boards only. gas_cost is the gas spent, in wei of the chain's native coin (MON on Monad, ETH on Base). |
A leaderboard costs 2 credits.
Flows
Pairs of a facilitator and a seller, ranked over a window of at most 90 days. Use it for a who-settles-for-whom view.
curl -s "https://api.sonaintel.com/v1/chains/eip155:143/x402/flows?limit=5"Each item has facilitator, name (null when unlisted), payee, tier, raw_payments, genuine_payments, raw_volume and genuine_volume. The parameters from, to, tier, order and limit work as on the leaderboards.
Daily series
One facilitator, seller or payer day by day, raw and genuine side by side.
curl -s "https://api.sonaintel.com/v1/chains/eip155:143/x402/facilitators/monad-foundation/daily?tier=A"The id is a registry id, a relayer address or unknown for a facilitator, and an address for a seller or payer. Each day has the four payment and volume figures plus the counts that fit the entity: raw_payers, raw_sellers and gas_cost for a facilitator, raw_payers for a seller, raw_sellers for a payer. Counts of distinct addresses cannot be added up across days.
Rules per day
/x402/rules/daily returns, for each day of a window, how many payments each signal fired for (count) out of the payments checked (payments). One payment can fire several signals, so a day's counts do not add up to its payments. A day on which a signal did not fire has no item for it.
curl -s "https://api.sonaintel.com/v1/chains/eip155:143/x402/rules/daily"Payments
List single payments, newest first, in pages. Filters combine with AND: payer, payee, relayer, facilitator, method, tier (A, AB or all), from and to. limit is 1 to 200, default 50. Send the next_cursor of a page as cursor, with the same filters, to get the next page.
curl -s "https://api.sonaintel.com/v1/chains/eip155:8453/x402/payments?limit=2"| Field | Meaning |
|---|---|
id | <chain number>_<block>_<log_index>, such as 143_88740443_114 |
method | How the payment reached the chain: eip3009_transfer, eip3009_receive, permit2_exact, permit2_upto, batch_deposit, eip3009_routed (a transferWithAuthorization made through another contract, such as Multicall3) or other |
payer, payee, relayer | Lowercase addresses. payee is null when the call was not decoded. For eip3009_routed it is the to of the token call, which for some routers is an intermediate address. |
token, amount | The paid token and the amount in its base units |
tier, facilitator | Sona's classification |
genuine, rules_fired | The verdict and the signals behind it |
gas_cost | Gas limit times gas price in wei of the chain's native coin (MON on Monad, ETH on Base), repeated on each payment of a transaction |
/x402/payments/{tx} returns every payment one transaction settled, tier X included. A transaction that settled no x402 payment answers 404 not_found.
Reading the numbers
Sona does not see reverted settlements, so failed attempts and failure rates cannot be measured. The batch scheme is not indexed, and its deposits are labelled batch_deposit and left out of every total. For the Upto scheme the stored amount is the settled amount, not the signed ceiling. Tier B is a shape match only. /x402/status lists these limits with stable codes.
Reference pages: x402 endpoints.