Spot markets, every print.
Trades, top-of-book quotes and candles for every listed spot pair, in one symbology. Spot is planned for nine exchanges, each subject to a data agreement with the exchange. Each row carries the venue's timestamp and ours, in nanoseconds.
Three tables for spot.
tradesOne row per print, with price, size, aggressor side and the venue's trade id. Venues that report the maker's side, or a buyer-is-maker flag, are mapped to the aggressor side so side means the same thing everywhere.quotesL1 best bid and offer with sizes, one row each time the top of the book changes. Derived from our own L2 book where the venue has no dedicated BBO channel.candlesBuilt from trades at 1s, 1m, 5m, 1h and 1d. Intervals with no trades produce no row; we do not carry the previous close forward.Spot depth lives in book_l2, book_l3 and book_l4, with the same symbols and timestamps as the tables here.
| TS_EXCHANGE (UTC) | PRICE | SIZE | SIDE |
|---|---|---|---|
| 14:02:07.118 | 98,412.50 | 0.0410 | buy |
| 14:02:07.118 | 98,412.60 | 0.2000 | buy |
| 14:02:07.304 | 98,411.90 | 0.0062 | sell |
| 14:02:07.551 | 98,411.80 | 1.1500 | sell |
| 14:02:07.552 | 98,411.70 | 0.3380 | sell |
| 14:02:07.902 | 98,412.10 | 0.0150 | buy |
| 14:02:08.016 | 98,412.40 | 0.0905 | buy |
Columns, as delivered.
Each table also carries the common columns: venue, symbol, venue_symbol, ts_exchange, ts_capture, seq, source.
TRADES
| Column | Type | Meaning |
|---|---|---|
price | decimal | Execution price in quote currency. |
size | decimal | Quantity in base currency. |
side | string | "buy" or "sell", the aggressor side. |
trade_id | string | Venue trade id, unchanged. |
QUOTES
| Column | Type | Meaning |
|---|---|---|
bid_price | decimal | Best bid. |
bid_size | decimal | Total size at the best bid. |
ask_price | decimal | Best offer. |
ask_size | decimal | Total size at the best offer. |
CANDLES
| Column | Type | Meaning |
|---|---|---|
interval | string | 1s, 1m, 5m, 1h or 1d. |
ts_open | int64 | Interval start, ns, on venue time. |
open high low close | decimal | Trade prices within the interval. |
volume | decimal | Base volume. |
quote_volume | decimal | Quote volume (price × size). |
buy_volume | decimal | Base volume with aggressor side buy. |
vwap | decimal | Volume-weighted average price. |
trade_count | int64 | Number of prints. |
ts_exchange so that venue-supplied rows, which have no capture timestamp, and captured rows fall into the same intervals. Spot symbols follow BASE-QUOTE (BTC-USDT, ETH-USDC, BTC-USD); the exchange's own spelling stays in venue_symbol. See symbology.History follows each venue agreement.
Spot venues are planned from Phase 2. The history available for each venue depends on the agreement with that venue.
Captured rows
Two regions, merged by sequence number, both timestamps present. Quotes, depth and every derived field start here.
Venue-supplied rows
Earlier trades and candles, where the agreement with the venue includes them. ts_capture and seq are null on these rows.
Overlap days
Where both sources cover a day, captured rows are served. Our checks on those days are described in data quality.
Nine spot venues planned.
Binance, Bybit and OKX are planned for Phase 2 (2027), Coinbase, Kraken and Bitget for Phase 3 (2028), and KuCoin, Bitfinex and Bitstamp for Phase 4 (2029), each subject to a data agreement with the exchange. Hyperliquid and Deribit are planned for derivatives only.
Full coverage matrixSame call on every venue.
Pass several venues and get one frame back, already in one symbology and one clock.
from fdc import Client
fdc = Client(api_key="fdc_live_...")
# one-minute candles for the same pair on three venues
candles = fdc.candles(
venues=["binance", "okx", "coinbase"],
symbol="BTC-USDT",
interval="1m",
start="2028-07-01",
end="2028-08-01",
).to_pandas()
# keep only rows we captured ourselves (both timestamps present)
trades = fdc.trades(venue="binance", symbol="BTC-USDT",
start="2027-09-01", end="2027-09-02").to_polars()
captured = trades.filter(trades["source"] == "fdc_capture")curl -G https://api.financedatacloud.com/v1/trades \
-H "Authorization: Bearer fdc_live_..." \
-d venue=binance -d symbol=BTC-USDT \
-d start=2027-09-01T00:00:00Z -d end=2027-09-01T00:05:00Z \
-d format=jsonRead next.
Need a spot venue sooner?
Pre-registered partners shape the order in which venues ship. Tell us the pairs and history you need.
EARLY ACCESS · PRE-SALE PRICINGPre-register for early access → DANIEL GARCIA · CEO & FOUNDERdaniel@financedatacloud.com →