GET /api/v1/history Bearer

Pull stored rows for one symbol and time window.

History is request/response: send a start and end time, get rows back oldest first, then the request ends. Use it for backfills, research queries, and reconnect recovery after a live stream drops.

Large ranges are paginated by time. Responses cap at 200,000 rows. When that cap is hit, the response includes has_more: true and next_start. Pass next_start back as start to get the next page.

Parameters

ParamTypeDescription
exchangestringrequiredVenue exchange name (e.g. binance, bybit, okx, coinbase).
marketstringrequiredMarket type (spot or perpetual).
symbolstringrequiredExchange symbol.
event_typestringrequiredohlcv or funding_rate.
starttimerequiredInclusive lower bound. ISO date, RFC3339, or Unix ms.
endtimerequiredExclusive upper bound. Must be after start.
intervalstringoptionalOHLCV bars only. Default 1m. (1m, 5m, 15m, 1h, 4h, 1d)
limitintoptionalMax rows per call. Default and hard cap 200,000.

Response shape

has_more and next_start only appear when another page is available.

{
  "exchange": "binance",
  "market": "perpetual",
  "symbol": "BTCUSDT",
  "event_type": "ohlcv",
  "interval": "1m",
  "data": [
    {"open_time": 1704067200000, "open": 42100, "high": 42300, ...}
  ],
  "count": 1440,
  "has_more": true,
  "next_start": "2024-01-02T00:00:00Z"
}

Try it

import requests

params = {
    "exchange": "binance",
    "market": "perpetual",
    "symbol": "BTCUSDT",
    "event_type": "ohlcv",
    "interval": "1m",
    "start": "2024-01-01",
    "end": "2024-02-01",
}
r = requests.get(
    "https://dackta.com/api/v1/history",
    params=params,
    headers={"Authorization": "Bearer YOUR_TOKEN"},
)
r.raise_for_status()
print(r.json()["data"][:5])