Query warehouse facts
Read the latest row per entity or a bounded historical timeline for one data model. The schema exposes no mutations or subscriptions.
/api/graphql
Access and behavior
- Required scope
- api_read
- Authentication
- Bearer token (health is the only public field)
- Idempotency
- not-applicable; factQuery is read-only
- Operation ID
- factQuery
Request headers
| Header | Presence | Description |
|---|---|---|
| Authorization | Required | Short-lived service-account token. |
| Content-Type | Required | GraphQL JSON request envelope. |
Parameters
dataModelSlug
argument · Required
String!
Data-model slug resolved in the service account's workspace.
mode
argument · Optional
String
latest returns one current row per entity; timeline returns history.
Default: latest
timeAxis
argument · Optional
String
Choose observed_at or inserted_at for time-window filtering.
Default: observed_at
since
argument · Optional
DateTime
Inclusive lower time-window bound.
until
argument · Optional
DateTime
Upper time-window bound; defaults to now for timeline mode.
filters
argument · Optional
String
JSON array encoded as a GraphQL string; at most 20 filters.
sort
argument · Optional
String
Timeline sort field: observed_at, inserted_at, or entity_id.
Default: observed_at
sortDirection
argument · Optional
String
Timeline order: asc or desc.
Default: desc
limit
argument · Optional
Int
Rows per page; maximum 250 and also bounded by query complexity.
Default: 50
offset
argument · Optional
Int
Number of matching rows to skip.
Default: 0
Request body
application/json
Schema: GraphQLRequest
· Required
{
"query": "query CurrentFacts($slug: String!, $limit: Int!) {\n factQuery(dataModelSlug: $slug, mode: \"latest\", limit: $limit) {\n count\n hasNextPage\n results { entityId observedAt data }\n }\n}",
"variables": {
"limit": 25,
"slug": "order"
}
}
Success response
- Media type
- application/json
- Schema
- PageOfFact
Errors and retries
Keep x-request-id
from failed responses. Retry only rows marked retryable, and obey
Retry-After
when present.
| Status | Code | Recovery | Meaning |
|---|---|---|---|
| 401 | unauthorized | Do not retry unchanged | The bearer token is invalid or revoked. |
| 403 | forbidden | Do not retry unchanged | factQuery requires api_read and an active run-as member. |
| 200 | graphql_validation | Do not retry unchanged | The query, variables, slug, filter, or limit is invalid. |
| 200 | query_too_complex | Do not retry unchanged | Complexity exceeds 200, depth exceeds 10, or the document exceeds 8,000 tokens. |
| 429 | rate_limited | Retry after guidance | Wait for Retry-After before sending another request. |