Blockchain IQ

Smarter research for the on-chain economy.

← All posts

Explainer · Agent payments

Crypto data by the call: how our x402 API works

October 10, 2026

Blockchain IQ sells eighteen crypto data resources by the request, paid in USDC over the open x402 standard with no account and no API key; here is what is for sale, how a call works, and what building it taught us.

Terms with a dotted underline link to the glossary.

What it is

Blockchain IQ is a subscription research service for people. Alongside it we run a second, much smaller door for software: an API where each request is paid for on its own. There is no signup, no API key and no monthly plan. A program asks for a resource, is told the price, pays it in USDC on Base, and gets JSON back.

The mechanism is x402, an open payment standard built on a status code that has been in HTTP for decades and almost never used: 402 Payment Required. We run protocol version 2 and settle through Coinbase's CDP facilitator.

Why pay per call suits an agent

Two reasons, both practical.

The first is signup. A person can create an account, confirm an email and paste a key into a config file. An autonomous agent that discovers it needs a Bitcoin price in the middle of a task cannot do any of that, and should not be handed a way to. With x402 the only credential is a wallet holding a little USDC.

The second is size. Our cheapest call costs $0.002. Card processing carries a fixed fee per transaction that is many times larger than that, so a card cannot carry a payment this small; the usual answer is a subscription or prepaid credits, which brings the account back. A stablecoin transfer settled through a facilitator can carry a fifth of a cent, and the payer does not pay gas.

What is for sale

Eighteen resources, all GET, all under https://www.blockchainiq.co/api/x402/v1. Six of them, added on 10 October 2026, are one-call answers shaped for an agent loop rather than raw data: a parameter-free market brief, a coin card, scheduled event risk, spot-ETF flows, and per-chain network activity for the 21 blockchains we track.

ResourcePathPrice per call
Market brief: regime, majors, ETF flows, next-48h events, risk flags (parameter-free)/brief$0.01
Coin card: market, 30/90-day returns, drawdown, indices, chain activity/coin-card/{coinId}$0.01
Event risk: dated macro and crypto events, next 7 days by default/event-risk?days=$0.005
Spot-ETF daily net flows by fund (Bitcoin or XRP)/etf-flows/{btc|xrp}$0.01
One chain's activity with 7-day change (21 chains)/network/{chain}$0.01
All 21 chains' activity in one call (parameter-free)/networks$0.02
Coin price and market data/price/{coinId}$0.002
Watchlist snapshot (top 250 plus the smaller names we follow)/prices$0.02
Daily price history, 1 to 730 days/history/{coinId}?days=$0.01 to $0.05
Global market/global$0.02
US macro indicators/macro$0.02
Economic and crypto calendar, next 90 days/calendar$0.02
Tokenized real-world assets/rwa$0.02
Sector indices, list/indices$0.02
One sector index with its members/indices/{slug}$0.25
One analytics dashboard, every panel with its analyst read/dashboards/{slug}$0.05
One dashboard panel/dashboards/{slug}/{panel}$0.01
An Analytics section: every live dashboard on one page/sections/{section}$0.25

History is priced by range: $0.01 for the first 90 days, half a cent for each further 90-day window, capped at $0.05. The two $0.25 resources are bundles of our own analysis rather than raw market data: a sector index with every member priced, and a whole Analytics section. Each dashboard panel comes back with an analyst_read, the analyst's short note on what that chart shows. The six agent-shaped resources sit in the $0.005 to $0.02 band where most agent purchases happen, and the parameter-free ones can be called exactly as they appear in a listing.

Three things are free: the catalog at /api/x402/v1 (also served at /.well-known/x402), a sample at /api/x402/v1/sample that returns Bitcoin's current market data so you can test your parsing before spending anything, and the OpenAPI document at /openapi.json.

How a call works

  • 1. Send a plain GET. No headers.
  • 2. The reply is HTTP 402. Its PAYMENT-REQUIRED header is base64-encoded JSON naming the price, the asset, the network and the address to pay.
  • 3. Your x402 client signs a USDC authorization for that amount locally and repeats the request with a PAYMENT-SIGNATURE header.
  • 4. The reply is HTTP 200 with the data, plus a PAYMENT-RESPONSE header carrying the transaction hash. A 404 or an error is never charged.

This is the decoded header from an unpaid GET to /api/x402/v1/global on 2 October 2026 (the extensions block, which carries an example response and a JSON schema for directories, is left out for length):

json

