Every error response uses the same envelope:Documentation Index
Fetch the complete documentation index at: https://productlane.mintlify.dev/docs/llms.txt
Use this file to discover all available pages before exploring further.
code- stable, machine-readable. Switch on this.message- human-readable summary. Safe to surface to operators; not always safe to surface to end users verbatim.details- optional, code-specific structure (validation paths, required scopes, rate-limit info).request_id- also returned as theX-Request-Idheader. Quote it in support tickets and we can pull the exact request from our logs.
X-Request-Id. Logging this header on the client side makes triage trivial.
Codes
| HTTP | Code | When |
|---|---|---|
| 400 | validation_failed | Body or query failed validation. details has the per-field reasons. |
| 401 | unauthenticated | Missing or invalid bearer token. |
| 403 | scope_required | Key doesn’t have the scope this endpoint requires. details lists required and granted. |
| 403 | forbidden | Authenticated but blocked (plan gating, deleted resource, etc.). |
| 404 | not_found | Resource doesn’t exist or has been deleted. |
| 409 | conflict | Semantic conflict (e.g. closing an already-closed live chat). |
| 410 | unsupported_key_version | You passed a v1 key to a v2 endpoint. |
| 422 | unprocessable | Well-formed request we still can’t process (e.g. malformed cursor). |
| 429 | rate_limited | Too many requests. See Rate limits. |
| 500 | internal_error | Our problem. Retry with backoff; if it persists, share the request_id. |
Details shapes
Thedetails field varies by code. The shapes you’ll actually inspect:
validation_failed
Array of per-field reasons:
path is a dotted path through the request body. Use it to highlight the offending field in your UI.
scope_required
rate_limited
Retry-After header - prefer that for retry timing.
Handling errors
Retry strategy
| Code | Retry? |
|---|---|
rate_limited | Yes - honour Retry-After. |
internal_error | Yes - exponential backoff (1s, 2s, 4s, …), give up after a few attempts. |
conflict | Sometimes - only if your retry resolves the conflict (e.g. re-fetch then re-submit). |
| Everything else | No. A retry will fail the same way. Fix the request. |