Pricing and x402
10,000 routing decisions per project per month are free. Beyond that, pay in USDG on Robinhood Chain over x402.
Free and paid
A decision is one new visitor assigned to one experiment. Returning visitors keep their cookie and are free, so 10,000 decisions is 10,000 new visitors in a single test. Each USDG adds 50,000 decisions to the project, with no expiry.
Paying with x402
| who | request | answer |
|---|---|---|
| ccat pay --usdg 5 | POST /api/v1/credits?usdg=5 | 402 + accepts: USDG, eip155:4663, payTo, 5000000 |
| your wallet | USDG transfer to payTo | tx 0x9f2c... |
| ccat pay --tx 0x9f2c... | POST /api/v1/credits, X-PAYMENT | 200 + X-PAYMENT-RESPONSE, +250,000 decisions |
POST /api/v1/credits without payment answers HTTP 402 with the x402 requirements:
{
"x402Version": 1,
"accepts": [{
"scheme": "exact",
"network": "eip155:4663",
"maxAmountRequired": "5000000",
"asset": "0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168",
"payTo": "0x3F745575b764288403b2A079A9e79FaC525F08Cb",
"extra": { "name": "Global Dollar", "decimals": 6, "proof": "txHash" }
}]
}Send the USDG (6 decimals) to payTo from any wallet, then retry with an X-PAYMENT header: base64 of {"x402Version":1,"scheme":"exact","network":"eip155:4663","payload":{"txHash":"0x..."}}. The server reads the receipt, adds up the USDG transferred to payTo in that transaction and credits it once. ccat pay --tx builds the header for you.
Over quota
Visitors are always routed. Past the quota, the proxy keeps the last weights and the API answers 402 to new exposures instead of recording them, so learning pauses until credit arrives. Conversions of visitors already in a test are still counted.