Response format
The { meta, data } envelope, and what every meta field means.
Every successful response has the same two-part shape:
{
"meta": {
"request_id": "req_7729f93d3facf68ff83e5c50",
"as_of": "2026-07-31T12:00:00.000Z",
"cache": "MISS",
"pagination": {
"page": 1,
"next_page": 2,
"limit": 10,
"returned": 10
}
},
"data": {
"results": [
"…"
]
}
}data is pure content — only the thing you asked for. Everything else lives in meta, and it
speaks the same language on every endpoint of every API: the same field names, the same types,
the same meanings. Learn it once.
meta is serialized first, so it is readable before the payload in a streamed or truncated
response.
Why the split
Platform facts never mix into your data. Pagination is the clearest case: a next_page inside
data would make your parsing depend on which endpoint you called, and would collide the day a
result object legitimately has a field by that name. In meta, navigation is navigation
everywhere.
It also means data can be handed straight to your own models. If you deserialize
data.results into a SearchResult[], nothing platform-specific comes along for the ride.
Fields
Only request_id is on every response. The rest depend on the endpoint, and each endpoint's
API reference lists exactly which ones it returns.
meta.request_idstringalways presentUnique id for this request, also returned as the X-Request-Id header and included in every error. Quote it in support requests.
meta.as_ofstring (ISO 8601)endpoint-dependentWhen this snapshot of the data was taken, in UTC. Data served from cache carries the time it was originally read, not the time you asked.
meta.cache"HIT" | "MISS"endpoint-dependentWhether the response came from a warm snapshot. Both are normal and neither changes the shape of the payload; a HIT is simply faster.
meta.paginationobjectendpoint-dependentNavigation for list endpoints — the next-page pointer, the page size and how many items this response returned. Always here, never inside data.
meta.warningsarrayendpoint-dependentNon-fatal notes about this response, each with a stable code and a human-readable detail. Absent when there is nothing to report.
Errors
Failures do not use this envelope. They return application/problem+json with a stable code —
see Errors. The one thing both shapes share is request_id, so you can trace any
response, successful or not.