API Reference
Complete reference for the Crypto Data API. All endpoints require an API key unless noted otherwise. Base URL: https://cryptodataapi.com
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:
GET /api/v1— the endpoint index: what exists and what your key unlocks.POST /api/v1/auth/keyswith{"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.GET /api/v1/daily— the whole market in one cached call; it replaces ~10 requests. Append?format=markdownfor LLM-friendly output.GET /api/v1/quant/marketorGET /api/v1/quant/gex— the Pro decision layer. A403here is the expected free-tier answer and carries its own way forward: the verify-email offer, /pricing, andPOST /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:
| Tier | Daily Limit | Burst (per min) |
|---|---|---|
| Free | 1,000 requests 100 until email confirmed | 10 |
| Pro | 10,000 requests | 30 |
| Pro Plus | 50,000 requests | 120 |
Backtesting bulkhead limits (the heavy /api/v1/backtesting/* readers run in an isolated container, also echoed by GET /backtesting/status → limits):
| Limit | Value | What you see |
|---|---|---|
| Edge rate, per API key | 2 requests/s sustained, bursts of 20 | 429 + Retry-After |
| Concurrent heavy reads | 2 at a time, 25 s queue | 503 backtesting_busy + Retry-After: 5 |
| Rows per page | 10,000 (limit) | page with cursor |
| Response deadline | 60 s at the public edge | dropped 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 answers200for a Pro Plus key, and a few optional ones do too, where the bare call would400or be far heavier than a probe needs. Date examples are relative (two days ago). x-timeout-secondson 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) andx-account-scoped(the resource belongs to one caller, such as an invoice). - A
503withRetry-Aftermeans 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.
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.
| Name | Type | Required | Description |
|---|---|---|---|
| string | Yes | Use a real address — the confirmation link is what raises this key to 1,000/day. |
curl -X POST "https://cryptodataapi.com/api/v1/auth/keys" \ -H "Content-Type: application/json" \ -d '{"email": "[email protected]"}'
{
"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.
Revoke the current API key. 7-day cooldown before new key creation.
curl -X DELETE "https://cryptodataapi.com/api/v1/auth/keys" \ -H "X-API-Key: cdk_live_your_key"
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).
curl "https://cryptodataapi.com/api/v1/auth/keys/me" \ -H "X-API-Key: cdk_live_your_key"
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.
curl -X POST "https://cryptodataapi.com/api/v1/auth/resend-verify" -H "X-API-Key: cdk_live_your_key"
Rotate the current API key. Invalidates the old key.
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.
List all coins, paginated by market cap rank.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| page | int | No | 1 | min: 1 |
| per_page | int | No | 50 | min: 1, max: 250 |
curl "https://cryptodataapi.com/api/v1/coins?page=1&per_page=50" \ -H "X-API-Key: cdk_live_your_key"
Search coins by name or symbol.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| q | string | Yes | — |
curl "https://cryptodataapi.com/api/v1/coins/search" \ -H "X-API-Key: cdk_live_your_key"
Get top N coins by market cap.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| limit | int | No | 20 | min: 1, max: 100 |
curl "https://cryptodataapi.com/api/v1/coins/top?limit=20" \ -H "X-API-Key: cdk_live_your_key"
Get all unique coin categories.
curl "https://cryptodataapi.com/api/v1/coins/categories" \ -H "X-API-Key: cdk_live_your_key"
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).
curl "https://cryptodataapi.com/api/v1/coins/category-groups?limit=25" \ -H "X-API-Key: cdk_live_your_key"
Get a single coin profile by symbol (e.g., BTC, ETH).
| Name | Type | Required | Description |
|---|---|---|---|
| symbol | string | Yes |
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.
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.
curl "https://cryptodataapi.com/api/v1/market-health" \ -H "X-API-Key: cdk_live_your_key"
Scores + sentiment only (lightweight).
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| format | string | No | — | Response format: 'markdown' for LLM-friendly plain text |
curl "https://cryptodataapi.com/api/v1/market-health/summary" \ -H "X-API-Key: cdk_live_your_key"
All 11 component details.
curl "https://cryptodataapi.com/api/v1/market-health/components" \ -H "X-API-Key: cdk_live_your_key"
Get a single component by name.
| Name | Type | Required | Description |
|---|---|---|---|
| name | string | Yes |
curl "https://cryptodataapi.com/api/v1/market-health/component/price_trend" \ -H "X-API-Key: cdk_live_your_key"
Health score history from database.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| days | int | No | 365 | min: 1, max: 730 |
curl "https://cryptodataapi.com/api/v1/market-health/history?days=365" \ -H "X-API-Key: cdk_live_your_key"
Altcoin breadth - % of coins above their MA with per-coin detail.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| ma_period | int | No | 200 | min: 5, max: 365 |
curl "https://cryptodataapi.com/api/v1/market-health/altcoin-breadth?ma_period=200" \ -H "X-API-Key: cdk_live_your_key"
Force recalculate health score (Pro and Pro Plus tiers).
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.
Fear & Greed index (multi-source averaged).
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| format | string | No | — | Response format: 'markdown' for LLM-friendly plain text |
curl "https://cryptodataapi.com/api/v1/sentiment/fear-greed" \ -H "X-API-Key: cdk_live_your_key"
Macro indicators: EUR/USD, gold, treasury yields.
curl "https://cryptodataapi.com/api/v1/sentiment/macro" \ -H "X-API-Key: cdk_live_your_key"
Stablecoin market cap + 14d/90d flows.
curl "https://cryptodataapi.com/api/v1/sentiment/stablecoins" \ -H "X-API-Key: cdk_live_your_key"
Daily stablecoin mcap + inflows, derived from our own DefiLlama history.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| days | int | No | 90 | min: 1, max: 365 |
curl "https://cryptodataapi.com/api/v1/sentiment/stablecoins/remote-history?days=90" \ -H "X-API-Key: cdk_live_your_key"
Raw stablecoin market cap history timeseries.
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.
Binance perpetual funding rate history.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| symbol | string | No | BTCUSDT | |
| limit | int | No | 30 | min: 1, max: 100 |
curl "https://cryptodataapi.com/api/v1/derivatives/binance/funding-rates?symbol=BTCUSDT&limit=30" \ -H "X-API-Key: cdk_live_your_key"
Binance open interest + 30-day trend.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| symbol | string | No | BTCUSDT |
curl "https://cryptodataapi.com/api/v1/derivatives/binance/open-interest?symbol=BTCUSDT" \ -H "X-API-Key: cdk_live_your_key"
Binance long/short account ratio.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| symbol | string | No | BTCUSDT |
curl "https://cryptodataapi.com/api/v1/derivatives/binance/long-short-ratio?symbol=BTCUSDT" \ -H "X-API-Key: cdk_live_your_key"
All-in-one Binance derivatives summary.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| symbol | string | No | BTCUSDT |
curl "https://cryptodataapi.com/api/v1/derivatives/binance/summary?symbol=BTCUSDT" \ -H "X-API-Key: cdk_live_your_key"
Daily derivatives data (funding, OI, L/S) from our own funding + OI archives.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| days | int | No | 30 | min: 1, max: 90 |
curl "https://cryptodataapi.com/api/v1/derivatives/binance/history?days=30" \ -H "X-API-Key: cdk_live_your_key"
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| symbol | string | No | BTC | Hyperliquid coin, e.g. BTC |
| days | int | No | 30 | min: 1, max: 180 |
curl "https://cryptodataapi.com/api/v1/derivatives/hyperliquid/history?symbol=BTC&days=90" \ -H "X-API-Key: cdk_live_your_key"
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| coin | string | No | BTC |
curl "https://cryptodataapi.com/api/v1/derivatives/funding-rates?coin=BTC" \ -H "X-API-Key: cdk_live_your_key"
Open interest across Binance + Hyperliquid.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| coin | string | No | BTC |
curl "https://cryptodataapi.com/api/v1/derivatives/open-interest?coin=BTC" \ -H "X-API-Key: cdk_live_your_key"
Combined cross-exchange derivatives overview.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| coin | string | No | BTC | |
| format | string | No | — | Response format: 'markdown' for LLM-friendly plain text |
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.
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.
curl "https://cryptodataapi.com/api/v1/hyperliquid/meta" \ -H "X-API-Key: cdk_live_your_key"
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.
curl "https://cryptodataapi.com/api/v1/hyperliquid/prices" \ -H "X-API-Key: cdk_live_your_key"
Current + historical funding rates for a coin.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| coin | string | No | BTC | |
| limit | int | No | 20 | min: 1, max: 100 |
curl "https://cryptodataapi.com/api/v1/hyperliquid/funding-rates?coin=BTC&limit=20" \ -H "X-API-Key: cdk_live_your_key"
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.
curl "https://cryptodataapi.com/api/v1/hyperliquid/open-interest" \ -H "X-API-Key: cdk_live_your_key"
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| coin | string | No | BTC | HL's own coin name (BTC, SOL, kPEPE), case-insensitive |
| symbol | string | No | — | Alias for coin — send one or the other |
| interval | string | No | 1h | 1m, 5m, 15m, 30m, 1h, 4h, 1d, 1w |
| atr | int | No | — | Wilder ATR period (2–200), e.g. 14; adds atr to every bar |
| limit | int | No | 200 | min: 1, max: 1000 (ignored when start/end is given) |
| start | string | No | — | Range start (epoch ms / s or ISO-8601); switches to range mode, capped at 15,000 bars |
| end | string | No | now | Range end (epoch ms / s or ISO-8601) |
curl "https://cryptodataapi.com/api/v1/hyperliquid/candles?coin=BTC&interval=1h&limit=200" \ -H "X-API-Key: cdk_live_your_key"
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).
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| coins | string | Yes | — | Comma list of HL coin names, e.g. ETH,SOL,BNB (up to 25). symbols is an alias |
| interval | string | No | 1h | 1m, 5m, 15m, 30m, 1h, 4h, 1d, 1w |
| limit | int | No | 200 | min: 1, max: 1000 |
| atr | int | No | — | Wilder ATR period (2–200); adds atr to every bar |
| closed_only | bool | No | false | true = the last limit completed bars only (no forming bar) |
| wait | float | No | 8 | Seconds to hold for cold series before answering with pending (0–25) |
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"
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| coin | string | No | BTC |
curl "https://cryptodataapi.com/api/v1/hyperliquid/l2-book?coin=BTC" \ -H "X-API-Key: cdk_live_your_key"
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).
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| coin | string | No | BTC | HL coin name (BTC, ETH, kPEPE — HL's own names) |
| minutes | int | No | 60 | Trailing window in whole minutes (min: 1, max: 1440) |
curl "https://cryptodataapi.com/api/v1/hyperliquid/trade-flow?coin=BTC&minutes=60" \ -H "X-API-Key: cdk_live_your_key"
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| window | string | No | 1h | 15m | 1h | 4h |
curl "https://cryptodataapi.com/api/v1/hyperliquid/trade-flow/universe?window=1h" \ -H "X-API-Key: cdk_live_your_key"
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| coin | string | No | BTC |
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).
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,longorshort) andusd. Hyperliquid events also carrypxandsz.whale_transfer:exchange,chain,direction(inflow= a deposit to the exchange,outflow= a withdrawal),amount(token units) andusd.whale_position: a Hyperliquid top trader's position change.action(entry,exit,increaseordecrease),side,size,usd(notional of the change at the entry price),addressandchange_pct.funding:rate_1h,prev_rate_1handsettle(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%)) andoi_usd.price_move:pct,price,prev_priceandwindow_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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| types | string | No | all | Comma-separated: liquidation, whale_transfer, whale_position, funding, oi_delta, price_move. An unknown type returns 400. |
| symbols | string | No | all | Comma-separated base coins, e.g. BTC,ETH,SOL |
| min_usd | float | No | 0 | Drop events smaller than this USD size. Funding and price moves always pass. |
| since_id | int | No | — | Replay buffered events after this id first. If the Last-Event-ID header is also sent, the header wins. |
curl -N "https://cryptodataapi.com/api/v1/stream?types=liquidation,whale_transfer&min_usd=100000" \ -H "X-API-Key: cdk_live_your_key"
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| limit | int | No | 100 | Newest N events (min: 1, max: 500) |
| types | string | No | all | Comma-separated event types |
| symbols | string | No | all | Comma-separated base coins |
| min_usd | float | No | 0 | Drop events smaller than this USD size |
curl "https://cryptodataapi.com/api/v1/stream/recent?limit=50&types=liquidation" \ -H "X-API-Key: cdk_live_your_key"
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.
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.
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).
curl "https://cryptodataapi.com/api/v1/liquidity/depth" \ -H "X-API-Key: cdk_live_your_key"
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.
curl "https://cryptodataapi.com/api/v1/liquidity/oi-divergence" \ -H "X-API-Key: cdk_live_your_key"
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.
curl "https://cryptodataapi.com/api/v1/liquidity/regime" \ -H "X-API-Key: cdk_live_your_key"
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.
curl "https://cryptodataapi.com/api/v1/liquidity/regime/score" \ -H "X-API-Key: cdk_live_your_key"
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| minutes | int | No | 60 | min: 1, max: 1440 |
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.
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.
curl "https://cryptodataapi.com/api/v1/volatility/index" \ -H "X-API-Key: cdk_live_your_key"
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).
curl "https://cryptodataapi.com/api/v1/volatility/implied" \ -H "X-API-Key: cdk_live_your_key"
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| days | int | No | 90 | min: 1, max: 365 |
curl "https://cryptodataapi.com/api/v1/volatility/index/history?days=90" \ -H "X-API-Key: cdk_live_your_key"
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| band | string | No | — | dormant / quiet / normal / elevated / surging / extreme / unknown |
| min_multiplier | float | No | — | Only perps at or above this multiple of their 30d average |
| sort | string | No | multiplier | multiplier / volume_24h / symbol / change_24h |
| limit | int | No | 250 | min: 1, max: 500 |
curl "https://cryptodataapi.com/api/v1/volume/scanner?min_multiplier=3" \ -H "X-API-Key: cdk_live_your_key"
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.
curl "https://cryptodataapi.com/api/v1/volume/scanner/BTC" \ -H "X-API-Key: cdk_live_your_key"
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| source | string | No | — | binance_spot | hyperliquid_perp |
| regime | string | No | — | vol_shock | expanding | compressed | mean_reverting | normal |
| sort | string | No | vol_pctile_30 | symbol | rv_gk_30 | rv_gk_7 | vol_pctile_30 | term_structure_ratio | vol_target_multiplier | days_compressed |
| order | string | No | desc | asc | desc |
| limit | int | No | 250 | min: 1, max: 500 |
curl "https://cryptodataapi.com/api/v1/volatility/regime?regime=compressed&sort=days_compressed&order=desc" \ -H "X-API-Key: cdk_live_your_key"
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.
curl "https://cryptodataapi.com/api/v1/volatility/regime/score" \ -H "X-API-Key: cdk_live_your_key"
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.
| Name | Type | Required | Description |
|---|---|---|---|
| symbol | string | Yes | Bare ticker (e.g. BTC, ETH); USDT suffix stripped automatically |
curl "https://cryptodataapi.com/api/v1/volatility/regime/BTC" \ -H "X-API-Key: cdk_live_your_key"
Force recompute the Volatility regime cache across the full universe. Pro / Pro Plus only.
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.
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| start | string | Yes | — | ISO 8601 or unix ms |
| end | string | No | now | ISO 8601 or unix ms. EXCLUSIVE |
| symbol | string | No | — | HL perp symbol, or MARKET |
| min_impact | float | No | 0.0 | Minimum impact_score |
| limit | int | No | 500 | min: 1, max: 5000 |
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"
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| hours | float | No | 24 | Lookback window. min: 1, max: 168 |
curl "https://cryptodataapi.com/api/v1/news/pulse?hours=24" \ -H "X-API-Key: cdk_live_your_key"
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| symbol | string | No | — | Filter to one Hyperliquid perp, or MARKET |
| hours | float | No | 24 | Lookback window. min: 1, max: 336 |
| min_impact | float | No | 0.45 | Minimum impact_score. Cannot go below the pipeline threshold |
| limit | int | No | 50 | min: 1, max: 500 |
curl "https://cryptodataapi.com/api/v1/news/market-moving?min_impact=0.6" \ -H "X-API-Key: cdk_live_your_key"
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| hours | float | No | 72 | Lookback window. min: 1, max: 336 |
curl "https://cryptodataapi.com/api/v1/news/coin/SOL" \ -H "X-API-Key: cdk_live_your_key"
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.
curl "https://cryptodataapi.com/api/v1/news/sources" \ -H "X-API-Key: cdk_live_your_key"
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| horizon | string | No | 24h | 4h | 24h |
curl "https://cryptodataapi.com/api/v1/quant/market?horizon=24h" \ -H "X-API-Key: cdk_live_your_key"
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| horizon | string | No | 24h | 4h | 24h |
| regime | string | No | — | Filter by label, e.g. squeeze |
| sort | string | No | oi | oi | confidence | symbol | p_up |
| order | string | No | desc | asc | desc |
| limit | int | No | 250 | min: 1, max: 300 |
curl "https://cryptodataapi.com/api/v1/quant/coins?regime=squeeze&sort=oi" \ -H "X-API-Key: cdk_live_your_key"
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| horizon | string | No | 24h | 4h | 24h |
curl "https://cryptodataapi.com/api/v1/quant/coins/risk?horizon=24h" \ -H "X-API-Key: cdk_live_your_key"
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.
| Name | Type | Required | Description |
|---|---|---|---|
| symbol | string | Yes | HL coin name (e.g. BTC, SOL, kPEPE) |
curl "https://cryptodataapi.com/api/v1/quant/coins/SOL" \ -H "X-API-Key: cdk_live_your_key"
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| scope | string | No | market | 'market' or a coin symbol |
| start | string | Yes | — | ISO 8601 or unix ms |
| end | string | No | now | ISO 8601 or unix ms |
| horizon | string | No | — | 4h | 24h |
| limit | int | No | 500 | min: 1, max: 2000 |
| format | string | No | json | json | csv |
curl "https://cryptodataapi.com/api/v1/quant/history?scope=BTC&start=2026-06-01&format=csv" \ -H "X-API-Key: cdk_live_your_key"
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.
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", ...} }
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| start | string | No | — | ISO date filter, e.g. 2022-01-01 |
curl "https://cryptodataapi.com/api/v1/quant/timeline?start=2022-01-01" \ -H "X-API-Key: cdk_live_your_key"
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).
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| symbol | string | No | — | One coin or a comma list (e.g. BTC,ETH,SOL; case-insensitive, blanks ignored) |
curl "https://cryptodataapi.com/api/v1/quant/positioning?symbol=BTC,ETH,SOL" \ -H "X-API-Key: cdk_live_your_key"
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| symbol | string | Yes | — | One coin, e.g. BTC (upper-cased; exact raw HL name such as kPEPE tried second) |
curl "https://cryptodataapi.com/api/v1/quant/positioning/ladder?symbol=BTC" \ -H "X-API-Key: cdk_live_your_key"
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| symbol | string | No | — | One coin or a comma list (e.g. BTC,ETH,SOL; case-insensitive). Free keys: BTC only |
curl "https://cryptodataapi.com/api/v1/quant/gex?symbol=BTC,ETH" \ -H "X-API-Key: cdk_live_your_key"
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).
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| symbol | string | Yes | — | One coin, e.g. BTC |
| from | string | No | — | ISO 8601 or unix ms, inclusive |
| to | string | No | — | ISO 8601 or unix ms, inclusive (422 if from > to) |
| grain | string | No | 1h | Only 1h is served (anything else → 422) |
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"
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).
curl "https://cryptodataapi.com/api/v1/quant/whales" \ -H "X-API-Key: cdk_live_your_key"
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| days | integer | No | 180 | Trailing window length in days (7–540) |
| live_only | bool | No | false | Return observed (source=live) points only |
curl "https://cryptodataapi.com/api/v1/quant/whales/history?days=180&live_only=true" \ -H "X-API-Key: cdk_live_your_key"
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).
curl "https://cryptodataapi.com/api/v1/quant/model" \ -H "X-API-Key: cdk_live_your_key"
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.
curl "https://cryptodataapi.com/api/v1/quant/regimes" \ -H "X-API-Key: cdk_live_your_key"
Force an immediate inference cycle instead of waiting for the next 15-minute tick. Pro Plus only.
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.
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.
curl "https://cryptodataapi.com/api/v1/regimes" \ -H "X-API-Key: cdk_live_your_key"
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.
curl "https://cryptodataapi.com/api/v1/regimes/current" \ -H "X-API-Key: cdk_live_your_key"
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| from | string | No | 30 days ago | Window start, inclusive. ISO-8601 or unix ms. |
| to | string | No | now | Window end, exclusive. ISO-8601 or unix ms. Window capped at 400 days. |
| limit | integer | No | 5000 | Max archive samples scanned (~57/day), not transitions returned. Max 25000. |
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.
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.
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.
Every strategy group: slug, name, description, strategy_count, plus group_count, strategy_count and source.
curl "https://cryptodataapi.com/api/v1/strategies/groups" \ -H "X-API-Key: cdk_live_your_key"
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| group | string | No | — | 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 |
curl "https://cryptodataapi.com/api/v1/strategies?group=funding-carry-basis" \ -H "X-API-Key: cdk_live_your_key"
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| slug | string (path) | Yes | — | A slug from /api/v1/strategies, e.g. basis-trading |
curl "https://cryptodataapi.com/api/v1/strategies/basis-trading" \ -H "X-API-Key: cdk_live_your_key"
Every indicator group: slug, name, description, indicator_count and endpoints (the CDA paths that serve the group’s indicators or their raw inputs).
curl "https://cryptodataapi.com/api/v1/indicators/catalog/groups" \ -H "X-API-Key: cdk_live_your_key"
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| group | string | No | — | 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 |
curl "https://cryptodataapi.com/api/v1/indicators/catalog?group=volatility" \ -H "X-API-Key: cdk_live_your_key"
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| slug | string (path) | Yes | — | A slug from /api/v1/indicators/catalog, e.g. atr |
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.
BM25 full-text search over the AlgoBrain wiki (added 2026-09-19). Title, alias and tag matches are weighted above body text, and pages matching every query term rank before any-term matches. Each result carries path, title, type, status, category, tags, updated, a snippet around the match, a relevance score (higher is better; null when q is empty and only filters apply), read (the /algobrain/page URL for the full markdown) and url (GitHub).
Strategy filters (added 2026-09-27): backtest_status, horizon, strategy_type, complexity, crowding_risk, market — each an any-of match. Strategy results carry a strategy object with the page's frontmatter: those labels plus edge_source, expected_sharpe, expected_max_drawdown, breakeven_cost_bps and expected_sharpe_source: "author_estimate". Those numbers are the wiki authors' expectations, not results we measured, so search never ranks by them — filter on backtest_status (cost-corrected, walk-forward-validated, live) to find the pages with the most evidence behind them. horizon is a holding style, not a bar interval: the wiki has no per-coin or 1h/4h field. strategy is null on non-strategy pages.
With no q and no filter, the call lists the newest pages instead of searching (score null), which is the way to discover valid paths. 503 algobrain_index_unavailable if the index is not loaded on the server; 503 algobrain_index_outdated for a strategy filter on an index built before the filters existed.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| q | string | No | — | Free-text query, e.g. atr trailing stop trend following (max 200 chars) |
| type | string | No | — | Page type: strategy, concept, entity, market, … |
| tag | string | No | — | Exact tag, e.g. mean-reversion |
| category | string | No | — | Top-level wiki folder: strategies, strategy-development, concepts, markets, … |
| backtest_status | string | No | — | untested, naive-backtested, cost-corrected, walk-forward-validated, paper-traded, pilot, live, paused, retired |
| horizon | string | No | — | scalp, intraday, swing, position, long-term (holding style, not a bar interval) |
| strategy_type | string | No | — | quantitative, hybrid, algorithmic, technical, fundamental, … |
| complexity | string | No | — | beginner, intermediate, advanced |
| crowding_risk | string | No | — | low, medium, high |
| market | string | No | — | Market the strategy targets, e.g. crypto, options |
| limit | int | No | 10 | min: 1, max: 50 |
curl "https://cryptodataapi.com/api/v1/algobrain/search?q=atr+trailing+stop&type=strategy&limit=5" \ -H "X-API-Key: cdk_live_your_key"
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| path | string | Yes | — | A result's path, e.g. wiki/strategies/atr-trailing-stop.md |
curl "https://cryptodataapi.com/api/v1/algobrain/page?path=wiki/strategies/atr-trailing-stop.md" \ -H "X-API-Key: cdk_live_your_key"
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.
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.
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| source | string | No | — | binance_spot | hyperliquid_perp |
| regime | string | No | — | euphoric | distribution | ignition | bleeding | dormant |
| sort | string | No | ret_7d | symbol | ret_7d | ret_30d | vol_spike | vol_pctile_30 | sma20_extension_pct | funding_rate | oi_usd |
| order | string | No | desc | asc | desc |
| limit | int | No | 250 | min: 1, max: 500 |
curl "https://cryptodataapi.com/api/v1/meme/regime?regime=ignition&sort=vol_spike&order=desc" \ -H "X-API-Key: cdk_live_your_key"
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.
curl "https://cryptodataapi.com/api/v1/meme/regime/score" \ -H "X-API-Key: cdk_live_your_key"
Per-asset Meme regime detail with 60d daily history (close, 30d Garman-Klass vol) for sparkline rendering. Pro / Pro Plus only.
| Name | Type | Required | Description |
|---|---|---|---|
| symbol | string | Yes | Bare ticker (e.g. WIF, PEPE); USDT suffix stripped automatically |
curl "https://cryptodataapi.com/api/v1/meme/regime/WIF" \ -H "X-API-Key: cdk_live_your_key"
Force recompute the Meme regime cache across the full meme universe. Pro / Pro Plus only.
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.
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| min_market_cap | float | No | 500000000 | Market-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_usd | float | No | 0 | Only rows with at least this much locked value |
| max_float_pct | float | No | 1.0 | Only rows at or below this float (0-1) |
| symbol | string | No | — | Filter to one ticker |
| limit | int | No | 250 | Max rows. min: 1, max: 2000 |
curl "https://cryptodataapi.com/api/v1/supply/float?max_float_pct=0.4" \ -H "X-API-Key: cdk_live_your_key"
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| window_days | int | No | 30 | Forward horizon. min: 1, max: 35 |
| symbol | string | No | — | Filter to one ticker |
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.
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| window_days | int | No | 7 | Forward horizon, min: 1, max: 30 |
curl "https://cryptodataapi.com/api/v1/event/regime?window_days=7" \ -H "X-API-Key: cdk_live_your_key"
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.
curl "https://cryptodataapi.com/api/v1/event/regime/score" \ -H "X-API-Key: cdk_live_your_key"
The queryable forward calendar (up to 30d out). Narrow by catalyst type, affected symbol, bias, min_magnitude, and window_days.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| type | string | No | — | unlock | macro_print | depeg | mint |
| window_days | int | No | 30 | min: 1, max: 30 |
| symbol | string | No | — | Filter to catalysts affecting this ticker |
| bias | string | No | — | long | short | neutral | risk_flag |
| min_magnitude | float | No | 0.0 | min: 0.0, max: 1.0 |
curl "https://cryptodataapi.com/api/v1/event/calendar?type=unlock&window_days=30" \ -H "X-API-Key: cdk_live_your_key"
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).
| Name | Type | Required | Description |
|---|---|---|---|
| symbol | string | Yes | Bare ticker (e.g. ARB, OP); USDT suffix stripped automatically |
curl "https://cryptodataapi.com/api/v1/event/regime/ARB" \ -H "X-API-Key: cdk_live_your_key"
Force recompute the Event / Catalyst regime cache. Pro / Pro Plus only.
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.
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| window_days | int | No | 10 | Lookback, min: 1, max: 10 |
curl "https://cryptodataapi.com/api/v1/security/regime?window_days=10" \ -H "X-API-Key: cdk_live_your_key"
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.
curl "https://cryptodataapi.com/api/v1/security/regime/score" \ -H "X-API-Key: cdk_live_your_key"
The queryable recent security-events list (up to 10d back). Narrow by event type, affected symbol, and min_severity.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| type | string | No | — | hack | depeg |
| window_days | int | No | 10 | min: 1, max: 10 |
| symbol | string | No | — | Filter to events affecting this ticker |
| min_severity | float | No | 0.0 | min: 0.0, max: 1.0 |
curl "https://cryptodataapi.com/api/v1/security/events?type=hack" \ -H "X-API-Key: cdk_live_your_key"
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).
| Name | Type | Required | Description |
|---|---|---|---|
| symbol | string | Yes | Bare ticker (e.g. ETH, SOL); USDT suffix stripped automatically |
curl "https://cryptodataapi.com/api/v1/security/regime/ETH" \ -H "X-API-Key: cdk_live_your_key"
Force recompute the Security / Black Swan regime cache. Pro / Pro Plus only.
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.
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| window_days | int | No | 45 | Forward horizon for rate catalysts, min: 1, max: 45 |
curl "https://cryptodataapi.com/api/v1/policy/regime" \ -H "X-API-Key: cdk_live_your_key"
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.
curl "https://cryptodataapi.com/api/v1/policy/regime/score" \ -H "X-API-Key: cdk_live_your_key"
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.
curl "https://cryptodataapi.com/api/v1/policy/headlines" \ -H "X-API-Key: cdk_live_your_key"
Force recompute the Geopolitical / Policy Shock regime cache. Pro / Pro Plus only.
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.
OHLCV klines from Binance Spot.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| symbol | string | No | BTCUSDT | |
| interval | string | No | 1d | |
| limit | int | No | 200 | min: 1, max: 1000 |
curl "https://cryptodataapi.com/api/v1/market-data/klines?symbol=BTCUSDT&interval=1d&limit=200" \ -H "X-API-Key: cdk_live_your_key"
24hr ticker stats from Binance Spot.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| symbol | string | No | BTCUSDT |
curl "https://cryptodataapi.com/api/v1/market-data/ticker/24hr?symbol=BTCUSDT" \ -H "X-API-Key: cdk_live_your_key"
Current price from Binance Spot.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| symbol | string | No | BTCUSDT |
curl "https://cryptodataapi.com/api/v1/market-data/ticker/price?symbol=BTCUSDT" \ -H "X-API-Key: cdk_live_your_key"
BTC price history with 200D MA.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| days | int | No | 365 | min: 1, max: 730 |
curl "https://cryptodataapi.com/api/v1/market-data/btc-price-history?days=365" \ -H "X-API-Key: cdk_live_your_key"
Daily volume + buy ratio, derived from our own kline + taker archives.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| days | int | No | 30 | min: 1, max: 90 |
curl "https://cryptodataapi.com/api/v1/market-data/volume-history?days=30" \ -H "X-API-Key: cdk_live_your_key"
Short-term BTC price momentum metrics (on-demand computation).
curl "https://cryptodataapi.com/api/v1/market-data/short-term-price" \ -H "X-API-Key: cdk_live_your_key"
Exchange pair info from Binance Spot.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| symbol | string | No | BTCUSDT |
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.
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| referral_only | boolean | No | false | Return only venues we hold a partner sign-up link for |
curl "https://cryptodataapi.com/api/v1/exchanges?referral_only=true"
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| slug | string | Yes | — | hyperliquid, binance, bybit, okx, asterdex, lighter, robinhood |
curl "https://cryptodataapi.com/api/v1/exchanges/hyperliquid"
DEX & Meme Coins
Trending DEX pools across chains. High-frequency discovery data for meme coin alpha.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| chain | string | No | — | Filter by chain: solana, ethereum, base, bsc, arbitrum |
| universe | string | No | — | Filter to token universe: hl_perps |
curl "https://cryptodataapi.com/api/v1/dex/trending" \ -H "X-API-Key: cdk_live_your_key"
Newest DEX pools — early discovery of new token launches.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| chain | string | No | — | Filter by chain: solana, ethereum, base, bsc, arbitrum |
curl "https://cryptodataapi.com/api/v1/dex/new-pools" \ -H "X-API-Key: cdk_live_your_key"
Token info + top pools for a specific token on a chain.
| Name | Type | Required | Description |
|---|---|---|---|
| chain | string | Yes | |
| address | string | Yes |
curl "https://cryptodataapi.com/api/v1/dex/token/solana/So11111111111111111111111111111111" \ -H "X-API-Key: cdk_live_your_key"
Recently promoted/boosted tokens — marketing spend signal.
curl "https://cryptodataapi.com/api/v1/dex/promoted" \ -H "X-API-Key: cdk_live_your_key"
Top promoted tokens ranked by promotion spend.
curl "https://cryptodataapi.com/api/v1/dex/promoted/top" \ -H "X-API-Key: cdk_live_your_key"
Token security report — rug detection, honeypot check, risk scoring.
| Name | Type | Required | Description |
|---|---|---|---|
| chain | string | Yes | |
| address | string | Yes |
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.
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| exchange | string | No | hyperliquid | Filter coins by exchange: hyperliquid, binance_spot, asterdex, or 'all' for unfiltered |
| format | string | No | — | Response format: 'markdown' for LLM-friendly plain text |
| technical_detail | boolean | No | false | Include 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}. |
curl "https://cryptodataapi.com/api/v1/daily?exchange=hyperliquid" \ -H "X-API-Key: cdk_live_your_key"
All Binance spot price pairs (~2,500 symbols).
curl "https://cryptodataapi.com/api/v1/daily/prices" \ -H "X-API-Key: cdk_live_your_key"
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.
curl "https://cryptodataapi.com/api/v1/daily/hyperliquid" \ -H "X-API-Key: cdk_live_your_key"
Top trader leaderboard, wallet positions, and tracking metadata.
curl "https://cryptodataapi.com/api/v1/daily/hl-traders" \ -H "X-API-Key: cdk_live_your_key"
Health
System health check endpoint.
Basic health check endpoint (no auth required).
curl "https://cryptodataapi.com/api/v1/health"
Basic health check endpoint (no auth required).
curl -X HEAD "https://cryptodataapi.com/api/v1/health"
Meta
API version signal and change history.
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.
/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.
curl "https://cryptodataapi.com/api/v1/changelog"
Indicators
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| source | string | No | hyperliquid_perp | hyperliquid_perp | binance_spot | all (adds the Binance-spot fill) |
| interval | string | No | 4h | 1h | 4h — which move sort=pct orders by; every row always carries all three moves |
| min_notional_30 | float | No | — | Liquidity floor in USD (min: 0). Rows with unknown liquidity are dropped when set |
| color | string | No | — | red | grey | green |
| color_4h | string | No | — | red | grey | green — filter on the 4h SIGNUM colour (signum_4h) |
| above_sma200 | bool | No | — | true = above the daily 200-SMA, false = below |
| sort | string | No | notional_30 | notional_30 | pct | days_in_color | adx | symbol. Rows lacking the value go last |
| order | string | No | desc | asc | desc |
| limit | int | No | 250 | min: 1, max: 500 |
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"
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| color | string | No | — | red | grey | green |
| source | string | No | — | binance_spot | hyperliquid_perp |
| min_days | int | No | — | min: 0 |
| max_days | int | No | — | min: 0 |
| sort | string | No | days_in_color | days_in_color | pct_change | adx | symbol |
| order | string | No | desc | asc | desc |
| limit | int | No | 250 | min: 1, max: 1000 |
| offset | int | No | 0 | min: 0; rows to skip after sorting (pagination) |
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"
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.
| Name | Type | Required | Description |
|---|---|---|---|
| symbol | string | Yes | Bare ticker (e.g. BTC, kPEPE); USDT suffix stripped; exact raw name tried first |
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| intraday | bool | No | false | Attach the ~60d per-bar 1h intraday_history (live candle pull, cached 30 min) |
| h4 | bool | No | false | Attach h4_history: the per-bar 4h SIGNUM series, last 90 completed 4h bars (same pull as intraday) |
curl "https://cryptodataapi.com/api/v1/indicators/signum-rgg/BTC?intraday=true" \ -H "X-API-Key: cdk_live_your_key"
Force recompute the SIGNUM_RGG cache (Pro tier).
curl -X POST "https://cryptodataapi.com/api/v1/indicators/signum-rgg/refresh" \ -H "X-API-Key: cdk_live_your_key"
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).
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| source | string | No | — | binance_spot | hyperliquid_perp |
| ma_state | string | No | — | above_200 | below_200 | breakdown_200 | reclaim_200 |
| bb | string | No | — | in_squeeze | expanding |
| range_zone | string | No | — | near_low | mid | near_high |
| rsi | string | No | — | overbought | oversold | extreme (>80 or <20) |
| min_days_in_state | int | No | — | min: 0; applies to squeeze or RSI extreme filter |
| sort | string | No | symbol | symbol | price | rsi_1d | bb_bandwidth | squeeze_days | dist_from_200 | position_in_range |
| order | string | No | desc | asc | desc |
| limit | int | No | 250 | min: 1, max: 500 |
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"
Per-asset Technical / Structural detail with 60d daily history (close, RSI-14, BB bandwidth, SMA-200, above_200) for sparkline rendering.
| Name | Type | Required | Description |
|---|---|---|---|
| symbol | string | Yes |
curl "https://cryptodataapi.com/api/v1/indicators/technical/BTC" \ -H "X-API-Key: cdk_live_your_key"
Force recompute the Technical / Structural cache (Pro tier).
curl -X POST "https://cryptodataapi.com/api/v1/indicators/technical/refresh" \ -H "X-API-Key: cdk_live_your_key"
Hyperliquid Traders
Scored leaderboard of top traders filtered by performance criteria.
curl "https://cryptodataapi.com/api/v1/hyperliquid/top-traders" \ -H "X-API-Key: cdk_live_your_key"
Current positions for tracked wallets. For non-tracked addresses, queries Hyperliquid on-demand.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| address | string | No | — | Filter by wallet address (0x...) |
curl "https://cryptodataapi.com/api/v1/hyperliquid/wallet-positions" \ -H "X-API-Key: cdk_live_your_key"
Position change signals: entries, exits, size increases/decreases.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| minutes | int | No | 10 | Look-back window in minutes (min: 1, max: 1440) |
| address | string | No | — | Filter by wallet address (0x...). Comma-separated for multiple. |
curl "https://cryptodataapi.com/api/v1/hyperliquid/wallet-signals?minutes=10" \ -H "X-API-Key: cdk_live_your_key"
Trade profiles with win rate, PnL, classification, and edges.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| address | string | No | — | Filter by wallet address (0x...) |
curl "https://cryptodataapi.com/api/v1/hyperliquid/trader-profiles" \ -H "X-API-Key: cdk_live_your_key"
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.
curl -X POST "https://cryptodataapi.com/api/v1/hyperliquid/trader-profiles/refresh" \ -H "X-API-Key: cdk_live_your_key"
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.
curl -X POST "https://cryptodataapi.com/api/v1/hyperliquid/leaderboard/refresh" \ -H "X-API-Key: cdk_live_your_key"
Search the cached top-leaderboard pool for wallets matching arbitrary gates. Read-only — does not modify the watchlist. Pool is the same ~50-wallet set that auto-watchlist evaluation considers. Refreshed daily at 19:00 UTC.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| min_score | float | No | 0 | Minimum top-trader score (min: 0, max: 100) |
| min_win_rate | float | No | — | Minimum 30d win rate (0-1) (min: 0, max: 1) |
| min_profit_factor | float | No | — | Minimum profit factor (min: 0) |
| min_trades_30d | int | No | — | Minimum trades in 30d. Defaults to 30 to filter tiny-sample wallets. Pass 0 explicitly to disable. (min: 0) |
| min_avg_duration_hours | float | No | — | Min avg trade duration (hours) (min: 0) |
| exclude_types | string | No | — | Comma-separated trader types to exclude, e.g. 'hft,scalper' |
| limit | int | No | 50 | Max wallets to return (min: 1, max: 50) |
curl "https://cryptodataapi.com/api/v1/hyperliquid/wallets/search?min_score=0&limit=50" \ -H "X-API-Key: cdk_live_your_key"
List all watchlisted wallet addresses.
curl "https://cryptodataapi.com/api/v1/hyperliquid/watchlist" \ -H "X-API-Key: cdk_live_your_key"
Add wallet addresses to the watchlist. Automatically starts tracking for signals.
| Name | Type | Required | Description |
|---|---|---|---|
| entries | array | Yes |
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]"}'
Remove wallet addresses from the watchlist.
| Name | Type | Required | Description |
|---|---|---|---|
| addresses | array | Yes |
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 current auto-managed watchlist configuration and status.
curl "https://cryptodataapi.com/api/v1/hyperliquid/watchlist/auto" \ -H "X-API-Key: cdk_live_your_key"
Auto-populate watchlist from top traders based on configurable criteria.
| Name | Type | Required | Description |
|---|---|---|---|
| mode | string | No | Source mode (currently only 'top_traders') |
| max_wallets | integer | No | Max wallets in auto-managed set |
| min_score | integer | No | Minimum top-trader score |
| filters | any | No | |
| auto_refresh | boolean | No | Re-evaluate daily and update automatically |
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]"}'
Disable auto-management and remove all auto-managed entries.
curl -X DELETE "https://cryptodataapi.com/api/v1/hyperliquid/watchlist/auto" \ -H "X-API-Key: cdk_live_your_key"
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| min_score | int | No | 80 | Minimum trader score (min: 0, max: 100) |
| minutes | int | No | 60 | Signal look-back window in minutes (min: 1, max: 1440) |
| min_win_rate | float | No | — | Minimum 30d win rate (0-1) (min: 0, max: 1) |
| min_profit_factor | float | No | — | Minimum profit factor (min: 0) |
| min_trades_30d | int | No | — | 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_hours | float | No | — | Min avg trade duration (hours) (min: 0) |
| exclude_types | string | No | — | Comma-separated trader types to exclude, e.g. 'hft,scalper' |
curl "https://cryptodataapi.com/api/v1/hyperliquid/copy-signals?min_score=80&minutes=60" \ -H "X-API-Key: cdk_live_your_key"
On-demand trade profile for ANY Hyperliquid address. Fetches fill history and computes stats.
| Name | Type | Required | Description |
|---|---|---|---|
| address | string | Yes |
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| days | int | No | 30 | Analysis period in days (min: 1, max: 90) |
curl "https://cryptodataapi.com/api/v1/hyperliquid/trader-profile/So11111111111111111111111111111111?days=30" \ -H "X-API-Key: cdk_live_your_key"
Historical trades for any Hyperliquid address with summary statistics.
| Name | Type | Required | Description |
|---|---|---|---|
| address | string | Yes |
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| days | int | No | 30 | Trade history period in days (min: 1, max: 90) |
curl "https://cryptodataapi.com/api/v1/hyperliquid/wallet-trades/So11111111111111111111111111111111?days=30" \ -H "X-API-Key: cdk_live_your_key"
Market Intelligence
All 8 BTC cycle indicators.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| days | int | No | 30 | Number of daily entries to return (0 = all, default 30) (min: 0) |
curl "https://cryptodataapi.com/api/v1/market-intelligence/btc/cycle-indicators?days=30" \ -H "X-API-Key: cdk_live_your_key"
Single BTC cycle indicator by name.
| Name | Type | Required | Description |
|---|---|---|---|
| indicator | string | Yes | Indicator name |
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| days | int | No | 30 | Number of daily entries to return (0 = all, default 30) (min: 0) |
curl "https://cryptodataapi.com/api/v1/market-intelligence/btc/cycle-indicators/puell_multiple?days=30" \ -H "X-API-Key: cdk_live_your_key"
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.
curl "https://cryptodataapi.com/api/v1/market-intelligence/etf/btc/aum" \ -H "X-API-Key: cdk_live_your_key"
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.
| Name | Type | Required | Description |
|---|---|---|---|
| asset | string | Yes | Asset: btc, eth, or sol |
| Name | Type | Required | Description |
|---|---|---|---|
| days | integer | No | Settled trade days to return in flows (1–1000, default 1 = latest settled day) |
curl "https://cryptodataapi.com/api/v1/market-intelligence/etf/btc/flows?days=30" \ -H "X-API-Key: cdk_live_your_key"
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).
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| symbol | string | No | — | Filter to a single coin (e.g. BTC) |
| exchange | string | No | hyperliquid | Filter to coins on exchange: hyperliquid, binance_spot, asterdex, or all |
| type | string | No | perps | Instrument type (perps) |
| limit | int | No | 250 | Max coins to return (default 250) (min: 1, max: 500) |
curl "https://cryptodataapi.com/api/v1/market-intelligence/liquidations?exchange=hyperliquid&type=perps&limit=250" \ -H "X-API-Key: cdk_live_your_key"
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| symbol | string | No | — | Filter to a single coin (e.g. BTC) |
| window_s | int | No | 300 | Trailing window in seconds (min: 60, max: 3600) |
| min_severity | float | No | 0.35 | Minimum severity to report (min: 0, max: 1) |
| include_quiet | bool | No | false | Return every coin with a usable window, not just the ones firing. For calibration |
| limit | int | No | 250 | Max coins to scan (min: 1, max: 500) |
curl "https://cryptodataapi.com/api/v1/market-intelligence/squeeze-alerts?window_s=300" \ -H "X-API-Key: cdk_live_your_key"
BTC options data (OI, volume, max pain).
curl "https://cryptodataapi.com/api/v1/market-intelligence/options" \ -H "X-API-Key: cdk_live_your_key"
Exchange BTC balance and flow data.
curl "https://cryptodataapi.com/api/v1/market-intelligence/exchange-balance" \ -H "X-API-Key: cdk_live_your_key"
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``.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| symbol | string | No | — | Filter to a single coin (e.g. BTC) |
| exchange | string | No | hyperliquid | Filter to coins on exchange: hyperliquid, binance_spot, asterdex, or all |
| type | string | No | perps | Instrument type (perps) |
| limit | int | No | 250 | Max coins to return (default 250) (min: 1, max: 500) |
curl "https://cryptodataapi.com/api/v1/market-intelligence/funding-rates?exchange=hyperliquid&type=perps&limit=250" \ -H "X-API-Key: cdk_live_your_key"
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| symbol | string | No | — | Filter to a single coin (e.g. BTC) |
| exchange | string | No | hyperliquid | Filter to coins on exchange: hyperliquid, binance_spot, asterdex, or all |
| type | string | No | perps | Instrument type (perps) |
| limit | int | No | 250 | Max coins to return (default 250) (min: 1, max: 500) |
curl "https://cryptodataapi.com/api/v1/market-intelligence/open-interest?exchange=hyperliquid&type=perps&limit=250" \ -H "X-API-Key: cdk_live_your_key"
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| symbol | string | No | — | Filter by symbol (BTC, ETH, SOL, DOGE, XRP, ADA). Omit for all. |
curl "https://cryptodataapi.com/api/v1/market-intelligence/taker-buy-sell" \ -H "X-API-Key: cdk_live_your_key"
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).
curl "https://cryptodataapi.com/api/v1/market-intelligence/liquidations/by-exchange" \ -H "X-API-Key: cdk_live_your_key"
Fear & Greed index history with dated entries.
curl "https://cryptodataapi.com/api/v1/market-intelligence/fear-greed-history" \ -H "X-API-Key: cdk_live_your_key"
Stablecoin market cap history timeseries.
curl "https://cryptodataapi.com/api/v1/market-intelligence/stablecoin-history" \ -H "X-API-Key: cdk_live_your_key"
Market intelligence collector status and rate usage.
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.
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.
curl "https://cryptodataapi.com/api/v1/on-chain/stablecoin-reserves" \ -H "X-API-Key: cdk_live_your_key"
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.
curl "https://cryptodataapi.com/api/v1/on-chain/stablecoin-reserves/dry-powder" \ -H "X-API-Key: cdk_live_your_key"
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.
| Name | Type | Required | Description |
|---|---|---|---|
| symbol | string | Yes | Token symbol (e.g. USDT) |
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| exchange | string | No | — | Filter to one exchange (e.g. binance) |
curl "https://cryptodataapi.com/api/v1/on-chain/exchange-flows/USDT" \ -H "X-API-Key: cdk_live_your_key"
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.
| Name | Type | Required | Description |
|---|---|---|---|
| symbol | string | Yes | Token symbol (e.g. USDT) |
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| start | string | No | end − 7d | ISO 8601, unix seconds or unix ms |
| end | string | No | now | ISO 8601, unix seconds or unix ms (exclusive) |
| interval | string | No | 1h | 1h | raw |
| exchange | string | No | — | Filter to one exchange (e.g. binance) |
| chain | string | No | — | Filter to one chain (e.g. eth, tron) |
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"
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| min_amount | float | No | 1000000 | Minimum transfer size in USD (applies to amount_usd) |
| limit | int | No | 50 | max: 500 |
| symbol | string | No | — | Only this token (e.g. ETH) |
| exchange | string | No | — | Only this exchange (e.g. binance) |
| chain | string | No | — | Only this chain (eth, btc, sol, tron, bsc, base, arb, op) |
| direction | string | No | — | inflow | outflow |
| source | string | No | — | transfer | balance_delta |
curl "https://cryptodataapi.com/api/v1/on-chain/exchange-flows/spike-alerts?min_amount=5000000" \ -H "X-API-Key: cdk_live_your_key"
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.
curl "https://cryptodataapi.com/api/v1/on-chain/miners/reserves" \ -H "X-API-Key: cdk_live_your_key"
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).
curl "https://cryptodataapi.com/api/v1/on-chain/miners/hash-ribbon" \ -H "X-API-Key: cdk_live_your_key"
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.
curl "https://cryptodataapi.com/api/v1/on-chain/dormancy/btc" \ -H "X-API-Key: cdk_live_your_key"
🚧 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.
curl "https://cryptodataapi.com/api/v1/on-chain/whales" \ -H "X-API-Key: cdk_live_your_key"
🚧 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).
| Name | Type | Required | Description |
|---|---|---|---|
| symbol | string | Yes | USDT / USDC / WBTC / WETH |
curl "https://cryptodataapi.com/api/v1/on-chain/whales/USDT" \ -H "X-API-Key: cdk_live_your_key"
🚧 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.
curl "https://cryptodataapi.com/api/v1/on-chain/whales/accumulation-score" \ -H "X-API-Key: cdk_live_your_key"
🚧 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.
| Name | Type | Required | Description |
|---|---|---|---|
| symbol | string | Yes | USDT / USDC / WBTC / WETH |
curl "https://cryptodataapi.com/api/v1/on-chain/whales/accumulation-score/USDT" \ -H "X-API-Key: cdk_live_your_key"
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.
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_oksays whether adding rows across time means anything;is_cumulativesays a row already contains its predecessors. Two series look like candles and are not: the default/fundingrows arerate_snapshot(~12 samples per settlement — summing them overstates carry ~12x) and/liquidationsisrolling_window(a 24h level — neither sum nor difference it).coverage—local_first/local_last(ms) for the scope you asked for, andarchive_hintwhen your window starts before local retention: the rows are not missing, they live in the daily Parquet archive (/archives). An emptydatais never silent.next_cursor/has_more— keyset paging on the table's full primary key. Passnext_cursorback ascursor(with the samestart/end). Do not page the event tapes withstart = 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.timeis unique per row only on symbol-scoped/klinesand/funding.format=csvputs the same state inX-Has-More/X-Next-Cursorheaders.
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.
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).
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| symbol | string | Yes | — | Trading pair, e.g. BTCUSDT (Binance) or BTC (Hyperliquid) |
| exchange | string | No | binance | binance or hyperliquid |
| start | string | Yes | — | Start time (ISO 8601 or unix ms) |
| end | string | No | — | End time (ISO 8601 or unix ms, defaults to now) |
| limit | int | No | 1000 | min: 1, max: 10000 |
| cursor | string | No | — | The previous response's next_cursor, verbatim |
| format | string | No | json | json or csv (CSV: paging state in X-Has-More / X-Next-Cursor) |
curl "https://cryptodataapi.com/api/v1/backtesting/klines?exchange=binance&limit=1000&format=json" \ -H "X-API-Key: cdk_live_your_key"
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| symbol | string | Yes | — | Symbol, e.g. BTC (Hyperliquid) or BTCUSDT (Binance) |
| exchange | string | No | hyperliquid | binance or hyperliquid |
| grain | string | No | snapshot_5m | snapshot_5m (live rate sampled every 5 min + OI/mark) or hourly (settled prints, hyperliquid only — 400 grain_unavailable on binance) |
| start | string | Yes | — | Start time (ISO 8601 or unix ms) |
| end | string | No | — | End time, EXCLUSIVE |
| limit | int | No | 1000 | min: 1, max: 10000 |
| cursor | string | No | — | The previous response's next_cursor, verbatim |
| format | string | No | json | json or csv |
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"
{
"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
}
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).
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| symbol | string | No | — | One symbol or a comma list (BTC,ETH,SOL, up to 25; each rides the index). Omit for all |
| start | string | Yes | — | Start time (ISO 8601 or unix ms) |
| end | string | No | — | End time, EXCLUSIVE |
| limit | int | No | 1000 | min: 1, max: 10000 |
| cursor | string | No | — | The previous response's next_cursor, verbatim |
| format | string | No | json | json or csv |
curl "https://cryptodataapi.com/api/v1/backtesting/liquidations?limit=1000" \ -H "X-API-Key: cdk_live_your_key"
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| coin | string | No | — | One HL universe coin name (BTC, kPEPE) or a comma list (up to 25; each rides the index). Omit for all |
| start | string | Yes | — | Start time (ISO 8601 or unix ms) |
| end | string | No | — | End time, EXCLUSIVE |
| limit | int | No | 1000 | min: 1, max: 10000 |
| cursor | string | No | — | The previous response's next_cursor, verbatim |
| format | string | No | json | json or csv (CSV: paging state in X-Has-More / X-Next-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"
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| coin | string | No | — | One HL coin name (BTC, kPEPE) or a comma list (up to 25) for per-coin bars. Omit for ONE market-wide series |
| interval | string | No | 15m | 5m, 15m or 1h (UTC clock-aligned) |
| start | string | Yes | — | Start time (ISO 8601 or unix ms); floored to the interval |
| end | string | No | now | End time; floored to the interval, EXCLUSIVE |
| limit | int | No | 1000 | min: 1, max: 10000 |
| cursor | string | No | — | The previous response's next_cursor, verbatim |
| format | string | No | json | json or csv |
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"
{
"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
}
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| coin | string | Yes | — | One HL coin name (BTC, kPEPE) or a comma list (up to 25) |
| interval | string | No | 4h | 1h, 4h or 1d — the same UTC grid as /hyperliquid/candles |
| start | string | Yes | — | Start time (ISO 8601 or unix ms); floored to the interval |
| end | string | No | now | End time; floored to the interval, EXCLUSIVE |
| limit | int | No | 1000 | min: 1, max: 10000 |
| cursor | string | No | — | The previous response's next_cursor, verbatim |
| format | string | No | json | json or csv |
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"
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| coin | string | Yes | — | One HL coin name (BTC, HYPE, kPEPE) or a comma list (up to 25) |
| start | string | Yes | — | Start time (ISO 8601 or unix ms) |
| end | string | No | now | End time, EXCLUSIVE |
| interval | string | No | 1h | 5m (every snapshot) or 1h (first snapshot of each hour) |
| splits | string | No | trader_type,leverage | Breakdowns to include, or none for the all-account bands only (~10x smaller) |
| limit | int | No | 1000 | min: 1, max: 10000 |
| cursor | string | No | — | The previous response's next_cursor, verbatim |
| format | string | No | json | json or csv (CSV carries the all-account bands only) |
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"
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| coin | string | No | — | Filter by HL coin name (e.g. BTC, kPEPE), or omit for all coins |
| start | string | Yes | — | Start time (ISO 8601 or unix ms) |
| end | string | No | now | End time (ISO 8601 or unix ms). EXCLUSIVE — the range is [start, end) |
| bounds | string | No | — | Same as /hl-liquidations |
| limit | int | No | 1000 | min: 1, max: 10000 |
curl "https://cryptodataapi.com/api/v1/backtesting/hl-trade-flow?coin=BTC&start=2026-09-09" \ -H "X-API-Key: cdk_live_your_key"
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| data_type | string | Yes | — | Snapshot type, e.g. market_health, fear_greed, coinglass_etf_flows |
| start | string | Yes | — | Start time (ISO 8601 or unix ms) |
| end | string | No | — | End time |
| limit | int | No | 100 | min: 1, max: 1000 |
| universe | string | No | — | For dex_trending: filter to hl_perps |
curl "https://cryptodataapi.com/api/v1/backtesting/snapshots?limit=100" \ -H "X-API-Key: cdk_live_your_key"
List all available snapshot data types with row counts and date ranges.
curl "https://cryptodataapi.com/api/v1/backtesting/snapshots/types" \ -H "X-API-Key: cdk_live_your_key"
List all tracked symbols with available date ranges.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| exchange | string | No | — | Filter by exchange: binance or hyperliquid |
curl "https://cryptodataapi.com/api/v1/backtesting/symbols" \ -H "X-API-Key: cdk_live_your_key"
Get backtesting storage statistics.
curl "https://cryptodataapi.com/api/v1/backtesting/status" \ -H "X-API-Key: cdk_live_your_key"
Export kline data as streaming CSV download.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| symbol | string | Yes | — | Symbol to export |
| exchange | string | No | binance | binance or hyperliquid |
| start | string | Yes | — | Start time (ISO 8601 or unix ms) |
| end | string | No | — | End time |
curl "https://cryptodataapi.com/api/v1/backtesting/export?exchange=binance" \ -H "X-API-Key: cdk_live_your_key"
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.
curl "https://cryptodataapi.com/api/v1/backtesting/archives/index" \ -H "X-API-Key: cdk_live_your_key"
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| data_type | string | No | klines | Data 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. |
| exchange | string | No | — | Filter by exchange (klines/funding/daily/klines_deep/funding_deep only) |
| symbol | string | No | — | Filter by symbol, or snapshot type name for snapshots |
| interval | string | No | — | Candle interval for klines_deep only: 1h, 4h, or 1d (ignored for other types) |
curl "https://cryptodataapi.com/api/v1/backtesting/archives?data_type=klines" \ -H "X-API-Key: cdk_live_your_key"
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).
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| start | string | Yes | — | Start date (YYYY-MM-DD; YYYY-MM for '*_deep' tiers) |
| data_type | string | No | klines | Data 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. |
| exchange | string | No | — | Exchange filter (klines/funding/daily/klines_deep/funding_deep) |
| symbol | string | No | — | Symbol, or snapshot type name for snapshots |
| interval | string | No | — | Candle interval for klines_deep only: 1h, 4h, or 1d (ignored for other types) |
| end | string | No | — | End date (YYYY-MM-DD, defaults to today; YYYY-MM for '*_deep' tiers) |
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"
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| data_type | string | Yes | — | klines, funding, liquidations, hl_liquidations, hl_trade_flow, daily, snapshots, klines_deep, funding_deep |
| exchange | string | No | — | klines / funding / daily / *_deep |
| symbol | string | No | — | klines / funding / liquidations / *_deep |
| date | string | No | — | YYYY-MM-DD for daily-file types (klines, funding, liquidations, hl_liquidations, hl_trade_flow, daily, snapshots) |
| month | string | No | — | YYYY-MM for *_deep monthly files |
| interval | string | No | — | klines_deep only: 1h, 4h, 1d |
| bundle | string | No | — | daily only: klines or funding |
| snapshot_type | string | No | — | snapshots only: the snapshot data type name |
curl "https://cryptodataapi.com/api/v1/backtesting/archives/purchase?data_type=klines&exchange=binance&symbol=BTCUSDT&date=2026-08-01"
{
"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.
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.
curl "https://cryptodataapi.com/api/v1/backtesting/daily-snapshots" \ -H "X-API-Key: cdk_live_your_key"
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=.
| Name | Type | Required | Description |
|---|---|---|---|
| date | string | Yes | YYYY-MM-DD (UTC) |
curl "https://cryptodataapi.com/api/v1/backtesting/daily-snapshots/2026-05-28" \ -H "X-API-Key: cdk_live_your_key"
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| date | string | Yes | — | Archived day, YYYY-MM-DD (UTC) |
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.
Headline NFT trade volume — total + per-chain / per-tier / per-category series, top collections, marketplaces.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| days | int | No | 90 | Days of history to return (min: 7, max: 3650) |
curl "https://cryptodataapi.com/api/v1/nfts/overview?days=90" \ -H "X-API-Key: cdk_live_your_key"
Seeded NFT collection taxonomy — slug, name, chain, category, tier, launch month.
curl "https://cryptodataapi.com/api/v1/nfts/collections" \ -H "X-API-Key: cdk_live_your_key"
Per-collection daily volume time-series.
| Name | Type | Required | Description |
|---|---|---|---|
| slug | string | Yes |
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| days | int | No | 365 | min: 7, max: 3650 |
curl "https://cryptodataapi.com/api/v1/nfts/collections/{slug}?days=365" \ -H "X-API-Key: cdk_live_your_key"
Chain breakdown — each chain plus the count of seeded collections on it.
curl "https://cryptodataapi.com/api/v1/nfts/chains" \ -H "X-API-Key: cdk_live_your_key"
Category taxonomy — fixed buckets (pfp/art/gaming/collectible/music/domain/metaverse/ordinal/other).
curl "https://cryptodataapi.com/api/v1/nfts/categories" \ -H "X-API-Key: cdk_live_your_key"
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`.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| by | string | No | chain | |
| from | string | No | — | ISO date (YYYY-MM-DD) |
| to | string | No | — | ISO date (YYYY-MM-DD) |
| granularity | string | No | daily |
curl "https://cryptodataapi.com/api/v1/nfts/volume?by=chain&granularity=daily" \ -H "X-API-Key: cdk_live_your_key"
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.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| vs | string | No | btc,eth,sol | Comma-separated asset symbols |
| window_days | int | No | 90 | min: 14, max: 730 |
curl "https://cryptodataapi.com/api/v1/nfts/correlations?vs=btc,eth,sol&window_days=90" \ -H "X-API-Key: cdk_live_your_key"
Payments
Return plan pricing and supported networks. No auth required.
curl "https://cryptodataapi.com/api/v1/payments/plans"
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.
curl "https://cryptodataapi.com/api/v1/pricing"
{
"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
]
}
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.
| Name | Type | Required | Description |
|---|---|---|---|
| plan | string | Yes | monthly | monthly_plus | annual | annual_plus | pass_1h | pass_1d | pass_7d | pass_1h_plus | pass_1d_plus | pass_7d_plus |
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]"}'
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.
| Name | Type | Required | Description |
|---|---|---|---|
| code | string | Yes | The discount code (case-insensitive) |
curl -X POST "https://cryptodataapi.com/api/v1/payments/validate-code" \ -H "Content-Type: application/json" \ -d '{"code": "CDA-XXXXXXXX"}'
Return current subscription status.
curl "https://cryptodataapi.com/api/v1/payments/subscription" \ -H "X-API-Key: cdk_live_your_key"
List all invoices for this API key's email.
curl "https://cryptodataapi.com/api/v1/payments/invoices" \ -H "X-API-Key: cdk_live_your_key"
Get a single invoice. JSON by default, ?format=html for printable, ?format=pdf for download.
| Name | Type | Required | Description |
|---|---|---|---|
| number | string | Yes |
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| format | string | No | json |
curl "https://cryptodataapi.com/api/v1/payments/invoices/{number}?format=json" \ -H "X-API-Key: cdk_live_your_key"
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.
| Name | Type | Required | Description |
|---|---|---|---|
| plan | string | Yes |
curl -X POST "https://cryptodataapi.com/api/v1/payments/agent-subscribe" \ -H "Content-Type: application/json" \ -d '{"email": "[email protected]"}'
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.
| Name | Type | Required | Description |
|---|---|---|---|
| plan | string | Yes | monthly | monthly_plus | annual | annual_plus |
| discount_code | string | No | Optional discount code (case-insensitive) |
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"}'
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.
curl -X POST "https://cryptodataapi.com/api/v1/payments/stripe/portal" \ -H "X-API-Key: cdk_live_your_key"
Webhooks
List all registered webhook endpoints.
curl "https://cryptodataapi.com/api/v1/webhooks" \ -H "X-API-Key: cdk_live_your_key"
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.
| Name | Type | Required | Description |
|---|---|---|---|
| url | string | Yes | http(s) URL, max 2083 chars |
| secret | string | Yes | HMAC-SHA256 signing secret, 1-255 chars |
| label | string | Yes | 1-100 chars |
| enabled | boolean | No | |
| addresses | array | No | Up to 200 wallet addresses, each max 128 chars |
| events | array | No | Up to 10 of ENTRY, EXIT, INCREASE, DECREASE |
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]"}'
Update a webhook endpoint by label.
| Name | Type | Required | Description |
|---|---|---|---|
| url | string | No | |
| secret | string | No | |
| enabled | boolean | No | |
| addresses | array | No | |
| events | array | No | |
| clear_addresses | boolean | No | |
| clear_events | boolean | No |
| Name | Type | Required | Description |
|---|---|---|---|
| label | string | Yes |
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 a webhook endpoint by label.
| Name | Type | Required | Description |
|---|---|---|---|
| label | string | Yes |
curl -X DELETE "https://cryptodataapi.com/api/v1/webhooks/{label}" \ -H "X-API-Key: cdk_live_your_key"
Wallet Auth
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.
| Name | Type | Required | Description |
|---|---|---|---|
| wallet_address | string | Yes | |
| chain_id | integer | No | 1 (Ethereum, default) or 8453 (Base); shown in the signed message only |
curl -X POST "https://cryptodataapi.com/api/v1/wallet/challenge" \ -H "Content-Type: application/json" \ -d '{"email": "[email protected]"}'
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.
| Name | Type | Required | Description |
|---|---|---|---|
| wallet_address | string | Yes | |
| signature | string | Yes | |
| nonce | string | Yes | |
| message | string | No | Optional echo of the signed challenge; must match it exactly |
curl -X POST "https://cryptodataapi.com/api/v1/wallet/verify" \ -H "Content-Type: application/json" \ -d '{"email": "[email protected]"}'
Get wallet session info for the current API key.
curl "https://cryptodataapi.com/api/v1/wallet/session" \ -H "X-API-Key: cdk_live_your_key"
Wallet Payments
Verify a USDC transfer on-chain and upgrade the API key to pro.
| Name | Type | Required | Description |
|---|---|---|---|
| tx_hash | string | Yes | |
| network | string | Yes | |
| plan | string | Yes | |
| intent_id | string | No |
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]"}'
List all invoices for the current wallet.
curl "https://cryptodataapi.com/api/v1/wallet/invoices" \ -H "X-API-Key: cdk_live_your_key"
Download a single invoice as PDF.
| Name | Type | Required | Description |
|---|---|---|---|
| number | string | Yes |
curl "https://cryptodataapi.com/api/v1/wallet/invoices/{number}" \ -H "X-API-Key: cdk_live_your_key"
Return public wallet config (treasury addresses, supported networks).
curl "https://cryptodataapi.com/api/v1/wallet/config"
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.
| Name | Type | Required | Description |
|---|---|---|---|
| sender | string | Yes | |
| plan | string | Yes |
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]"}'
Proxy: get latest Solana blockhash (avoids CORS issues with public RPCs).
curl "https://cryptodataapi.com/api/v1/wallet/solana-blockhash"
Proxy: check Solana transaction confirmation status.
| Name | Type | Required | Description |
|---|---|---|---|
| signature | string | Yes |
curl "https://cryptodataapi.com/api/v1/wallet/solana-confirm/{signature}"
Other
User dashboard — API key management, usage stats, invoices.
curl "https://cryptodataapi.com/dashboard"
Pricing plans page.
curl "https://cryptodataapi.com/pricing"
SIGNUM RGG trend radar for the top 100 Binance coins.
curl "https://cryptodataapi.com/signum-rgg-coin-trend-indicator"
NFT trade-volume tracker with BTC/ETH/SOL price overlay.
curl "https://cryptodataapi.com/nft-trends"