CoinSpectrum ← the ranking

The CoinSpectrum API

The same once-per-asset counting the site is built on, as JSON. No signup, no key, no query language — one static file per thing.

curl https://coin-spectrum.com/api/v1/assets/xrp.json
Live · 6,165 assets · 484 cryptocurrencies

Plans

One API, every plan: the market, asset and mining endpoints are the same files on each. Free is live and needs no key. Paid tiers serve the same paths from api.coin-spectrum.com/v1/ with a key, and add higher throughput, historical snapshots, webhooks and per-key identification; prices are quoted in USD and paid in cryptocurrency, with the quote locked for fifteen minutes.

Free

$0 / mo

no key, no sign-up

  • 60 requests / minute per IP
  • 100 K requests / month (soft)
  • 2 years daily history
  • Every public endpoint

Starter

$5 / mo

annual $50 · 2 months free

  • 600 requests / minute
  • 2 M requests / month
  • 5 years daily history
  • 2 webhooks · 1 API key
Pay →

Pro

$29 / mo

annual $290 · 2 months free

  • 2 500 requests / minute
  • 20 M requests / month
  • 10 years hourly history
  • 10 webhooks · websockets · 5 API keys
Pay →

Pay with Bitcoin Cash, Litecoin, Monero, DigiByte or Siacoin. No card processor, no chargebacks, no KYC — one on-chain transaction, and the API key activates on the first confirmation.

Design

Every endpoint is a plain JSON file. There are no query parameters and no auth on the free tier. Download the file, filter in the client. That is deliberate: it keeps the free tier truly free, and it keeps the surface small enough that a version bump is a real event.

Wrapped, staked and pegged assets are not mixed into the cryptocurrency ranking. If you want them, ask for them explicitly by category. Most crypto APIs cannot answer that question at all.

Base URL

https://coin-spectrum.com/api/v1/

One version is served, and it is always the current one. When a field, a category or a shape changes, the files change in place, schema_version in meta.json goes up, and the change is described under Changes. No older copy is kept.

Endpoints

A worked example

Chain jq for a pure Bash pipeline that names every SHA-256 chain in the ranking:

curl -s https://coin-spectrum.com/api/v1/categories/cryptocurrencies.json \
  | jq -r '.assets[] | select(.consensus == "SHA-256") | .name'

Classes and categories

Every asset is in one of two classes. A cryptocurrency runs its own blockchain and its own consensus. A token is issued on another chain, and each token is in one category with a subcategory that says exactly what it is or what backs it:

categorysubcategory
stablecoinfiat, cdp
wrappedcrypto
metalgold, silver, platinum, palladium
securitystock, etf, treasury, mmf, credit, fund
memecoinmeme
utilitydex, defi, ai, oracle, depin, l2, gaming, storage, compute, other

The tree is also in meta.json under taxonomy. Every asset appears once: counts.cryptocurrencies plus counts.tokens is counts.total, and the six category counts add up to counts.tokens. global.json gives the total market cap and its parts by class and category. There is no "real-world asset" category: a gold token and a tokenised fund share are filed apart, each by what it holds. The site's tabs group tokens for reading; the API reports the tree as it is.

Changes

Schema 3 (9 November 2026) brought in class and subcategory, the metal, security and utility categories and their lists, and listed every asset once. Until then the token list repeated every stablecoin, wrapped coin and memecoin, so the total market cap counted about $410 billion twice; a utility token's category was token, and tokenised money-market funds were filed as stablecoins.

Asset schema

Every asset — cryptocurrency or token, in any category — uses the same shape. Fields that don't apply stay null, never omitted.

