History over REST
- Base URL
- https://aperiodic.io/api/v1
- Auth
- X-API-KEY header
- Returns
- JSON with Parquet URLs
- Spec
- OpenAPI 3.0.3
Making a request
Every dataset is one endpoint, named after it: GET /api/v1/data/{dataset}. Send your key in the X-API-KEY header. Each dataset's page in the Datasets list shows its own request, ready to copy, and a Try it panel.
GET/api/v1/data/{dataset}
curl -H "X-API-KEY: $APERIODIC_API_KEY" \
"https://aperiodic.io/api/v1/data/ohlcv?exchange=binance-futures&symbol=perpetual-BTC-USDT:USDT&interval=1h×tamp=exchange&start_date=2026-07-01&end_date=2026-08-02"Parameters
The same six parameters on every dataset. The exchanges and intervals below are the full lists; each dataset's page shows the ones it has.
| Parameter | Values | Meaning |
|---|---|---|
timestampquery · required | exchangetrue | Timestamp source. 'exchange' uses the exchange-reported timestamp, 'true' uses actual arrival time at our servers. |
intervalquery · required | 15s30s1m5m15m30m1h4h1d | Aggregation time interval for the data. Sub-minute intervals (15s, 30s) require an Institutional plan. |
exchangequery · required | binance-futuresokx-perpshyperliquid-perps | Source exchange for the data. |
symbolquery · required | string | Trading pair symbol in the format of Atlas' universal symbology: https://github.com/aperiodic-io/atlas |
start_datequery · required | date | Start date for the data range (YYYY-MM-DD format). A metric series starts on the first day of the raw series it is computed from (see /metadata/raw); raw trades and quotes start binance-futures from 2020-01-01, okx-perps from 2019-09-01, hyperliquid-perps from 2025-01-01. Earlier days return no files. How far back you can go depends on the plan: 5 years on Pro, full history on Prime, Prime + Raw and Institutional. An earlier start_date than the plan reaches returns 403. |
end_datequery · required | date | End date for the data range (YYYY-MM-DD format). Must be greater than or equal to start_date. |
Files
A response lists the files that cover your range, oldest first. Each url is a pre-signed link to a Parquet file: fetch it straight away, and request the list again when the links expire.
- Before 2026-08-01: one file per month, without a day.
- From 2026-08-01: one file per day, with
dayset. - A range that spans the changeover returns the months, then the days. Your parameters stay the same either way.
{
"files": [
{
"year": 2026,
"month": 6,
"url": "https://ohlcv.aperiodic.io/binance-futures/1h/BTCUSDT/2026-06.parquet?X-Amz-Expires=300&..."
},
{
"year": 2026,
"month": 7,
"url": "https://ohlcv.aperiodic.io/binance-futures/1h/BTCUSDT/2026-07.parquet?X-Amz-Expires=300&..."
},
{
"year": 2026,
"month": 8,
"day": 1,
"url": "https://ohlcv.aperiodic.io/binance-futures/1h/BTCUSDT/2026-08-01.parquet?X-Amz-Expires=300&..."
},
{
"year": 2026,
"month": 8,
"day": 2,
"url": "https://ohlcv.aperiodic.io/binance-futures/1h/BTCUSDT/2026-08-02.parquet?X-Amz-Expires=300&..."
}
]
}| Status | Meaning |
|---|---|
200 | Successful response with download URLs for every existing file covering the range from the series' published start — one per month before 2026-08-01, one per day from 2026-08-01 onwards |
Errors
Errors come back as JSON with an error message and, for a request that failed validation, a details list.
| Status | Meaning |
|---|---|
400 | Bad request - missing or invalid parameters |
401 | Unauthorized - missing or invalid API key |
403 | Forbidden - the subscription does not cover this request |
404 | Unknown dataset |
500 | Server error - failed to resolve the series start or generate download URLs |
{
"error": "…",
"details": ["…"]
}History by plan
Each dataset's page names the cheapest plan that includes it. How far back you can request depends on your plan:
- Pro: the last 5 years, counted back from today.
- Every Prime plan and Institutional: the full history.
A start_date earlier than your plan allows is refused with a message that names the earliest date you can ask for. Compare plans.
Free preview
Without an account, a fixed slice of every dataset answers at /api/v1/data/preview/{dataset} with the shared key DEMO-KEY. The Try it panels on the dataset pages use it until you sign in.