Skip to main content
The API is catalog-driven. Every model, column, filter operator, sort option, and granularity is declared in a source-controlled data catalog, and that catalog is exposed over the API itself. You never have to hardcode a field list or guess which filters a column supports. You can ask.

Tabular catalog

GET /query/tabular/catalog

Timeseries catalog

GET /query/timeseries/catalog
Neither endpoint needs an API key. Pass publicOnly=true to list only the models published in this reference; without it, internal models your key may not be able to query are listed too.

Tabular catalog

data.models is an array of tabular models. Trimmed to one model and three of its columns:

Model fields

Column fields

Filters are query-parameter suffixes

A column with "field": "circulatingMarketcap" and "filters": ["Gt", "Gte", "Lt", "Lte"] is filtered with ?circulatingMarketcapGte=1000000000; one with "field": "slug" and "filters": ["Eq", "IsOneOf"] with ?slugEq=bitcoin or ?slugIsOneOf=bitcoin,ethereum. There is no translation step: the catalog value is the suffix. The full operator list, with the value each one takes, is on Filtering & pagination.

Timeseries catalog

Trimmed to one model and three of its columns:
Timeseries models add three fields on top of the shared ones:

Built for agents

The catalog is the reason an AI agent can use this API without a hand-written integration. Two requests give it the complete, current surface area: every dataset, every field, every legal filter, every granularity, including access tiers, so it knows what it can reach before it tries.
1

Discover

Fetch both catalogs. You now have every model slug and its description.
2

Select

Match the user’s question to a model. access.tier tells you whether the key can query it.
3

Construct

Build the request from the columns: field names for selections and sortBy, field plus one of its filters values for each query parameter, intervals for the granularity path segment, and the primaryKey of the lookup table for a series key.
4

Interpret

For timeseries, use the response’s point_schema to label the point arrays; for tabular, the unit on each column tells you how to format the number.
Catalog fields change as models are added and columns are exposed. Fetch the catalog rather than pinning a snapshot, and treat unknown fields as forward-compatible additions.

Example: find every model with an hourly granularity

Example: list the sortable columns on a tabular model

Tabular catalog reference

The endpoint page, with the full response shape.

Timeseries catalog reference

The endpoint page, with the full response shape.

Finding an id

Which lookup table gives the series key of each timeseries model.