## Data methodology

How often each CoinWorldCap API dataset is rebuilt, which field dates a response, where each
history starts, and how to read the numbers, so you can tell what you are looking at before you compare it with another
source.

### How fresh each dataset is

The intervals below are how often we rebuild the data, not a guarantee; the last column names
the field that dates a response.

| Data | Rebuilt | How old a response is |
|---|---|---|
| [`/global`](#get-openapiv1global) | Every ten minutes | `data_time` |
| [`/categories`](#get-openapiv1categories), [`/chains`](#get-openapiv1chains) | Every ten minutes | `market.snapshot_time` |
| [`/trending`](#get-openapiv1trending) | Computed on each request, from the same data as `/quotes` | — |
| [`/earn`](#get-openapiv1earn) | The 300 largest coins by market cap about every 15 minutes, the others about every two hours | `data_time` |
| Derivatives: [`/derivatives/pairs`](#get-openapiv1derivativespairs), [`/derivatives/exchanges`](#get-openapiv1derivativesexchanges) | Every hour; an exchange whose refresh failed keeps its previous rows | `data_time`: the hour of the refresh a row comes from, and on `/derivatives/exchanges` the oldest of an exchange's rows |
| DEX lists: [`/dex/tokens`](#get-openapiv1dextokens), [`/dex/chains`](#get-openapiv1dexchains), [`/dex/search`](#get-openapiv1dexsearch), [`/dex/tokens/info`](#get-openapiv1dextokensinfo) | About every two minutes | `data_time` and `stale` on `/dex/tokens` and `/dex/tokens/info` |
| [`/dex/tokens/trades`](#get-openapiv1dextokenstrades), [`/dex/tokens/liquidity`](#get-openapiv1dextokensliquidity) | Live while we follow the token; otherwise about every 15 minutes (trades) or 30 minutes (liquidity) | `data_time`, `stale` |
| [`/dex/tokens/holders`](#get-openapiv1dextokensholders), [`/dex/tokens/pools`](#get-openapiv1dextokenspools) | Every 15 minutes to an hour, less often for quiet tokens | `data_time`, `stale` |
| Teams and people: [`/assets/team`](#get-openapiv1assetsteam), [`/exchanges/team`](#get-openapiv1exchangesteam), [`/people`](#get-openapiv1people), [`/people/info`](#get-openapiv1peopleinfo) | When we process RootData's data, on no fixed schedule | `source.data_time` on `/people/info`, for its `stats` and `investments` |
| History: [`/rwa/history`](#get-openapiv1rwahistory), [`/derivatives/history`](#get-openapiv1derivativeshistory), [`/chains/history`](#get-openapiv1chainshistory) | Every hour; a day's daily point once the day is over | `points[].time` of the newest point |
| [`/earn/history`](#get-openapiv1earnhistory) | Daily; a day once it is over | `products[].points[].time` of the newest point |
| [`/dex/tokens/history`](#get-openapiv1dextokenshistory) | Copied every hour; the newest candle may still be open | `points[].time` of the newest candle, which is its open time |
| [`/key/info`](#get-openapiv1keyinfo) | Today's usage normally runs up to 10 seconds behind | — |

We publish no interval for `/assets`, `/quotes`, `/exchanges`, `/rwa`, `/rwa/info` and
`/rwa/issuers`. `/exchanges`' `market.data_time` is when its 24-hour aggregate was taken. `/rwa`'s
`last_price_change_time` does not date the response: it is when an RWA's values last changed,
not when we last checked them, so a price that has not moved keeps an old time.

### Earn

A product whose `apy_max` is above the response's `promo_threshold` is a promotion: it carries `is_promo` and is left
out of its platform's `apy_min` and `apy_max`, so a short-lived offer does not decide a
comparison between platforms. See [`/earn`](#get-openapiv1earn).

### Derivatives

Derivatives cover only the exchanges we collect, and only contracts whose base asset is an
asset on `/assets`. Open interest is added up as each exchange reports it, and some report a
quantity of the asset rather than USD, so an exchange's `open_interest_usd` on
`/derivatives/exchanges` can be lower than its true USD figure. See
[`/derivatives/pairs`](#get-openapiv1derivativespairs) and
[`/derivatives/exchanges`](#get-openapiv1derivativesexchanges).

[`/derivatives/history`](#get-openapiv1derivativeshistory) combines a coin's perpetual contracts
into one point per hour: open interest summed, the funding rate and the basis averaged weighted by
open interest. Only contracts that pass every filter count: the quote currency is on an
allow-list, the open interest reported is not small next to the 24-hour volume, and the contract
is not on a list we exclude. The same filters are behind the derivatives charts on our website.

### Chains

A chain's market cap and 24-hour volume are the total market cap and the summed 24-hour volume
of the coins on that chain: the same `market` aggregate as a category's on
[`/categories`](#get-openapiv1categories), which [`/chains`](#get-openapiv1chains) shares, and
[`/chains/history`](#get-openapiv1chainshistory) records over time.

### Teams and people

Teams, people and their investments come from RootData. `/people/info` names the source in
`source.name`, and `source.data_time` is when we fetched the data behind its `stats` and
`investments`.

### DEX tokens

The lists come mainly from CoinMarketCap's DEX data. How they are built, how a token is named,
and when data counts as stale or is too old to serve are in
[DEX tokens: what the endpoints share](#dex-tokens-what-the-endpoints-share). Trades and
liquidity changes cover a limited recent window, and holder and pool snapshots expire; each of
those endpoints says how far back it goes.

### History

How the points of the history endpoints are made and where each history starts. Their parameters
and limits are in [History: what the endpoints share](#history-what-the-endpoints-share).

- **On `/rwa/history`, `/chains/history` and `/derivatives/history`, a daily point is the day's
  last hourly figure**, timed at midnight UTC and published once the day is over; on
  `/derivatives/history` each value comes from the last hour of the day that has it.
  `/earn/history` has daily points only: each product's APY range the last time we read it
  that day.
- **A DEX daily point is a stored daily candle**, not one built from the hourly candles: its time
  is the open time our source gives it, and today's may still be open.
- **Older RWA points carry a price only.** That part of the history was filled in from price
  records, so `market_cap` and `volume_24h` are `null` and the points can be days apart
  ([`/rwa/history`](#get-openapiv1rwahistory)).

| History | Daily points start |
|:--|:--|
| [`/rwa/history`](#get-openapiv1rwahistory) | Depends on the asset; the earliest go back to August 2020 |
| [`/derivatives/history`](#get-openapiv1derivativeshistory) | 16 October 2026 |
| [`/earn/history`](#get-openapiv1earnhistory) | 16 October 2026 |
| [`/chains/history`](#get-openapiv1chainshistory) | 8 January 2026, or later for a chain we started recording later |
| [`/dex/tokens/history`](#get-openapiv1dextokenshistory) | Depends on the token: as far back as our DEX data has its candles, and not before 27 February 2025 |

Hourly points are limited as [the shared rules](#history-what-the-endpoints-share) say, and start
no earlier than the daily points above.
