Always branch on
error before reading data. On an error response, data is null.{ "page": ..., "total": ..., "data": ... } page object and report errors with statusCode
and message.
Tabular responses
List endpoints
GET /query/tabular/{model} returns data as an array of row objects. Each key is the model’s
public field name; the set of fields comes from the catalog (and from selections, if you passed
it). metadata carries the totals for the whole filtered result set, not just the current page.
Single-row endpoints
GET /query/tabular/{model}/{id} returns data as a single row object. Its metadata reports
which public field the lookup value matched on. Many models accept alternative identifiers (a slug
or a symbol) in addition to the primary key.
Timeseries responses
Timeseries responses are column-oriented: apoint_schema describes the values, and each point is a
compact array rather than a repeated object. This keeps large windows small on the wire.
Multi-series endpoints
GET /query/timeseries/{model}/{granularity} returns data with point_schema and a series
array.
Single-series endpoints
GET /query/timeseries/{model}/{granularity}/{seriesKey} flattens the same structure: key,
entity, point_schema, and points sit directly on data, with no series array and no
metadata.
Reading points
Individual values may benull where the underlying data has a gap.
point_schema fields
The
entity object describes what the series key stands for. For asset-keyed models, that is the
asset’s name, slug, and symbol. Any of these may be null.