Under the hood: how AI agents buy Odyssey Lite data

Posted 10/15/2026 Odyssey Lite x402 AI agents Alternative data

Under the hood: how AI agents buy Odyssey Lite data

Earlier this week we opened api.decadata.io: Odyssey Lite company data, sold one request at a time to whoever asks, person or program. This post is for the people who will wire it into something. It covers what happens on the wire when a request is bought, how an agent finds the API in the first place, how prices are worked out, and what we do to keep data that's sold to anonymous buyers from being resold.

As far as we can tell it is the only point-of-sale company sales data in Coinbase's x402 Bazaar today. The rest of the catalogue's data repackages free public sources: Census retail figures, SEC filings, exchange prices. Ours comes from transactions at eight US retailers, summed to the company that owned each brand at the time.

Subscribe for updates

We‘ll never share your email with anyone else.

One request, start to finish

The API speaks x402 version 2, the open standard for paying over HTTP. There is no account and no API key: the payment is the credential.

  1. Ask. GET /v1/companies/ticker:PEP/sales?from=2025-01-01&to=2025-12-31 without paying returns 402 Payment Required. The PAYMENT-REQUIRED header (base64 JSON, repeated as the body) says what it costs and how to pay: the amount in USDC base units, the asset, the network (eip155:8453, Base), the address to pay and a two-minute timeout, plus the exact window being sold.
  2. Sign. The client signs a USDC transfer authorisation (EIP-3009) for exactly that amount, to that address, valid for those two minutes. Nothing moves yet: it's a signed permission, not a transaction, and the buyer needs no ETH for gas.
  3. Repeat the request with the signed payment in the PAYMENT-SIGNATURE header.
  4. We check, read, then collect. Coinbase's CDP facilitator verifies the signature and the balance. We read the data. Only then do we ask the facilitator to settle, which submits the transfer on Base. If anything fails before the data is ready, the payment is never collected.
  5. The data comes back in the same response, with a receipt and its licence, and the settlement (including the Base transaction hash) in the PAYMENT-RESPONSE header.

One payment buys one response: a payment can't be replayed. Occasionally the facilitator accepts a settlement it hasn't confirmed yet; rather than refuse a buyer whose money has probably moved, we deliver and reconcile the transfer on-chain afterwards.

The x402 client libraries for JavaScript and Python handle steps 1 to 5. To see the first step for yourself:

curl -si "https://api.decadata.io/v1/companies/ticker:PEP/sales?from=2019-01-01&to=2019-01-01" | grep -i payment-required

Being found by software

An agent with a wallet still has to find us. Three things make that possible.

  • The Bazaar. Every 402 carries a bazaar discovery extension: the route (/v1/companies/:id/sales), its inputs, an example response and a JSON schema for them. When a paid call settles through CDP with it, Coinbase catalogues the endpoint; agentic.market browses that catalogue. The route template makes the whole universe one listing rather than one per company.
  • llms.txt. api.decadata.io/llms.txt describes the API, the prices and the payment flow in plain Markdown, written for a model to read.
  • Free endpoints to evaluate before paying. /v1/coverage lists every company on sale and how far its data runs; /v1/companies/{id}/sample returns the first quarter of 2019 for any company; /v1/quote prices any window. An agent can decide whether the data is worth buying without spending anything.

How prices are worked out

Prices depend on the company's size in the panel and on how recent the days are. The latest 90 days on sale are priced as live; anything older is history, charged per day at the monthly rate divided by 30.

TierFrequencyLive (latest 90 days)History
Tier 1, the largestdaily or weekly$5.00 per company-day$15 per company-month
Tier 2daily or weekly$1.50 per company-day$4 per company-month
Tier 3weekly only$10 per company-month$1 per company-month

The minimum is $1 a request and a request covers up to three years. Without from, a request is just the latest day on sale (the latest whole week for weekly-only companies). One day of history costs the $1 minimum, and the sample costs nothing. Days go on sale at 07:00 UTC seven days after they happen, once every retailer has reported, and are never restated afterwards.

Selling data to buyers you can't see

Anonymous payment is what makes the API usable by software, and it is also what makes resale tempting: buy once, sell many times. We take a few precautions, none of which gets in the way of normal use.

  • A licence on every response: the data is for the purchaser's own research, not for redistribution or resale. The terms set out the detail.
  • A per-wallet limit: one wallet can buy up to 50 different companies in 30 days. Anyone who needs more needs a subscription, which covers every company and brand from T+3.
  • Patterns across wallets: wallets are free to create, so we also look at what wallets do together, not just one at a time.
  • Identifying marks: each response carries a mark that identifies the purchase it was sold in. It makes no difference to analysis, and a copy found elsewhere can be traced back to its sale.

What stays where

The company totals are computed inside AWS, next to Odyssey Lite itself: brand-level rows and the brand-to-company mapping never leave it. What reaches the API is company totals only, and only once a day is on sale. The API runs on Cloudflare; payments settle in USDC on Base to our own account, and every sale is recorded with its receipt and transaction so it can be audited.

If you're building an agent that needs to know how a consumer company is actually selling, start with the free sample at api.decadata.io, or get in touch to talk about an Odyssey Lite subscription for brands, T+3 data or the full history in bulk.

Photo by Carlos Muza on Unsplash.