Skip to main content
Every BlueReacher API failure returns the same JSON shape with a matching HTTP status code. Read the status code to decide whether to retry. Read the error.code to decide what to fix.

The error envelope

Failed requests return a single top-level error object. The body never contains partial success data.

HTTP status codes

Error codes

Other codes you will see: invalid_api_key (401), insufficient_permissions (403), resource_not_found (404), validation_failed (400), rate_limited (429), and internal_error (500).

Retry guidance by class

Send an external_id on every message. It makes retries safe: a duplicate returns 409 duplicate_external_id instead of sending the message twice. Rate limit responses carry X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, and Retry-After (seconds).

Reproducing an error

Use -i to see the status line and rate limit headers alongside the body.
The unnormalized to value returns:

Handling errors in code

This helper retries only the classes that are worth retrying and raises with the trace_id attached.
In JavaScript, log the whole envelope so the code and the trace stay together.

Using trace_id with support

Every response carries a trace_id, on success in the X-Trace-Id header and on failure inside the error envelope. It identifies one request in our logs and stays valid for 30 days. Store it with your own request logs. When you open a ticket at support@bluereacher.com, include the trace_id, the error.code, and the approximate timestamp. That is enough to pull the full request path without asking you for your payload or your API key. Never send us your API key.