Authentication

Include your API key in every request using the X-API-Key header.

curl "https://cryptodataapi.com/api/v1/market-health" \
  -H "X-API-Key: cdk_live_your_key_here"

Send a User-Agent that names your client — e.g. cryptodataapi-python/1.0. Any named value works, and it gets your traffic classified correctly in usage stats. Python's built-in urllib is the one client where this is mandatory: its default Python-urllib/3.x signature is refused by our CDN's bot protection before the request reaches the API, so you get an HTML 403 (Cloudflare error 1010) instead of a JSON error — on every path, including /llms.txt, /api/v1/auth/keys and /mcp. requests, httpx, aiohttp, curl and Node fetch send their own and need no change.

import urllib.request

req = urllib.request.Request("https://cryptodataapi.com/api/v1/daily")
req.add_header("X-API-Key", "cdk_live_your_key_here")
req.add_header("User-Agent", "cryptodataapi-python/1.0")  # required with urllib

First calls

In this order. The first two need no credentials at all:

  1. GET /api/v1 — the endpoint index: what exists and what your key unlocks.
  2. POST /api/v1/auth/keys with {"email":"[email protected]"} — only if you don't have a key. Returned once. Confirming the address lifts the same key from 100 to 1,000 requests/day and switches Pro on for 24 hours.
  3. GET /api/v1/daily — the whole market in one cached call; it replaces ~10 requests. Append ?format=markdown for LLM-friendly output.
  4. GET /api/v1/quant/market or GET /api/v1/quant/gex — the Pro decision layer. A 403 here is the expected free-tier answer and carries its own way forward: the verify-email offer, /pricing, and POST /api/v1/payments/agent-subscribe (x402) for upgrading without a browser.

Don't open with a candle poll. OHLCV is the commodity layer — the free tier already serves it (/api/v1/market-data/klines, /api/v1/hyperliquid/candles) and it cannot tell you what regime you're in. Fetch bars when a strategy needs bars, not to discover what this API is.

Rate Limits

Rate limits depend on your API key tier:

TierDaily LimitBurst (per min)
Free1,000 requests
100 until email confirmed
10
Pro10,000 requests30
Pro Plus50,000 requests120

