Composite time series values let you bundle multiple named fields (open, high, low, close, volume) into a single timestamped record. This guide covers ingesting daily OHLCV bars and querying them efficiently.
What is a composite value?
A composite time series value is a parent record containing multiple named items. Each item corresponds to a field defined on the composite series type schema. For OHLCV bars, the schema defines five fields: open, high, low, close, and volume.
Benefits over separate scalar series:
All five values for one day are a single API call (and a single billable database item)
Archiving or restoring a composite value affects all its items atomically
The schema enforces required fields — you can’t accidentally post an incomplete bar
Discover the schema first
Before creating values, fetch the composite series type to understand its required fields:
type_resp = client.get("/series/ohlcv-daily").json()
fields_resp = client.post("/time-series-type-fields/filter", json={
"filter": {"and": [{ "field": "type_id", "op": "eq", "value": "ohlcv-daily" }]}
}).json()
required_fields = [f["field_key"] for f in fields_resp["data"] if f["is_required"]]
# ['open', 'high', 'low', 'close', 'volume']
Ingest OHLCV bars
Create one composite value per instrument per day. All items are submitted in a single request:
If any required field is missing from items, the API returns 422 Unprocessable Entity. Validate your source data before calling the API to avoid partial failures.
Querying composite values
Retrieve bars for a date range. Each result includes all items: