Requests, responses, and errors
Success response
{
"data": { ... },
"meta": { "requestId": "uuid" }
}Error response
{
"error": { "code": "FORBIDDEN", "message": "..." },
"meta": { "requestId": "uuid" }
}Error codes
UNAUTHORIZED (401), missing, invalid, expired, or revoked token
FORBIDDEN (403), missing scope or workspace permission
NOT_FOUND (404), resource or route not found
BAD_REQUEST (400), invalid body or parameters
RATE_LIMITED (429), too many requests; retry after the indicated seconds
INTERNAL_ERROR (500), server error; include requestId when contacting support
Rate limits
60 read requests per minute per token
20 write requests per minute per token
429 responses include retry guidance in the message
Pagination
List endpoints accept limit (default 50, max 100) and offset (default 0) as query parameters.
Optional expansions (include)
Some GET detail endpoints accept an include query parameter (comma-separated). Example: GET /kpis/{kpiId}?include=latestHistory attaches the most recent history row. See Reading data (GET API) and each resource guide for supported values.