---
title: "GET /api/v1/series"
method: GET
path: "/api/v1/series"
tags: ["v1"]
---

# GET /api/v1/series

`GET /api/v1/series`

## Request

- Base URL: `https://api.blackforge.so` (the document declares no server; this is the origin it was published from)
- URL: `https://api.blackforge.so/api/v1/series`
- Auth: API key in header `x-api-key`

## Query parameters

- `exchange` string, required
- `symbol` string, required
- `metric` string, required
- `from` string, required
- `to` string, required
- `interval` '1m' | '5m' | '1h' | '1d', required

## Response `200`

Time-bucketed series of one metric for an exchange/symbol pair, gated by the key plan (venues, granularity, history, columns, rows). ROW QUALITY: every element of `points` carries two extra integers beside `ts` and `value` — `quality`, the row-quality bitmask ORed across the native 5-minute windows in that bucket (dirty if ANY window was), and `qualityAll`, the same bitmask ANDed (set only where EVERY window was). They are per point, not a parallel array. Decode them with the `bits` table on the `qualityFlags` entry of GET /v1/catalog. Nothing is ever hidden, filtered or nulled on account of quality: values are exactly as measured and these two integers tell you which to trust. A column a row never measured is null: a row rebuilt from the venue trade archive (TRADES_BACKFILLED) serves its book, enrichment and context columns as null, and coarser buckets average only the rows that measured them.

---

[API](https://skmtc.dev/blackforge/apis/blackforge-data-api.md) · [All operations](https://skmtc.dev/blackforge/apis/blackforge-data-api/llms.txt) · [OpenAPI document](https://skmtc.dev/blackforge/apis/blackforge-data-api/revisions/04eadd230b1b?raw)
