Overview
The Boomerang Developer API uses standard HTTP status codes together with structured error codes and a consistent JSON error format. This page covers:- Common HTTP status codes
- The JSON error shape
- Core error codes, including rate-limit errors
- How to use
trace_idwhen investigating failures
Standard HTTP status codes
| HTTP status | Meaning | Remediation |
|---|---|---|
200 | OK | None. |
400 | Bad Request | Correct the request body or query parameters. |
401 | Unauthorised | Fix token, header format, or expiry. |
403 | Forbidden | Check server ownership and permissions. |
404 | Not Found | Check the URL path and identifiers. |
409 | Conflict | Resolve current resource state, then retry. |
422 | Unprocessable Entity | Correct field values and constraints. |
429 | Too Many Requests | Reduce request rate, use X-RateLimit-* and X-Credits-Remaining headers, and apply back-off logic. |
500 | Internal Server Error | Retry later; if persistent, contact Boomerang Customer Service with trace_id. |
503 | Service Unavailable | Retry with back-off; if persistent, contact Boomerang Customer Service with trace_id. |
trace_id from the error body.
Error response format
All non-2xx responses return a JSON body with a consistent structure.-
status– machine-readable status string (for example,RESOURCE_NOT_FOUND). -
code– four-digit error code, independent of the HTTP status. -
http_status– HTTP status code returned for this response. -
method– HTTP method used (for example,GET,POST). -
path– request path that generated the error. -
timestamp– Unix epoch timestamp in milliseconds. -
trace_id– correlation identifier for this request; include this when contacting Boomerang about an issue. -
details– object containing human-oriented context:details.message– human-readable explanation suitable for logs and dashboards.details.hint– short remediation suggestion that can be surfaced to operators.
Error codes
Error codes are four-digit integers organised by category:1xxx– Validation and request shape issues2xxx– Authentication and authorisation failures3xxx– Resource existence and state conflicts4xxx– Rate limits and capacity issues5xxx– Internal and unexpected errors6xxx– Successful operations
| Code | Status | Description |
|---|---|---|
1001 | VALIDATION_FAILED | Request body or parameters invalid |
1002 | SEMANTIC_ERROR | Semantically invalid request |
2001 | AUTHENTICATION_FAILED | Missing, invalid, or malformed auth token |
2002 | NOT_AUTHORISED | Token is valid but not permitted |
2404 | RESOURCE_NOT_FOUND | Requested resource does not exist |
3001 | RESOURCE_CONFLICT | Request conflicts with current resource |
4001 | RATE_LIMIT_HOURLY | Per-key hourly rate limit exceeded |
4002 | USAGE_EXHAUSTED | No remaining monthly quota or credits for the server |
5001 | INTERNAL_ERROR | Unexpected server-side error |
5002 | SERVICE_UNAVAILABLE | Service temporarily unavailable or undergoing maintenance |
6200 | SUCCESS | Request completed successfully |
Rate-limiting errors
When rate limits or usage limits are reached, the API returns HTTP429 Too Many Requests with an error body in the standard format.
Representative scenarios:
-
Hourly limit exceeded for a key
- HTTP status:
429 - Error code:
4001(RATE_LIMIT_HOURLY) - Behaviour: further requests from this key are rejected until the sliding 60-minute window allows more calls.
- Headers:
X-RateLimit-Limit,X-RateLimit-Remaining,X-RateLimit-Reset. - Typical
details.hint: indicates that the hourly limit for this key has been reached and when it will reset.
- HTTP status:
-
All quota and credits exhausted for a server
- HTTP status:
429 - Error code:
4002(USAGE_EXHAUSTED) - Behaviour: further successful requests are rejected until the next monthly reset or additional credits are purchased.
- Headers:
X-Credits-Remaining(zero or very low) and possiblyX-RateLimit-*indicating that usage is blocked by quota. - Typical
details.hint: indicates that the server has no remaining monthly quota or credits and points to upgrading or purchasing credits.
- HTTP status:
X-RateLimit-Limit– maximum allowed in the current window for this key.X-RateLimit-Remaining– remaining requests in the current window for this key.X-RateLimit-Reset– Unix epoch timestamp when the window resets.X-Credits-Remaining– total remaining credit-pack balance for the server (if applicable).
Handling errors in clients
Client implementations should:- Use the HTTP status as the primary success/failure signal.
-
Use
codeandstatusfor programmatic handling and branching. -
Use
details.messageanddetails.hintfor human-readable diagnostics. -
Log
trace_idandtimestampfor every non-2xx response. -
On
429responses:- Respect
X-RateLimit-Resetand back off instead of retrying in a tight loop. - Adjust request patterns (for example, batch and spread work) to reduce pressure.
- Respect
trace_id, status, code, and the relevant request context.