{
  "slug":            "bitcoin",
  "symbol":          "BTC",
  "name":            "Bitcoin",
  "class":           "cryptocurrency",
  "category":        "cryptocurrency",
  "subcategory":     null,
  "consensus":       "SHA-256",
  "hashrate":        8.9e20,
  "price_usd":       81449.12,
  "price_source": {
    "method":        "exchange",
    "aggregation":   "median",
    "confirmed_by":  ["Binance","Bybit","OKX","Kraken","Bitstamp", /* ...22 total... */],
    "count":         22,
    "picked_single": { "venue": "Binance", "price_usd": 81445.52 },
    "live_url":      "/api/v1/live.json"
  },
  "change_pct_24h":  null,
  "volume_24h_usd":  37424313548,
  "market_cap_usd":  1553734997147,
  "rank":            1,
  "supply": { "circulating": 20076428, "max": 21000000 },
  "ledger":          "overlay",
  "nature":          "commodity",
  "nature_basis":    "Named a digital commodity in the joint SEC-CFTC interpretation.",
  "nature_tags":     ["commodity"],
  "chains":          null,
  "image":           "https://..."
}

price_source.method is "exchange" when at least one exchange in the 24-venue panel quoted the coin within the 0.25×..4× anchor band at the build; "snapshot" when none did (long-tail coin, newly listed, CMC-only — the second-hand price in price_usd comes from the 6-hourly aggregated snapshot). About 38% of assets are exchange-sourced and 62% are snapshot-only at any given build. change_pct_24h stays null until the provider pipeline carries 24h change through — the field is in the shape so adding the data later doesn't break clients.

Update cadence

Two cadences, two publishers:

Every response includes a generated_at ISO-8601 timestamp; a caller who wants the freshest reading should read that field rather than trust HTTP dates. For near-real-time price in the per-asset shape, pull the asset's price_source.live_url once per minute instead of refetching the 6-hourly file.

Rate limits

The free tier needs no key and allows 60 requests a minute per IP; a paid key raises the limit on the same paths. Every response is a static file. Please cache. Aggressive polling of a file that only changes every 60 s (live overlay) or every 6 h (snapshot) is wasteful for both sides.

Attribution

Licensed under CC BY 4.0. Use the data anywhere, commercial use included. In return, please link back to coin-spectrum.com — a footer credit or a note in your project's README is enough. The API exists to be reused; a link is how it stays sustainable.

No warranty

The data is derived from public sources — see methodology. It is provided as-is, without warranty of any kind. If you use it to decide whether to spend money, that is entirely your call and entirely your risk.

Contact

Questions, bug reports, or a request for an endpoint that isn't here yet: open an issue or write to api@coin-spectrum.com.

Common questions

Is the API free?

The /api/v1/ tier is free: no signup, no key, 60 requests a minute per IP. Paid tiers — higher throughput, historical endpoints and per-key limits, priced in USD and paid in crypto — serve the same endpoints with a key from api.coin-spectrum.com/v1/; see Plans.

Do I need an API key?

Not for /api/v1/. Files are served without authentication, up to 60 requests a minute per IP. Paid tiers issue a key for the proxy endpoint and raise the limit.

How often does the data refresh?

Two cadences. Live prices — /api/v1/live.json and /live.json — every 60 seconds. The structured files — rank, family, supply, classification, grades — every six hours (update_cadence_minutes: 360 in meta.json). Every response carries a generated_at ISO-8601 timestamp so a consumer can decide whether to re-fetch. Use the live feed for prices and the structured files for everything else.

What does the CC BY 4.0 license mean for my project?

Use the data anywhere — a chart, a screener, an app, a research paper, a commercial product. The only requirement is credit somewhere reasonable: a byline, a data-source line, or a link to coin-spectrum.com. Commercial use is included.

What's the difference between /api/v1/assets/xrp.json and /assets/xrp/?

Same data, two consumers. The JSON is for machines; the HTML page is for readers. Both use the same canonical slug so the two URLs shape-match — one can be derived from the other with a trivial string replacement.

What happens on breaking changes?

Only the current version is served. A change lands in the same files, schema_version in meta.json goes up, and the Changes list says what moved. No older copy is kept, so a consumer that relies on category or subcategory should check schema_version.