Skip to main content
Every non-2xx response uses a consistent JSON format. Classify errors by stable error.code, not the human-readable message.

Error response format

details is optional and machine-readable. Unknown detail fields should be ignored.

Request correlation

Every response includes an X-Request-Id header, and error bodies repeat it as error.request_id. Log that identifier with the failed operation and provide it to Brightalk support. Do not log API keys or full contact data. You may send X-Request-Id using 1–64 characters from A-Z, a-z, 0-9, ., _, :, or -. Brightalk replaces a missing or invalid value with a generated identifier.

Authentication distinctions

These responses describe credential usability without revealing resources belonging to another organization.

Status and error catalog

A known path with an unsupported method also includes Allow. Retry-After appears where waiting before another attempt is meaningful. Error responses never expose implementation names, private payloads, query details, or stack traces.

Recording download errors use a different, simpler body

The signed URL returned as download_url is not part of the versioned JSON API above — it is served from a different host with no API key, and a failed request returns {"error": "<code>"}, a bare string code with no message, request_id, or details. Two of its codes carry a contract you must act on differently: Treat these as opposites, not degrees of the same failure: 503 means try again later, 410 means the bytes are gone for good. A sync job that collapses both into “give up” will silently abandon recordings that come back on retry. The other codes on this URL (403 invalid_link, 404 not_found, 502 upstream_unavailable, 503 server_configuration_error) do not carry this specific retry/no-retry contract, but 502 and 503 server_configuration_error are also safe to retry with backoff — both mean a problem on our side, not a permanent statement about the recording.