Backtesting bulkhead limits (the heavy /api/v1/backtesting/* readers run in an isolated container, also echoed by GET /backtesting/status → limits):

LimitValueWhat you see
Edge rate, per API key2 requests/s sustained, bursts of 20429 + Retry-After
Concurrent heavy reads2 at a time, 25 s queue503 backtesting_busy + Retry-After: 5
Rows per page10,000 (limit)page with cursor
Response deadline60 s at the public edgedropped connection — scope by symbol/coin

Send Accept-Encoding: gzip (most clients do by default) — a 10,000-row page compresses ~10x at the edge. For multi-day bulk history prefer /backtesting/archives/download over paging.

Probing from the OpenAPI spec (gateways and health monitors that import /api/openapi.json):

  • Fill every parameter that carries an example. Every required path and query parameter has one that answers 200 for a Pro Plus key, and a few optional ones do too, where the bare call would 400 or be far heavier than a probe needs. Date examples are relative (two days ago).
  • x-timeout-seconds on an operation is the longest it can take (cold caches, archive listings, upstream calls). Operations without it answer within 10 s once warm.
  • Skip operations marked x-streaming (the response never completes) and x-account-scoped (the resource belongs to one caller, such as an invoice).
  • A 503 with Retry-After means the endpoint is warming up after a deploy, not that it is down. Retry after the stated delay.

Authentication

Create, inspect, rotate, and revoke API keys.

POST /api/v1/auth/keys Create Api Key ▾

Create a new free-tier API key. The full key is only shown once. The response also states the caps this key lands on, what confirming the address unlocks, and what the paid tiers cost — so an agent never has to discover its limit by being rate-limited.

No authentication required
Request Body (JSON)
NameTypeRequiredDescription
emailstringYesUse a real address — the confirmation link is what raises this key to 1,000/day.
Example
curl -X POST "https://cryptodataapi.com/api/v1/auth/keys" \
  -H "Content-Type: application/json" \
  -d '{"email": "[email protected]"}'
Response
{
  "api_key": "cdk_live_...",           // shown once — store it now
  "key_prefix": "cdk_live_a1b2",
  "email": "[email protected]",
  "tier": "free",
  "daily_limit": 100,                  // this key's REAL cap right now
  "per_minute_limit": 10,
  "rate_limit_scope": "api_key",     // per key, not per account
  "email_verified": false,
  "verified_daily_limit": 1000,        // what confirming buys
  "next_step": "Confirm [email protected] to raise THIS key from 100 to 1000 requests/day — plus 24 hours of Pro on the same key...",
  "upgrade": {
    "pro":      { "price_usd_monthly": 29,  "daily_limit": 10000, "per_minute_limit": 30 },
    "pro_plus": { "price_usd_monthly": 99,  "daily_limit": 50000, "per_minute_limit": 120 },
    "pricing_url": "https://cryptodataapi.com/pricing",
    "agent_subscribe": { "endpoint": "POST /api/v1/payments/agent-subscribe", "protocol": "x402" }
  }
}

Errors are always JSON. Every 401/403/429 on an /api/* path returns {"detail": {"error": "<code>", "message": "..."}}. A 401 carries mint_url, a 403 carries required_tier and pricing_url, and a 429 carries Retry-After plus the X-RateLimit-* headers.

DELETE /api/v1/auth/keys Revoke Api Key ▾

Revoke the current API key. 7-day cooldown before new key creation.

Requires API key
Example
curl -X DELETE "https://cryptodataapi.com/api/v1/auth/keys" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/auth/keys/me Get Current Key Info ▾

Get information about the current API key: tier, requests used today, and the effective rate limits. On the free tier email_verified tells you which allowance the key is on — when it is false, verified_daily_limit and upgrade_message describe what confirming the address unlocks (1,000 requests/day and 24 hours of Pro).

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/auth/keys/me" \
  -H "X-API-Key: cdk_live_your_key"
POST /api/v1/auth/resend-verify Resend Verification Email ▾

Re-send the confirmation link for this key's email address. Clicking that link lifts the same key from 100 to 1,000 requests/day and switches Pro on for 24 hours — nothing to re-install. Already-verified keys get status: "already_verified". Re-sends are throttled to one per 10 minutes.

Requires API key
Example
curl -X POST "https://cryptodataapi.com/api/v1/auth/resend-verify"   -H "X-API-Key: cdk_live_your_key"
POST /api/v1/auth/keys/rotate Rotate Api Key ▾

Rotate the current API key. Invalidates the old key.

Requires API key
Example
curl -X POST "https://cryptodataapi.com/api/v1/auth/keys/rotate" \
  -H "X-API-Key: cdk_live_your_key"

Coins

Coin profiles, search, categories. 500+ coins aggregated from multiple sources.

GET /api/v1/coins List Coins ▾

List all coins, paginated by market cap rank.

Requires API key
Query Parameters
NameTypeRequiredDefaultDescription
pageintNo1min: 1
per_pageintNo50min: 1, max: 250
Example
curl "https://cryptodataapi.com/api/v1/coins?page=1&per_page=50" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/coins/top Top Coins ▾

Get top N coins by market cap.

Requires API key
Query Parameters
NameTypeRequiredDefaultDescription
limitintNo20min: 1, max: 100
Example
curl "https://cryptodataapi.com/api/v1/coins/top?limit=20" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/coins/categories Coin Categories ▾

Get all unique coin categories.

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/coins/categories" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/coins/category-groups Curated Category Groups ▾

Curated coin-category themes — 20+ major categories spanning AI, Layer-1 & Layer-2, DeFi, DEX, lending, liquid staking, stablecoins, exchange tokens, meme, privacy, RWA, NFT, gaming, metaverse, DePIN, oracles, interoperability, storage, Bitcoin/Solana/Cosmos ecosystems, PoW and derivatives. Each group carries a plain-English description and its resolved coin list (live price, market cap, rank, 24h/7d change), sorted by market-cap rank. Unlike /coins/categories (raw CoinGecko tag names), this is an editorial set powering the Coin Categories page. Query param: limit (max coins per group, default 25).

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/coins/category-groups?limit=25" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/coins/{symbol} Get Coin ▾

Get a single coin profile by symbol (e.g., BTC, ETH).

Requires API key (Pro tier)
Path Parameters
NameTypeRequiredDescription
symbolstringYes
Example
curl "https://cryptodataapi.com/api/v1/coins/BTC" \
  -H "X-API-Key: cdk_live_your_key"

Market Health

Dual-score market health system with 11 components split into long-term trend and short-term momentum.

GET /api/v1/market-health Get Market Health ▾

Full dual-score market health result with all 11 components. **`indicators` contract** Top-level `indicators` is a flat denormalization of the most-filtered values from `components.<x>.details`. Keys are **omitted entirely** when the source value is unavailable (never null) so consumers can safely use `dict.get(key, default)` for fallbacks. Committed key set: - `long_short_ratio` (float) — BTC long/short ratio (Binance perps) - `funding_rate` (float, %) — avg funding rate (aliased from `avg_funding_rate`) - `buy_ratio` (float, 0–1) — weighted taker-buy ratio across top spot pairs - `fear_greed_value` (int, 0–100) — averaged Fear & Greed index - `breadth_pct` (float, %) — share of top-30 coins above their 200D MA - `pct_from_200ma` (float, %) — BTC distance from 200D MA - `cross_status` (str) — Golden | Death | Neutral - `stablecoin_change_7d` (float) — 7-day stablecoin market-cap change Health is computed cross-exchange (CoinGlass aggregate + Binance) and is not scoped by any per-exchange filter. The `long_short_ratio` is BTC-on-Binance, used as a market-wide sentiment signal.

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/market-health" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/market-health/summary Get Health Summary ▾

Scores + sentiment only (lightweight).

Requires API key
Query Parameters
NameTypeRequiredDefaultDescription
formatstringNo—Response format: 'markdown' for LLM-friendly plain text
Example
curl "https://cryptodataapi.com/api/v1/market-health/summary" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/market-health/components Get Health Components ▾

All 11 component details.

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/market-health/components" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/market-health/component/{name} Get Health Component ▾

Get a single component by name.

Requires API key
Path Parameters
NameTypeRequiredDescription
namestringYes
Example
curl "https://cryptodataapi.com/api/v1/market-health/component/price_trend" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/market-health/history Get Health History ▾

Health score history from database.

Requires API key
Query Parameters
NameTypeRequiredDefaultDescription
daysintNo365min: 1, max: 730
Example
curl "https://cryptodataapi.com/api/v1/market-health/history?days=365" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/market-health/altcoin-breadth Altcoin Breadth ▾

Altcoin breadth - % of coins above their MA with per-coin detail.

Requires API key
Query Parameters
NameTypeRequiredDefaultDescription
ma_periodintNo200min: 5, max: 365
Example
curl "https://cryptodataapi.com/api/v1/market-health/altcoin-breadth?ma_period=200" \
  -H "X-API-Key: cdk_live_your_key"
POST /api/v1/market-health/refresh Force Refresh ▾

Force recalculate health score (Pro and Pro Plus tiers).

Requires API key (Pro tier)
Example
curl -X POST "https://cryptodataapi.com/api/v1/market-health/refresh" \
  -H "X-API-Key: cdk_live_your_key"

Sentiment & Macro

Fear & Greed index, macro indicators, and stablecoin flows.

GET /api/v1/sentiment/fear-greed Get Fear Greed ▾

Fear & Greed index (multi-source averaged).

Requires API key
Query Parameters
NameTypeRequiredDefaultDescription
formatstringNo—Response format: 'markdown' for LLM-friendly plain text
Example
curl "https://cryptodataapi.com/api/v1/sentiment/fear-greed" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/sentiment/macro Get Macro ▾

Macro indicators: EUR/USD, gold, treasury yields.

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/sentiment/macro" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/sentiment/stablecoins Get Stablecoins ▾

Stablecoin market cap + 14d/90d flows.

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/sentiment/stablecoins" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/sentiment/stablecoins/remote-history Get Remote Stablecoin History ▾

Daily stablecoin mcap + inflows, derived from our own DefiLlama history.

Requires API key
Query Parameters
NameTypeRequiredDefaultDescription
daysintNo90min: 1, max: 365
Example
curl "https://cryptodataapi.com/api/v1/sentiment/stablecoins/remote-history?days=90" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/sentiment/stablecoins/history Get Stablecoin History ▾

Raw stablecoin market cap history timeseries.

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/sentiment/stablecoins/history" \
  -H "X-API-Key: cdk_live_your_key"

Derivatives

Binance Futures derivatives data and cross-exchange comparisons.

GET /api/v1/derivatives/binance/funding-rates Binance Funding Rates ▾

Binance perpetual funding rate history.

Requires API key
Query Parameters
NameTypeRequiredDefaultDescription
symbolstringNoBTCUSDT
limitintNo30min: 1, max: 100
Example
curl "https://cryptodataapi.com/api/v1/derivatives/binance/funding-rates?symbol=BTCUSDT&limit=30" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/derivatives/binance/open-interest Binance Open Interest ▾

Binance open interest + 30-day trend.

Requires API key
Query Parameters
NameTypeRequiredDefaultDescription
symbolstringNoBTCUSDT
Example
curl "https://cryptodataapi.com/api/v1/derivatives/binance/open-interest?symbol=BTCUSDT" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/derivatives/binance/long-short-ratio Binance Long Short Ratio ▾

Binance long/short account ratio.

Requires API key
Query Parameters
NameTypeRequiredDefaultDescription
symbolstringNoBTCUSDT
Example
curl "https://cryptodataapi.com/api/v1/derivatives/binance/long-short-ratio?symbol=BTCUSDT" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/derivatives/binance/summary Binance Derivatives Summary ▾

All-in-one Binance derivatives summary.

Requires API key
Query Parameters
NameTypeRequiredDefaultDescription
symbolstringNoBTCUSDT
Example
curl "https://cryptodataapi.com/api/v1/derivatives/binance/summary?symbol=BTCUSDT" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/derivatives/binance/history Derivatives History ▾

Daily derivatives data (funding, OI, L/S) from our own funding + OI archives.

Requires API key
Query Parameters
NameTypeRequiredDefaultDescription
daysintNo30min: 1, max: 90
Example
curl "https://cryptodataapi.com/api/v1/derivatives/binance/history?days=30" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/derivatives/hyperliquid/history Hyperliquid OI History ▾

Daily Hyperliquid funding rate + open interest history, derived from our own 5-min bt_funding archive. Captured since 2026-03-30 — nothing earlier exists anywhere, Hyperliquid's fundingHistory API has never carried open interest or mark price.

Requires Pro Plus API key
Query Parameters
NameTypeRequiredDefaultDescription
symbolstringNoBTCHyperliquid coin, e.g. BTC
daysintNo30min: 1, max: 180
Example
curl "https://cryptodataapi.com/api/v1/derivatives/hyperliquid/history?symbol=BTC&days=90" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/derivatives/funding-rates Cross Exchange Funding ▾

Funding rates for one coin per call (?coin=, default BTC) across Binance + Hyperliquid. For every Hyperliquid perp's rate in one call (what the /funding-rates board shows) use /hyperliquid/open-interest (assets[].funding_rate).

Added 2026-09-23: hyperliquid.history_available (bool) and hyperliquid.history_status — ok (recent HL settlements present), warming (the history fetch is still running; retry in a few seconds — current_rate is unaffected) or unavailable (HL returned nothing, or the coin is not an HL perp). history_count: 0 with warming is not a stuck feed. Also fixed: a slow cold fetch used to be cancelled, so history_count stayed 0 on every call.

Requires API key
Query Parameters
NameTypeRequiredDefaultDescription
coinstringNoBTC
Example
curl "https://cryptodataapi.com/api/v1/derivatives/funding-rates?coin=BTC" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/derivatives/open-interest Cross Exchange Oi ▾

Open interest across Binance + Hyperliquid.

Requires API key
Query Parameters
NameTypeRequiredDefaultDescription
coinstringNoBTC
Example
curl "https://cryptodataapi.com/api/v1/derivatives/open-interest?coin=BTC" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/derivatives/summary Cross Exchange Summary ▾

Combined cross-exchange derivatives overview.

Requires API key
Query Parameters
NameTypeRequiredDefaultDescription
coinstringNoBTC
formatstringNo—Response format: 'markdown' for LLM-friendly plain text
Example
curl "https://cryptodataapi.com/api/v1/derivatives/summary?coin=BTC" \
  -H "X-API-Key: cdk_live_your_key"

Hyperliquid

Hyperliquid perpetual futures data — prices, funding, OI, candles, order book.

GET /api/v1/hyperliquid/meta Get Meta ▾

Exchange metadata: assets, max leverage, specs.

Added 2026-09-19: fees — Hyperliquid's published fee schedule as fractions of notional (perps.taker 0.00045 = 0.045%, perps.maker 0.00015; spot.taker 0.00070, spot.maker 0.00040 — the base tier, the right default for a paper book), the full volume_tiers table, and as_of / source / note. Venue-wide (HL has no per-coin fee) and static on our side. Charge taker on market orders and triggered stop / trailing exits, maker on resting limits; funding is separate.

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/hyperliquid/meta" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/hyperliquid/prices Get Prices ▾

All mid prices across Hyperliquid assets.

Added 2026-09-09: as_of (ms, when the mids were last fetched from Hyperliquid) and generated_at (ms, when this response body was assembled). The gap between them is the staleness of the payload; both are null only on a pre-deploy cache row.

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/hyperliquid/prices" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/hyperliquid/funding-rates Get Funding Rates ▾

Current + historical funding rates for a coin.

Requires API key
Query Parameters
NameTypeRequiredDefaultDescription
coinstringNoBTC
limitintNo20min: 1, max: 100
Example
curl "https://cryptodataapi.com/api/v1/hyperliquid/funding-rates?coin=BTC&limit=20" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/hyperliquid/open-interest Get Open Interest ▾

Open interest across all Hyperliquid assets.

Added 2026-09-09: as_of (ms, HL fetch time of the OI snapshot), generated_at (ms, response build time) and coverage {universe_total, delisted_excluded, rows} — the full HL universe size, how many delisted markets (zero OI and funding) were dropped, and how many rows are actually in the payload. null only on a pre-deploy cache row.

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/hyperliquid/open-interest" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/hyperliquid/candles Get Candles ▾

OHLCV candles for a coin — the trailing limit bars, or an explicit window.

Added 2026-09-09: start / end query params (epoch ms, epoch s or ISO-8601). When a range is given the trailing limit is ignored and the window is paginated up to 15,000 bars per call; a wider window returns 400 range_too_large — narrow it or step the interval up. Retention is Hyperliquid's, not ours: HL keeps roughly 4 days of 1m bars (more at coarser intervals), so an older start simply returns fewer bars; for multi-month 1m history use /backtesting/klines?exchange=hyperliquid. The response echoes start / end (ms) for a range request and null for a trailing pull. Range requests bypass the 60s response cache and spend live HL weight, so poll them sparingly.

Execution truth for a Hyperliquid book: these are Hyperliquid's own bars (candleSnapshot). Signal, size and mark an HL position from this series; /backtesting/klines?exchange=hyperliquid is our archive of the same venue's 1m bars for deep history, not a second price source. For several coins at once use /hyperliquid/candles/batch.

Added 2026-09-19: symbol is accepted as an alias for coin (matched case-insensitively; a USDT / -PERP suffix is tolerated). A coin HL does not list is 400 unknown_coin and an unrecognised query parameter is 400 unknown_parameter — previously ?symbol=SOL was silently dropped and the reply was the default coin's (BTC) bars with a 200. atr=14 adds a Wilder ATR to every bar as atr (same form as TradingView ta.atr; null for the first N bars, pull ~10× the period for a converged value), echoed as atr_period. forming_bar_timestamp names the last bar when it has not closed yet (null when it has) — drop it, and its atr, for completed-bar signals.

Requires API key
Query Parameters
NameTypeRequiredDefaultDescription
coinstringNoBTCHL's own coin name (BTC, SOL, kPEPE), case-insensitive
symbolstringNo—Alias for coin — send one or the other
intervalstringNo1h1m, 5m, 15m, 30m, 1h, 4h, 1d, 1w
atrintNo—Wilder ATR period (2–200), e.g. 14; adds atr to every bar
limitintNo200min: 1, max: 1000 (ignored when start/end is given)
startstringNo—Range start (epoch ms / s or ISO-8601); switches to range mode, capped at 15,000 bars
endstringNonowRange end (epoch ms / s or ISO-8601)
Example
curl "https://cryptodataapi.com/api/v1/hyperliquid/candles?coin=BTC&interval=1h&limit=200" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/hyperliquid/candles/batch Get Candles (Batch) ▾

Trailing OHLCV candles for up to 25 coins in one call (added 2026-09-19) — the same bars /hyperliquid/candles serves per coin, keyed by coin under series. Replaces a loop of single-coin calls. Trailing limit only; for an explicit start/end range use the single-coin route.

Every coin must be listed on Hyperliquid — 400 unknown_coin otherwise, nothing is silently dropped (more than 25 → 400 too_many_coins). On a cold cache a series that has not arrived within ~8s is named in pending instead of holding the whole response, and retry_after_s (null when nothing is pending; 3–30s, scaled to how many are still fetching) says how long to wait: the fetches keep running and are cached, so re-request just those coins after that. A cold coin costs Hyperliquid rate limit (~20 weight whatever limit is), so a first pull of many coins takes about a minute of budget and repeat pulls are instant — a shorter limit is served from a longer window already cached, and the 4h candles of the ~60 most liquid perps are refilled just after each 4h bar closes (00/04/08/12/16/20 UTC). If you only need a scan, /indicators/heatmap needs no candles at all. atr, atr_period and forming_bar_timestamp behave as on /hyperliquid/candles.

The contract (added 2026-09-27): complete is true when every requested coin is in series; a coin is never in both series and pending. Retry only the pending coins after retry_after_s — a retry joins the fetch already running, so it is never wasted. wait (0–25s) holds longer if you prefer one call to a poll. closed_only=true is the read for a strategy that acts on a closed bar: the last limit completed bars, no forming bar, served from any series fetched since the latest close — so once the 4h pre-warm has run it stays instant for the whole bar. symbols is accepted as an alias for coins. For sizing, fees are on /hyperliquid/meta (fees); funding and open interest on the same bar grid are /backtesting/hl-funding-bars (join on timestamp).

Requires API key
Query Parameters
NameTypeRequiredDefaultDescription
coinsstringYes—Comma list of HL coin names, e.g. ETH,SOL,BNB (up to 25). symbols is an alias
intervalstringNo1h1m, 5m, 15m, 30m, 1h, 4h, 1d, 1w
limitintNo200min: 1, max: 1000
atrintNo—Wilder ATR period (2–200); adds atr to every bar
closed_onlyboolNofalsetrue = the last limit completed bars only (no forming bar)
waitfloatNo8Seconds to hold for cold series before answering with pending (0–25)
Example
curl "https://cryptodataapi.com/api/v1/hyperliquid/candles/batch?coins=ETH,SOL,BNB&interval=4h&limit=250&atr=14&closed_only=true" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/hyperliquid/l2-book Get L2 Book ▾

L2 order book snapshot.

Added 2026-09-09: ts (ms) — Hyperliquid's own timestamp for the book snapshot, so you can measure how far behind the exchange the served book is. null only on a pre-deploy cache row.

Requires API key
Query Parameters
NameTypeRequiredDefaultDescription
coinstringNoBTC
Example
curl "https://cryptodataapi.com/api/v1/hyperliquid/l2-book?coin=BTC" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/hyperliquid/trade-flow Get Trade Flow ▾

Added 2026-09-09. Per-minute taker buy/sell flow for one perp, built from Hyperliquid's public trades stream (forward-only from 2026-09-09). Every row is one closed UTC minute, newest last, dense: time (minute start, ms), coin, buy_notional / sell_notional (USD by aggressor side — HL side B = taker bought, A = taker sold; their sum is the minute's traded notional), n_trades, vwap (notional-weighted price; null if no fills), max_fill_usd, large_fill_share (0..1 share of notional from fills ≥ large_fill_usd, $25k; null when none qualify), partial and cvd_usd (running buy − sell from window_start; resets per request, so compare rows within one response only — served only, not archived). Envelope: coin, minutes, bucket: "1m", large_fill_usd, window_start, window_end (exclusive; the still-open minute is never included), stream {connected, connected_since (ms | null), coverage_pct (share of the last 60 minutes fully watched)}, data, count. Coverage honesty: partial: true means our socket did not watch the whole minute (a reconnect, a deploy); such minutes return null notional and are never back-filled — HL's stream has no replay. A watched minute with no fills is a genuine zero (0.0, partial: false). 503 trade_flow_warming with Retry-After: 60 until the first bucket closes; 404 unknown_coin for a coin HL does not list. Archived per minute as /backtesting/hl-trade-flow. Pro (Pro Plus included).

Requires Pro or Pro Plus API key
Query Parameters
NameTypeRequiredDefaultDescription
coinstringNoBTCHL coin name (BTC, ETH, kPEPE — HL's own names)
minutesintNo60Trailing window in whole minutes (min: 1, max: 1440)
Example
curl "https://cryptodataapi.com/api/v1/hyperliquid/trade-flow?coin=BTC&minutes=60" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/hyperliquid/trade-flow/universe Trade Flow Universe ▾

Added 2026-09-09. Taker flow for every Hyperliquid perp over one window, biggest notional first. Response: window, window_minutes, large_fill_usd, as_of (ms — the window's end, i.e. the last closed minute), data [{coin, buy_notional, sell_notional, taker_buy_ratio (buy / (buy + sell), 0..1; null if no fills), n_trades, large_fill_share, partial_minutes}], count. partial_minutes counts the window's minutes our socket did not fully watch — the same for every row, since coverage is per connection, not per coin. Coins with zero fills in the window are omitted. Same warming / coverage semantics as /hyperliquid/trade-flow. Pro Plus only.

Requires Pro Plus API key
Query Parameters
NameTypeRequiredDefaultDescription
windowstringNo1h15m | 1h | 4h
Example
curl "https://cryptodataapi.com/api/v1/hyperliquid/trade-flow/universe?window=1h" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/hyperliquid/summary Get Summary ▾

All-in-one perp data for a coin.

Added 2026-09-09: as_of (ms, HL fetch time of the funding / OI block), price_as_of (ms, fetch time of the mid price — a separate, faster poll) and generated_at (ms, response build time). null only on a pre-deploy cache row.

Requires API key
Query Parameters
NameTypeRequiredDefaultDescription
coinstringNoBTC
Example
curl "https://cryptodataapi.com/api/v1/hyperliquid/summary?coin=BTC" \
  -H "X-API-Key: cdk_live_your_key"

Event Stream

Market events as they happen: liquidations (OKX, Bybit, Hyperliquid; $250 and up), $1M+ CEX whale transfers, Hyperliquid top-trader position changes ($25K+), and funding moves, open-interest moves and 1-minute price moves (0.10%+, perps trading $1M+/day) for every Hyperliquid perp. One feed, three ways to read it: a real-time Server-Sent Events stream (Pro), recent events as JSON (any key), and a keyless 30-minute-delayed preview (the tape on our homepage).

GET /api/v1/stream Live Stream (SSE) ▾

Added 2026-09-28. A text/event-stream response that stays open. Each message is id: <n> plus data: <one JSON event>. A : ping comment arrives every 15s so proxies keep the connection open. Every event has id, ts (when it happened, ms), recv_ts (when we saw it, ms), type, venue and symbol (the base coin, e.g. BTC). Fields by type:

  • liquidation: side (the liquidated position's side, long or short) and usd. Hyperliquid events also carry px and sz.
  • whale_transfer: exchange, chain, direction (inflow = a deposit to the exchange, outflow = a withdrawal), amount (token units) and usd.
  • whale_position: a Hyperliquid top trader's position change. action (entry, exit, increase or decrease), side, size, usd (notional of the change at the entry price), address and change_pct.
  • funding: rate_1h, prev_rate_1h and settle (true = the first print of a new hour).
  • oi_delta: usd (the signed change), pct, window_s (about 60 = a minute move of at least max($25K, 0.03%); about 300 = a 5-minute jump of at least max($5M, 1%)) and oi_usd.
  • price_move: pct, price, prev_price and window_s. A mark move of 0.10% or more over about a minute, on perps trading $1M+ a day.

Resume: a browser EventSource sends Last-Event-ID automatically when it reconnects, and we replay what you missed from a buffer of about 2 hours. ?since_id= does the same by hand. Ids only increase, including across our deploys. A client that is too slow to keep up is sent an event: lagged message and disconnected; reconnect with Last-Event-ID to resume. Each key can hold up to 3 open streams; more returns 429 too_many_streams. Pro (Pro Plus included). A Free key gets a 403 that points to the two reads below.

Requires Pro or Pro Plus API key
Query Parameters
NameTypeRequiredDefaultDescription
typesstringNoallComma-separated: liquidation, whale_transfer, whale_position, funding, oi_delta, price_move. An unknown type returns 400.
symbolsstringNoallComma-separated base coins, e.g. BTC,ETH,SOL
min_usdfloatNo0Drop events smaller than this USD size. Funding and price moves always pass.
since_idintNo—Replay buffered events after this id first. If the Last-Event-ID header is also sent, the header wins.
Example
curl -N "https://cryptodataapi.com/api/v1/stream?types=liquidation,whale_transfer&min_usd=100000" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/stream/recent Recent Events ▾

Added 2026-09-28. The newest events from the stream as JSON, oldest first, in the same event shape as /stream. Response: count, last_id and events. To go live without a gap or a duplicate, backfill here and then open /stream?since_id=<last_id>. Any key, Free included.

Requires API key (any tier)
Query Parameters
NameTypeRequiredDefaultDescription
limitintNo100Newest N events (min: 1, max: 500)
typesstringNoallComma-separated event types
symbolsstringNoallComma-separated base coins
min_usdfloatNo0Drop events smaller than this USD size
Example
curl "https://cryptodataapi.com/api/v1/stream/recent?limit=50&types=liquidation" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/stream/delayed Delayed Preview ▾

Added 2026-09-28. A free preview that needs no key. It returns the events from a 3-minute window that ended 30 minutes ago, oldest first, at most 900. Response: server_now, delay_ms, window_start and window_end (event time, ms), events_per_min, count and events (the same shape as /stream). To replay at the original pace, show each event at ts + delay_ms. Cached for 60 seconds. This is the feed behind the tape on our homepage.

No API key required
Example
curl "https://cryptodataapi.com/api/v1/stream/delayed"

Liquidity / Market Depth

Per-minute L2 book snapshots across the top-25 HL perps, joined to OI — powers the Liquidity / Market Depth regime on the /regimes page. Detects deep-book, OI-vs-price divergence, depth withdrawal, and post-cascade impaired regimes.

GET /api/v1/liquidity/depth Depth Snapshot ▾

Current per-coin depth/spread snapshot for the tracked universe (top-25 HL perps by 24h notional volume). Each record includes bid/ask depth at {10, 25, 50, 100}bps, spread in bps, book imbalance within 10bps, and joined open interest.

Added 2026-09-09: per-record levels_truncated {bid: {10bps, 25bps, 50bps, 100bps}, ask: {...}} of booleans, or null. true means the deepest level HL returned for that side sits inside that band, so the book ran out before the band edge and the depth figure is a lower bound, not the true resting liquidity. null = not measured (pre-deploy sample).

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/liquidity/depth" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/liquidity/oi-divergence OI / Price Divergence ▾

Per-coin OI vs price change across 1h/4h/24h windows, ranked by 4h divergence (oi_change_4h_pct − price_change_4h_pct). Positive divergence = OI rising faster than price = fragile positioning.

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/liquidity/oi-divergence" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/liquidity/regime Regime Classifier ▾

Per-coin regime label (deep_book / oi_price_divergence / depth_withdrawal / post_cascade_impaired / neutral) + market-wide aggregate + composite fragility score (0-100; higher = healthier). Pro and Pro Plus.

Requires Pro or Pro Plus API key
Example
curl "https://cryptodataapi.com/api/v1/liquidity/regime" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/liquidity/regime/score Fragility Score ▾

Composite liquidity fragility score (0-100) + sentiment band (healthy / leaning_healthy / neutral / leaning_fragile / fragile) + regime aggregate. Trimmed companion to /liquidity/regime — same composite, no per-coin list. Pro and Pro Plus.

Requires Pro or Pro Plus API key
Example
curl "https://cryptodataapi.com/api/v1/liquidity/regime/score" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/liquidity/depth/{coin} Per-Coin History ▾

Per-coin rolling depth history (up to 24h of samples on a ~2-minute timer). The tracked universe is the top-25 HL perps by 24h notional volume, not every coin: a coin outside it returns 404, and an in-universe coin with no samples in the window returns 200 with count: 0. Records carry the same shape as /liquidity/depth, including the levels_truncated lower-bound flags added 2026-09-09. BTC on any tier; the rest of the tracked universe requires Pro.

Requires API key (BTC only; the tracked top-25 universe requires Pro)
Query Parameters
NameTypeRequiredDefaultDescription
minutesintNo60min: 1, max: 1440
Example
curl "https://cryptodataapi.com/api/v1/liquidity/depth/BTC?minutes=60" \
  -H "X-API-Key: cdk_live_your_key"

Volatility Regime

The Crypto Volatility Index (CVI): a volume-weighted market-wide realized-volatility index plus BTC/ETH implied vol (Deribit DVOL) and the variance risk premium. Backed by the per-asset realized-volatility risk-sizing overlay (Regime #13) — per-asset vol regime, multi-estimator realized vol, 90d vol percentile + z-score, term structure, regime run-length, and a vol-target position-size multiplier — computed from daily klines, fully backfillable.

GET /api/v1/volatility/index Volatility Index (CVI) ▾

The Crypto Volatility Index. cvi_realized_30 / cvi_realized_7 are the headline: volume-weighted annualized 30d / 7d realized vol (%) across the universe (each coin weighted by mean daily notional; pegs excluded). Plus a 0-100 composite_score vol-stress breadth gauge + sentiment, regime_mix shares, and majors — BTC & ETH realized vs implied (Deribit DVOL) with the variance risk premium (vrp = implied − realized). One call for the whole volatility picture. Tiers: the market-wide CVI headline is on every plan; majors is BTC-only on Free and adds ETH on Pro / Pro Plus.

Requires API key (market index: all plans · majors: BTC on Free, +ETH on Pro)
Example
curl "https://cryptodataapi.com/api/v1/volatility/index" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/volatility/implied Implied Vol & DVOL ▾

BTC & ETH implied vol from Deribit's DVOL index (the 30-day forward implied vol — crypto's VIX equivalent) plus the variance risk premium vs realized. Tiers: Free = BTC only (current DVOL, 24h change, realized_30, vrp); Pro = BTC + ETH; the full DVOL history series and the ATM implied-vol term_structure (per listed expiry) are Pro Plus only (detail: true). Implied vol exists only for the options-liquid coins (BTC, ETH).

Requires API key (Free = BTC · Pro = +ETH · Pro Plus = history + term structure)
Example
curl "https://cryptodataapi.com/api/v1/volatility/implied" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/volatility/index/history CVI History ▾

Daily CVI + vol-stress history for up to a year — one point per UTC day with cvi_realized_30, cvi_realized_7, composite_score, sentiment and backfilled. From 2026-08-24 each value is that day's live capture. Earlier days are reconstructed from daily klines with the live formula and carry backfilled: true: CVI was only archived from 2026-07-23, and until 2026-08-24 the live universe still counted delisted exchange pairs with frozen prices, which roughly doubled the published index (reconstructed days use today's coin universe). Today's point appears after the 20:00 UTC snapshot. Returns 503 warming_up with Retry-After for a minute or two after a deploy. Pro Plus only.

Requires Pro Plus API key
Query Parameters
NameTypeRequiredDefaultDescription
daysintNo90min: 1, max: 365
Example
curl "https://cryptodataapi.com/api/v1/volatility/index/history?days=90" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/volume/scanner Volume Scanner ▾

Every Hyperliquid perp with its live 24h notional (volume_24h), its 30-day baseline (avg_volume_30d / median_volume_30d) and the multiplier between them — how many times its own normal daily volume a coin is trading right now. 3.0 = three times normal. multiplier_median is the same ratio against the 30d median, far less distorted by a single prior blow-off day; when the two disagree sharply the coin's history is lumpy. Each row carries an activity band (dormant / quiet / normal / elevated / surging / extreme), plus volume_change_24h (live 24h notional vs the most recent settled day — a like-for-like ~24h window, where multiplier compares against the 30-day norm) and spark_7d (the last 7 settled days of daily notional, for sparklines). Note change_24h is the price change; volume_change_24h is the volume one. The baseline uses 30 settled UTC days — today's partial day is excluded. Perps listed under 7 days ago report multiplier: null + band: "unknown" rather than a spurious number. Tiers: Free returns the top 20 perps by 24h volume; Pro / Pro Plus return the full universe.

Requires API key (Free = top 20 by volume · Pro / Pro Plus = full universe)
Query Parameters
NameTypeRequiredDefaultDescription
bandstringNo—dormant / quiet / normal / elevated / surging / extreme / unknown
min_multiplierfloatNo—Only perps at or above this multiple of their 30d average
sortstringNomultipliermultiplier / volume_24h / symbol / change_24h
limitintNo250min: 1, max: 500
Example — today's unusual activity
curl "https://cryptodataapi.com/api/v1/volume/scanner?min_multiplier=3" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/volume/scanner/{symbol} Volume Detail ▾

One perp's volume multiplier plus its history — the 30-day daily notional series the baseline is built from, one point per settled UTC day. Hyperliquid thousand-unit tickers (kBONK, kPEPE, kSHIB) are accepted as aliases of the plain symbol. Pro / Pro Plus only.

Requires Pro or Pro Plus API key
Example
curl "https://cryptodataapi.com/api/v1/volume/scanner/BTC" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/volatility/regime Regime Classifier ▾

Per-asset realized-vol regime (compressed / expanding / vol_shock / mean_reverting / normal) across the SIGNUM_RGG universe. Each entry carries 7d/30d vol (close-to-close, Parkinson, Garman-Klass), the 90d vol percentile and z-score (rv_z_30 / rv_z_7), term structure (7d/30d), a vol-target position-size multiplier, and a regime run-length (days_in_regime + prev_regime + regime_changed) so a strategy can detect the cross into a new regime point-in-time. Pegged tokens carry an is_stable data-quality flag. Backfillable from daily klines. Screen with ?regime=compressed&sort=days_compressed or ?sort=vol_target_multiplier&order=desc. Tiers: Free is scoped to BTC only; Pro / Pro Plus return the full universe.

Sizing semantics. vol_target_multiplier is absolute: 60% target vol ÷ current 30d vol, clamped to [0.25, 3.0]. It is not a relative shock gate, so a coin that always runs hot sits near the floor permanently. Use rv_z_7 >= 2 when you want “vol is abnormal for this coin”; the vol_shock regime itself fires when 7d Garman-Klass vol is at or above the 90th percentile of the coin's own trailing 90 days. Added 2026-09-09: vol.multiplier_at_floor (bool — the multiplier is pinned at the 0.25 clamp, i.e. 30d realized vol ≥ 240%) and vol.multiplier_floor_days (consecutive days it has been pinned; 0 when not at the floor), plus a per-row stale_cycles: 0 = computed fresh this refresh, N = the row was carried forward from N cycles ago because the kline pull failed; rows age out after 8 stale cycles.

Requires API key (Free = BTC only · Pro / Pro Plus = full universe)
Query Parameters
NameTypeRequiredDefaultDescription
sourcestringNo—binance_spot | hyperliquid_perp
regimestringNo—vol_shock | expanding | compressed | mean_reverting | normal
sortstringNovol_pctile_30symbol | rv_gk_30 | rv_gk_7 | vol_pctile_30 | term_structure_ratio | vol_target_multiplier | days_compressed
orderstringNodescasc | desc
limitintNo250min: 1, max: 500
Example
curl "https://cryptodataapi.com/api/v1/volatility/regime?regime=compressed&sort=days_compressed&order=desc" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/volatility/regime/score Vol-Stress Score ▾

Market-wide volatility-stress composite (0-100; higher = more stress, size down) + sentiment band (stressed / elevated / normal / calm / dormant) + median 30d vol percentile + regime aggregate. Also carries a universe-wide gross_exposure_multiplier (0.5–1.0; the market-wide analog of the per-asset vol-target multiplier) and the target_vol numerator. Trimmed companion to /volatility/regime — no per-coin list.

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/volatility/regime/score" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/volatility/regime/{symbol} Per-Symbol Detail ▾

Per-asset Volatility regime detail with 60d daily history (close, 30d close-to-close vol, 30d Garman-Klass vol) for sparkline rendering. Tiers: coin scope follows the plan — Free = BTC only, Pro / Pro Plus = any coin; the 60d history series is Pro Plus only (empty on Free / Pro). Same row fields as the list, including the 2026-09-09 additions vol.multiplier_at_floor, vol.multiplier_floor_days and stale_cycles (see the list endpoint for semantics). Symbol resolution tries the exact raw name first: kPEPE resolves to the Hyperliquid perp row, PEPE to the Binance spot row.

Requires API key (Free = BTC · Pro = any coin · history = Pro Plus)
Path Parameters
NameTypeRequiredDescription
symbolstringYesBare ticker (e.g. BTC, ETH); USDT suffix stripped automatically
Example
curl "https://cryptodataapi.com/api/v1/volatility/regime/BTC" \
  -H "X-API-Key: cdk_live_your_key"
POST /api/v1/volatility/regime/refresh Refresh Regime ▾

Force recompute the Volatility regime cache across the full universe. Pro / Pro Plus only.

Requires Pro or Pro Plus API key
Example
curl -X POST "https://cryptodataapi.com/api/v1/volatility/regime/refresh" \
  -H "X-API-Key: cdk_live_your_key"

Quant Probabilities

HMM-derived regime + probability engine for the whole market and every Hyperliquid perp. A Hidden Markov Model trained on years of hourly bars classifies each scope into one of 6 regimes (strong_trend_bull / strong_trend_bear / range_low_vol / choppy_high_vol / vol_spike / squeeze) and emits calibrated probability buckets for direction, volatility, liquidation risk, funding, breadth and open interest at 4h / 24h horizons, refreshed every 15 minutes. Nothing is a black box: every response carries an explain block (feature z-scores, state posteriors, hysteresis state, calibration applied) and /quant/history records every call point-in-time with live-vs-backfilled flags. All data endpoints require Pro Plus; the model card and taxonomy are open to any key.

GET /api/v1/backtesting/news-events News Tape (Archive) ▾

The archived catalyst tape with measured market-response labels — the backtestable form of /api/v1/news/market-moving. Every qualified event carries its impact_score, signed bias and corroboration, plus what actually happened next: ret_15m, ret_1h, ret_4h, vol_mult (vs that coin's own 30-day baseline), oi_change_pct, funding_shift and a combined abnormality. Those columns are what make the impact score calibratable rather than merely asserted — you can check whether high-scoring events actually preceded abnormal moves. Only qualified events are archived: stories that failed the noise gate or scored below the threshold were discarded at ingest and no row exists for them, so this is not "all news". History starts when the feature shipped and cannot be backfilled, because RSS only serves a recent window. Response columns are null for windows that have not matured yet — that means "not yet measured", not "no reaction". Archived daily to Parquet as the news_events type. Pro Plus only.

Requires Pro Plus API key
Query Parameters
NameTypeRequiredDefaultDescription
startstringYes—ISO 8601 or unix ms
endstringNonowISO 8601 or unix ms. EXCLUSIVE
symbolstringNo—HL perp symbol, or MARKET
min_impactfloatNo0.0Minimum impact_score
limitintNo500min: 1, max: 5000
Example
curl "https://cryptodataapi.com/api/v1/backtesting/news-events?start=2026-08-01&min_impact=0.6" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/news/pulse News Pulse ▾

A per-coin news feature series across the Hyperliquid perp universe — the endpoint built to join straight onto price. news_pressure (0..1) is the recency-weighted sum of the impact scores of that coin's qualified catalysts, saturating so a burst compounds but stays bounded. news_tilt (-1..+1) is the impact-weighted direction; negative is risk-off. event_count and top_impact tell you whether the pressure is one big story or a steady drip. headlines is raw coverage — how many stories in the current window name that coin, whether or not any cleared the catalyst bar. That is attention, not an event: the funnel discards ~95% of what it reads, so most coins sit at news_pressure: 0 while headlines keeps counting, and a coin high on headlines with no pressure is being talked about without anything happening. Every active perp gets a row — a coin with no news is news_pressure: 0, not a missing row, because a cross-sectional ranking needs the zeros and an absent symbol should always mean a pipeline failure. Rows are ranked by pressure first, then headlines. Tiers: Free returns the top 10 rows; Pro / Pro Plus return the full universe.

Requires API key (Free = top 10 rows · Pro / Pro Plus = full universe)
Query Parameters
NameTypeRequiredDefaultDescription
hoursfloatNo24Lookback window. min: 1, max: 168
Example
curl "https://cryptodataapi.com/api/v1/news/pulse?hours=24" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/news/market-moving Catalyst Tape ▾

The filtered catalyst tape — only events that cleared the impact threshold. Roughly 300-500 stories a day are ingested from free feeds and only the ~15-40 that matter are kept; sub-threshold stories are discarded outright, so there is no raw-feed endpoint at any tier and you cannot query "all news about a coin". Each event carries symbol (the HL perp, or MARKET for stories that move everything), category, impact_score (0..1), a signed bias (negative = risk-off) and corroboration — how many independent sources carried the same story, the strongest single indicator that it is real rather than syndicated. Every event also states how its coin was matched via match_mode, because the perp universe is full of ordinary English words (TRUMP, MOVE, NOT, S, W, ME, GAS, SAND) — those only ever match on a cashtag or their full project name. hl_listing / hl_delisting come from our own Hyperliquid universe diff, so they are exact and immediate. Pro Plus additionally returns the score components and market_response: the measured move at 15m / 1h / 4h (ret_pct, oi_change_pct, funding_shift, volume_multiplier, abnormality) — a headline that moved nothing scores near zero. Windows fill in as they mature, so a recent event reports null for 4h: that means "not yet", not "no reaction". Latency: RSS lags the source by ~30s-5min, so this is a context and event-study feed, not a listing-sniping tool. Tiers: Free = BTC / ETH / MARKET over 24h, top 10; Pro = every perp over 7 days; Pro Plus = full retained history.

Requires API key (Free = BTC/ETH/MARKET · Pro = full universe, 7d · Pro Plus = + score components and market response)
Query Parameters
NameTypeRequiredDefaultDescription
symbolstringNo—Filter to one Hyperliquid perp, or MARKET
hoursfloatNo24Lookback window. min: 1, max: 336
min_impactfloatNo0.45Minimum impact_score. Cannot go below the pipeline threshold
limitintNo50min: 1, max: 500
Example — today's biggest catalysts
curl "https://cryptodataapi.com/api/v1/news/market-moving?min_impact=0.6" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/news/coin/{symbol} Per-Coin News ▾

Qualified events plus news_pressure and news_tilt for a single Hyperliquid perp. The path parameter accepts the HL coin name (BTC, SOL, kPEPE). Tiers: Free is limited to BTC and ETH; Pro and above may query any perp; Pro Plus additionally receives the score components and market_response.

Requires API key (Free = BTC / ETH only · Pro / Pro Plus = any perp)
Query Parameters
NameTypeRequiredDefaultDescription
hoursfloatNo72Lookback window. min: 1, max: 336
Example
curl "https://cryptodataapi.com/api/v1/news/coin/SOL" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/news/sources News Sources ▾

Per-feed health, the funnel counts and the published coverage gap. sources[].not_modified distinguishes "answered 304, nothing new" from "dead" — both look like zero fresh items otherwise, which is how a silently broken feed hides. funnel_24h is hourly counts only (ingested, dropped_noise, dropped_no_catalyst, dropped_no_entity, dropped_below_threshold, qualified) with no titles or URLs retained for discarded stories — enough to see the filter over-tightening without keeping a news archive. unresolvable lists active perps whose ticker is an ordinary English word and which have no safe project name, so they can only ever be matched by a cashtag: the coverage gap is a published field rather than a silent blind spot.

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/news/sources" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/quant/market Market Probabilities ▾

Whole-market regime (label + calibrated confidence + candles-in-regime) and probability buckets for direction (5 buckets), volatility, liquidation risk, funding, breadth, open interest and regime transitions at the requested horizon. The market liquidation_risk bucket is depth-aware — it reads live order-book fragility (thin book + wide spread → higher forced-liquidation odds), not just realized volatility; explain.heads_provenance tags the source (e.g. depth_fragility:thin). The 24h horizon adds seeded Monte Carlo tomorrow stats (return quantiles, P(visit vol_spike), P(drawdown>5%)). The explain block exposes feature z-scores, raw state posteriors, the hysteresis rule state and raw-vs-calibrated confidence. Pro tier (market-wide and per-coin; historical/bulk is Pro Plus).

Added 2026-09-09 to the regime block (here and on the per-coin /quant/coins* objects): in_regime_since (ISO timestamp the current label was committed; null when unknown, e.g. right after a cold start), pending ({label, count, needed: 2} — a challenger label that has out-scored the incumbent for count of the needed consecutive bars; null when nothing is challenging) and hysteresis (the switch-rule constants: margin 0.10, bars 2, override 0.70, incumbent_floor 0.10, min_dwell_bars 0). There is no minimum dwell — a challenger that beats the incumbent by the margin for 2 consecutive bars, or clears 0.70 posterior in one, flips the label at once, and an incumbent whose own posterior drops below 0.10 is replaced by the argmax on the next bar. This is a different, faster rule from the /regimes catalog's dwell floors.

Added 2026-09-15: a top-level current field — an unambiguous alias for regime, the present-state nowcast. regime was already the same object regardless of the requested horizon (it's computed once from the model's posterior, not the forecast), but returning it under a horizon-scoped key made that easy to miss. current is byte-identical to regime for the same scope at the same instant; both are null while warming up.

Requires Pro or Pro Plus API key
x402 pay per request: $0.015 USDC per call, no key — see /api/v1/pricing
Query Parameters
NameTypeRequiredDefaultDescription
horizonstringNo24h4h | 24h
Example
curl "https://cryptodataapi.com/api/v1/quant/market?horizon=24h" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/quant/coins All-Coins Summary ▾

Trimmed regime summary for every active Hyperliquid perp (~200+): regime + confidence, p_direction_up, most likely transition, current OI, and data-quality flags (insufficient_history under 60d, warming_up under 30d, new_listing under 7d). This is the heatmap feed; full probability matrices live at /quant/coins/{symbol}. Pro.

Requires Pro or Pro Plus API key
Query Parameters
NameTypeRequiredDefaultDescription
horizonstringNo24h4h | 24h
regimestringNo—Filter by label, e.g. squeeze
sortstringNooioi | confidence | symbol | p_up
orderstringNodescasc | desc
limitintNo250min: 1, max: 300
Example
curl "https://cryptodataapi.com/api/v1/quant/coins?regime=squeeze&sort=oi" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/quant/coins/risk Bulk Per-Coin Risk Model ▾

One call that batches /quant/coins/{symbol} and /volatility/regime/{symbol} across the whole quant universe — majors (BTC/ETH/SOL) included. Each item: regime + confidence, the volatility / liquidation_risk / funding / open_interest probability buckets (verbatim from the per-coin endpoint), the vol-sizing fields (vol_target_multiplier, vol_pctile_30, rv_24h), and a meta block flagging insufficient_history / new_listing. Purpose-built so consumers don't fan out ~2 calls per perp. Values match the per-symbol endpoints for the same symbol/horizon. Pro.

Requires Pro or Pro Plus API key
Query Parameters
NameTypeRequiredDefaultDescription
horizonstringNo24h4h | 24h
Example
curl "https://cryptodataapi.com/api/v1/quant/coins/risk?horizon=24h" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/quant/coins/{symbol} Per-Coin Probabilities ▾

Full per-coin probability object, conditioned on the whole-market regime: the coin's transition matrix is the market-posterior-weighted mixture (inspect explain.transition_mixture_weights — SOL can read squeeze while the market reads range). Includes the explain block and recent_regimes (last ~48 inference rows for sparklines). Coins under 60d of history return the object flagged insufficient_history rather than 404. Pro.

Requires Pro or Pro Plus API key
Path Parameters
NameTypeRequiredDescription
symbolstringYesHL coin name (e.g. BTC, SOL, kPEPE)
Example
curl "https://cryptodataapi.com/api/v1/quant/coins/SOL" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/quant/history Probability History ▾

Point-in-time record of every probability the engine emitted — the verification surface. Each row carries backfilled (live 15-min inference vs retro-computed 1h history) and model_version, so you can audit our calls against what actually happened. Flattened numeric columns; format=csv streams CSV. Pro Plus only.

Requires Pro Plus API key
Query Parameters
NameTypeRequiredDefaultDescription
scopestringNomarket'market' or a coin symbol
startstringYes—ISO 8601 or unix ms
endstringNonowISO 8601 or unix ms
horizonstringNo—4h | 24h
limitintNo500min: 1, max: 2000
formatstringNojsonjson | csv
Example
curl "https://cryptodataapi.com/api/v1/quant/history?scope=BTC&start=2026-06-01&format=csv" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/quant/regimes/history Regime History Download ▾

Bulk download of the full market 6-regime history as a Parquet file (returns a pre-signed URL). One hourly row per bar from 2020 to yesterday, each carrying the full distribution over all 6 regimes at three horizons — now, 4h, 24h (columns p_now_0..5, p_4h_0..5, p_24h_0..5, keyed by regime id; see regime_map). The deep history is labeled by the same model that serves live, run over the public Binance archive it trained on (no hindsight); the source column marks the Binance-archive vs live-Hyperliquid seam. Use this for backtesting instead of paginating /quant/history. Rebuilt daily. Pro Plus only.

Requires Pro Plus API key
Example
curl "https://cryptodataapi.com/api/v1/quant/regimes/history" \
  -H "X-API-Key: cdk_live_your_key"
# -> { "download_url": "https://...signed...", "expires_in": 3600,
#      "rows": 56480, "model_version": "2.0.0",
#      "horizons": ["now","4h","24h"],
#      "regime_map": {"0":"strong_trend_bull", ...} }
GET /api/v1/quant/timeline Historic Timeline ▾

Daily market regime label from 2019 to now, produced by running the live model over its full training history — the COVID crash, 2021 bull, LUNA/FTX bear and 2024 ETF bull, labeled by the same model with no hindsight relabeling. Regenerated on every retrain. Pro Plus only.

Requires Pro Plus API key
Query Parameters
NameTypeRequiredDefaultDescription
startstringNo—ISO date filter, e.g. 2022-01-01
Example
curl "https://cryptodataapi.com/api/v1/quant/timeline?start=2022-01-01" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/quant/positioning Trader Positioning ▾

Per-coin long/short/net/gross notional split by trader type — market_maker, whale, other, all — across the full Hyperliquid account universe (every account ≥ $100k holding a position, ~5-min fresh). Trader type comes from a behavioral classifier (monthly turnover, market breadth, leverage, PnL consistency, curated known-MM/vault list); each bucket reports its distinct account count. The market_maker bucket is the basis for /quant/gex. Pro.

Added 2026-09-09: top-level positions_as_of (ms — completion time of the liquidation-map poll cycle the positions come from; null only on an older collector build) and per-coin positions_as_of (ms — newest per-account poll time among the accounts holding that coin; null if none carried one). Per-coin by_tag.smart_money and by_tag.high_leverage carry the same {long_usd, short_usd, net_usd, gross_usd, n_accounts} shape as each by_type bucket, but they are orthogonal overlays: an account can hold both tags, either, or neither, in any class, so they are not a breakdown of any by_type bucket and do not sum to all (always present, zeros when empty). meta.classifier_version (CalVer string, currently 2026-07-02) versions the tagging rule set — a bump here, not the market, can move accounts between classes. symbol now accepts a comma-separated list; unknown symbols are silently absent from coins. The coins map is archived at 5-min cadence as the positioning snapshot type (forward-only from 2026-09-09; not backfillable).

Requires Pro or Pro Plus API key
Query Parameters
NameTypeRequiredDefaultDescription
symbolstringNo—One coin or a comma list (e.g. BTC,ETH,SOL; case-insensitive, blanks ignored)
Example
curl "https://cryptodataapi.com/api/v1/quant/positioning?symbol=BTC,ETH,SOL" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/quant/positioning/ladder Positioning Ladder ▾

Added 2026-09-09. Full-universe liquidation ladder for one coin — every Hyperliquid account ≥ $100k, binned on a 0.5%-of-mark grid clamped to ±50%, from the same builder as the archived liquidation_map snapshot so live and history agree. bins ({price_lo, price_hi, long_usd, short_usd, total_usd}) and flip cover all account classes; bins_directional / flip_directional exclude market-maker + vault accounts (the cleaner walls — MM liquidations are hedged noise). bins_by_class splits the same grid into {market_maker, whale, other} by each account's primary tag (vault counts as market_maker), so the three lists sum to bins; a class with no levels is []. flip is the net-liq-imbalance crossover and is null when one side is absent or no crossover falls within ±30% of mark. levels (≤ 6) lists the 3 nearest non-empty all-class bins above and 3 below mark, sorted by |distance|: {price (bin midpoint), dist_pct (signed vs mark, negative = below), total_usd, side, n_accounts} where side: "long" means longs liquidate there (downside fuel) and "short" means upside fuel; n_accounts counts account-positions in the bin, not distinct wallets. Also: symbol (resolved coin), timestamp, positions_as_of (ms | null), mark (null if unknown) and meta {n_levels, bin_pct: 0.5, classes, classifier_version, note}. Errors: 404 symbol_not_found when the coin has no liquidation levels in the active universe; 503 positioning_warming_up / positioning_disabled as on /quant/positioning. Pro Plus only.

Requires Pro Plus API key
Query Parameters
NameTypeRequiredDefaultDescription
symbolstringYes—One coin, e.g. BTC (upper-cased; exact raw HL name such as kPEPE tried second)
Example
curl "https://cryptodataapi.com/api/v1/quant/positioning/ladder?symbol=BTC" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/quant/gex Gamma Exposure ▾

Dealer positioning / Gamma Exposure — the perpetuals analog of options GEX, built from market-maker accounts. Per coin: mm_net_delta (dealer inventory long/short), gamma_profile (MM liquidation-density by price = where forced unwinds cluster) and gamma_flip (the inflection where MM long-liq-below crosses short-liq-above). Each coin also carries a composite regime flag — amplify (crowded book + dense clusters near mark → forced flow follows through), dampen (balanced, mean-reverting) or transitional (on the flip line) — joining funding skew, OI rate-of-change, the realized-liquidation cascade signal and dist_to_flip_pct, with every sub-signal in regime.inputs. regime.confidence (0–1) scales with the MM account count + gross book behind the read so thin-sample regimes can be down-weighted. gamma_flip is capped to within ±30% of mark and returns null when there is no in-band liquidation crossover (rather than a far-away stale level). Top-level funding_rate/oracle_price/premium/open_interest and a meta.maintenance_margin_tiers ladder are included too. Each coin also carries distribution_context — trailing-30-day percentile ranks of the near-mark cluster density, |distance to flip|, normalized MM skew (mm_net_delta/mm_gross), regime score and funding rate (e.g. “fuel density at the 92nd percentile of 30d”), with history_days/sample_count/status honesty fields; every *_pctile is null while status is warming (<2 days of hourly samples — the history is forward-only) and meta.distribution_legend documents each field. The full per-coin map (incl. distribution_context) is archived at 5-min cadence as the gamma_exposure snapshot type for backtesting. Honest framing: perps have no literal options gamma — this is a behavioral analog from MM inventory + liquidation-driven forced flow, with a heuristic MM set. Full universe on Pro and Pro Plus.

Changed 2026-09-09 — regime rules v2 (regime.rules_version "1" → "2"). The skew leg of the amplify / dampen score is now percentile-driven: it scores from distribution_context.mm_skew_pctile (MM net/gross ranked against the coin's own trailing 30 days) — pctile ≥ 90 or ≤ 10 = one-sided positioning (+0.20), 25–75 = balanced (−0.10), otherwise no skew term. While the coin's history is warming (< 48 hourly samples) the v1 raw rule still applies (|market_skew| ≥ 0.5 one-sided, ≤ 0.15 balanced). regime.inputs.skew_source reports which fired: mm_skew_pctile | market_skew_raw | none; regime.inputs.mm_skew_pctile is the percentile scored on (null under the raw fallback). Weights and every other term are unchanged, but regime.state can move on deploy day with no market change. Also: distribution_context.funding_rate_pctile is now null whenever funding_pinned is true (a funding series glued to HL's 1.25e-5 interest baseline ranks at ~50 by construction, which read as “median crowding”).

Added 2026-09-09. regime.coverage: "full" = ≥ 20 MM accounts and ≥ 1 density band (a real positioning read); "funding_only" = cluster / skew evidence thin or absent, the state rests on funding (+ OI / cascade) alone — treat as low-evidence; "none" = no bands and no funding. Roughly half the universe carries < 10 MM accounts, so regime.state is kept in every case and regime.insufficient_mm_coverage (= coverage != "full") is the flag to gate on. regime.since (ISO | null): when the current regime.state was first committed for this coin — forward-only from the deploy, persisted with the hourly history snapshot (a restart inside the hour can reset it); null when the distribution history is unavailable. regime.inputs.funding_pinned (bool | null): true when ≥ 18 of the last 24 hourly funding samples sit within 1e-7 of the 1.25e-5 baseline, i.e. funding carries no crowding information; null until 24 hourly samples exist. Per-coin coverage object {bands (MM density bins), mm_n_accounts, has_flip, history_days (null if history unavailable)}. Per-coin levels (≤ 6): the nearest all-class liquidation clusters above / below mark, same shape as /quant/positioning/ladder's levels — built from every account class, unlike the MM-only gamma_profile; [] when the coin has no levels or no mark. positions_as_of (top level and per coin, ms | null) as on /quant/positioning. In distribution_context: sample_ts (ms | null — time of the last hourly ring sample; the ranks re-rank on every ~5-min build, only the sampling is hourly; null if nothing has been sampled since the deploy), mm_skew_z (z-score of the live MM skew vs the trailing-window mean/std; null while warming or when the window is constant) and funding_pinned (mirror). Note mm_skew is net/gross of MM inventory, not net/OI. meta.classifier_version as on positioning, and meta.regime_rules publishes the full scoring rule set (state thresholds, funding / cluster / flip / skew / OI / realized-liq weights, confidence and coverage rules, legend) so a consumer can reproduce regime.state from regime.inputs. symbol accepts a comma list (Free keys stay BTC-only). Every per-coin addition also lands in the archived gamma_exposure snapshot from 2026-09-09.

Requires Pro or Pro Plus API key
Query Parameters
NameTypeRequiredDefaultDescription
symbolstringNo—One coin or a comma list (e.g. BTC,ETH,SOL; case-insensitive). Free keys: BTC only
Example
curl "https://cryptodataapi.com/api/v1/quant/gex?symbol=BTC,ETH" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/quant/gex/history Gamma Exposure History ▾

Added 2026-09-09. Hourly history of the /quant/gex scalars for one coin — the same trailing-30-day ring that powers distribution_context. points (oldest first): {ts (ms), near_density (%), abs_dist_to_flip (%), dist_to_flip_pct (signed %), mm_skew (net/gross), mm_gross (USD), mm_n_accounts, regime_score, funding_rate (hourly fraction), oi_change_pct}; a metric is null for a sample where it was unavailable that hour (e.g. no MM book → mm_skew null). Envelope: scope: "gamma_exposure_history", symbol, grain, timestamp, from / to (ISO | null), count, and meta {metrics, window_days: 30, first_sample_ts, last_sample_ts (ms | null — bounds of what exists for the coin regardless of from/to), note}. Scope honesty: this is an in-memory ring on the collector — at most ~720 samples, forward-only, and the timestamped tail starts 2026-09-09 (older samples still feed the percentiles but carry no timestamp and are not served). A coin with no history returns empty points and null bounds. For anything older, or the full per-coin entry with bins, use the archived gamma_exposure snapshot type via /backtesting/snapshots (5-min, since 2026-07-06). Pro; Free keys are BTC-scoped (403 on another coin).

Requires Pro or Pro Plus API key
Query Parameters
NameTypeRequiredDefaultDescription
symbolstringYes—One coin, e.g. BTC
fromstringNo—ISO 8601 or unix ms, inclusive
tostringNo—ISO 8601 or unix ms, inclusive (422 if from > to)
grainstringNo1hOnly 1h is served (anything else → 422)
Example
curl "https://cryptodataapi.com/api/v1/quant/gex/history?symbol=BTC&from=2026-09-09T00:00:00Z" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/quant/whales Whale Activity ▾

Hyperliquid whale activity — the entire ≥$100k account universe (the same ~5-min-fresh set behind /quant/positioning and /quant/gex) rolled up into one read. summary: accounts tracked, the behavioral-class split (market_maker / whale / other), aggregate long vs short notional, the long/short ratio and the whole-book net_bias (risk-on/risk-off). top_coins: the cryptos whales hold the most by total notional — per coin the long_usd/short_usd/net_usd/gross_usd, distinct account counts, dominant side and directional_net_usd (net excluding market-maker liquidity = the conviction read). Scope is Hyperliquid perpetuals (the whale margin book); meta.segment is perp and meta.spot_status flags that spot-wallet balances are not yet collected. Crypto-only (no tokenized equities). Full universe on Pro and Pro Plus.

Reading long_pct. gross_usd includes basis-hedged market makers, whose short perp legs are hedged elsewhere, so the whole-book long_pct sits structurally below 50% (max observed ~61%) — compare it to its own history, not to an even split. Added 2026-09-09: the read is now served from the collector's 5-minute liquidation-map cycle (previously the 15-min public path), and positions_as_of (top level, ms — poll-cycle completion time; falls back to the newest per-account poll time; null only on an older build) plus top_coins[].positions_as_of (newest contributing-account poll time; null if none carried one) make the true cadence self-evident from the payload. summary.by_tag_usd.smart_money / .high_leverage ({long_usd, short_usd, net_usd, gross_usd, n_accounts} across the whole book) are orthogonal tag overlays, not a breakdown of summary.by_class. top_coins[].long_pct_pctile_30d: percentile of the live long_pct against the coin's own trailing-30-day hourly window — forward-only from the deploy, null until 48 hourly samples (2 days) exist and for coins new to the top list. meta.classifier_version as on /quant/positioning. The payload minus meta is archived at 5-min cadence as the whale_activity snapshot type (forward-only; the daily aggregate before it is /quant/whales/history).

Requires Pro or Pro Plus API key
x402 pay per request: $0.03 USDC per call, no key — see /api/v1/pricing
Example
curl "https://cryptodataapi.com/api/v1/quant/whales" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/quant/whales/history Whale Activity History ▾

Daily time-series of aggregate whale positioning — per UTC day the total long_usd/short_usd/net_usd/gross_usd across the ≥$100k book, plus the day's top coins by net. Full-universe collection is recent, so the earlier portion is modeled: each point carries source (seed | live) and estimated, a seeded baseline anchored to the first live reading that is replaced by observed snapshots as they accrue. meta.seeded_count/live_count report the split. Pro Plus only.

Added 2026-09-09: live_only query param (default false) drops the modeled source == "seed" points from the returned window (the store itself is untouched). meta.first_live_date (YYYY-MM-DD | null) is the first observed UTC day in the whole store, reported regardless of days or live_only; null if no live point exists yet. meta.live_only echoes the param.

Requires Pro Plus API key
Query Parameters
NameTypeRequiredDefaultDescription
daysintegerNo180Trailing window length in days (7–540)
live_onlyboolNofalseReturn observed (source=live) points only
Example
curl "https://cryptodataapi.com/api/v1/quant/whales/history?days=180&live_only=true" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/quant/model Model Card ▾

Full model transparency on any valid key: version, family, feature lists, raw state counts, walk-forward validation metrics straight from the artifact, artifact sha256, human approval stamp, and live runtime health (universe coverage, log-likelihood drift vs the training baseline, last inference). loaded: false means the data endpoints are 503 (no model deployed yet).

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/quant/model" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/quant/regimes Regime Taxonomy ▾

The 6-regime vocabulary used by every quant endpoint: id, label, display name, description and the suggested algo-basket stance per regime (e.g. squeeze → "breakout algos primed, sizing up"). Open to any valid key.

Added 2026-09-15: a top-level catalog_version field (CalVer). The id<->label mapping is a stable, versioned contract — unchanged catalog_version means every id still maps to the same label shown here, so it's safe to key off regime.id directly elsewhere in the API instead of re-resolving label on every call. Relabeling or reordering an existing id bumps this (with its own changelog entry); appending a new id at the end does not.

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/quant/regimes" \
  -H "X-API-Key: cdk_live_your_key"
POST /api/v1/quant/refresh Force Re-inference ▾

Force an immediate inference cycle instead of waiting for the next 15-minute tick. Pro Plus only.

Requires Pro Plus API key
Example
curl -X POST "https://cryptodataapi.com/api/v1/quant/refresh" \
  -H "X-API-Key: cdk_live_your_key"

Market Regimes (Long-Horizon)

A single 10-state taxonomy that maps the full crypto market lifecycle — Structural Shock → Established Bear → Capitulation → Bottoming → Early Recovery → BTC-Led Bull → Broadening Bull → Broad Bull → Speculative Euphoria → Distribution / Deleveraging — plus a live, transparent classification of which regime the market is in right now. The classifier composes existing signals (market-health cycle condition, the quant HMM overlay, the volatility / meme / security composites, BTC dominance, OI and liquidations), all returned under signals for inspection. The long-horizon (weeks–months) counterpart to the quant engine (a 24h read). Also rendered on the /regimes page.

GET /api/v1/regimes Regimes + Current ▾

The 10-state long-horizon taxonomy (regimes: id 1–10, machine regime id, name, description, typical duration, directional bias) plus current — the live regime with a plain-English rationale, the inspectable signals that drove it, and an internal stage (Distribution: early_distribution / active_deleveraging) or euphoria_score (Speculative Euphoria: alt_expansion vs blow_off). The published id moves slowly by design: a new candidate must be the raw classification for pending.needed consecutive ~15-min refreshes, AND the outgoing regime must have satisfied a minimum-dwell floor scaled to its own typical_duration — 48h for the “Weeks-Months”/“Months” states (#2, #4, #6, #8), 24h for “Weeks” (#5, #7), 12h for “Days-Weeks” (#3, #9, #10) and 2h for #1 Structural Shock, which is an emergency override and is also exempt from the floor when entering. current.stability is emitted on every response (score, raw_agreement, confirmations_against/needed, held_s, dwell_floor_s, and locked_for_s — the seconds the regime is mechanically guaranteed to survive), and current.thresholds gives the distance from every numeric cutoff in the cascade to flipping, so you can build hysteresis on published boundaries instead of guesses. current.raw is the ungated live read; pending is null exactly when raw.matches_committed is true. Open to any valid key.

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/regimes" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/regimes/current Current Regime ▾

Just the current long-horizon regime — machine id, name, rationale, optional stage / euphoria_score, the classifier signals, the ungated raw read, pending, stability, thresholds, in_regime_since and an as_of timestamp. The trimmed companion to /regimes. Open to any valid key.

Requires API key
x402 pay per request: $0.01 USDC per call, no key — see /api/v1/pricing
Example
curl "https://cryptodataapi.com/api/v1/regimes/current" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/regimes/history Regime History ▾

The committed long-horizon regime transition sequence over a window — /regimes is live-only, so without this the sequence that produced the current regime cannot be reconstructed from the API. Each entry is one committed run: id, regime, anchor, name, committed_at, ended_at (null while current), dwell_seconds, the rationale served at the time, optional stage/euphoria_score, plus first_observed_at/last_observed_at/observations. committed_at is exact, taken from the in_regime_since stamped at commit time and carried in every archived snapshot — the ~25-min archive cadence bounds when a change was noticed, not when it is reported to have happened; and since every regime is protected by a dwell floor of at least 2h, no transition can fall between two samples. Coverage starts 2026-08-07 and cannot be backfilled — the published regime is a stateful commit through the dwell gate, not a pure function of the archived signals, so replaying older inputs would invent a sequence that was never served; coverage_start reports the true start. truncated true means limit clipped the recent end (rows are read oldest-first) — narrow the window. Not to be confused with /quant/regimes/history, the short-horizon 6-state HMM Parquet. Pro Plus only.

Query Parameters
NameTypeRequiredDefaultDescription
fromstringNo30 days agoWindow start, inclusive. ISO-8601 or unix ms.
tostringNonowWindow end, exclusive. ISO-8601 or unix ms. Window capped at 400 days.
limitintegerNo5000Max archive samples scanned (~57/day), not transitions returned. Max 25000.
Requires Pro Plus API key
Example
curl "https://cryptodataapi.com/api/v1/regimes/history?from=2026-08-07&to=2026-09-01" \
  -H "X-API-Key: cdk_live_your_key"

Trading Strategy Baskets

A practical catalogue of 50 top-level trading-strategy meta-baskets across 6 thematic groups (cycle & leadership, funding/leverage/liquidation, technical structure, macro & institutional flows, crypto-specific catalysts, narrative & sector rotation). The top-level taxonomy — finer setups are modelled as sub-strategies, signals or directional variants beneath them. Also rendered on the /trading-strategy-baskets page.

GET /api/v1/trading-strategy-baskets Strategy Basket Catalogue ▾

The 50 top-level strategy meta-baskets across 6 groups (A–F). Returns groups (each with id, name and its baskets) plus group_count and basket_count; every basket has a stable slug, name and one-line description. Pro tier.

Requires Pro or Pro Plus API key
Example
curl "https://cryptodataapi.com/api/v1/trading-strategy-baskets" \
  -H "X-API-Key: cdk_live_your_key"

Strategy & Indicator Library

Every crypto trading strategy and indicator in the AlgoBrain wiki, grouped (317 strategies in 22 groups, 187 indicators in 12 groups) — each with the indicators it uses, the Crypto Data API endpoints that feed it and copy-paste prompts for an AI agent (added 2026-09-28). Also rendered on /trading-strategies and /trading-indicators, one page per group. Research catalogue, not signals: the backtest_status field is the playbook's own validation label. Content CC BY 4.0.

GET /api/v1/strategies/groups Strategy Groups ▾

Every strategy group: slug, name, description, strategy_count, plus group_count, strategy_count and source.

Requires API key (any tier, Free included)
Example
curl "https://cryptodataapi.com/api/v1/strategies/groups" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/strategies List Strategies ▾

Every catalogue strategy, or one group with ?group=. Each row: slug, name, group, summary, timeframe (scalp / intraday / day / swing / position / long-term), complexity, indicators ([(Undefined, Undefined, Undefined)] — what the playbook links to or requires; empty when it declares none) and endpoints (the CDA paths that feed its inputs). Prompts are on the detail call. An unknown group is a 400 unknown_group carrying valid_groups.

Requires API key (any tier, Free included)
Parameters
NameTypeRequiredDefaultDescription
groupstringNo—Group slug: mev-onchain-execution, liquidation-positioning, funding-carry-basis, volatility-trading, options-strategies, market-making-microstructure, statistical-arbitrage, special-situations, defi-arbitrage, cex-arbitrage, regime-switching, ai-machine-learning, event-driven, sentiment-contrarian, defi-yield-onchain, breakout, mean-reversion, trend-following, momentum, macro-fundamental, portfolio-risk, multi-strategy
Example
curl "https://cryptodataapi.com/api/v1/strategies?group=funding-carry-basis" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/strategies/{slug} Strategy Detail + Prompts ▾

One strategy in full: everything in the list row plus edge (why the edge exists; empty when the playbook doesn’t say), edge_source, markets, data_required, backtest_status, tags, wiki_path (read the full playbook with /api/v1/algobrain/page?path=) and prompts — two copy-paste AI-agent prompts (build it, backtest it) that name the exact endpoints to call. 404 strategy_not_found for an unknown slug.

Requires API key (any tier, Free included)
Parameters
NameTypeRequiredDefaultDescription
slugstring (path)Yes—A slug from /api/v1/strategies, e.g. basis-trading
Example
curl "https://cryptodataapi.com/api/v1/strategies/basis-trading" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/indicators/catalog/groups Indicator Groups ▾

Every indicator group: slug, name, description, indicator_count and endpoints (the CDA paths that serve the group’s indicators or their raw inputs).

Requires API key (any tier, Free included)
Example
curl "https://cryptodataapi.com/api/v1/indicators/catalog/groups" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/indicators/catalog List Indicators ▾

Every catalogue indicator, or one group with ?group=: slug, name, group, summary, aliases, endpoints. A definitions catalogue — for live computed values use /indicators/technical and the other signal endpoints. 400 unknown_group for an unknown group.

Requires API key (any tier, Free included)
Parameters
NameTypeRequiredDefaultDescription
groupstringNo—Group slug: options-greeks, volatility, derivatives-positioning, on-chain, volume-order-flow, momentum-oscillators, trend-moving-averages, chart-patterns-price-action, market-breadth-regime, sentiment, macro-cross-asset, quant-statistical
Example
curl "https://cryptodataapi.com/api/v1/indicators/catalog?group=volatility" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/indicators/catalog/{slug} Indicator Detail + Prompt ▾

One indicator in full: the list row plus tags, difficulty, used_by (up to 12 catalogue strategies that use it), wiki_path and prompts (an AI-agent prompt to compute it from CDA data). 404 indicator_not_found for an unknown slug.

Requires API key (any tier, Free included)
Parameters
NameTypeRequiredDefaultDescription
slugstring (path)Yes—A slug from /api/v1/indicators/catalog, e.g. atr
Example
curl "https://cryptodataapi.com/api/v1/indicators/catalog/atr" \
  -H "X-API-Key: cdk_live_your_key"

AlgoBrain Strategy Wiki

Hosted search over AlgoBrain — the ~5,000-page LLM strategy wiki (strategy pages, the Hyperliquid signal baskets, concepts, strategy-development methodology). AlgoBrain's own MCP server is local-only (clone the repo and run it); these endpoints serve the same search and page reads over REST so a hosted agent can use it. All tiers. Content is CC BY 4.0.

GET /api/v1/algobrain/page Read Page ▾

One AlgoBrain page as markdown, by the path a search result gave you: path, title, type, status, category, tags, updated, markdown, url, license. A short form also resolves: atr-trailing-stop, strategies/atr-trailing-stop or the path without .md, as long as the file name is unique. 404 page_not_found for an unknown path, with suggestions (up to 5 real paths matching the words you sent, or the newest pages) and a search_url to try next.

Requires API key
Query Parameters
NameTypeRequiredDefaultDescription
pathstringYes—A result's path, e.g. wiki/strategies/atr-trailing-stop.md
Example
curl "https://cryptodataapi.com/api/v1/algobrain/page?path=wiki/strategies/atr-trailing-stop.md" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/algobrain/stats Index Stats ▾

Size and freshness of the hosted index: total_pages, built_at (unix s), the wiki source_commit it was built from, and page counts by_category / by_type.

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/algobrain/stats" \
  -H "X-API-Key: cdk_live_your_key"

Meme Regime

Meme / Speculative lifecycle classifier (Regime #3). A curated perp universe (DOGE/SHIB/PEPE/WIF/BONK/POPCAT…, including k-prefixed Hyperliquid listings like kPEPE/kBONK resolved back to their base ticker) labelled euphoric / distribution / ignition / bleeding / dormant from trailing returns, a volume-spike ratio, 30d vol percentile, SMA-20 extension, regime run-length, and live Hyperliquid funding / OI. Each coin carries an hl_symbol exact-join key. Price/vol features are backfillable; funding/OI are live-only.

GET /api/v1/meme/regime Regime Classifier ▾

Per-asset meme lifecycle regime (euphoric / distribution / ignition / bleeding / dormant) across the curated meme-perp universe. Each entry carries 1d/7d/30d returns, a volume-spike ratio, 30d realized-vol percentile, SMA-20 extension, a regime run-length (days_in_regime + prev_regime + regime_changed, to catch the cross into ignition point-in-time), the exact Hyperliquid hl_symbol join key, and live funding / open interest. Price/vol features are backfillable; funding_rate / oi_usd are live-only (so distribution, and the run-length of any funding-gated state, only resolve live). Screen with ?regime=ignition&sort=vol_spike or ?regime=euphoric&sort=ret_7d&order=desc.

Requires API key
Query Parameters
NameTypeRequiredDefaultDescription
sourcestringNo—binance_spot | hyperliquid_perp
regimestringNo—euphoric | distribution | ignition | bleeding | dormant
sortstringNoret_7dsymbol | ret_7d | ret_30d | vol_spike | vol_pctile_30 | sma20_extension_pct | funding_rate | oi_usd
orderstringNodescasc | desc
limitintNo250min: 1, max: 500
Example
curl "https://cryptodataapi.com/api/v1/meme/regime?regime=ignition&sort=vol_spike&order=desc" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/meme/regime/score Meme-Hype Score ▾

Market-wide meme-hype composite (0-100; higher = frothier) + sentiment band (euphoric / heating / neutral / cooling / dormant) + cross-meme co-movement correlation + a meme_season flag (broad heating + correlated pack move) + live median funding + regime aggregate. Also carries a live fresh_issuance froth gauge (DEX-promotion breadth/spend + GoPlus rug density) alongside the backfillable composite. Trimmed companion to /meme/regime — no per-coin list.

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/meme/regime/score" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/meme/regime/{symbol} Per-Symbol Detail ▾

Per-asset Meme regime detail with 60d daily history (close, 30d Garman-Klass vol) for sparkline rendering. Pro / Pro Plus only.

Requires Pro or Pro Plus API key
Path Parameters
NameTypeRequiredDescription
symbolstringYesBare ticker (e.g. WIF, PEPE); USDT suffix stripped automatically
Example
curl "https://cryptodataapi.com/api/v1/meme/regime/WIF" \
  -H "X-API-Key: cdk_live_your_key"
POST /api/v1/meme/regime/refresh Refresh Regime ▾

Force recompute the Meme regime cache across the full meme universe. Pro / Pro Plus only.

Requires Pro or Pro Plus API key
Example
curl -X POST "https://cryptodataapi.com/api/v1/meme/regime/refresh" \
  -H "X-API-Key: cdk_live_your_key"

Token Supply

Circulating float, dilution overhang and the forward token-unlock calendar — the supply side of a token, split out from the Event/Catalyst regime that consumes the same unlock data for its risk composite. Float is computable for essentially every coin we hold; unlock schedules exist only for the protocols DefiLlama tracks, so every row states which of the two it has. Public page: /token-unlocks.

GET /api/v1/supply/float Float & Dilution ▾

Circulating float and dilution overhang per coin, ranked by ascending float — tightest first, because that is the end of the distribution where supply is the story. A coin trading at a 22% float with three times its market cap still locked is a different instrument from one that is fully distributed. float_pct (0–1) is circulating ÷ supply_basis, and supply_basis tells you which denominator was used — max_supply when the token is genuinely capped, else total_supply. That matters: max_supply is absent for over half the universe, and “share of max” and “share of total” are different claims. dilution_overhang is the locked value as a multiple of current market cap — above 1.0x there is more value locked than the market prices today. next_unlock carries the soonest dated cliff, same-day tranches summed and priced against float. unlock_coverage: not_tracked means no vesting schedule is published for that token in our source — NOT that it has no unlock scheduled. Do not read a null as safe. Tiers: Free returns the top 25 rows; Pro / Pro Plus return the full board and the filters.

Requires API key (Free = top 25 rows · Pro / Pro Plus = full board + filters)
Query Parameters
NameTypeRequiredDefaultDescription
min_market_capfloatNo500000000Market-cap floor. Below it a tight float is usually a nominal total_supply rather than a vesting schedule, and those artifacts dominate the ranking. Pass 0 for the full set
min_locked_usdfloatNo0Only rows with at least this much locked value
max_float_pctfloatNo1.0Only rows at or below this float (0-1)
symbolstringNo—Filter to one ticker
limitintNo250Max rows. min: 1, max: 2000
Example
curl "https://cryptodataapi.com/api/v1/supply/float?max_float_pct=0.4" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/supply/unlocks Unlock Calendar ▾

The forward token-unlock calendar — dated vesting cliffs, each sized in tokens, USD and share of circulating float. That last one is the number that matters: ten million tokens unlocking into a twenty-million float is a different event from the same ten million landing on a two-billion float. This is a cliff calendar, not an emissions feed — continuous emission (mining inflation, linear vesting, runs of identical daily releases) is deliberately excluded, because a drip is not a step and listing it buries the events that move a market. Coverage is bounded by the protocols DefiLlama's emissions data tracks, so absence here is not evidence that a token has no unlock scheduled. Tiers: Free is limited to the next 7 days; Pro / Pro Plus get the full horizon.

Requires API key (Free = next 7 days · Pro / Pro Plus = full horizon)
Query Parameters
NameTypeRequiredDefaultDescription
window_daysintNo30Forward horizon. min: 1, max: 35
symbolstringNo—Filter to one ticker
Example
curl "https://cryptodataapi.com/api/v1/supply/unlocks?window_days=30" \
  -H "X-API-Key: cdk_live_your_key"

Event / Catalyst Regime

Event / Catalyst regime (Regime #5) — the only event-centric regime. A forward calendar of discrete, dated catalysts (token unlocks, scheduled macro prints, stablecoin depegs) plus a market-wide Event Risk composite (0–100, baseline 0; bands dormant / quiet / elevated / heavy / critical). Unlocks bias short (supply overhang), macro prints are risk flags (the surprise is unknown pre-event), major depegs bias short. Unlocks / macro / depeg backfill; the sector_rotation (CoinGecko categories) sidecar is live-only. Public page: /calendar.

GET /api/v1/event/regime Event Calendar ▾

Forward catalyst calendar — every dated catalyst in the next window_days (default 7) with its type (unlock token vesting cliffs, macro_print, depeg, and mint stablecoin mint / burn steps), date, days-until, affected symbol(s), directional bias, and magnitude, plus the market-wide Event Risk score and band. The main Event/Catalyst payload; use /event/calendar for richer filtering and /event/regime/score for the composite alone.

Requires API key
Query Parameters
NameTypeRequiredDefaultDescription
window_daysintNo7Forward horizon, min: 1, max: 30
Example
curl "https://cryptodataapi.com/api/v1/event/regime?window_days=7" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/event/regime/score Event Risk Score ▾

Market-wide Event Risk composite (0-100, baseline 0) + band (dormant / quiet / elevated / heavy / critical) + the unlock / macro / depeg sub-scores. Composite = 0.40·unlock + 0.25·macro + 0.35·depeg, re-normalized over available feeds (partial / inputs_available flag which were live). Carries a live-only sector_rotation (CoinGecko categories) sidecar, excluded from the composite so live and backfilled scores stay comparable.

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/event/regime/score" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/event/calendar Filterable Calendar ▾

The queryable forward calendar (up to 30d out). Narrow by catalyst type, affected symbol, bias, min_magnitude, and window_days.

Requires API key
x402 pay per request: $0.008 USDC per call, no key — see /api/v1/pricing
Query Parameters
NameTypeRequiredDefaultDescription
typestringNo—unlock | macro_print | depeg | mint
window_daysintNo30min: 1, max: 30
symbolstringNo—Filter to catalysts affecting this ticker
biasstringNo—long | short | neutral | risk_flag
min_magnitudefloatNo0.0min: 0.0, max: 1.0
Example
curl "https://cryptodataapi.com/api/v1/event/calendar?type=unlock&window_days=30" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/event/regime/{symbol} Per-Symbol Overlay ▾

Per-symbol catalyst overlay — pending catalysts for a coin in the next 7d, its net bias, net magnitude, nearest-event days, and the exact Hyperliquid hl_symbol join key. Pro / Pro Plus only.

Fixed 2026-09-15: hl_symbol now resolves even when there's no pending catalyst for the symbol (the common case). Previously it was only populated as a side effect of a pending overlay entry, so it read null for most symbols most of the time; null now means only "no HL perp for this ticker" (e.g. stablecoins).

Requires Pro or Pro Plus API key
Path Parameters
NameTypeRequiredDescription
symbolstringYesBare ticker (e.g. ARB, OP); USDT suffix stripped automatically
Example
curl "https://cryptodataapi.com/api/v1/event/regime/ARB" \
  -H "X-API-Key: cdk_live_your_key"
POST /api/v1/event/regime/refresh Refresh Regime ▾

Force recompute the Event / Catalyst regime cache. Pro / Pro Plus only.

Requires Pro or Pro Plus API key
Example
curl -X POST "https://cryptodataapi.com/api/v1/event/regime/refresh" \
  -H "X-API-Key: cdk_live_your_key"

Security / Black Swan Regime

Security / Black Swan regime (Regime #11) — an event-driven regime measuring acute security stress. A market-wide Security Stress composite (0–100, baseline 0; bands dormant / quiet / elevated / heavy / critical) = 0.45·hack + 0.30·flow + 0.25·depeg, re-normalized over available feeds. Hacks come from the dated, USD-quantified DefiLlama hacks registry; flow stress is the worst net-CEX-flow z-score (self-custody flight); depeg reuses the #5 cascade measure. Hack / flow / depeg backfill; the security_headlines advisory sidecar (rekt.news / SlowMist RSS) is live-only.

GET /api/v1/security/regime Security Events ▾

Recent security events — confirmed hacks/exploits and live stablecoin depegs in the last window_days (default 10), each with affected symbol(s), severity, and acute short bias, plus the market-wide Security Stress score and band. Use /security/regime/score for the composite alone.

Requires API key
Query Parameters
NameTypeRequiredDefaultDescription
window_daysintNo10Lookback, min: 1, max: 10
Example
curl "https://cryptodataapi.com/api/v1/security/regime?window_days=10" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/security/regime/score Security Stress Score ▾

Market-wide Security Stress composite (0-100, baseline 0) + band + the hack / flow / depeg sub-scores, the largest in-window hack, and the worst flow symbol/z-score. Composite = 0.45·hack + 0.30·flow + 0.25·depeg, re-normalized over available feeds (partial / inputs_available). Carries a live-only security_headlines sidecar (classified rekt.news / SlowMist RSS), excluded from the composite.

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/security/regime/score" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/security/events Filterable Events ▾

The queryable recent security-events list (up to 10d back). Narrow by event type, affected symbol, and min_severity.

Requires API key
Query Parameters
NameTypeRequiredDefaultDescription
typestringNo—hack | depeg
window_daysintNo10min: 1, max: 10
symbolstringNo—Filter to events affecting this ticker
min_severityfloatNo0.0min: 0.0, max: 1.0
Example
curl "https://cryptodataapi.com/api/v1/security/events?type=hack" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/security/regime/{symbol} Per-Symbol Overlay ▾

Per-symbol security overlay — the security events implicating a coin, its acute bias, max severity, and the exact Hyperliquid hl_symbol join key. Pro / Pro Plus only.

Fixed 2026-09-15: hl_symbol now resolves even when there's no implicating security event for the symbol (the common case). Previously it was only populated as a side effect of a pending overlay entry, so it read null for most symbols most of the time; null now means only "no HL perp for this ticker" (e.g. stablecoins).

Requires Pro or Pro Plus API key
Path Parameters
NameTypeRequiredDescription
symbolstringYesBare ticker (e.g. ETH, SOL); USDT suffix stripped automatically
Example
curl "https://cryptodataapi.com/api/v1/security/regime/ETH" \
  -H "X-API-Key: cdk_live_your_key"
POST /api/v1/security/regime/refresh Refresh Regime ▾

Force recompute the Security / Black Swan regime cache. Pro / Pro Plus only.

Requires Pro or Pro Plus API key
Example
curl -X POST "https://cryptodataapi.com/api/v1/security/regime/refresh" \
  -H "X-API-Key: cdk_live_your_key"

Geopolitical / Policy Shock Regime

Geopolitical / Policy Shock regime (Regime #12) — a market-wide, event-driven regime. A Policy Risk composite (0–100, baseline 0; bands dormant / quiet / elevated / heavy / critical) = 0.40·gdelt + 0.35·cross-asset + 0.25·rate, plus a signed policy_tilt (−1 restrictive … +1 pro-crypto). Backbone: GDELT news volume + tone (geopolitics), safe-haven cross-asset dislocation (gold / treasuries), and the scheduled rate calendar — all backfillable. The policy_headlines (Federal Register / SEC / CFTC) sidecar is live-only.

GET /api/v1/policy/regime Policy Risk + Tilt ▾

Policy Risk score + signed policy_tilt (pro-crypto vs restrictive) + the upcoming rate catalysts (FOMC decisions) within window_days. Use /policy/regime/score for the full sub-score breakdown and /policy/headlines for the live US-regulatory feed.

Requires API key
Query Parameters
NameTypeRequiredDefaultDescription
window_daysintNo45Forward horizon for rate catalysts, min: 1, max: 45
Example
curl "https://cryptodataapi.com/api/v1/policy/regime" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/policy/regime/score Policy Risk Score ▾

Market-wide Policy Risk composite (0-100, baseline 0) + band + signed policy_tilt + the gdelt / cross_asset / rate sub-scores (with the raw GDELT volume z-score & tone). Composite = 0.40·gdelt + 0.35·cross_asset + 0.25·rate, re-normalized over available feeds. Carries a live-only policy_headlines (Federal Register / SEC / CFTC) sidecar, excluded from the composite.

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/policy/regime/score" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/policy/headlines Policy Headlines ▾

The live breaking-news sidecar — recent US-regulatory headlines (Federal Register / SEC / CFTC) classified pro-crypto vs restrictive, with an aggregate regulatory_pressure magnitude and a signed headline_tilt. Live-only; not part of any backfillable composite.

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/policy/headlines" \
  -H "X-API-Key: cdk_live_your_key"
POST /api/v1/policy/regime/refresh Refresh Regime ▾

Force recompute the Geopolitical / Policy Shock regime cache. Pro / Pro Plus only.

Requires Pro or Pro Plus API key
Example
curl -X POST "https://cryptodataapi.com/api/v1/policy/regime/refresh" \
  -H "X-API-Key: cdk_live_your_key"

Market Data

Binance Spot market data — klines, tickers, prices, exchange info.

GET /api/v1/market-data/klines Get Klines ▾

OHLCV klines from Binance Spot.

Requires API key
Query Parameters
NameTypeRequiredDefaultDescription
symbolstringNoBTCUSDT
intervalstringNo1d
limitintNo200min: 1, max: 1000
Example
curl "https://cryptodataapi.com/api/v1/market-data/klines?symbol=BTCUSDT&interval=1d&limit=200" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/market-data/ticker/24hr Get Ticker 24Hr ▾

24hr ticker stats from Binance Spot.

Requires API key
Query Parameters
NameTypeRequiredDefaultDescription
symbolstringNoBTCUSDT
Example
curl "https://cryptodataapi.com/api/v1/market-data/ticker/24hr?symbol=BTCUSDT" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/market-data/ticker/price Get Ticker Price ▾

Current price from Binance Spot.

Requires API key
Query Parameters
NameTypeRequiredDefaultDescription
symbolstringNoBTCUSDT
Example
curl "https://cryptodataapi.com/api/v1/market-data/ticker/price?symbol=BTCUSDT" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/market-data/btc-price-history Btc Price History ▾

BTC price history with 200D MA.

Requires API key
Query Parameters
NameTypeRequiredDefaultDescription
daysintNo365min: 1, max: 730
Example
curl "https://cryptodataapi.com/api/v1/market-data/btc-price-history?days=365" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/market-data/volume-history Volume History ▾

Daily volume + buy ratio, derived from our own kline + taker archives.

Requires API key
Query Parameters
NameTypeRequiredDefaultDescription
daysintNo30min: 1, max: 90
Example
curl "https://cryptodataapi.com/api/v1/market-data/volume-history?days=30" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/market-data/short-term-price Short Term Price ▾

Short-term BTC price momentum metrics (on-demand computation).

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/market-data/short-term-price" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/market-data/exchange-info Get Exchange Info ▾

Exchange pair info from Binance Spot.

Requires API key
Query Parameters
NameTypeRequiredDefaultDescription
symbolstringNoBTCUSDT
Example
curl "https://cryptodataapi.com/api/v1/market-data/exchange-info?symbol=BTCUSDT" \
  -H "X-API-Key: cdk_live_your_key"

Exchanges

Venue directory — profiles, specs and our partner sign-up links. Public, no API key.

GET /api/v1/exchanges List Exchanges ▾

Every exchange we profile, with its sign-up link where we hold one. Returns exchanges[], all_slugs[], count and disclosure. Each row carries slug, name, kind (CEX / DEX / Broker), website, tagline, about, founded, based, focus[], specs, stats, plus signup_url, signup_incentive, referral_code and is_referral_link.

Sign-up URLs are CryptoDataAPI partner/referral links. signup_incentive is what the end user gets for using one — Hyperliquid pays them a 4% discount on spot and perpetual trading fees. If you surface signup_url, surface the response's disclosure with it.

stats is each venue's own live open interest / 24h volume / BTC funding rate (annualized) / market count, pulled from that venue's own API and refreshed every 5 minutes — null for every exchange except lighter and asterdex today. This is NOT the BTC-only cross-exchange comparison already served by /open-interest and /funding-rates. AsterDEX's stats.open_interest_usd is always null (no OI endpoint upstream) and its stats.note carries a standing wash-trading caveat on its volume figure.

No authentication required
Query Parameters
NameTypeRequiredDefaultDescription
referral_onlybooleanNofalseReturn only venues we hold a partner sign-up link for
Example
curl "https://cryptodataapi.com/api/v1/exchanges?referral_only=true"
GET /api/v1/exchanges/{slug} Get Exchange ▾

One venue by slug, same row shape as /exchanges, wrapped as {exchange, disclosure}. Returns 404 for an unknown slug — the known set is in the list endpoint's all_slugs.

No authentication required
Path Parameters
NameTypeRequiredDefaultDescription
slugstringYes—hyperliquid, binance, bybit, okx, asterdex, lighter, robinhood
Example
curl "https://cryptodataapi.com/api/v1/exchanges/hyperliquid"

DEX & Meme Coins

GET /api/v1/dex/new-pools Get New Pools ▾

Newest DEX pools — early discovery of new token launches.

Requires API key
Query Parameters
NameTypeRequiredDefaultDescription
chainstringNo—Filter by chain: solana, ethereum, base, bsc, arbitrum
Example
curl "https://cryptodataapi.com/api/v1/dex/new-pools" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/dex/token/{chain}/{address} Get Token Info ▾

Token info + top pools for a specific token on a chain.

Requires API key
Path Parameters
NameTypeRequiredDescription
chainstringYes
addressstringYes
Example
curl "https://cryptodataapi.com/api/v1/dex/token/solana/So11111111111111111111111111111111" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/dex/promoted Get Promoted Tokens ▾

Recently promoted/boosted tokens — marketing spend signal.

Requires API key (Pro tier)
Example
curl "https://cryptodataapi.com/api/v1/dex/promoted" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/dex/promoted/top Get Top Promoted Tokens ▾

Top promoted tokens ranked by promotion spend.

Requires API key (Pro tier)
Example
curl "https://cryptodataapi.com/api/v1/dex/promoted/top" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/dex/security/{chain}/{address} Get Token Security ▾

Token security report — rug detection, honeypot check, risk scoring.

Requires API key
Path Parameters
NameTypeRequiredDescription
chainstringYes
addressstringYes
Example
curl "https://cryptodataapi.com/api/v1/dex/security/solana/So11111111111111111111111111111111" \
  -H "X-API-Key: cdk_live_your_key"

Daily Snapshot

Full daily bulk snapshot of all current data in a single response.

GET /api/v1/daily Get Daily Snapshot ▾

Full daily snapshot of all current (non-history) data in one response. Excludes Binance spot prices and Hyperliquid data which are available via dedicated ``/daily/prices`` and ``/daily/hyperliquid`` endpoints. **Market health block (`market_health`)** Dual-score architecture: 4 long-term components (Price Trend, Market Breadth, Stablecoin Flow 90d, Macro/DXY) + 7 short-term components (Volume Quality, Fear & Greed, Derivatives, Market Breadth Short, Volatility, Short-Term Price, Stablecoin Flow 14d). Combined score = 0.5·LT + 0.5·ST. - `market_health.total_score` / `long_term_score` / `short_term_score`: int 0–100 - `market_health.sentiment` / `long_term_sentiment` / `short_term_sentiment`: BULLISH | NEUTRAL | BEARISH - `market_health.components`: `{name: {score, weight}}` (per-component details are stripped from `/daily`; hit `/market-health` for component `.details`) - `market_health.indicators`: flat denormalization for quick consumption (below) **`market_health.indicators` contract** A flat dict of the most-filtered values from `components.<x>.details`. Keys are **omitted entirely** when the source value is unavailable (never null) so consumers can safely use `dict.get(key, default)` for fallbacks. Committed key set: - `long_short_ratio` (float) — BTC long/short ratio (Binance perps) - `funding_rate` (float, %) — avg funding rate (aliased from `avg_funding_rate`; CoinGlass cross-exchange when available, Binance fallback) - `buy_ratio` (float, 0–1) — weighted taker-buy ratio across top spot pairs - `fear_greed_value` (int, 0–100) — averaged Fear & Greed index - `breadth_pct` (float, %) — share of top-30 coins above their 200D MA - `pct_from_200ma` (float, %) — BTC distance from 200D MA - `cross_status` (str) — Golden | Death | Neutral - `stablecoin_change_7d` (float) — 7-day stablecoin market-cap change **Cross-exchange scope** `market_health` is computed cross-exchange (CoinGlass aggregate + Binance) and is **not** scoped by the `exchange` query param. The `exchange` filter only trims the `coins`, `coinglass.funding`, and `coinglass.liquidations` lists. In particular `indicators.long_short_ratio` is BTC-on-Binance, used as a market-wide sentiment signal — not a per-exchange Hyperliquid metric. **Payload trimming and filter-source readiness** To keep responses small, `coinglass.funding` and `coinglass.liquidations` are always capped at the top 100 entries (sorted by max absolute funding rate and 24h liquidation USD respectively) regardless of the `exchange` filter. The full long tail is available at the dedicated `/market-intelligence/funding-rates` and `/market-intelligence/liquidations` endpoints. When `exchange` is set to a specific venue whose coin set has not yet loaded after server start, this endpoint returns `503` rather than silently emitting the unfiltered payload.

Requires API key
Query Parameters
NameTypeRequiredDefaultDescription
exchangestringNohyperliquidFilter coins by exchange: hyperliquid, binance_spot, asterdex, or 'all' for unfiltered
formatstringNo—Response format: 'markdown' for LLM-friendly plain text
technical_detailbooleanNofalseInclude the full per-symbol technical_regime.by_symbol map (keyed by ticker; ma/bollinger/range_state/rsi per coin). Off by default to keep the payload compact; always available point-in-time via /backtesting/daily-snapshots/{date}.
Example
curl "https://cryptodataapi.com/api/v1/daily?exchange=hyperliquid" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/daily/prices Get Daily Prices ▾

All Binance spot price pairs (~2,500 symbols).

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/daily/prices" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/daily/hyperliquid Get Daily Hyperliquid ▾

Hyperliquid perpetuals: prices, funding rates, and open interest (~230 assets). Each entry in ``funding_oi`` contains both raw and derived fields: - ``funding_rate`` — Hyperliquid's own funding rate, per HL funding interval (1h on HL by default). Negative values indicate shorts paying longs. This is **Hyperliquid-specific**; cross-exchange averaged funding lives in ``/market-health`` and ``/market-intelligence/funding-rates``. - ``open_interest`` — **in base-coin units** (number of contracts), mirroring the Hyperliquid API. For BTC this might be ``28846.42`` meaning ~28.8K BTC. Use this when comparing across exchanges that quote OI in the same units. - ``open_interest_usd`` — derived notional in USD = ``open_interest * mark_price``. Use this for "is this market large enough to trade?" thresholds. - ``mark_price`` / ``oracle_price`` — both USD. - ``day_ntl_vlm`` — 24h notional volume, **already USD-denominated**. Coverage: every active HL perp (~230). Refresh cadence: 1 minute. Note that thinly-traded perps may emit ``open_interest = 0`` legitimately when no positions are open.

Added 2026-09-09: generated_at (ms, response build time), prices_as_of (ms, HL fetch time of the mids) and funding_oi_as_of (ms, HL fetch time of the funding / OI block — a separate poll, so the two can differ), a coverage object {universe_total, delisted_excluded, rows} (full HL universe size, delisted markets dropped, rows actually returned) and a per-row as_of (ms). All null only on a pre-deploy cache row.

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/daily/hyperliquid" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/daily/hl-traders Get Daily Hl Traders ▾

Top trader leaderboard, wallet positions, and tracking metadata.

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/daily/hl-traders" \
  -H "X-API-Key: cdk_live_your_key"

Health

System health check endpoint.

GET /api/v1/health Health Check ▾

Basic health check endpoint (no auth required).

No authentication required
Example
curl "https://cryptodataapi.com/api/v1/health"
HEAD /api/v1/health Health Check ▾

Basic health check endpoint (no auth required).

No authentication required
Example
curl -X HEAD "https://cryptodataapi.com/api/v1/health"

Meta

API version signal and change history.

GET /api/v1/changelog API Changelog ▾

Curated history of breaking and notable response-shape changes, newest first, plus the current api_version (CalVer YYYY-MM-DD). The same string ships on every /api/* response as the X-API-Version header, so you can detect that the API changed without diffing payloads, then poll this to see what changed. Every entry carries an honest breaking flag.

No authentication required

/changelog returns this identical JSON to any non-browser caller and the human-readable changelog page to browsers. This path always returns JSON regardless of Accept — prefer it for integrations.

Example
curl "https://cryptodataapi.com/api/v1/changelog"

Indicators

GET /api/v1/indicators/heatmap Get Indicator Heatmap ▾

A whole coin universe as ONE scan table (added 2026-09-21, Pro / Pro Plus) — what otherwise takes one call per coin. Each row joins the SIGNUM_RGG daily colour (signum, days_in_color, adx), rolling hourly moves (pct_1h, pct_4h, pct_24h), 30-day mean daily USD notional (notional_30 — the same field as /volatility/regime vol.notional_30) and the daily 200-SMA position (above_sma200, dist_from_200_pct — from /indicators/technical). Served from data the API already holds, so the whole universe is one instant call and spends no exchange rate limit.

The moves are rolling windows over completed hourly bars ending at price (the last completed 1h close). pct_4h is the change from the close four hours earlier — it is not the open-to-close of a 4h bar and is not aligned to 00/04/08 UTC. as_of is that bar's close time. They refresh hourly (:05 UTC) with SIGNUM_RGG, so during the hour they describe the last full hour, and they read null (with as_of: null) until its first pass after a deploy. null on a row: a move — the bar that window needs is missing from the series; notional_30 — liquidity not measurable (the row is dropped when min_notional_30 is set); above_sma200 — under 200 daily bars. signum / days_in_color / adx are the completed-daily read, the same bar contract as /indicators/signum-rgg. Pegged / stablecoin rows are excluded.

The clock 4h bar (added 2026-09-27): pct_4h_bar is the open-to-close % of the last closed UTC 4h bar (00/04/08/12/16/20) — the bar a close-driven 4h strategy acts on — and top-level bar_4h_as_of is that bar's close time. null when that bar is not complete in the series (never an older bar). Every response also carries moves, a one-line description of each move, so an agent reading only the JSON sees which are rolling and which is clock-aligned.

SIGNUM on 4h (added 2026-09-21): signum_4h / bars_in_color_4h are the same ADX/DMI cascade as the daily colour, run over completed 4h bars on the UTC grid (00/04/08/12/16/20 — the grid of /hyperliquid/candles?interval=4h), built from the 1h bars SIGNUM already holds. The forming 4h bar is never used. null = no hourly series, under 30 complete 4h bars, or a hole at the end of the hourly series. The daily color stays the regime filter; flip_alert is still 1h-vs-daily.

Response: {items: [{symbol, source, price, pct_1h, pct_4h, pct_24h, pct_4h_bar, signum, days_in_color, adx, signum_4h, bars_in_color_4h, notional_30, above_sma200, dist_from_200_pct}], count, universe_size, interval, as_of, bar_4h_as_of, moves, timestamp}. An unrecognised query parameter answers 400 unknown_parameter listing the accepted ones. It lives under /indicators/ because it is computed by the indicator engines, not the Hyperliquid collector.

Requires Pro or Pro Plus API key
Query Parameters
NameTypeRequiredDefaultDescription
sourcestringNohyperliquid_perphyperliquid_perp | binance_spot | all (adds the Binance-spot fill)
intervalstringNo4h1h | 4h — which move sort=pct orders by; every row always carries all three moves
min_notional_30floatNo—Liquidity floor in USD (min: 0). Rows with unknown liquidity are dropped when set
colorstringNo—red | grey | green
color_4hstringNo—red | grey | green — filter on the 4h SIGNUM colour (signum_4h)
above_sma200boolNo—true = above the daily 200-SMA, false = below
sortstringNonotional_30notional_30 | pct | days_in_color | adx | symbol. Rows lacking the value go last
orderstringNodescasc | desc
limitintNo250min: 1, max: 500
Example
curl "https://cryptodataapi.com/api/v1/indicators/heatmap?min_notional_30=3000000&color=green&above_sma200=true&sort=pct&interval=4h" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/indicators/signum-rgg Get Signum Rgg ▾

SIGNUM_RGG trend radar across all Hyperliquid perps + top 100 Binance USDT pairs. Each asset gets a daily RED/GREY/GREEN color from ADX(14)+DMI with hysteresis, plus days-in-color, flip date, % change since flip, and (for grey) the 20-day consolidation range.

SIGNUM on 4h (added 2026-09-21): h4_color, h4_adx, h4_plus_di, h4_minus_di, h4_bars_in_color, h4_computed_from are the same ADX/DMI cascade as the daily colour, run over completed 4h bars on the UTC grid (00/04/08/12/16/20 — the grid of /hyperliquid/candles?interval=4h), built from the 1h bars SIGNUM already holds. The forming 4h bar is never used. null = no hourly series, under 30 complete 4h bars, or a hole at the end of the hourly series. The daily color stays the regime filter; flip_alert is still 1h-vs-daily.

Breaking change 2026-09-09 — headline fields are now read from COMPLETED daily bars. color, days_in_color, adx, plus_di, minus_di, flipped_at, pct_change_since_flip, price and range no longer include the forming UTC bar, so they are stable for the whole day and match what a backtest would have seen at the previous close. is_final: true states this, and computed_from (YYYY-MM-DD) names the last completed bar they were read from. The forming-bar read moved to color_live, adx_live and days_in_color_live — equal to the completed fields whenever no forming bar differs, null only on a pre-deploy cache row. pegged (bool): a curated stablecoin, or a token at $1 ± 5% with ≤ 10% annualised 20-bar vol; pegged rows stay listed but are excluded from pct_*, net_breadth_pct, mean_trend_score and the top lists, and the summary reports pegged_excluded. Flip alert: flip_alert / intraday_disagrees (same flag) is true when the last 4 closed 1h bars all carry a different colour from the daily color — the intraday read has left the daily one; flip_alert_reason is "intraday_disagrees" when set, else null; recent_flip = days_in_color <= 3; intraday_timeframe is always "1h". Pagination: offset + limit (max now 1000); the response echoes offset.

Requires Pro or Pro Plus API key
Query Parameters
NameTypeRequiredDefaultDescription
colorstringNo—red | grey | green
sourcestringNo—binance_spot | hyperliquid_perp
min_daysintNo—min: 0
max_daysintNo—min: 0
sortstringNodays_in_colordays_in_color | pct_change | adx | symbol
orderstringNodescasc | desc
limitintNo250min: 1, max: 1000
offsetintNo0min: 0; rows to skip after sorting (pagination)
Example
curl "https://cryptodataapi.com/api/v1/indicators/signum-rgg?sort=days_in_color&order=desc&limit=250&offset=0" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/indicators/signum-rgg/{symbol} Get Signum Rgg Symbol ▾

Per-asset SIGNUM_RGG detail with the last 60 days of color history.

SIGNUM on 4h (added 2026-09-21): h4_color, h4_adx, h4_plus_di, h4_minus_di, h4_bars_in_color, h4_computed_from are the same ADX/DMI cascade as the daily colour, run over completed 4h bars on the UTC grid (00/04/08/12/16/20 — the grid of /hyperliquid/candles?interval=4h), built from the 1h bars SIGNUM already holds. The forming 4h bar is never used. null = no hourly series, under 30 complete 4h bars, or a hole at the end of the hourly series. The daily color stays the regime filter; flip_alert is still 1h-vs-daily.

Breaking change 2026-09-09: like the list, the headline fields and the daily history series are now read from completed daily bars (is_final: true, computed_from = last completed bar), with color_live / adx_live / days_in_color_live carrying the forming-bar read, plus pegged, intraday_disagrees / recent_flip / flip_alert_reason as documented on the list endpoint. intraday_history (the per-bar 1h series) is empty unless ?intraday=true — it costs a live candle pull and is cached 30 min per symbol. Symbol resolution tries the exact raw name first: kPEPE resolves to the Hyperliquid perp row, PEPE to the Binance spot row.

4h series (added 2026-09-27): ?h4=true adds h4_history — [{ts, color, adx, plus_di, minus_di}] for the last 90 completed 4h bars, oldest first. ts is the bar's open time on the /hyperliquid/candles?interval=4h grid, and the last entry equals the h4_* fields. Built from the same 1h pull as intraday, so asking for both costs one fetch. [] when the 4h read is null.

Requires Pro or Pro Plus API key
Path Parameters
NameTypeRequiredDescription
symbolstringYesBare ticker (e.g. BTC, kPEPE); USDT suffix stripped; exact raw name tried first
Query Parameters
NameTypeRequiredDefaultDescription
intradayboolNofalseAttach the ~60d per-bar 1h intraday_history (live candle pull, cached 30 min)
h4boolNofalseAttach h4_history: the per-bar 4h SIGNUM series, last 90 completed 4h bars (same pull as intraday)
Example
curl "https://cryptodataapi.com/api/v1/indicators/signum-rgg/BTC?intraday=true" \
  -H "X-API-Key: cdk_live_your_key"
POST /api/v1/indicators/signum-rgg/refresh Refresh Signum Rgg ▾

Force recompute the SIGNUM_RGG cache (Pro tier).

Requires API key (Pro tier)
Example
curl -X POST "https://cryptodataapi.com/api/v1/indicators/signum-rgg/refresh" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/indicators/technical Get Technical Regime ▾

Technical / Structural regime overlay (Regime #14, Pro tier). Per-asset price-structure state across the SIGNUM_RGG universe: SMA-50/100/200 + last cross, Bollinger-band squeeze + 90d bandwidth percentile, 20d range position, and RSI(14) extremes on daily + 1h. Combine filters: ?bb=in_squeeze&sort=squeeze_days&order=desc, ?ma_state=reclaim_200, ?rsi=oversold&min_days_in_state=2.

Added 2026-09-09: a top-level breadth block {total, in_squeeze, pct_in_squeeze, pct_in_squeeze_pctile_30d, history_days} — compression breadth over the full universe, independent of whatever filters you passed. pct_in_squeeze_pctile_30d ranks today's squeeze share against the last 30 archived days and is null while fewer than 10 archived days exist (history_days says how many). Detail symbol resolution tries the exact raw name first (kPEPE → HL perp row, PEPE → Binance spot row).

Requires Pro or Pro Plus API key
Query Parameters
NameTypeRequiredDefaultDescription
sourcestringNo—binance_spot | hyperliquid_perp
ma_statestringNo—above_200 | below_200 | breakdown_200 | reclaim_200
bbstringNo—in_squeeze | expanding
range_zonestringNo—near_low | mid | near_high
rsistringNo—overbought | oversold | extreme (>80 or <20)
min_days_in_stateintNo—min: 0; applies to squeeze or RSI extreme filter
sortstringNosymbolsymbol | price | rsi_1d | bb_bandwidth | squeeze_days | dist_from_200 | position_in_range
orderstringNodescasc | desc
limitintNo250min: 1, max: 500
Example
curl "https://cryptodataapi.com/api/v1/indicators/technical?bb=in_squeeze&sort=squeeze_days&order=desc&limit=50" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/indicators/technical/{symbol} Get Technical Regime Symbol ▾

Per-asset Technical / Structural detail with 60d daily history (close, RSI-14, BB bandwidth, SMA-200, above_200) for sparkline rendering.

Requires Pro or Pro Plus API key
Path Parameters
NameTypeRequiredDescription
symbolstringYes
Example
curl "https://cryptodataapi.com/api/v1/indicators/technical/BTC" \
  -H "X-API-Key: cdk_live_your_key"
POST /api/v1/indicators/technical/refresh Refresh Technical Regime ▾

Force recompute the Technical / Structural cache (Pro tier).

Requires API key (Pro tier)
Example
curl -X POST "https://cryptodataapi.com/api/v1/indicators/technical/refresh" \
  -H "X-API-Key: cdk_live_your_key"

Hyperliquid Traders

GET /api/v1/hyperliquid/top-traders Get Top Traders ▾

Scored leaderboard of top traders filtered by performance criteria.

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/hyperliquid/top-traders" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/hyperliquid/wallet-positions Get Wallet Positions ▾

Current positions for tracked wallets. For non-tracked addresses, queries Hyperliquid on-demand.

Requires API key
Query Parameters
NameTypeRequiredDefaultDescription
addressstringNo—Filter by wallet address (0x...)
Example
curl "https://cryptodataapi.com/api/v1/hyperliquid/wallet-positions" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/hyperliquid/wallet-signals Get Wallet Signals ▾

Position change signals: entries, exits, size increases/decreases.

Requires API key
Query Parameters
NameTypeRequiredDefaultDescription
minutesintNo10Look-back window in minutes (min: 1, max: 1440)
addressstringNo—Filter by wallet address (0x...). Comma-separated for multiple.
Example
curl "https://cryptodataapi.com/api/v1/hyperliquid/wallet-signals?minutes=10" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/hyperliquid/trader-profiles Get Trader Profiles ▾

Trade profiles with win rate, PnL, classification, and edges.

Requires API key (Pro tier)
Query Parameters
NameTypeRequiredDefaultDescription
addressstringNo—Filter by wallet address (0x...)
Example
curl "https://cryptodataapi.com/api/v1/hyperliquid/trader-profiles" \
  -H "X-API-Key: cdk_live_your_key"
POST /api/v1/hyperliquid/trader-profiles/refresh Refresh Trader Profiles ▾

Force a synchronous refresh of trade profiles for all tracked wallets. Pro Plus tier — expensive (~15-30s, sequential Hyperliquid calls). Use after a deploy or when cached profiles look stale; the daily 19:00 UTC scheduled refresh covers normal operation.

Requires API key (Pro tier)
Example
curl -X POST "https://cryptodataapi.com/api/v1/hyperliquid/trader-profiles/refresh" \
  -H "X-API-Key: cdk_live_your_key"
POST /api/v1/hyperliquid/leaderboard/refresh Refresh Leaderboard ▾

Force a synchronous refresh of the Hyperliquid leaderboard cache. Pro Plus tier — fetches a ~28 MB payload and takes ~25-30s. Use when /copy-signals or /wallets/search return 0 results and you suspect the in-memory leaderboard is empty (e.g. a startup fetch timed out). The 2-min position refresh job will also auto-recover an empty leaderboard; this endpoint is for forcing it sooner.

Requires API key (Pro tier)
Example
curl -X POST "https://cryptodataapi.com/api/v1/hyperliquid/leaderboard/refresh" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/hyperliquid/watchlist Get Watchlist ▾

List all watchlisted wallet addresses.

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/hyperliquid/watchlist" \
  -H "X-API-Key: cdk_live_your_key"
POST /api/v1/hyperliquid/watchlist Add To Watchlist ▾

Add wallet addresses to the watchlist. Automatically starts tracking for signals.

Requires Pro or Pro Plus API key
Request Body (JSON)
NameTypeRequiredDescription
entriesarrayYes
Example
curl -X POST "https://cryptodataapi.com/api/v1/hyperliquid/watchlist" \
  -H "X-API-Key: cdk_live_your_key" \
  -H "Content-Type: application/json" \
  -d '{"email": "[email protected]"}'
DELETE /api/v1/hyperliquid/watchlist Remove From Watchlist ▾

Remove wallet addresses from the watchlist.

Requires Pro or Pro Plus API key
Request Body (JSON)
NameTypeRequiredDescription
addressesarrayYes
Example
curl -X DELETE "https://cryptodataapi.com/api/v1/hyperliquid/watchlist" \
  -H "X-API-Key: cdk_live_your_key" \
  -H "Content-Type: application/json" \
  -d '{"email": "[email protected]"}'
GET /api/v1/hyperliquid/watchlist/auto Get Auto Watchlist ▾

Get current auto-managed watchlist configuration and status.

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/hyperliquid/watchlist/auto" \
  -H "X-API-Key: cdk_live_your_key"
POST /api/v1/hyperliquid/watchlist/auto Create Auto Watchlist ▾

Auto-populate watchlist from top traders based on configurable criteria.

Requires API key
Request Body (JSON)
NameTypeRequiredDescription
modestringNoSource mode (currently only 'top_traders')
max_walletsintegerNoMax wallets in auto-managed set
min_scoreintegerNoMinimum top-trader score
filtersanyNo
auto_refreshbooleanNoRe-evaluate daily and update automatically
Example
curl -X POST "https://cryptodataapi.com/api/v1/hyperliquid/watchlist/auto" \
  -H "X-API-Key: cdk_live_your_key" \
  -H "Content-Type: application/json" \
  -d '{"email": "[email protected]"}'
DELETE /api/v1/hyperliquid/watchlist/auto Delete Auto Watchlist ▾

Disable auto-management and remove all auto-managed entries.

Requires Pro or Pro Plus API key
Example
curl -X DELETE "https://cryptodataapi.com/api/v1/hyperliquid/watchlist/auto" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/hyperliquid/copy-signals Get Copy Signals ▾

Top traders with their recent signals in a single response. Replaces the 3-step workflow (top-traders → watchlist → signals) with one call. Only returns traders that have signals in the given time window. Profile filters (min_win_rate, min_profit_factor, min_trades_30d, min_avg_duration_hours, exclude_types) are optional and only applied when passed — preserves backward compatibility. Recommended: pass min_trades_30d=30 to drop tiny-sample wallets.

Requires API key (Pro tier)
Query Parameters
NameTypeRequiredDefaultDescription
min_scoreintNo80Minimum trader score (min: 0, max: 100)
minutesintNo60Signal look-back window in minutes (min: 1, max: 1440)
min_win_ratefloatNo—Minimum 30d win rate (0-1) (min: 0, max: 1)
min_profit_factorfloatNo—Minimum profit factor (min: 0)
min_trades_30dintNo—Minimum trades in 30d. Pass 30+ to filter tiny-sample wallets (e.g. '100% WR over 2 trades'). Not auto-defaulted here for backward compatibility. (min: 0)
min_avg_duration_hoursfloatNo—Min avg trade duration (hours) (min: 0)
exclude_typesstringNo—Comma-separated trader types to exclude, e.g. 'hft,scalper'
Example
curl "https://cryptodataapi.com/api/v1/hyperliquid/copy-signals?min_score=80&minutes=60" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/hyperliquid/trader-profile/{address} Get Trader Profile ▾

On-demand trade profile for ANY Hyperliquid address. Fetches fill history and computes stats.

Requires API key (Pro tier)
Path Parameters
NameTypeRequiredDescription
addressstringYes
Query Parameters
NameTypeRequiredDefaultDescription
daysintNo30Analysis period in days (min: 1, max: 90)
Example
curl "https://cryptodataapi.com/api/v1/hyperliquid/trader-profile/So11111111111111111111111111111111?days=30" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/hyperliquid/wallet-trades/{address} Get Wallet Trades ▾

Historical trades for any Hyperliquid address with summary statistics.

Requires API key
Path Parameters
NameTypeRequiredDescription
addressstringYes
Query Parameters
NameTypeRequiredDefaultDescription
daysintNo30Trade history period in days (min: 1, max: 90)
Example
curl "https://cryptodataapi.com/api/v1/hyperliquid/wallet-trades/So11111111111111111111111111111111?days=30" \
  -H "X-API-Key: cdk_live_your_key"

Market Intelligence

GET /api/v1/market-intelligence/btc/cycle-indicators Btc Cycle Indicators ▾

All 8 BTC cycle indicators.

Requires API key
Query Parameters
NameTypeRequiredDefaultDescription
daysintNo30Number of daily entries to return (0 = all, default 30) (min: 0)
Example
curl "https://cryptodataapi.com/api/v1/market-intelligence/btc/cycle-indicators?days=30" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/market-intelligence/btc/cycle-indicators/{indicator} Btc Cycle Indicator By Name ▾

Single BTC cycle indicator by name.

Requires API key
Path Parameters
NameTypeRequiredDescription
indicatorstringYesIndicator name
Query Parameters
NameTypeRequiredDefaultDescription
daysintNo30Number of daily entries to return (0 = all, default 30) (min: 0)
Example
curl "https://cryptodataapi.com/api/v1/market-intelligence/btc/cycle-indicators/puell_multiple?days=30" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/market-intelligence/etf/btc/aum Etf Btc Aum ▾

BTC spot-ETF assets under management, reconstructed from the full daily flow history since the Jan 2024 launch: aum_usd_from_flows, btc_held_from_flows, cumulative_net_flow_usd, price_appreciation_usd plus method, excludes and caveats. A derived estimate — it covers BTC accumulated through flows, so it excludes GBTC’s pre-conversion stake.

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/market-intelligence/etf/btc/aum" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/market-intelligence/etf/{asset}/flows Etf Flows ▾

US spot-ETF daily net flow for BTC, ETH or SOL, keyed by trade date. flows holds settled days only (the full Farside Total, with SoSoValue as a backup), oldest first; latest is the newest settled day. The day still being reported is returned apart as in_progress (status: "partial", funds_reported/funds_total). Do not add it to totals. Each row has trade_date, flow_usd, status and source; source_health shows each feed’s last success. ?days=N returns history: BTC from Jan 2024, ETH from Jul 2024, SOL from Oct 2025. XRP is not supported — no free source publishes XRP spot-ETF flows.

Requires API key
x402 pay per request: $0.01 USDC per call, no key — see /api/v1/pricing
Path Parameters
NameTypeRequiredDescription
assetstringYesAsset: btc, eth, or sol
Query Parameters
NameTypeRequiredDescription
daysintegerNoSettled trade days to return in flows (1–1000, default 1 = latest settled day)
Example
curl "https://cryptodataapi.com/api/v1/market-intelligence/etf/btc/flows?days=30" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/market-intelligence/liquidations Liquidations ▾

Cross-exchange liquidation data. Defaults to Hyperliquid perps coins only. **Filter semantics:** ``exchange=`` is a **coin-set filter**, not an exchange-data filter. With ``exchange=hyperliquid`` you get the coins listed on Hyperliquid, but the liquidation values inside each entry are CoinGlass cross-exchange aggregates (Binance, OKX, Bybit, …). For Hyperliquid's own per-asset trading data use ``/daily/hyperliquid``.

Added 2026-09-09: top-level as_of (unix seconds the liquidation snapshot behind data was refreshed). Per row, liq_1h_vs_7d_median {long, short, total, hours_7d} — the coin's last-hour liquidation notional divided by the median hourly notional over the trailing 7 days, computed from the exact Hyperliquid fill tape (/backtesting/hl-liquidations), so 3.0 means “three times a normal hour for this coin”; hours_7d is how many hours actually backed the median. It is null while the tape holds under 24h for the coin, or when the 7d median is zero (nothing to compare against). Top-level baseline {source, window, as_of, min_hours, note} documents that ratio block.

Added 2026-09-23: per row, count is now the number of liquidation events in the 24h window and source the venues they came from ("hyperliquid+okx+bybit") — previously always 0 / null. Top-level grain {kind: "rolling_window", sum_ok: false, ...} and row_count_meaning: "liquidation_events_24h": every liquidation_usd_* field is a trailing-window level, so never sum or difference successive polls — for incremental flow use /backtesting/hl-liquidation-bars (Pro). Totals aggregate OKX + Bybit + Hyperliquid (Binance excluded; see coverage).

Requires API key
x402 pay per request: $0.01 USDC per call, no key — see /api/v1/pricing
Query Parameters
NameTypeRequiredDefaultDescription
symbolstringNo—Filter to a single coin (e.g. BTC)
exchangestringNohyperliquidFilter to coins on exchange: hyperliquid, binance_spot, asterdex, or all
typestringNoperpsInstrument type (perps)
limitintNo250Max coins to return (default 250) (min: 1, max: 500)
Example
curl "https://cryptodataapi.com/api/v1/market-intelligence/liquidations?exchange=hyperliquid&type=perps&limit=250" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/market-intelligence/squeeze-alerts Squeeze Alerts ▾

Coins whose forced-liquidation flow is one-sided and abnormal right now. A cascade tripwire, not a news feed. Scored catalysts on /news/market-moving are 15–45 minutes behind a breaking story — RSS is polled every 5 minutes and desks publish well after the fact — which is no use to a leveraged position. This reads the liquidation websocket directly: on 2026-08-19 the BTC tape printed $322.8M of short liquidations in one 5-minute bucket at a 334x short/long ratio, 23 minutes before the first related headline qualified for the tape. direction names the side being LIQUIDATED, not the price. A short liquidation is the exchange closing a short at market — forced buying — so short_squeeze is upward pressure and long_flush is downward, and the label is correct before price confirms it. oi_state separates the two cases that matter. Open interest falling into a short squeeze means shorts are being closed out (the move is consuming its own fuel); OI rising means fresh positioning is being added into it. Reads null until the OI history has two samples, and unclear inside a ±0.5% noise band rather than being forced into a story. Severity is built from ratios, not dollars: spike_ratio (this window against the coin's own trailing-24h mean) and asymmetry (the dominant side's share) carry 80% of the weight. Absolute notionals are the figure most distorted by the coverage gap below, so they are weighted least. triggered needs all five gates. spike_ratio ≥ 2, asymmetry ≥ 0.70, severity ≥ 0.35, window notional ≥ $100k, and ≥ 1h of baseline history. suppressed_by names whichever blocked it and is empty when triggered. The two absolute floors exist because notional is only 20% of the severity weight — without them a perfectly one-sided window scores 0.80 on any size at all, which in production raised alerts on $760 of liquidations. The floors gate the alert, not the scoring, so include_quiet=true still returns the row with the reason attached. Coverage: the same venue subset as /market-intelligence/liquidations (OKX + Bybit + Hyperliquid where armed; Hyperliquid is exact per-fill). Binance geo-blocks its liquidation stream from our infrastructure, so notionals run below a true all-exchange total. Check baseline_span_h — the hours of history actually behind spike_ratio. Not window_uptime_h, which is process uptime: the feed restores up to 24h of events from its snapshot on boot, so uptime resets on every deploy while the history does not. Triggering is gated on the span.

Requires API key · Pro / Pro Plus for the full universe; free tier is scoped to BTC
Query Parameters
NameTypeRequiredDefaultDescription
symbolstringNo—Filter to a single coin (e.g. BTC)
window_sintNo300Trailing window in seconds (min: 60, max: 3600)
min_severityfloatNo0.35Minimum severity to report (min: 0, max: 1)
include_quietboolNofalseReturn every coin with a usable window, not just the ones firing. For calibration
limitintNo250Max coins to scan (min: 1, max: 500)
Example
curl "https://cryptodataapi.com/api/v1/market-intelligence/squeeze-alerts?window_s=300" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/market-intelligence/options Options Data ▾

BTC options data (OI, volume, max pain).

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/market-intelligence/options" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/market-intelligence/exchange-balance Exchange Balance ▾

Exchange BTC balance and flow data.

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/market-intelligence/exchange-balance" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/market-intelligence/coinbase-premium Coinbase Premium ▾

Coinbase premium index.

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/market-intelligence/coinbase-premium" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/market-intelligence/funding-rates Funding Rates ▾

Cross-exchange funding rates. Defaults to Hyperliquid perps coins only. **Filter semantics:** ``exchange=`` is a **coin-set filter**, not an exchange-data filter. With ``exchange=hyperliquid`` you get the coins listed on Hyperliquid, but each entry's ``stablecoin_margin_list`` / ``token_margin_list`` still shows funding rates from every exchange (Binance, OKX, Bybit, …). For Hyperliquid's own per-asset funding rate use ``/daily/hyperliquid``.

Requires API key
Query Parameters
NameTypeRequiredDefaultDescription
symbolstringNo—Filter to a single coin (e.g. BTC)
exchangestringNohyperliquidFilter to coins on exchange: hyperliquid, binance_spot, asterdex, or all
typestringNoperpsInstrument type (perps)
limitintNo250Max coins to return (default 250) (min: 1, max: 500)
Example
curl "https://cryptodataapi.com/api/v1/market-intelligence/funding-rates?exchange=hyperliquid&type=perps&limit=250" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/market-intelligence/open-interest Open Interest ▾

Cross-exchange open interest. Returns multi-symbol data (top ~25 perps) when available, falling back to BTC-only from the fast-refresh cache. **Filter semantics:** ``exchange=`` is a **coin-set filter**, not an exchange-data filter. With ``exchange=hyperliquid`` you get the coins listed on Hyperliquid, but each entry's ``exchange_list`` still aggregates open interest across all CEXes. For Hyperliquid's own per-asset OI use ``/daily/hyperliquid`` — note that ``open_interest`` there is in base-coin units, with ``open_interest_usd`` as a derived USD notional.

Requires API key
Query Parameters
NameTypeRequiredDefaultDescription
symbolstringNo—Filter to a single coin (e.g. BTC)
exchangestringNohyperliquidFilter to coins on exchange: hyperliquid, binance_spot, asterdex, or all
typestringNoperpsInstrument type (perps)
limitintNo250Max coins to return (default 250) (min: 1, max: 500)
Example
curl "https://cryptodataapi.com/api/v1/market-intelligence/open-interest?exchange=hyperliquid&type=perps&limit=250" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/market-intelligence/taker-buy-sell Taker Buy Sell ▾

Taker buy/sell volume ratio by exchange, per coin (4h window). buy_ratio is a percent (0..100) of taker volume that was buying, per exchange leg in the inner exchange_list.

Added 2026-09-09: a {"exchange": "Hyperliquid", "buy_ratio": <0..100>} leg in the inner exchange list for every coin HL lists, from our own trade tape (/hyperliquid/trade-flow), notional-weighted over the trailing 4h. A coin only Hyperliquid carries gets its own top-level entry whose aggregate is the HL figure. An absent Hyperliquid leg means the tape is warming (or not configured) — never that HL had no trades. Additive; existing legs are unchanged.

Requires API key
Query Parameters
NameTypeRequiredDefaultDescription
symbolstringNo—Filter by symbol (BTC, ETH, SOL, DOGE, XRP, ADA). Omit for all.
Example
curl "https://cryptodataapi.com/api/v1/market-intelligence/taker-buy-sell" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/market-intelligence/liquidations/by-exchange Liquidations By Exchange ▾

BTC liquidations broken down by exchange over the trailing 4h — exchange, total/total_usd, long_usd, short_usd, largest first. Coverage is OKX + Bybit + Hyperliquid, so totals run under a true all-exchange number (Binance geo-blocks its liquidation stream from our IPs).

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/market-intelligence/liquidations/by-exchange" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/market-intelligence/fear-greed-history Fear Greed History ▾

Fear & Greed index history with dated entries.

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/market-intelligence/fear-greed-history" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/market-intelligence/stablecoin-history Stablecoin History ▾

Stablecoin market cap history timeseries.

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/market-intelligence/stablecoin-history" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/market-intelligence/status Market Intelligence Status ▾

Market intelligence collector status and rate usage.

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/market-intelligence/status" \
  -H "X-API-Key: cdk_live_your_key"

On-Chain Intelligence

Leading on-chain signals sourced from QuickNode RPC nodes, mempool.space, Ethplorer, and CoinMetrics Community. Covers exchange flows, stablecoin reserves, miner activity, dormancy / MVRV, whale accumulation, and a composite health score.

GET /api/v1/on-chain/stablecoin-reserves Stablecoin Reserves ▾

CEX stablecoin reserves across ETH/Tron/BSC. Aggregate USDT/USDC/etc. balances held in known hot/cold wallets of the top-5 centralized exchanges. Rising = dry powder accumulating (bullish); falling = capital deployed.

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/on-chain/stablecoin-reserves" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/on-chain/stablecoin-reserves/dry-powder Dry Powder Score ▾

Dry-powder signal: z-score of current CEX stablecoin reserves vs trailing 30-day baseline. Returns "accumulating" (z > +1), "neutral", or "depleting" (z < -1). Returns "unknown" until ≥8 historical snapshots collected.

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/on-chain/stablecoin-reserves/dry-powder" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/on-chain/exchange-flows/{symbol} Exchange Flows By Symbol ▾

Net Transfer flow to/from CEX wallets for a symbol, summed across all chains the symbol exists on. Coverage: ETH (50 ERC-20s + native ETH via balance-delta polling), BSC (9 tokens), Tron (USDT, USDC), and Solana (13 via Helius enhanced API). Returns 1h/6h/24h/7d windows, per-exchange 24h breakdown (binance, coinbase, kraken, bybit, okx), and rolling z-scores. Positive net = deposits (often bearish). Negative net = withdrawals (often bullish). 90d historical depth via /backtesting/daily-snapshots with per-chain breakdown under exchange_flows.by_chain.<chain>.

Caveats: (1) Solana SPL/SOL inflow numbers are systematically low (withdrawals-only bias from CEX-deposit-account model — outflow numbers are accurate). EVM chains unaffected. (2) Native ETH symbol (vs wrapped WETH) is live-only — no historical backfill, accumulates forward from collector start.

Requires API key
Path Parameters
NameTypeRequiredDescription
symbolstringYesToken symbol (e.g. USDT)
Query Parameters
NameTypeRequiredDefaultDescription
exchangestringNo—Filter to one exchange (e.g. binance)
Example
curl "https://cryptodataapi.com/api/v1/on-chain/exchange-flows/USDT" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/on-chain/exchange-flows/{symbol}/history Exchange Flow History (Hourly) ▾

Archived CEX inflow/outflow for a symbol back to 2026-05-28, sampled every ~30 minutes. Each point carries the trailing 1h and 24h inflow/outflow/net at that moment, summed across chains (and exchanges unless filtered), plus the 1h window per exchange in per_exchange_1h. interval=1h (default) keeps the last sample in each UTC hour; raw returns every sample, whose 1h windows overlap. Amounts are in the token's own units (USD for USDT/USDC/DAI), the same as the live endpoint. At most 93 days per request.

Requires API key
Path Parameters
NameTypeRequiredDescription
symbolstringYesToken symbol (e.g. USDT)
Query Parameters
NameTypeRequiredDefaultDescription
startstringNoend − 7dISO 8601, unix seconds or unix ms
endstringNonowISO 8601, unix seconds or unix ms (exclusive)
intervalstringNo1h1h | raw
exchangestringNo—Filter to one exchange (e.g. binance)
chainstringNo—Filter to one chain (e.g. eth, tron)
Example
curl "https://cryptodataapi.com/api/v1/on-chain/exchange-flows/USDT/history?start=2026-10-06&end=2026-10-08" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/on-chain/exchange-flows/spike-alerts Spike Alerts (Large Transfers) ▾

Recent large transfers (≥ min_amount, default $1M on the live-price-converted amount_usd) to/from tracked CEX wallets. amount is in token-native units with unit. Each row has a source: transfer (a decoded Transfer event with a real counterparty) or balance_delta (inferred from a CEX wallet's balance change, as for native ETH/BTC and Solana; exchange-internal hot/cold rebalancing looks identical to a client deposit, so use source=transfer for deposits only). This is a live feed of the last 500 rows (about 10h). History: every row since 2026-10-08 is archived as the exchange_flow_spikes type on /api/v1/backtesting/snapshots. Each 5-minute snapshot holds only the rows first seen in that tick, so concatenating a range lists each transfer once.

Requires API key
Query Parameters
NameTypeRequiredDefaultDescription
min_amountfloatNo1000000Minimum transfer size in USD (applies to amount_usd)
limitintNo50max: 500
symbolstringNo—Only this token (e.g. ETH)
exchangestringNo—Only this exchange (e.g. binance)
chainstringNo—Only this chain (eth, btc, sol, tron, bsc, base, arb, op)
directionstringNo—inflow | outflow
sourcestringNo—transfer | balance_delta
Example
curl "https://cryptodataapi.com/api/v1/on-chain/exchange-flows/spike-alerts?min_amount=5000000" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/on-chain/miners/reserves Miner Reserves & Flows ▾

BTC miner pool reserves + 24h/7d/30d net flow per pool. Tracks reward addresses for Foundry USA, AntPool, F2Pool, ViaBTC, and Binance Pool. Negative net = miner selling pressure; positive net = miner accumulation.

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/on-chain/miners/reserves" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/on-chain/miners/hash-ribbon Hash Ribbon State ▾

Hash Ribbon indicator: 30dMA vs 60dMA of BTC hashrate. States: "capitulation" (30dMA < 60dMA), "recovery" (just crossed back above within 14d — strongest BTC bottom signal historically), or "normal". Sourced from mempool.space hashrate index (3y daily history).

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/on-chain/miners/hash-ribbon" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/on-chain/dormancy/btc BTC Dormancy / MVRV ▾

BTC supply-shock / dormancy signals via CoinMetrics Community API. Returns MVRV with zone classification (capitulation < 1.0, accumulation 1.0-1.5, neutral 1.5-2.5, elevated 2.5-3.5, euphoria > 3.5), active addresses, issuance USD, and chain-wide exchange flow USD as a cross-check on QuickNode ERC-20 flows.

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/on-chain/dormancy/btc" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/on-chain/whales 🚧 Coming soon — Whales Snapshot ▾

🚧 Coming soon — temporarily disabled (currently returns HTTP 503, and is left out of the OpenAPI spec until it ships). Top-100 non-CEX holders across USDT, USDC, WBTC, and WETH on Ethereum. CEX wallets and contract addresses are filtered out so the remaining set represents genuine large economic holders.

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/on-chain/whales" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/on-chain/whales/{symbol} 🚧 Coming soon — Whales By Symbol ▾

🚧 Coming soon — temporarily disabled (currently returns HTTP 503, and is left out of the OpenAPI spec until it ships). Top non-CEX holders of one ERC-20 (USDT, USDC, WBTC, WETH) with 24h/7d/30d aggregate balance deltas. Includes top-5 holder list and the discrete accumulation_signal field (accumulating / neutral / distributing / unknown).

Requires API key
Path Parameters
NameTypeRequiredDescription
symbolstringYesUSDT / USDC / WBTC / WETH
Example
curl "https://cryptodataapi.com/api/v1/on-chain/whales/USDT" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/on-chain/whales/accumulation-score 🚧 Coming soon — Whale Accumulation Score ▾

🚧 Coming soon — temporarily disabled (currently returns HTTP 503, and is left out of the OpenAPI spec until it ships). Aggregate whale accumulation verdict across all tracked ERC-20s. Counts how many tokens are accumulating, neutral, distributing, or unknown and emits a single directional signal.

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/on-chain/whales/accumulation-score" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/on-chain/whales/accumulation-score/{symbol} 🚧 Coming soon — Whale Score By Symbol ▾

🚧 Coming soon — temporarily disabled (currently returns HTTP 503, and is left out of the OpenAPI spec until it ships). Whale accumulation signal for a single ERC-20 token with full 7d/30d delta payload.

Requires API key
Path Parameters
NameTypeRequiredDescription
symbolstringYesUSDT / USDC / WBTC / WETH
Example
curl "https://cryptodataapi.com/api/v1/on-chain/whales/accumulation-score/USDT" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/on-chain/score On-Chain Health Score ▾

Composite 0-100 on-chain health score with per-component breakdown. Synthesizes Hash Ribbon, MVRV zone, stablecoin dry-powder, whale accumulation, exchange-flow direction, and miner net flow into a single directional read. Sentiment bands: bullish (≥70), leaning_bullish (55-69), neutral (45-54), leaning_bearish (30-44), bearish (<30). Components with no data (reason: "no_data", weight 0) are excluded and the other weights renormalised; their score of 50 is a placeholder. whale_accumulation is currently always excluded (whale tracking is disabled). exchange_flow scores the USDT/USDC/DAI 24h net only; before 2026-10-08 its reason magnitudes also summed other tokens' native units and are not dollars.

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/on-chain/score" \
  -H "X-API-Key: cdk_live_your_key"

Backtesting

Historical / backtesting data. The daily-snapshot archive (/daily-snapshots and /daily-snapshots/{date}) is free; the Hyperliquid fill tape and its bars (/hl-liquidations, /hl-liquidation-bars, /hl-trade-flow) are Pro; every other Backtesting endpoint requires a Pro Plus key.

Read the grain before you aggregate

Since 2026-09-12 every range reader (/klines, /funding, /liquidations, /hl-liquidations, /hl-liquidation-bars, /hl-funding-bars, /hl-trade-flow) carries three additive blocks:

  • grain — what ONE ROW is: event (one fill), bar (a closed bucket), rate_snapshot (the live rate sampled on a timer), rolling_window (a trailing total sampled on a timer), settled_payment (one settlement print). sum_ok says whether adding rows across time means anything; is_cumulative says a row already contains its predecessors. Two series look like candles and are not: the default /funding rows are rate_snapshot (~12 samples per settlement — summing them overstates carry ~12x) and /liquidations is rolling_window (a 24h level — neither sum nor difference it).
  • coverage — local_first / local_last (ms) for the scope you asked for, and archive_hint when your window starts before local retention: the rows are not missing, they live in the daily Parquet archive (/archives). An empty data is never silent.
  • next_cursor / has_more — keyset paging on the table's full primary key. Pass next_cursor back as cursor (with the same start/end). Do not page the event tapes with start = last.time + 1: one liquidation order sweeping N book levels is N rows at ONE millisecond, and that pattern silently drops whichever siblings fell past the page boundary — exactly during the bursts you are studying. time is unique per row only on symbol-scoped /klines and /funding. format=csv puts the same state in X-Has-More / X-Next-Cursor headers.

symbol / coin accept a comma list (up to 25) on /liquidations, /hl-liquidations, /hl-liquidation-bars and /hl-trade-flow — every value rides the index, so one scoped call beats an unscoped scan. Rows that share a timestamp now come back in primary-key order.

GET /api/v1/backtesting/klines Get Klines ▾

Query historical 1-minute OHLCV klines for backtesting. grain is bar / 1m (volume sums across rows, prices do not); coverage gives local retention for the symbol; next_cursor / has_more page the window without re-fetching a boundary bar (added 2026-09-12).

Requires Pro Plus API key
Query Parameters
NameTypeRequiredDefaultDescription
symbolstringYes—Trading pair, e.g. BTCUSDT (Binance) or BTC (Hyperliquid)
exchangestringNobinancebinance or hyperliquid
startstringYes—Start time (ISO 8601 or unix ms)
endstringNo—End time (ISO 8601 or unix ms, defaults to now)
limitintNo1000min: 1, max: 10000
cursorstringNo—The previous response's next_cursor, verbatim
formatstringNojsonjson or csv (CSV: paging state in X-Has-More / X-Next-Cursor)
Example
curl "https://cryptodataapi.com/api/v1/backtesting/klines?exchange=binance&limit=1000&format=json" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/backtesting/funding Get Funding ▾

Historical funding in two grains. Default (grain=snapshot_5m): a 5-minute sample of the LIVE rate plus open interest and mark price — a rate series, not payments. Hyperliquid settles hourly, so there are ~12 of these rows per settlement; Binance settles every 8h, ~96 rows. grain=hourly: one row per settled Hyperliquid funding print (HL fundingHistory — the carry actually paid or received), with premium; loaded daily for the previous UTC day, so it lags ~1 day (the live tail is /hyperliquid/funding-rates). Hyperliquid only; Binance settled prints are /derivatives/binance/funding-rates.

Worked example — daily carry on BTC. Do not sum(funding_rate) over the default rows: 288 samples of a rate near 0.001%/h would read as ~0.29%/day when the true figure is ~0.024%. Either sum(funding_rate) over the grain=hourly rows (24 prints = the exact day), or, on the snapshot rows, mean(funding_rate) × 24 (× 3 for Binance). The response says which you have: grain.kind is rate_snapshot (sum_ok: false) or settled_payment (sum_ok: true), and grain.settlements_per_day is 24 or 3. Added 2026-09-12 with coverage, next_cursor / has_more and format=csv.

Requires Pro Plus API key
Query Parameters
NameTypeRequiredDefaultDescription
symbolstringYes—Symbol, e.g. BTC (Hyperliquid) or BTCUSDT (Binance)
exchangestringNohyperliquidbinance or hyperliquid
grainstringNosnapshot_5msnapshot_5m (live rate sampled every 5 min + OI/mark) or hourly (settled prints, hyperliquid only — 400 grain_unavailable on binance)
startstringYes—Start time (ISO 8601 or unix ms)
endstringNo—End time, EXCLUSIVE
limitintNo1000min: 1, max: 10000
cursorstringNo—The previous response's next_cursor, verbatim
formatstringNojsonjson or csv
Example — settled hourly prints for one day
curl "https://cryptodataapi.com/api/v1/backtesting/funding?symbol=BTC&exchange=hyperliquid&grain=hourly&start=2026-09-01&end=2026-09-02" \
  -H "X-API-Key: cdk_live_your_key"
Response (abridged)
{
  "symbol": "BTC", "exchange": "hyperliquid", "count": 24,
  "data": [{ "time": 1788220800000, "funding_rate": 0.0000125, "premium": 0.0000031,
             "open_interest": null, "mark_price": null, ... }],
  "grain": { "kind": "settled_payment", "cadence": "1h", "sum_ok": true,
             "settlements_per_day": 24, "note": "One row per Hyperliquid funding settlement..." },
  "coverage": { "local_first": 1704067200000, "local_last": 1788303600000, "archive_hint": null },
  "next_cursor": null, "has_more": false
}
GET /api/v1/backtesting/liquidations Get Liquidations ▾

Venue-merged liquidation totals (OKX + Bybit + Hyperliquid) — a ROLLING 24-HOUR level sampled every 5 minutes, not that interval's flow. Each row answers “how much was liquidated in the 24h ending at this sample”: grain.kind is rolling_window, is_cumulative: true, sum_ok: false. Summing rows, or differencing consecutive ones, does not recover a burst. For incremental 5m / 15m / 1h flow from exact fills use /backtesting/hl-liquidation-bars; for the fills themselves, /backtesting/hl-liquidations. Rows are ordered (time, symbol); next_cursor resumes exactly there (added 2026-09-12 with coverage and format=csv).

Requires Pro Plus API key
Query Parameters
NameTypeRequiredDefaultDescription
symbolstringNo—One symbol or a comma list (BTC,ETH,SOL, up to 25; each rides the index). Omit for all
startstringYes—Start time (ISO 8601 or unix ms)
endstringNo—End time, EXCLUSIVE
limitintNo1000min: 1, max: 10000
cursorstringNo—The previous response's next_cursor, verbatim
formatstringNojsonjson or csv
Example
curl "https://cryptodataapi.com/api/v1/backtesting/liquidations?limit=1000" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/backtesting/hl-liquidations Get HL Liquidation Events ▾

Query the per-event Hyperliquid liquidation tape: every exact liquidation fill (market + backstop) across the full HL perp universe — time, coin, liquidated side, price, size, USD notional, method, mark price, liquidated user and tx hash — sourced from HL node fill data, unlike the venue-merged rolling-24h totals of /backtesting/liquidations. grain.kind is event. Rows are ordered by the full (time, tid) key and next_cursor resumes exactly there: one liquidation order sweeping N book levels is N rows at ONE millisecond, so start = last.time + 1 paging silently drops the siblings that fell past a page boundary — use the cursor. Bucketed flow from these fills: /backtesting/hl-liquidation-bars. The companion 1-min taker buy/sell tape is /backtesting/hl-trade-flow.

Coverage. Live capture began 2026-07-23 (coverage.local_first is authoritative). The hl_liquidations daily Parquet archive (one file per day, all coins — /backtesting/archives, Pro Plus) additionally holds a pilot backfill 2026-04-24 → 2026-05-05; there is no per-fill tape for 2026-05-06 → 2026-07-22 anywhere. A window that starts before local retention returns [] with coverage.archive_hint set, never silently.

Requires Pro or Pro Plus API key
Query Parameters
NameTypeRequiredDefaultDescription
coinstringNo—One HL universe coin name (BTC, kPEPE) or a comma list (up to 25; each rides the index). Omit for all
startstringYes—Start time (ISO 8601 or unix ms)
endstringNo—End time, EXCLUSIVE
limitintNo1000min: 1, max: 10000
cursorstringNo—The previous response's next_cursor, verbatim
formatstringNojsonjson or csv (CSV: paging state in X-Has-More / X-Next-Cursor)
Example — page a burst with the cursor
curl "https://cryptodataapi.com/api/v1/backtesting/hl-liquidations?coin=BTC&start=2026-09-01&end=2026-09-02&limit=10000" \
  -H "X-API-Key: cdk_live_your_key"
# ... then, while has_more is true:
curl "https://cryptodataapi.com/api/v1/backtesting/hl-liquidations?coin=BTC&start=2026-09-01&end=2026-09-02&limit=10000&cursor=<next_cursor>" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/backtesting/hl-liquidation-bars Get HL Liquidation Bars ▾

Incremental liquidation flow per closed bucket, summed from the exact Hyperliquid fill tape — the burst clock the rolling-24h level of /backtesting/liquidations cannot give you (added 2026-09-12). Each row is one UTC clock-aligned interval bucket: long_usd / short_usd (notional liquidated on each side), total_usd, n_long / n_short (fills) and max_fill_usd. Buckets with no fills are not returned. start and end are floored to the grid, so the bucket containing now is never served — its fills are still forming and live on /hl-liquidations. Omit coin for one market-wide row per bucket (coin null, window ≤ 31 days); give a coin or comma list for per-coin rows (window ≤ 93 days); past the cap you get 400 range_too_large.

Every bar is auditable. The audit block says how: call /hl-liquidations with the same coin, start=row.time, end=row.time + interval, and the fills you get back sum to the bar. Join the bars to /hyperliquid/candles or /backtesting/klines?exchange=hyperliquid on time for the same-bar / next-bar test.

Requires Pro or Pro Plus API key
Query Parameters
NameTypeRequiredDefaultDescription
coinstringNo—One HL coin name (BTC, kPEPE) or a comma list (up to 25) for per-coin bars. Omit for ONE market-wide series
intervalstringNo15m5m, 15m or 1h (UTC clock-aligned)
startstringYes—Start time (ISO 8601 or unix ms); floored to the interval
endstringNonowEnd time; floored to the interval, EXCLUSIVE
limitintNo1000min: 1, max: 10000
cursorstringNo—The previous response's next_cursor, verbatim
formatstringNojsonjson or csv
Example
curl "https://cryptodataapi.com/api/v1/backtesting/hl-liquidation-bars?coin=BTC&interval=15m&start=2026-09-01&end=2026-09-08" \
  -H "X-API-Key: cdk_live_your_key"
Response (abridged)
{
  "coin": "BTC", "interval": "15m", "count": 412,
  "data": [{ "time": 1788220800000, "coin": "BTC", "long_usd": 1834210.5, "short_usd": 96120.0,
             "total_usd": 1930330.5, "n_long": 217, "n_short": 9, "max_fill_usd": 412000.0 }, ...],
  "audit": { "fills": "/api/v1/backtesting/hl-liquidations",
             "how": "same coin, start=row.time, end=row.time+900000 — the exact fills that summed to the bar" },
  "grain": { "kind": "bar", "cadence": "15m", "sum_ok": true, ... },
  "coverage": { "local_first": 1784788771678, "local_last": 1789166399000, "archive_hint": null },
  "next_cursor": null, "has_more": false
}
GET /api/v1/backtesting/hl-funding-bars Get HL Funding + OI Bars ▾

Hyperliquid funding and open interest aligned to the candle clock (added 2026-09-19) — one row per closed bar per coin, so a funding / OI condition can be tested against the same 4h bar a price signal fires on. time is the bar open and equals the timestamp of the matching /hyperliquid/candles bar — join on it (the join block says how).

Per bar: funding_sum — the carry actually settled in (time, time + interval] (a settlement at 16:00 pays for the hour before it, so it belongs to the bar that closes at 16:00; it sums across bars) with n_settlements; funding_rate_mean (mean live hourly rate over the bar — a level, do not sum); oi_open / oi_close / oi_change_pct (base-coin units, first and last 5-minute sample in the bar; × mark_close for notional); mark_close; n_snapshots.

Point-in-time: every value was observable by the bar's close — act on it at the next bar's open. funding_sum is null (n_settlements 0) for the most recent day until its settled prints are archived (daily, for the previous UTC day); funding_rate_mean is there immediately. Bars begin where our 5-minute snapshots do (2026-03-30, see coverage) — Hyperliquid publishes no historical OI, so nothing earlier can exist; older settled funding alone is /backtesting/funding?grain=hourly. The bar containing now is never served. Window ≤ 93 days per call.

Requires Pro Plus API key
Query Parameters
NameTypeRequiredDefaultDescription
coinstringYes—One HL coin name (BTC, kPEPE) or a comma list (up to 25)
intervalstringNo4h1h, 4h or 1d — the same UTC grid as /hyperliquid/candles
startstringYes—Start time (ISO 8601 or unix ms); floored to the interval
endstringNonowEnd time; floored to the interval, EXCLUSIVE
limitintNo1000min: 1, max: 10000
cursorstringNo—The previous response's next_cursor, verbatim
formatstringNojsonjson or csv
Example
curl "https://cryptodataapi.com/api/v1/backtesting/hl-funding-bars?coin=SOL,ETH&interval=4h&start=2026-08-01&end=2026-09-01" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/backtesting/liquidation-density Get Liquidation Density ▾

Hyperliquid liquidation density near the mark, as a time series (added 2026-10-08). This gives the numbers a backtest needs from the archived liquidation_map / liquidation_levels snapshots without downloading them, at about 2 KB a point instead of about 1 MB a snapshot. Each point is one coin at one 5-minute snapshot: time (bucket start), snapshot_time, mark, then for bands of ±0.5 / 1 / 2 / 3 / 5% of mark (bands_pct) long_below (USD of long positions whose liquidation price is below the mark, which is fuel for a down-move) and short_above (shorts liquidating above it). Bands are cumulative, so "2" includes "1".

The same bands are split by_trader_type (vault, market_maker, whale, smart_money, high_leverage, other; the splits sum to the total) and by_leverage (3/5/10/20/25/40/50/100x). Every key is always present, and 0 means nothing in that band. These are resting levels at one instant (grain.kind = level_snapshot), so never sum them across rows. interval=1h serves the first snapshot of each hour. History starts 2026-06-26, when the full-universe liquidation feed began. Earlier liquidation_levels snapshots are a ~25-whale sample and are not included. Window ≤ 93 days per call; page with cursor.

Requires Pro Plus API key
Query Parameters
NameTypeRequiredDefaultDescription
coinstringYes—One HL coin name (BTC, HYPE, kPEPE) or a comma list (up to 25)
startstringYes—Start time (ISO 8601 or unix ms)
endstringNonowEnd time, EXCLUSIVE
intervalstringNo1h5m (every snapshot) or 1h (first snapshot of each hour)
splitsstringNotrader_type,leverageBreakdowns to include, or none for the all-account bands only (~10x smaller)
limitintNo1000min: 1, max: 10000
cursorstringNo—The previous response's next_cursor, verbatim
formatstringNojsonjson or csv (CSV carries the all-account bands only)
Example
curl "https://cryptodataapi.com/api/v1/backtesting/liquidation-density?coin=BTC,ETH&interval=1h&start=2026-09-01&end=2026-10-01" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/backtesting/hl-trade-flow Get HL Trade Flow ▾

Added 2026-09-09. Query the archived Hyperliquid trade tape: 1-minute taker buy/sell buckets per perp. Each row is one closed UTC minute for one coin — time, coin, buy_notional / sell_notional (by aggressor side), n_trades, vwap, max_fill_usd, large_fill_share (fills ≥ $25k) and partial (the collector's socket did not watch the whole minute; such minutes are never back-filled). Same row shape as the live /hyperliquid/trade-flow minus its served-only cvd_usd. Minutes with no fills are not stored, so a gap is either a quiet minute or an unwatched one — the stored partial rows tell them apart. Coverage begins 2026-09-09. Serves the local retention window; the full history is archived daily as the hl_trade_flow data type (one Parquet per day, all coins; columns time, coin, buy_notional, sell_notional, n_trades, vwap, max_fill_usd, large_fill_share, partial) — Pro Plus via /backtesting/archives + /archives/download, or $1.00 per day-file via /archives/purchase. Pro (Pro Plus included), matching /hl-liquidations.

Requires Pro or Pro Plus API key
Query Parameters
NameTypeRequiredDefaultDescription
coinstringNo—Filter by HL coin name (e.g. BTC, kPEPE), or omit for all coins
startstringYes—Start time (ISO 8601 or unix ms)
endstringNonowEnd time (ISO 8601 or unix ms). EXCLUSIVE — the range is [start, end)
boundsstringNo—Same as /hl-liquidations
limitintNo1000min: 1, max: 10000
Example
curl "https://cryptodataapi.com/api/v1/backtesting/hl-trade-flow?coin=BTC&start=2026-09-09" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/backtesting/snapshots Get Snapshots ▾

Query historical JSON snapshots for a data type. The response is streamed row-by-row (bounded server memory), so large limit=1000 pulls are safe and start returning immediately. For bulk multi-day/-week history, prefer /api/v1/backtesting/archives/download — it returns pre-signed links to pre-built daily files on object storage (one file per data_type per day), which is far cheaper than paginating this endpoint. Perp-regime types: gamma_exposure (MM-lens dealer-gamma, byte-parity with live /quant/gex; includes the per-coin distribution_context percentile block from 2026-07-10), liquidation_map (full-universe density + composite regime per coin; per-coin bins_by_class {market_maker, whale, other} on the same grid as bins, the three summing to it, from 2026-09-09) and liquidation_levels (raw per-account liquidation ladders), all at 5-min cadence. Added 2026-09-09, both 5-min and forward-only (no per-account history exists anywhere, so neither can be backfilled): positioning — byte-parity with the live /quant/positioning coins map (per coin {mark, positions_as_of, by_type, by_tag}); and whale_activity — the live /quant/whales payload minus meta ({positions_as_of, summary (by_class, by_tag_usd, totals), top_coins[≤60], classifier_version}); the daily aggregate before it is /quant/whales/history. The gamma_exposure snapshot carries every per-coin field added to /quant/gex on 2026-09-09 and regime rules v2 from that date. token_unlocks is the point-in-time unlock board (per-coin float, locked supply, dilution overhang and the next dated cliff, exactly as published at that moment, from 2026-08-20) — vesting schedules are revised in place upstream, so a schedule pulled today cannot tell you what was visible on a past date. Call /backtesting/snapshots/types for the full list with per-type coverage ranges.

Requires Pro Plus API key
Query Parameters
NameTypeRequiredDefaultDescription
data_typestringYes—Snapshot type, e.g. market_health, fear_greed, coinglass_etf_flows
startstringYes—Start time (ISO 8601 or unix ms)
endstringNo—End time
limitintNo100min: 1, max: 1000
universestringNo—For dex_trending: filter to hl_perps
Example
curl "https://cryptodataapi.com/api/v1/backtesting/snapshots?limit=100" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/backtesting/snapshots/types Get Snapshot Types ▾

List all available snapshot data types with row counts and date ranges.

Requires Pro Plus API key
Example
curl "https://cryptodataapi.com/api/v1/backtesting/snapshots/types" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/backtesting/symbols Get Symbols ▾

List all tracked symbols with available date ranges.

Requires Pro Plus API key
Query Parameters
NameTypeRequiredDefaultDescription
exchangestringNo—Filter by exchange: binance or hyperliquid
Example
curl "https://cryptodataapi.com/api/v1/backtesting/symbols" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/backtesting/status Get Status ▾

Get backtesting storage statistics.

Requires Pro Plus API key
Example
curl "https://cryptodataapi.com/api/v1/backtesting/status" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/backtesting/export Export Data ▾

Export kline data as streaming CSV download.

Requires Pro Plus API key
Query Parameters
NameTypeRequiredDefaultDescription
symbolstringYes—Symbol to export
exchangestringNobinancebinance or hyperliquid
startstringYes—Start time (ISO 8601 or unix ms)
endstringNo—End time
Example
curl "https://cryptodataapi.com/api/v1/backtesting/export?exchange=binance" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/backtesting/archives/index Get Archive Index ▾

Return the backtesting archive index — a compact summary of all available data types, symbols, exchanges, and date ranges. Consumers should call this once to discover what's available, then use ``/archives/download`` to fetch specific files.

Requires Pro Plus API key
Example
curl "https://cryptodataapi.com/api/v1/backtesting/archives/index" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/backtesting/archives List Archives ▾

List archived files available for download from cold storage. Use ``data_type=daily`` for consolidated Parquet files containing all symbols for an exchange in a single file (recommended for bulk downloads). Deep cold tiers: data_type=klines_deep (coarse OHLCV, interval 1h/4h/1d) and data_type=funding_deep (hourly funding_rate only) expose the deep monthly history — one Parquet per symbol per month, reaching far past the rolling daily files. exchange=binance serves spot klines back to each market's listing (BTCUSDT to Aug 2017, 1h/4h/1d alike); exchange=hyperliquid reaches its 2023 launch on 1d (4h to ~2024, 1h to ~7 months; funding_rate to ~2024). Deep 1m klines and historical open_interest/mark_price do not exist from any source. See the coverage table in the /api/v1/backtesting/archives/index response.

Requires Pro Plus API key
Query Parameters
NameTypeRequiredDefaultDescription
data_typestringNoklinesData type: daily, klines, funding, liquidations, hl_liquidations, hl_trade_flow, snapshots, klines_deep, or funding_deep. Use 'daily' for consolidated per-exchange bundles; 'hl_liquidations' is the per-event Hyperliquid liquidation tape and 'hl_trade_flow' the 1-min HL taker buy/sell buckets (both one Parquet per day, all coins); '*_deep' for deep monthly cold history.
exchangestringNo—Filter by exchange (klines/funding/daily/klines_deep/funding_deep only)
symbolstringNo—Filter by symbol, or snapshot type name for snapshots
intervalstringNo—Candle interval for klines_deep only: 1h, 4h, or 1d (ignored for other types)
Example
curl "https://cryptodataapi.com/api/v1/backtesting/archives?data_type=klines" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/backtesting/archives/download Download Archives ▾

Generate pre-signed download URLs for archived files. Use ``data_type=daily`` for consolidated Parquet files (one per exchange) instead of individual per-symbol files. Deep cold tiers: data_type=klines_deep (with interval 1h/4h/1d) and data_type=funding_deep serve the deep monthly history — one Parquet per symbol per month: exchange=binance spot klines back to each market's listing (BTCUSDT to Aug 2017), exchange=hyperliquid 1d to its 2023 launch. For the deep tiers, start/end match the file's YYYY-MM token, so pass month-granular bounds (e.g. start=2019-01).

Requires Pro Plus API key
Query Parameters
NameTypeRequiredDefaultDescription
startstringYes—Start date (YYYY-MM-DD; YYYY-MM for '*_deep' tiers)
data_typestringNoklinesData type: daily, klines, funding, liquidations, hl_liquidations, hl_trade_flow, snapshots, klines_deep, or funding_deep. Use 'daily' for consolidated bundles; 'hl_liquidations' for the per-event HL liquidation tape; 'hl_trade_flow' for the 1-min HL taker buy/sell buckets (from 2026-09-09); '*_deep' for deep monthly cold history.
exchangestringNo—Exchange filter (klines/funding/daily/klines_deep/funding_deep)
symbolstringNo—Symbol, or snapshot type name for snapshots
intervalstringNo—Candle interval for klines_deep only: 1h, 4h, or 1d (ignored for other types)
endstringNo—End date (YYYY-MM-DD, defaults to today; YYYY-MM for '*_deep' tiers)
Example
curl "https://cryptodataapi.com/api/v1/backtesting/archives/download?data_type=klines_deep&exchange=hyperliquid&symbol=BTC&interval=1d&start=2023-01" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/backtesting/archives/purchase Purchase Archive Object (x402) ▾

One archived Parquet / JSON object for one USDC payment — no key needed. Flow: call once to get a 402 quoting the price for exactly this object (a missing object is a 404 before any quote, so you can never pay for a file that is not there); sign the amount; call again with x-payment. The response is a pre-signed download URL valid for one hour. A Pro Plus key gets the same URL free (parity with /archives/download, which lists whole ranges). Prices per data_type are in GET /api/v1/pricing → resources: klines/funding/liquidations/snapshots $0.25, hl_liquidations $1.00, hl_trade_flow $1.00, daily $2.00, klines_deep/funding_deep $3.00.

No key needed (x402 pay per resource) · Pro Plus keys download free
Query Parameters
NameTypeRequiredDefaultDescription
data_typestringYes—klines, funding, liquidations, hl_liquidations, hl_trade_flow, daily, snapshots, klines_deep, funding_deep
exchangestringNo—klines / funding / daily / *_deep
symbolstringNo—klines / funding / liquidations / *_deep
datestringNo—YYYY-MM-DD for daily-file types (klines, funding, liquidations, hl_liquidations, hl_trade_flow, daily, snapshots)
monthstringNo—YYYY-MM for *_deep monthly files
intervalstringNo—klines_deep only: 1h, 4h, 1d
bundlestringNo—daily only: klines or funding
snapshot_typestringNo—snapshots only: the snapshot data type name
Example (no key — first call, unsigned)
curl "https://cryptodataapi.com/api/v1/backtesting/archives/purchase?data_type=klines&exchange=binance&symbol=BTCUSDT&date=2026-08-01"
Response (settled payment)
{
  "object": "backtesting/klines/binance/BTCUSDT/2026-08-01.parquet",
  "size_bytes": 184320,
  "url": "https://...presigned...",    // valid for 1 hour
  "expires_in": 3600,
  "paid": true,
  "amount_usd": 0.25,
  "tx_hash": "0xabc123...",
  "network": "base"
}

A Pro Plus key gets the same object/size_bytes/url/expires_in shape with "paid": false and a "note": "Pro Plus keys download archives free." field instead of amount_usd/tx_hash/network.

GET /api/v1/backtesting/daily-snapshots Daily Snapshots List ▾

List dates (YYYY-MM-DD) for which an archived daily snapshot is available. Snapshots are produced once per day at 20:00 UTC (plus on server startup) and contain everything /api/v1/daily returns, including the composite on-chain health score with per-component breakdown — ideal for time-series regime tagging in backtests.

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/backtesting/daily-snapshots" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/backtesting/daily-snapshots/{date} Daily Snapshot By Date ▾

Retrieve an archived daily snapshot for `date` (YYYY-MM-DD UTC). Returns the full snapshot identical in shape to /api/v1/daily — coin profiles, health score, derivatives, sentiment, macro, on-chain components, and the composite onchain_health_score field. Includes the signum_rgg block with its full per-symbol by_symbol map (colour, signed score, ADX/DI, days_in_color, flipped_at, price, hl_symbol join key; stored since 2026-03-02). Days archived from 2026-09-09 carry signum_rgg.computed_from, the last completed daily bar the colours were read from (the 20:00 UTC build reads colours completed through the previous close); earlier days were archived with the forming bar included. For just that block use /backtesting/signum-rgg?date=.

Requires API key
Path Parameters
NameTypeRequiredDescription
datestringYesYYYY-MM-DD (UTC)
Example
curl "https://cryptodataapi.com/api/v1/backtesting/daily-snapshots/2026-05-28" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/backtesting/signum-rgg SIGNUM Archive By Date ▾

Added 2026-09-09. Per-day SIGNUM_RGG colour state for the full universe, straight from the daily archive — a thin wrapper over /backtesting/daily-snapshots/{date} that returns only its signum_rgg block: {date, as_of, computed_from, summary {counts, breadth, top lists}, by_symbol {colour, signed score, ADX/DI, days_in_color, flipped_at, price, hl_symbol}}. Available for every archived day (the block has been stored since 2026-03-02). computed_from is present on days archived from 2026-09-09 and names the last completed daily bar the colours were read from; the archive is built at 20:00 UTC, so a day's block carries the colours completed through the previous UTC close. Days before that were archived with the forming bar included. 404 with Retry-After while today's build is pending, and 404 when a snapshot exists but predates the SIGNUM block. Same auth gate as daily-snapshots: any valid key.

Requires API key
Query Parameters
NameTypeRequiredDefaultDescription
datestringYes—Archived day, YYYY-MM-DD (UTC)
Example
curl "https://cryptodataapi.com/api/v1/backtesting/signum-rgg?date=2026-09-08" \
  -H "X-API-Key: cdk_live_your_key"

NFTs

NFT Trends — the whole section requires a Pro (or Pro Plus) API key; /nfts/correlations is Pro Plus.

GET /api/v1/nfts/overview Get Nft Overview ▾

Headline NFT trade volume — total + per-chain / per-tier / per-category series, top collections, marketplaces.

Requires Pro or Pro Plus API key
Query Parameters
NameTypeRequiredDefaultDescription
daysintNo90Days of history to return (min: 7, max: 3650)
Example
curl "https://cryptodataapi.com/api/v1/nfts/overview?days=90" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/nfts/collections List Nft Collections ▾

Seeded NFT collection taxonomy — slug, name, chain, category, tier, launch month.

Requires Pro or Pro Plus API key
Example
curl "https://cryptodataapi.com/api/v1/nfts/collections" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/nfts/collections/{slug} Get Nft Collection ▾

Per-collection daily volume time-series.

Requires Pro or Pro Plus API key
Path Parameters
NameTypeRequiredDescription
slugstringYes
Query Parameters
NameTypeRequiredDefaultDescription
daysintNo365min: 7, max: 3650
Example
curl "https://cryptodataapi.com/api/v1/nfts/collections/{slug}?days=365" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/nfts/chains List Nft Chains ▾

Chain breakdown — each chain plus the count of seeded collections on it.

Requires Pro or Pro Plus API key
Example
curl "https://cryptodataapi.com/api/v1/nfts/chains" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/nfts/categories List Nft Categories ▾

Category taxonomy — fixed buckets (pfp/art/gaming/collectible/music/domain/metaverse/ordinal/other).

Requires Pro or Pro Plus API key
Example
curl "https://cryptodataapi.com/api/v1/nfts/categories" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/nfts/volume Get Nft Volume ▾

Daily NFT volume buckets — choose `by=chain|tier|category|collection`. Pro tier. The collection breakdown can return many series; consumers should expect a wide list when calling with `by=collection`.

Requires API key (Pro tier)
Query Parameters
NameTypeRequiredDefaultDescription
bystringNochain
fromstringNo—ISO date (YYYY-MM-DD)
tostringNo—ISO date (YYYY-MM-DD)
granularitystringNodaily
Example
curl "https://cryptodataapi.com/api/v1/nfts/volume?by=chain&granularity=daily" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/nfts/correlations Get Nft Correlations ▾

Pearson correlation of daily NFT total volume vs daily log-returns of vs= assets. Pro Plus tier. Window is a trailing window ending today. Returns one coefficient per asset plus the number of overlapping days actually used.

Requires Pro Plus API key
Query Parameters
NameTypeRequiredDefaultDescription
vsstringNobtc,eth,solComma-separated asset symbols
window_daysintNo90min: 14, max: 730
Example
curl "https://cryptodataapi.com/api/v1/nfts/correlations?vs=btc,eth,sol&window_days=90" \
  -H "X-API-Key: cdk_live_your_key"

Payments

GET /api/v1/payments/plans Get Plans ▾

Return plan pricing and supported networks. No auth required.

No authentication required
Example
curl "https://cryptodataapi.com/api/v1/payments/plans"
GET /api/v1/pricing Agent Pricing (x402) ▾

Every way an agent can pay over x402, with exact USDC prices: subscriptions (monthly/annual Pro and Pro Plus via POST /api/v1/payments/agent-subscribe), passes (Pro or Pro Plus for 1h/1d/7d, same endpoint with plan=pass_*), per_request (nine listed endpoints that answer a keyless 402 and serve one response per settled payment) and resources (archived Parquet/JSON objects via GET /api/v1/backtesting/archives/purchase), plus the four-step how_to_pay flow. This is the single source every 402 body, the /ai-pricing page and the OpenAPI x-price-usdc extension render from — nothing here is duplicated by hand anywhere else, so it never drifts. No API key required. Cached at the edge for 5 minutes.

No authentication required
Example
curl "https://cryptodataapi.com/api/v1/pricing"
Response
{
  "currency": "USDC",
  "protocol": "x402",
  "pricing_page": "https://cryptodataapi.com/ai-pricing",
  "subscriptions": {
    "monthly": { "price_usd": 29.0, "tier": "pro", "duration_days": 30,
                "endpoint": "POST /api/v1/payments/agent-subscribe", "body": {"plan": "monthly"} },
    "monthly_plus": { "price_usd": 99.0, "tier": "pro_plus", "duration_days": 30, "...": "..." }
    // annual, annual_plus: same shape (current prices on /pricing)
  },
  "passes": {
    "pass_1h": { "price_usd": 1.5, "tier": "pro", "duration_hours": 1,
              "endpoint": "POST /api/v1/payments/agent-subscribe", "body": {"plan": "pass_1h"} }
    // ...pass_1d $5 (24h), pass_7d $10 (168h), pass_1h_plus $4, pass_1d_plus $15, pass_7d_plus $30 (all pro_plus)
  },
  "per_request": {
    "whales": { "method": "GET", "path": "/api/v1/quant/whales", "price_usd": 0.03,
              "description": "Classified Hyperliquid whale positioning: net bias, total net USD, ..." }
    // ...gex $0.025, positioning $0.02, market $0.015, regimes_current $0.01, liquidations $0.01,
    // hl_open_interest $0.008, event_calendar $0.008, etf_flows $0.01
  },
  "resources": {
    "klines": { "price_usd": 0.25, "unit": "one exchange/symbol/day Parquet",
              "params": ["exchange", "symbol", "date"],
              "endpoint": "GET /api/v1/backtesting/archives/purchase?data_type=klines" }
    // ...funding $0.25, liquidations $0.25, hl_liquidations $1.00, hl_trade_flow $1.00, daily $2.00, snapshots $0.25,
    // klines_deep $3.00, funding_deep $3.00
  },
  "how_to_pay": [
    "1. GET the endpoint with no X-API-Key. You receive HTTP 402 with a Payment-Required header and a JSON body whose accepts[] lists the USDC amount, network (Base recommended) and payTo address."
    // ...2. sign with your wallet (EIP-3009, no gas). 3. retry with x-payment. 4. buy a pass/subscription instead if you're polling
  ],
  "notes": [
    "Per-request responses are never cached and carry Cache-Control: private, no-store."
    // ...a Pro Plus key downloads archives free via /archives/download; passes/subscriptions return a key once, per-request payments do not
  ]
}
POST /api/v1/payments/subscribe Subscribe ▾

Subscribe to a pro plan via x402 payment. Flow: 1. If active subscription with >7 days remaining → return it (no charge). 2. If no x-payment header → return 402 with payment options. 3. If x-payment header → verify, settle, upgrade key, create subscription + invoice. plan also accepts the six pass_* values (pass_1h, pass_1d, pass_7d, pass_1h_plus, pass_1d_plus, pass_7d_plus) for a short Pro / Pro Plus pass instead of a monthly subscription — see GET /api/v1/pricing for exact USDC amounts. Always list price: a discount_code is rejected with 400. Discount codes apply only to card or crypto checkout from the logged-in dashboard.

Requires API key (Pro tier)
Request Body (JSON)
NameTypeRequiredDescription
planstringYesmonthly | monthly_plus | annual | annual_plus | pass_1h | pass_1d | pass_7d | pass_1h_plus | pass_1d_plus | pass_7d_plus
Example
curl -X POST "https://cryptodataapi.com/api/v1/payments/subscribe" \
  -H "X-API-Key: cdk_live_your_key" \
  -H "Content-Type: application/json" \
  -d '{"email": "[email protected]"}'
POST /api/v1/payments/validate-code Validate Discount Code ▾

Check a discount code and get what the first payment costs per plan (prices), plus percent_off and duration_months (how many months the discount runs; null = every payment). A bounded code is N months at X% off: a monthly plan takes X% on each of those months, and an annual plan takes those months' share of X% off the first year (e.g. a 50%-off, 3-month code on the $228 Pro year = $199.50). Returns {"valid": false} for any unknown, expired, or exhausted code. Send your X-API-Key to get the answer for your account: duration_months becomes the months you have left, and a code your email or wallet has already used returns {"valid": false, "reason": "already_used"}. Codes are redeemed only at card (/payments/stripe/checkout) or dashboard crypto checkout — never on x402 (subscribe / agent-subscribe), and once per account or wallet.

No API key required (rate-limited per IP); optional X-API-Key for an account-specific answer
Request Body (JSON)
NameTypeRequiredDescription
codestringYesThe discount code (case-insensitive)
Example
curl -X POST "https://cryptodataapi.com/api/v1/payments/validate-code" \
  -H "Content-Type: application/json" \
  -d '{"code": "CDA-XXXXXXXX"}'
GET /api/v1/payments/subscription Get Subscription ▾

Return current subscription status.

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/payments/subscription" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/payments/invoices List Invoices ▾

List all invoices for this API key's email.

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/payments/invoices" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/payments/invoices/{number} Get Invoice ▾

Get a single invoice. JSON by default, ?format=html for printable, ?format=pdf for download.

Requires API key
Path Parameters
NameTypeRequiredDescription
numberstringYes
Query Parameters
NameTypeRequiredDefaultDescription
formatstringNojson
Example
curl "https://cryptodataapi.com/api/v1/payments/invoices/{number}?format=json" \
  -H "X-API-Key: cdk_live_your_key"
POST /api/v1/payments/agent-subscribe Agent Subscribe (x402 Gasless Payment) ▾

Gasless one-shot onboarding for AI agents. Pay with USDC on Base via x402 -- no ETH gas needed. **How it works (2 HTTP calls):** 1. **Call with no payment header** -- receive 402 with payment options (facilitator URL, price, networks). 2. **Sign the USDC payment with your wallet** (off-chain EIP-712 signature, zero gas). 3. **Call again with `x-payment` header** -- facilitator settles on-chain, you get an API key + PRO subscription. **Supported networks:** Base (USDC), Ethereum (USDC), Solana (USDC). Recommended: **Base** for lowest settlement cost. **Plans:** - Pro: monthly (real-time data, derivatives, on-chain analytics) - Pro Plus: monthly (adds quant/regime engine, historical data & Parquet downloads) Current pricing: the 402 response carries the exact USDC amount, or see the pricing page. Always list price: discount codes are not accepted here (400) — they apply only to card or crypto checkout from the logged-in dashboard. **Passes** (pay per time, same endpoint, `plan=pass_*`): - pass_1h: Pro for 1h, $1.50 - pass_1d: Pro for 24h, $5.00 - pass_7d: Pro for 7d, $10.00 - pass_1h_plus: Pro Plus for 1h, $4.00 - pass_1d_plus: Pro Plus for 24h, $15.00 - pass_7d_plus: Pro Plus for 7d, $30.00 **Key resolution on repeat calls:** - Include `X-API-Key` header to renew that key's subscription. - No key header: looks up existing key by your wallet address, or creates a new one. - New API keys are returned **once** -- save it immediately.

No authentication required
Request Body (JSON)
NameTypeRequiredDescription
planstringYes
Example
curl -X POST "https://cryptodataapi.com/api/v1/payments/agent-subscribe" \
  -H "Content-Type: application/json" \
  -d '{"email": "[email protected]"}'
POST /api/v1/payments/stripe/checkout Card Checkout (Stripe) ▾

Start a recurring card subscription via Stripe Checkout. Returns a checkout_url to redirect the member to; on payment the tier is granted automatically by webhook and auto-renews each period. Accepts the same discount codes as dashboard crypto checkout via discount_code: a bounded code repeats for its months on a monthly plan, and takes those months' share of the percentage off an annual plan's first year. A code the account's email or wallet has already used returns 400.

Requires API key (member's own key)
Request Body (JSON)
NameTypeRequiredDescription
planstringYesmonthly | monthly_plus | annual | annual_plus
discount_codestringNoOptional discount code (case-insensitive)
Example
curl -X POST "https://cryptodataapi.com/api/v1/payments/stripe/checkout" \
  -H "X-API-Key: cdk_live_your_key" \
  -H "Content-Type: application/json" \
  -d '{"plan": "monthly"}'
POST /api/v1/payments/stripe/portal Billing Portal (Stripe) ▾

Open the Stripe Billing Portal for the member's card subscription (cancel, update payment method, view invoices). Returns a portal_url to redirect to. 400 if the account has no card subscription.

Requires API key (member's own key)
Example
curl -X POST "https://cryptodataapi.com/api/v1/payments/stripe/portal" \
  -H "X-API-Key: cdk_live_your_key"

Webhooks

GET /api/v1/webhooks List Webhooks ▾

List all registered webhook endpoints.

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/webhooks" \
  -H "X-API-Key: cdk_live_your_key"
POST /api/v1/webhooks Create Webhook ▾

Register a new webhook endpoint with optional address and event filters. Each key may own up to 2 endpoints on the free tier and 10 on Pro / Pro Plus; past that the call returns 403 webhook_limit_reached (delete one first). The URL must resolve to a public address, and redirects are not followed.

Requires API key
Request Body (JSON)
NameTypeRequiredDescription
urlstringYeshttp(s) URL, max 2083 chars
secretstringYesHMAC-SHA256 signing secret, 1-255 chars
labelstringYes1-100 chars
enabledbooleanNo
addressesarrayNoUp to 200 wallet addresses, each max 128 chars
eventsarrayNoUp to 10 of ENTRY, EXIT, INCREASE, DECREASE
Example
curl -X POST "https://cryptodataapi.com/api/v1/webhooks" \
  -H "X-API-Key: cdk_live_your_key" \
  -H "Content-Type: application/json" \
  -d '{"email": "[email protected]"}'
PATCH /api/v1/webhooks/{label} Update Webhook ▾

Update a webhook endpoint by label.

Requires API key
Request Body (JSON)
NameTypeRequiredDescription
urlstringNo
secretstringNo
enabledbooleanNo
addressesarrayNo
eventsarrayNo
clear_addressesbooleanNo
clear_eventsbooleanNo
Path Parameters
NameTypeRequiredDescription
labelstringYes
Example
curl -X PATCH "https://cryptodataapi.com/api/v1/webhooks/{label}" \
  -H "X-API-Key: cdk_live_your_key" \
  -H "Content-Type: application/json" \
  -d '{"email": "[email protected]"}'
DELETE /api/v1/webhooks/{label} Delete Webhook ▾

Delete a webhook endpoint by label.

Requires API key
Path Parameters
NameTypeRequiredDescription
labelstringYes
Example
curl -X DELETE "https://cryptodataapi.com/api/v1/webhooks/{label}" \
  -H "X-API-Key: cdk_live_your_key"

Wallet Auth

POST /api/v1/wallet/challenge Create Challenge ▾

Issue an EIP-4361 (Sign-In with Ethereum) challenge for a wallet address. The response message is bound to cryptodataapi.com, a chain id, a single-use nonce and a 5-minute expires_at; sign it verbatim with personal_sign and send the signature to /wallet/verify.

No authentication required
Request Body (JSON)
NameTypeRequiredDescription
wallet_addressstringYes
chain_idintegerNo1 (Ethereum, default) or 8453 (Base); shown in the signed message only
Example
curl -X POST "https://cryptodataapi.com/api/v1/wallet/challenge" \
  -H "Content-Type: application/json" \
  -d '{"email": "[email protected]"}'
POST /api/v1/wallet/verify Verify Signature ▾

Verify the EIP-191 signature of the exact challenge message and return/create an API key. The signature is checked against the server's stored copy of the challenge; an expired, reused or altered message is rejected.

No authentication required
Request Body (JSON)
NameTypeRequiredDescription
wallet_addressstringYes
signaturestringYes
noncestringYes
messagestringNoOptional echo of the signed challenge; must match it exactly
Example
curl -X POST "https://cryptodataapi.com/api/v1/wallet/verify" \
  -H "Content-Type: application/json" \
  -d '{"email": "[email protected]"}'
GET /api/v1/wallet/session Get Session ▾

Get wallet session info for the current API key.

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/wallet/session" \
  -H "X-API-Key: cdk_live_your_key"

Wallet Payments

POST /api/v1/wallet/upgrade Upgrade Plan ▾

Verify a USDC transfer on-chain and upgrade the API key to pro.

Requires API key (Pro tier)
Request Body (JSON)
NameTypeRequiredDescription
tx_hashstringYes
networkstringYes
planstringYes
intent_idstringNo
Example
curl -X POST "https://cryptodataapi.com/api/v1/wallet/upgrade" \
  -H "X-API-Key: cdk_live_your_key" \
  -H "Content-Type: application/json" \
  -d '{"email": "[email protected]"}'
GET /api/v1/wallet/invoices List Invoices ▾

List all invoices for the current wallet.

Requires API key
Example
curl "https://cryptodataapi.com/api/v1/wallet/invoices" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/wallet/invoices/{number} Download Invoice ▾

Download a single invoice as PDF.

Requires API key
Path Parameters
NameTypeRequiredDescription
numberstringYes
Example
curl "https://cryptodataapi.com/api/v1/wallet/invoices/{number}" \
  -H "X-API-Key: cdk_live_your_key"
GET /api/v1/wallet/config Wallet Config ▾

Return public wallet config (treasury addresses, supported networks).

No authentication required
Example
curl "https://cryptodataapi.com/api/v1/wallet/config"
POST /api/v1/wallet/create-solana-tx Create Solana Tx ▾

Build a Solana SPL USDC transfer transaction and return base64 bytes. Creates a payment intent binding the sender to the caller's API key. The intent carries a unique amount / amount_raw (price plus a sub-cent tag) that must be sent EXACTLY — any other amount cannot be matched. One open intent per sender across accounts, at most 3 per key, 30-minute expiry (expires_in). The frontend passes these bytes to Phantom which deserializes, simulates, and signs using its own @solana/web3.js — avoiding cross-module issues.

Requires API key
Request Body (JSON)
NameTypeRequiredDescription
senderstringYes
planstringYes
Example
curl -X POST "https://cryptodataapi.com/api/v1/wallet/create-solana-tx" \
  -H "X-API-Key: cdk_live_your_key" \
  -H "Content-Type: application/json" \
  -d '{"email": "[email protected]"}'
GET /api/v1/wallet/solana-blockhash Solana Blockhash ▾

Proxy: get latest Solana blockhash (avoids CORS issues with public RPCs).

No authentication required
Example
curl "https://cryptodataapi.com/api/v1/wallet/solana-blockhash"
GET /api/v1/wallet/solana-confirm/{signature} Solana Confirm ▾

Proxy: check Solana transaction confirmation status.

No authentication required
Path Parameters
NameTypeRequiredDescription
signaturestringYes
Example
curl "https://cryptodataapi.com/api/v1/wallet/solana-confirm/{signature}"

Other

GET /dashboard Dashboard Page ▾

User dashboard — API key management, usage stats, invoices.

No authentication required
Example
curl "https://cryptodataapi.com/dashboard"
GET /pricing Pricing Page ▾

Pricing plans page.

No authentication required
Example
curl "https://cryptodataapi.com/pricing"