Errors
The API uses standard HTTP status codes. Error bodies come in a few shapes, depending on where in the request the problem was found.
Status codes
| Status | Meaning | What to do |
|---|---|---|
200 | Success | |
400 | Invalid parameters, or a client you cannot access | Fix the request. The message says what is wrong. Do not retry unchanged. |
401 | Missing, invalid or expired credentials, or an endpoint outside your license | Refresh your token and retry once. If it persists, check your credentials and license. |
404 | Document not found, or unknown client on Grouped performance | Check the id. |
429 | Rate limit or queue limit reached | Wait for Retry-After seconds, then retry. See Rate limits. |
500 | Unexpected server error | Retry later with backoff. If it persists, contact support with the time of the request. |
Error body shapes
Message string
Most endpoint-specific errors return a JSON-encoded string:
Validation problem
When a required parameter is missing or has the wrong type, for example no yearMonth or yearMonth=sept, the API returns a standard validation problem document:
Plain text
License and rate-limit rejections return plain text (Content-Type: application/text):
Server error
Empty
Authentication failures on data endpoints (missing or expired token) return 401 with no body.
Error messages
These are the messages you can receive, so you can match on them or show them to users.
| Status | Message | Endpoints |
|---|---|---|
400 | The user does not have access to this client or the client does not exist. | All client-scoped endpoints |
400 | The user does not have access to this tenant or the tenant does not exist. | All endpoints that take tenantId |
400 | apiKey and apiSecret are required. | Auth token |
401 | Invalid credentials. | Auth token |
400 | The value of historicalMonths must be between 1 and 12. | Holdings |
400 | groupBy must be one of: consolidated, bankAccount, investmentVehicle, assetClass, customField. | Grouped performance |
400 | id=0 is only valid when groupBy is "consolidated". | Grouped performance |
400 | customFieldId is required and must be between 1 and 10 when groupBy is "customField". | Grouped performance |
400 | customFieldId is only valid when groupBy is "customField". | Grouped performance |
400 | investmentVehicleNodeId is required when groupBy is "investmentVehicle". | Grouped performance |
400 | investmentVehicleNodeId is only valid when groupBy is "investmentVehicle". | Grouped performance |
400 | period must be a single value between 0 and 4. | Grouped performance |
400 | performanceMetric must be one of: IRR, TWR, XIRR. | Grouped performance |
404 | Unknown client id. | Grouped performance |
400 | Both start and end date should be provided | Published reports |
400 | Invalid date format. Please provide date in yyyyMMdd format | Published reports |
400 | Start date should be less than end date | Published reports |
404 | Problem details with "title": "Not Found" | Documents (not found or not accessible) |
401 | Unauthorized. Invalid license. | Endpoints outside your license |
429 | Too many requests. Please wait and try again. | All authenticated endpoints |
Over MCP, these messages come back as tool errors. MCP tools also reject a missing or zero client id with A client id greater than 0 is required. Use get_clients to find the client id.