Responses & Entitlements
The response envelope, entitlement filtering, and why absent means absent
The envelope
Every JSON success response has the same shape:
{
"data": { "...": "..." },
"meta": {
"entitlement_version": 7
}
}data is the payload — an object or an array depending on the endpoint.
meta always leads with entitlement_version; endpoints add keys after it
(for example, meta.next on paginated lists).
Redaction is absence
Fields you are not entitled to are absent from data.attributes, never
null. A null you do receive is a real value from the canonical record
(for example, a suppressed market-report measure).
Why this matters
You can treat presence as authorization: if a field appears, your entitlement includes it. There is no need to distinguish "hidden" from "empty".
Fail-closed reads
If the platform cannot prove a response would be filtered correctly — for
example, a canonical-store disagreement — the request fails closed with
503 { "error": "service_unavailable" } rather than returning unverified
data. Retry with backoff.