Trust & billing
Pricing & payments
Agents pay per call with x402 on Cardano, with no account and no key. Apps use an API key on a contract. The free tier stays free.
Tiers #
| Tier | Testnet | Mainnet | Includes |
|---|---|---|---|
| Free | 0 | $0 | Token list and search, status, the standard check (GET evaluate), briefs (GET explain), track record and proofs. MCP during the preview. |
| Data | 2 tADA | $0.01 | Token state, history and market overview. The first 25 calls each day are free. |
| Premium | 5 tADA | $0.05 | Checks sized to your order and rules, fresh investigations, questions, address lookups, monitors, and six agents. |
| Pro | 10 tADA | $0.25 | Due Diligence Analyst, Opportunity Scout, Portfolio Checkup and Treasury Steward: agents that check many tokens or rules in one run. |
Mainnet prices sit at market rates: $0.01 per call is in line with CoinGecko, CoinMarketCap and Nansen per-call data plans, and a Pro run costs less than the five to twenty calls it replaces. Current prices and the seller address are always published at /v1/status.
What is live today #
| Capability | Status |
|---|---|
| x402 pay-per-call on the REST API | Live on Cardano preprod |
| Masumi Coworker on Sokosumi (escrow per Task) | Live on Cardano preprod |
| MCP server for Claude, Claude Code, Cursor | Live, free preview |
| Design-partner API keys | Live, issued by hand |
| Chainlink CRE attestation of proofs | Live on the CRE simulator |
| Self-service accounts, usage and prepaid packs | Planned |
| Mainnet pricing and subscriptions | Planned |
How x402 works #
x402 uses the HTTP status 402 Payment Required. An agent needs only a Cardano wallet:
Call the endpoint
Without payment, a paid endpoint answers 402. The
PAYMENT-REQUIREDheader (base64 JSON) says what to pay, in what asset, and to which address; the body repeats it in plain words.Pay
The agent builds and signs a Cardano transaction for the exact amount, but does not broadcast it.
@x402/fetchwith@x402/cardanodoes this automatically within a spending cap you set.Retry with the signed payment
The agent repeats the request with the
PAYMENT-SIGNATUREheader. CoinGraph's facilitator verifies the transaction, the answer is computed, the facilitator broadcasts the payment, and the answer is released with aPAYMENT-RESPONSEreceipt carrying the transaction id.
{
"x402Version": 2,
"error": "Payment required",
"resource": {
"url": "https://coingraph.ai/api/v1/agents/trade-gatekeeper",
"description": "Run a CoinGraph agent (Premium tier, 5 tADA)",
"mimeType": "application/json",
"serviceName": "CoinGraph"
},
"accepts": [
{
"scheme": "exact",
"network": "cardano:preprod",
"amount": "5000000",
"asset": "lovelace",
"payTo": "addr_test1…",
"maxTimeoutSeconds": 600,
"extra": {
"confirmationPolicy": {
"l1Confirmations": -1
}
}
}
]
}{
"success": true,
"payer": "addr_test1qrwcm2ks…szndmw",
"transaction": "d3a147217859d56695edf6135e4c34c5b483efa120052e7bde4215b39bd1d477",
"network": "cardano:preprod",
"extra": {
"status": "mempool",
"confirmations": -1
}
}A whole round trip takes a few seconds. That transaction on Cardanoscan. The facilitator is not custodial: it only verifies and broadcasts a transaction the agent has already signed, and never holds funds.
Pay from code #
Packages: @x402/fetch, @x402/cardano and @x402/core, version 2.26.0.
import { wrapFetchWithPayment, x402Client } from "@x402/fetch";
import { ExactCardanoScheme } from "@x402/cardano/exact/client";
import { toClientCardanoSigner } from "@x402/cardano";
// A preprod wallet with some tADA (faucet: docs.cardano.org/cardano-testnets/tools/faucet)
const signer = toClientCardanoSigner({
mnemonic: process.env.CARDANO_BUYER_MNEMONIC!,
network: "cardano:preprod",
provider: { blockfrost: { baseUrl: "https://cardano-preprod.blockfrost.io/api/v0", projectId: process.env.BLOCKFROST_PROJECT_ID! } },
});
const client = new x402Client()
.register("cardano:*", new ExactCardanoScheme(signer))
// Never pay more than 12 tADA for one call.
.setSpendControls({ allowedAssets: [{ network: "cardano:*", asset: "lovelace", maxAmountPerPayment: "12000000" }] });
const payingFetch = wrapFetchWithPayment(fetch, client);
// 402 → pay → retry happens inside payingFetch.
const res = await payingFetch("https://coingraph.ai/api/v1/agents/trade-gatekeeper", {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({ token: "solana", size_usd: 5000, side: "buy" }),
});
const { data } = await res.json(); // { verdict: "ALLOW", summary, reasons, verify_url, … }
const receipt = res.headers.get("PAYMENT-RESPONSE"); // base64 JSON with the Cardano transaction idThe same buyer is in the repository as scripts/x402-buyer.ts.
Confirmation policy #
On preprod, CoinGraph releases the answer once its facilitator has broadcast the payment and the node accepted it (l1Confirmations: -1), because preprod blocks can be minutes apart. For real value on mainnet the policy would require block inclusion or depth, which the same code supports by changing one setting.
Note
Free allowances #
| Who | Allowance |
|---|---|
| Any caller | 25 Data calls a day (state, history, market). |
| The website playground | 10 Premium and 5 Pro agent runs a day per visitor, so people can try agents without a wallet. |
| MCP (Claude, Cursor…) | Free during the preview, including agent runs; the same calls cost 5–10 tADA over REST. After the preview, MCP carries the same tiers. |
Design partners #
Early integrators (teams building agents, wallets or treasuries) get a free key in exchange for feedback, and use it instead of paying per call: send it as Authorization: Bearer cg_…. Write to ajay@coingraph.ai.
Masumi #
Masumi is Cardano's agent-payment and registry protocol; Sokosumi is its marketplace, where companies hire AI “Coworkers” per Task. CoinGraph Crypto Analyst is registered on Masumi and hired on Sokosumi for 1 test USDM per Task (USDM is a USD stablecoin on Cardano; the test version runs on preprod), held in escrow until the result is delivered, with the result hash recorded on chain. See Hire on Sokosumi.