{
  "x402Version": 2,
  "error": "Payment required",
  "resource": {
    "url": "https://www.blockchainiq.co/api/x402/v1/global",
    "description": "Global crypto market snapshot in one call: total crypto market cap, 24h trading volume, 24h market-cap change, Bitcoin dominance, Ethereum dominance and the number of active cryptocurrencies. Use for whole-market context behind any single coin move, risk-on/risk-off checks and market summaries. Not ticker-specific. JSON, no API key. $0.02 per call. Blockchain IQ.",
    "mimeType": "application/json",
    "serviceName": "Global Crypto Market Overview",
    "tags": ["crypto", "market-cap", "dominance", "bitcoin", "market-overview"]
  },
  "accepts": [
    {
      "scheme": "exact",
      "network": "eip155:8453",
      "amount": "20000",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "payTo": "0x617dA9383fbA67e86137BC4924b8b7E400fB7C9e",
      "maxTimeoutSeconds": 300,
      "extra": { "name": "USD Coin", "version": "2" }
    }
  ]
}

eip155:8453 is Base. The asset is the USDC contract on Base, and USDC has six decimals, so an amount of 20000 is two cents.

In practice a client library does steps 2 and 3 for you. This is the example from our agents page, the same code we run against production:

js

// npm install @x402/fetch @x402/evm viem
import { privateKeyToAccount } from "viem/accounts";
import { wrapFetchWithPayment, x402Client, decodePaymentResponseHeader } from "@x402/fetch";
import { ExactEvmScheme } from "@x402/evm/exact/client";

// A wallet holding a little USDC on Base. Settlement is gasless for the payer.
const account = privateKeyToAccount(process.env.AGENT_PRIVATE_KEY);

const client = x402Client.fromConfig({
  schemes: [{ network: "eip155:*", client: new ExactEvmScheme(account) }],
  spendControls: { maxAmountPerPayment: 0.3 }, // dollars; refuse anything dearer
});
const payFetch = wrapFetchWithPayment(fetch, client);

// The first request gets HTTP 402 with a PAYMENT-REQUIRED header; the wrapper
// signs a USDC payment for that amount and retries with it.
const res = await payFetch("https://www.blockchainiq.co/api/x402/v1/price/bitcoin");
const { data } = await res.json();
console.log(data);

// Proof of settlement: payer, network and transaction hash.
console.log(decodePaymentResponseHeader(res.headers.get("payment-response")));

Node 18 or later. The spend control matters: it makes the client refuse any single payment above the amount you set, whatever a server asks for.

Where an agent can find it

An API nobody can discover is not much use to software, so the same catalog is published in several places: the Coinbase x402 Bazaar, x402scan, an OpenAPI 3.1 document at /openapi.json with a price on every operation, a plain-text summary at /llms.txt, and a human-readable guide at blockchainiq.co/agents.

What we learned building it

  • A directory only re-reads a listing when someone pays. The Bazaar picks up a resource's name, description and tags at the moment a payment for that resource settles through the facilitator. Edit the text and the index keeps the old version until the next purchase of that resource. When we shipped per-resource listings on 2 October, the Bazaar still showed four of our nine resources under the generic descriptions they had on 29 September. We now run a small daily job that buys each resource once, from our own wallet, when its listing has changed, so the index catches up. That is all it does: it never buys to move a ranking.
  • The limits are short and not all of them fail loudly. A service name must be 32 printable ASCII characters or fewer, or the directory drops it. A description over 500 characters makes the payment itself fail. Only five tags are kept. We now check all three at build time, so a long description breaks our build instead of a customer's payment.
  • Search takes query=. The Bazaar's search endpoint reads the search text from a parameter called query. Send q= instead and you still get a 200 and a page of results, just not results for what you asked. Nothing tells you the parameter was ignored.

Where it stands

The API went to Base mainnet on 21 September 2026 and was first indexed in the Bazaar on 29 September. As of 2 October, five payments had settled, about $0.32 in total. Four were our own test purchases on 29 September. One, $0.02 for the global market resource on 1 October, came from a wallet that is not ours. That is the whole record, and we would rather state it than round it up. (The daily listing job's own purchases are internal and are not counted here.)

Not investment advice

Everything the API returns is market data and general-circulation analysis, not investment advice, and every response says so in its JSON envelope. Use is covered by our terms: https://www.blockchainiq.co/terms

This is general-circulation educational content, not investment advice.

Prices, paths and the 402 shown were read from the live API on 2 October 2026; the free catalog at /api/x402/v1 is the current source of truth.

Free to read. The data is the subscription.

These explainers are the groundwork. The current numbers, the deal-by-deal detail and the analyst’s read live in the research — reviewed before it reaches you.