# Errors and retries

Errors use `application/problem+json`. Use the HTTP status for control flow, the
stable problem type or title for classification, and the request ID for support.
The Gateway normalizes service-specific error bodies at the public boundary, so consumers
do not need to understand the internal service that handled an operation.

Retry `429` and transient `5xx` responses with bounded exponential backoff and
jitter, respecting `Retry-After` when present. Do not automatically retry
validation, authentication, authorization, or version-conflict responses.

```json
{
  "type": "https://docs.connectplane.com/problems/forbidden",
  "title": "permission_denied",
  "status": 403,
  "detail": "The API key does not grant this operation.",
  "request_id": "01J..."
}
```

Common stable titles include `invalid_request`, `authentication_required`,
`permission_denied`, `not_found`, `conflict`, `rate_limited`, `unavailable`, and
`timeout`. Details are safe for display but are not intended for programmatic matching.

