REST API
Every dataset is available over HTTPS from one base URL, in JSON, CSV or Parquet. This page is the reference for API v1 (draft), which goes live with Phase 1.
All endpoints are read-only GET requests and are idempotent. Responses use schema 0.9 (draft), which becomes 1.0 at Phase 1. For multi-month or multi-year pulls, the S3 archive is faster and does not count against your rate limit.
Conventions
Authentication
Send your key in the Authorization header as a bearer token. Keys in query strings are rejected. fdc_live_ keys return what your plan includes; fdc_test_ keys return the sample day (Hyperliquid BTC-PERP, ETH-PERP and SOL-PERP on 2026-09-15 UTC, every dataset). Scopes, rotation and IP allowlists are on Authentication.
GET /v1/trades?venue=hyperliquid&symbol=BTC-PERP&start=2026-09-15T14:30:00Z&end=2026-09-15T14:31:00Z HTTP/1.1
Host: api.financedatacloud.com
Authorization: Bearer fdc_live_...
Accept-Encoding: zstd, gzipHeaders
| Header | Direction | Description |
|---|---|---|
Authorization | request | Bearer fdc_live_.... Required. |
FDC-Schema-Version | request, response | Schema version. Optional on requests to pin a version that is still served; always present on responses. |
Accept | request | Alternative to format: application/json, text/csv or application/vnd.apache.parquet. |
Accept-Encoding | request | zstd or gzip. See Compression. |
X-Request-Id | response | Unique request id, also in error bodies. Quote it in support requests. |
X-Next-Cursor | response | Next-page cursor for CSV responses, which have no JSON envelope. |
X-RateLimit-* | response | Rate limit state. See Rate limits. |
Time parameters
start is inclusive and end is exclusive. Both accept ISO 8601 in UTC, up to nanosecond precision (2026-09-15T14:30:00.123456789Z), a date (2026-09-15, meaning 00:00 UTC), or an int64 count of nanoseconds since the Unix epoch (1789482600000000000).
By default the range applies to ts_capture, the clock that daily files are partitioned and sorted on. Pass clock=exchange to filter on ts_exchange instead, for example to match a venue's funding times. Rows with source = venue_archive have no ts_capture, so they are always filtered on ts_exchange. Candles filter on ts_open. Background is in Timestamps and clocks.
Pagination
JSON and CSV responses are paginated. Pass the returned cursor back as cursor, with every other parameter unchanged, to get the next page. When next_cursor is null, the range is exhausted. Cursors are opaque and valid for 24 hours.
{
"data": [ ... ],
"next_cursor": "c_9TfQ2vRkL0xWmB7d"
}| Parameter | Default | Maximum |
|---|---|---|
limit (JSON) | 1,000 | 10,000 |
limit (CSV) | 100,000 | 1,000,000 |
A page can hold fewer rows than limit without being the last one. Parquet responses are not paginated: see below.
Formats
Choose with format=json (default), format=csv or format=parquet. If both format and Accept are sent, format wins.
- JSON returns the envelope above. Decimals (prices, sizes, rates, amounts) are strings so no precision is lost; timestamps are integers. Nanosecond timestamps exceed 253, so parse with a library that keeps 64-bit integers.
- CSV has a header row, comma separators, quotes only where a value contains a comma, and nulls as empty fields.
- Parquet returns the whole range in one response, up to 31 days per request, in the same layout as the S3 archive: one file per symbol per UTC day. A single file is returned as
application/vnd.apache.parquet; several are returned as a tar archive of files named by their S3 paths. Types match Schema exactly.
Compression
JSON and CSV are compressed when you send Accept-Encoding: zstd or gzip; zstd is preferred when both are offered. Parquet is compressed internally with zstd and sent without transfer encoding.
Revisions
Corrections are published as new revisions; old data is never edited in place. Requests return the current revision by default. Pass revision=1 to read a specific revision, which stays available for 24 months. See Data quality.
Venues and symbols
venue takes a venue id from the venue reference; symbol takes a normalized symbol (Symbology). Both accept comma-separated lists, up to 50 symbols per request.
Market data endpoints
Every market data endpoint accepts these parameters. Endpoint sections list only their additional parameters. Responses contain the dataset's columns as listed on Schema, including the common columns.
| Parameter | Required | Description |
|---|---|---|
venue | yes | Venue id or comma-separated list. |
symbol | yes* | Symbol or list. *Optional on funding, open interest and liquidations, where omitting it returns every contract. |
start, end | yes, no | Time range. end defaults to now. |
clock | no | capture (default) or exchange. |
fields | no | Comma-separated columns to return. Common columns are always included. |
format, limit, cursor, revision | no | As above. |
Trades
Every execution with aggressor side. Additional parameter: source (fdc_capture or venue_archive).
curl -G https://api.financedatacloud.com/v1/trades \
-H "Authorization: Bearer $FDC_API_KEY" \
-d venue=hyperliquid -d symbol=BTC-PERP \
-d start=2026-09-15T14:30:00Z -d limit=1{
"data": [
{
"venue": "hyperliquid", "symbol": "BTC-PERP", "venue_symbol": "BTC",
"ts_exchange": 1789482600127000000, "ts_capture": 1789482600131482113,
"seq": 1094102785458213, "source": "fdc_capture", "region": "apne1",
"price": "104318.5", "size": "0.0421", "side": "buy",
"trade_id": "812774190531627", "notional": "4391.80885",
"taker_order_id": "141092377410", "maker_order_id": "141092371988",
"is_block": false
}
],
"next_cursor": "c_Q1nW8eHk3TzA0pLs"
}Quotes
Best bid and offer, one row per change. Additional parameter: origin (venue or book).
curl -G https://api.financedatacloud.com/v1/quotes \
-H "Authorization: Bearer $FDC_API_KEY" \
-d venue=hyperliquid -d symbol=ETH-PERP \
-d start=2026-09-15T14:30:00Z -d limit=1{
"data": [
{
"venue": "hyperliquid", "symbol": "ETH-PERP", "venue_symbol": "ETH",
"ts_exchange": 1789482600031000000, "ts_capture": 1789482600034120557,
"seq": 1094102785457990, "source": "fdc_capture", "region": "apne1",
"bid_price": "4012.4", "bid_size": "18.2051",
"ask_price": "4012.5", "ask_size": "6.933", "origin": "book"
}
],
"next_cursor": "c_Lw2Rk7pQn0VbX4sE"
}Candles
Additional parameter: interval (required): 1s, 1m, 5m, 1h or 1d. Candles are built from trades and bucketed on ts_exchange; empty buckets produce no row. Where the agreement with a venue includes its licensed historical archive, those rows carry source = "venue_archive".
curl -G https://api.financedatacloud.com/v1/candles \
-H "Authorization: Bearer $FDC_API_KEY" \
-d venue=hyperliquid -d symbol=SOL-PERP -d interval=1m \
-d start=2026-09-15T14:30:00Z -d limit=1{
"data": [
{
"venue": "hyperliquid", "symbol": "SOL-PERP", "venue_symbol": "SOL",
"ts_exchange": 1789482659874000000, "ts_capture": 1789482660002118930,
"seq": 1094102785911402, "source": "fdc_derived", "region": "apne1",
"interval": "1m", "ts_open": 1789482600000000000,
"open": "231.412", "high": "231.88", "low": "231.305", "close": "231.794",
"volume": "18422.17", "quote_volume": "4268013.42", "buy_volume": "10107.52",
"trade_count": 1184, "vwap": "231.6802"
}
],
"next_cursor": "c_8VnB2qLx0TfR5wHk"
}Order book L2
One row per price level per update. The first rows of every response are a synthetic snapshot of the book as of start (is_snapshot = true, snapshot_reason = "checkpoint"), built from the nearest earlier hourly snapshot plus the deltas in between; deltas follow. Rows from one venue message share seq, and the last has is_last = true. Rebuilding the book is covered in Order book depth.
| Parameter | Default | Description |
|---|---|---|
levels | full depth | Truncate to the top N levels per side. |
is_snapshot | both | true for snapshot rows only, false for deltas only. |
curl -G https://api.financedatacloud.com/v1/book/l2 \
-H "Authorization: Bearer $FDC_API_KEY" \
-d venue=hyperliquid -d symbol=BTC-PERP -d levels=20 \
-d start=2026-09-15T14:30:00Z -d limit=2{
"data": [
{ "venue": "hyperliquid", "symbol": "BTC-PERP", "venue_symbol": "BTC",
"ts_exchange": 1789482599980000000, "ts_capture": 1789482600000000000,
"seq": 1094102785455871, "source": "fdc_derived", "region": "apne1",
"side": "bid", "price": "104318", "size": "3.4182",
"is_snapshot": true, "snapshot_reason": "checkpoint", "is_last": false,
"checksum": 2214471093, "checksum_ok": null, "level_count": null },
{ "venue": "hyperliquid", "symbol": "BTC-PERP", "venue_symbol": "BTC",
"ts_exchange": 1789482599980000000, "ts_capture": 1789482600000000000,
"seq": 1094102785455871, "source": "fdc_derived", "region": "apne1",
"side": "bid", "price": "104317", "size": "1.077",
"is_snapshot": true, "snapshot_reason": "checkpoint", "is_last": false,
"checksum": 2214471093, "checksum_ok": null, "level_count": null }
],
"next_cursor": "c_Zp4Tn1Wq8LbV0eRm"
}Order book L3
Order-level events: add, modify, cancel, fill. Desk plan or above. Like L2, a response starts with a synthetic snapshot of every resting order at start, in queue order. Additional parameter: event, a comma-separated filter.
curl -G https://api.financedatacloud.com/v1/book/l3 \
-H "Authorization: Bearer $FDC_API_KEY" \
-d venue=hyperliquid -d symbol=BTC-PERP -d event=fill \
-d start=2026-09-15T14:30:00Z -d limit=1{
"data": [
{ "venue": "hyperliquid", "symbol": "BTC-PERP", "venue_symbol": "BTC",
"ts_exchange": 1789482600127000000, "ts_capture": 1789482600131482113,
"seq": 1094102785458213, "source": "fdc_capture", "region": "apne1",
"order_id": "141092371988", "event": "fill", "side": "ask",
"price": "104318.5", "size": "0.4579", "fill_size": "0.0421",
"trade_id": "812774190531627", "is_snapshot": false,
"snapshot_reason": null, "is_last": true,
"prev_price": null, "prev_size": "0.5", "keeps_priority": null,
"order_type": "limit", "reduce_only": false }
],
"next_cursor": "c_Rt6Ym3Xk9NcW1fPa"
}Order book L4
All L3 columns plus participant_id, counterparty_id (on fills) and entity_id. entity_id is filled only for accounts with chain intelligence and is null otherwise. Desk plan or above, on venues that publish attribution. Additional parameter: participant_id to filter to one or more accounts.
curl -G https://api.financedatacloud.com/v1/book/l4 \
-H "Authorization: Bearer $FDC_API_KEY" \
-d venue=hyperliquid -d symbol=BTC-PERP -d event=fill \
-d start=2026-09-15T14:30:00Z -d limit=1{
"data": [
{ "venue": "hyperliquid", "symbol": "BTC-PERP", "venue_symbol": "BTC",
"ts_exchange": 1789482600127000000, "ts_capture": 1789482600131482113,
"seq": 1094102785458213, "source": "fdc_capture", "region": "apne1",
"order_id": "141092371988", "event": "fill", "side": "ask",
"price": "104318.5", "size": "0.4579", "fill_size": "0.0421",
"trade_id": "812774190531627", "is_snapshot": false,
"snapshot_reason": null, "is_last": true,
"prev_price": null, "prev_size": "0.5", "keeps_priority": null,
"order_type": "limit", "reduce_only": false,
"participant_id": "0x5b3e1f0c9a2d7e48b6c1a09f3d2e7b4c8a1f6e20",
"counterparty_id": "0xa04c7d2e19b38f5061c4e7a2d9b0f3e8c5a1d724",
"entity_id": null }
],
"next_cursor": "c_Hb0Vq5Ld2XsK8wNz"
}Funding
| Parameter | Default | Description |
|---|---|---|
kind | both | settled (one row per settlement) or predicted (each published change). |
grid | none | 1h returns one row per contract per UTC hour, with the rate scaled to one hour, so venues with different intervals line up. |
rate is the rate for one interval of interval_s seconds, and rate_1h is the same rate scaled to one hour. rate_ann is simple, not compounded: rate_1h times 8,760. With grid=1h, rows carry ts_grid, predicted_rate_1h, stale and age_s instead (see Schema). Deribit accrues funding continuously; its rows use an 8-hour reference interval. Cross-venue comparisons are discussed in Aligning funding across venues.
curl -G https://api.financedatacloud.com/v1/funding \
-H "Authorization: Bearer $FDC_API_KEY" \
-d venue=hyperliquid -d symbol=BTC-PERP -d kind=settled \
-d start=2026-09-15 -d limit=1{
"data": [
{ "venue": "hyperliquid", "symbol": "BTC-PERP", "venue_symbol": "BTC",
"ts_exchange": 1789430400000000000, "ts_capture": 1789430400118402276,
"seq": 1094088120415527, "source": "fdc_capture", "region": "apne1",
"kind": "settled", "rate": "0.0000125", "interval_s": 3600,
"rate_1h": "0.0000125", "rate_ann": "0.1095",
"ts_funding": 1789430400000000000, "accrual": "0.0000125",
"mark_price": "103980", "index_price": "103962.4" }
],
"next_cursor": "c_Ws9Pk2Hn6RtB4mLq"
}Open interest
Open interest in contracts, base units and USD, at the venue's push cadence or sampled every 5 seconds (origin = "poll").
curl -G https://api.financedatacloud.com/v1/open-interest \
-H "Authorization: Bearer $FDC_API_KEY" \
-d venue=hyperliquid -d symbol=ETH-PERP -d start=2026-09-15 -d limit=1{
"data": [
{ "venue": "hyperliquid", "symbol": "ETH-PERP", "venue_symbol": "ETH",
"ts_exchange": 1789430400842000000, "ts_capture": 1789430400844510932,
"seq": 1094088120419804, "source": "fdc_capture", "region": "apne1",
"oi_contracts": "412883.4021", "oi_base": "412883.4021",
"oi_notional_usd": "1656708544.13", "origin": "stream" }
],
"next_cursor": "c_Ka7Nf3Vb1QwT9xRe"
}Liquidations
Forced closes as published by the venue. side is the side of the liquidation order (sell closes a long). participant_id is returned on Desk and Enterprise where the venue attributes it.
curl -G https://api.financedatacloud.com/v1/liquidations \
-H "Authorization: Bearer $FDC_API_KEY" \
-d venue=hyperliquid -d start=2026-09-15 -d end=2026-09-16 -d limit=1{
"data": [
{ "venue": "hyperliquid", "symbol": "SOL-PERP", "venue_symbol": "SOL",
"ts_exchange": 1789438117260000000, "ts_capture": 1789438117262941008,
"seq": 1094090337102745, "source": "fdc_capture", "region": "apne1",
"side": "sell", "price": "228.904", "price_kind": "execution",
"size": "1310", "notional_usd": "299864.24", "method": "book",
"participant_id": "0x7e2b90c4d1a8f356e0b9c2d4a7f1e3b5c8d0a692",
"throttled": false, "trade_id": "812770455019284" }
],
"next_cursor": "c_Ue1Mp8Gx4ZsC6vYn"
}Mark, index and oracle prices
curl -G https://api.financedatacloud.com/v1/mark-index \
-H "Authorization: Bearer $FDC_API_KEY" \
-d venue=hyperliquid -d symbol=BTC-PERP -d start=2026-09-15T14:30:00Z -d limit=1{
"data": [
{ "venue": "hyperliquid", "symbol": "BTC-PERP", "venue_symbol": "BTC",
"ts_exchange": 1789482602000000000, "ts_capture": 1789482602003317650,
"seq": 1094102785501133, "source": "fdc_capture", "region": "apne1",
"mark_price": "104321", "index_price": "104298.7",
"oracle_price": "104298.7", "basis_bps": 2.13809 }
],
"next_cursor": "c_Ty3Rb6Kp0NdF2wQs"
}Reference and derived endpoints
Instruments
| Parameter | Default | Description |
|---|---|---|
venue, symbol, venue_symbol | all | Filter by venue, normalized symbol or native symbol. |
base | all | Normalized base asset, for example BTC. |
instrument_type | all | spot, perp, future or option. |
as_of | now | Return the rows in force at that time, including since-delisted instruments. |
history | false | true returns every version of each instrument. |
curl -G https://api.financedatacloud.com/v1/instruments \
-H "Authorization: Bearer $FDC_API_KEY" \
-d venue=hyperliquid -d symbol=BTC-PERP{
"data": [
{ "venue": "hyperliquid", "symbol": "BTC-PERP", "venue_symbol": "BTC",
"source": "fdc_capture", "instrument_id": 100000017,
"instrument_type": "perp", "base": "BTC", "quote": "USDC", "settle": "USDC",
"contract_kind": "linear", "contract_size": "1", "multiplier": 1,
"tick_size": "1", "lot_size": "0.00001", "min_notional": "10",
"expiry": null, "strike": null, "option_type": null, "status": "trading",
"listed_at": 1677628800000000000, "delisted_at": null, "successor_id": null,
"valid_from": 1789084800000000000, "valid_to": null }
],
"next_cursor": null
}Extended fields
| Parameter | Default | Description |
|---|---|---|
fields | all | Field keys or field:variant pairs, comma-separated. |
emit | both | grid or event to return one kind only. |
layout | long | wide returns one column per field and variant. |
profile | default | Custom parameter profile (Enterprise). |
Rows are filtered on ts_capture regardless of clock. Fields and variants are defined in Extended fields.
curl -G https://api.financedatacloud.com/v1/extended \
-H "Authorization: Bearer $FDC_API_KEY" \
-d venue=hyperliquid -d symbol=BTC-PERP -d fields=ofi_ml:l5,vpin \
-d emit=grid -d start=2026-09-15T14:30:00Z -d limit=2{
"data": [
{ "venue": "hyperliquid", "symbol": "BTC-PERP", "venue_symbol": "BTC",
"ts_exchange": 1789482600096000000, "ts_capture": 1789482600100000000,
"seq": 1094102785457102, "source": "fdc_derived", "region": "apne1",
"field": "ofi_ml", "variant": "l5", "value": 0.84211,
"on_grid": true, "emit": "grid",
"ts_available": 1789482600100000000, "ref_id": null },
{ "venue": "hyperliquid", "symbol": "BTC-PERP", "venue_symbol": "BTC",
"ts_exchange": 1789482600096000000, "ts_capture": 1789482600100000000,
"seq": 1094102785457102, "source": "fdc_derived", "region": "apne1",
"field": "vpin", "variant": "value", "value": 0.3127,
"on_grid": true, "emit": "grid",
"ts_available": 1789482600100000000, "ref_id": null }
],
"next_cursor": "c_Pn5Wd8Rb2KtM0xVc"
}Chain flows and entities
Requires the chain scope (Enterprise, or Desk with the add-on). /v1/chain_flows filters by entity_id, chain, venue, direction, link_type, min_confidence and time; /v1/chain_entities by address, entity_id, chain and as_of. Columns and examples are in Chain intelligence.
Gaps
Intervals that survived dual-region merging without data. Intervals where data is present but a quality bound was missed are not gaps; they are reported with the daily quality metrics on Data quality. Additional parameters: dataset (for example book_l3) and reason. symbol is optional; venue-wide gaps have symbol = null.
curl -G https://api.financedatacloud.com/v1/gaps \
-H "Authorization: Bearer $FDC_API_KEY" \
-d venue=hyperliquid -d dataset=book_l3 \
-d start=2026-06-01 -d end=2026-07-01{
"data": [
{ "gap_id": "gap_hl_20260611_0007", "venue": "hyperliquid",
"dataset": "book_l3", "symbol": null,
"seq_start": 1020315471708160, "seq_end": 1020315634237439,
"ts_start": 1781179412804113201, "ts_end": 1781179431266048873,
"reason": "venue_outage", "regions_missing": ["apne1", "euw1"],
"resync": true, "detected_by": "seq",
"detected_at": 1781179413560220514, "revision": 1,
"note": "API nodes stopped publishing; both regions disconnected within 40 ms." }
],
"next_cursor": null
}Usage
Usage for your account in a billing month. Optional parameter: month (YYYY-MM, default the current month). Not paginated and not counted against your rate limit.
curl -G https://api.financedatacloud.com/v1/usage \
-H "Authorization: Bearer $FDC_API_KEY" -d month=2027-03{
"data": [
{
"month": "2027-03", "plan": "desk", "rate_limit_rps": 50,
"requests": 412883, "rows": 1840227391, "bytes": 96211843302,
"ws_peak_connections": 4, "ws_peak_subscriptions": 188,
"by_endpoint": {
"/v1/trades": { "requests": 120554, "rows": 611204338 },
"/v1/book/l3": { "requests": 88101, "rows": 902114870 },
"/v1/extended": { "requests": 204228, "rows": 326908183 }
}
}
],
"next_cursor": null
}Errors
Errors use standard HTTP status codes and the same JSON body for every format. The request_id is also returned in the X-Request-Id header.
{
"error": {
"status": 403,
"code": "plan_required",
"message": "book_l3 is not included in the Researcher plan.",
"request_id": "req_01JA7Q3V8K2M4XR9T6WZB5NDHC"
}
}| Status | Code | Meaning |
|---|---|---|
| 400 | invalid_request | Malformed or unknown parameter, or a bad time format. |
| 400 | invalid_cursor | Cursor older than 24 hours, or used with different parameters. |
| 400 | range_too_large | A Parquet request spanning more than 31 days. Split it, or use S3. |
| 400 | too_many_symbols | More than 50 symbols in one request. |
| 401 | missing_api_key | No Authorization header, or a scheme other than Bearer. |
| 401 | malformed_api_key | Not a prefix plus 32 base62 characters. |
| 401 | invalid_api_key | Well-formed but unknown. |
| 401 | revoked_api_key, expired_api_key | Revoked, or past its scheduled expiry. |
| 403 | insufficient_scope | The key lacks the scope for this interface. |
| 403 | plan_required | The dataset, venue or profile is not in your plan. |
| 403 | test_key_out_of_range | A test key asked for data outside the sample day or symbols. |
| 403 | ip_not_allowed | Source address not on the key's allowlist. |
| 403 | account_suspended | Contact daniel@financedatacloud.com. |
| 404 | not_found | Unknown endpoint, venue or symbol. |
| 404 | venue_not_available | The venue is planned but not live yet. See Coverage. |
| 429 | rate_limited | Request rate exceeded. Wait for Retry-After seconds. |
| 500 | internal_error | Our fault. Safe to retry with backoff. |
| 503 | unavailable | Temporary overload or maintenance. Safe to retry; see Status. |
Retry 429 and 5xx with backoff. Other 4xx errors will not succeed until the request, key or plan changes.