Response format
Xenia does not wrap responses in astatus/statusCode envelope. The HTTP status code carries success/failure, and the body shape depends on the endpoint. There is no requestId field.
Success responses
The exact shape depends on the endpoint, but it is always one of these: List / query endpoints (e.g. task catalog, submission records):Successful writes return HTTP 200, not 201. Read the HTTP status code — do not look for a
status: true or statusCode field, they do not exist.Error responses
Errors return a non-2xx HTTP status with one of these bodies:error.message for detail.
HTTP status codes
There is no general request rate limiter on the API, so you will not normally see
429. Very large unfiltered queries fail with a 504 from the load balancer at ~60 seconds rather than a timeout body — always scope reporting queries with a date range and page large result sets.Common errors & solutions
401 — Invalid client credentials
- The
x-client-key/x-client-secretpair is wrong, or the key was deactivated. Re-check the values or create a new key.
User not found in the workspace (the x-client-user you passed isn’t a member of the key’s workspace) and Client does not belong to this workspace (the {workspaceId} in the path doesn’t match the key’s workspace).
workspace-id header unless the path contains {workspaceId}.)
403 — Forbidden
Two distinct cases share this status:-
Route not allow-listed for API keys:
The endpoint you called isn’t part of the API-key surface. Only the endpoints in this API Reference are reachable with a client key — check the path and method.
-
Permission denied for the key’s user: the route is allow-listed, but the key’s default user lacks the permission it requires (e.g.
CAN_VIEW_REPORTING,CAN_MANAGE_USERS). Assign the key a default user whose role grants the needed access.
404 — Not Found
- Double-check the path (note reads and reports live under
/api/v1/ops/..., user/grid/schedule endpoints under/api/v1/mgt/...) and that the resource ID belongs to the key’s workspace.
400 — Bad Request
- A required field is missing or a value is malformed (bad UUID, invalid date). Review the endpoint’s request schema.
504 — Gateway Timeout
- The query didn’t finish within ~60 seconds at the load balancer. Add a
fromDate/toDaterange, other filters, or page the results withoffset/limit.
Best practices
Branch on HTTP status, then read error.message
Validate UUIDs before sending
Scope large queries
Always send a date range and page results to stay under the ~60s limit:meta.totalCount from the response to know when to stop paging.
Getting help
If you encounter persistent errors, gather the request endpoint + method, the fullerror.message, and your request payload (without secrets), then contact support@xenia.team.
Next steps
Authentication
How client keys and tokens work
Data Extraction
Pull reporting data into BI tools