> ## Documentation Index
> Fetch the complete documentation index at: https://docs.conare.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Errors & limits

> The stable error envelope, X-Request-Id correlation, HTTP status code meanings, rate-limit headers, and 402 quota-exhaustion behavior.

## The error envelope

Every error uses one stable shape — and never leaks internal tenant IDs or backend error text:

```json theme={null}
{
  "statusCode": 409,
  "code": "stale_source_version",
  "message": "Version 6 is older than the applied version 7.",
  "requestId": "req_...",
  "details": { }
}
```

Branch on `code`, not on `message` — messages can be reworded; codes are stable.

## Request IDs

Every response carries `X-Request-Id`. Send your own (1–128 characters; first character alphanumeric, then `A-Za-z0-9._:-`) to correlate one request through the Conare edge and memory plane; otherwise Conare generates one. Quote it in any support request.

## Status codes

| Status | Meaning                                                          | What to do                                                                       |
| ------ | ---------------------------------------------------------------- | -------------------------------------------------------------------------------- |
| `400`  | Invalid request (e.g. `model_not_served`, unknown collection ID) | Fix the request — the message says exactly what's wrong                          |
| `401`  | Missing or invalid key                                           | Check the Bearer token                                                           |
| `402`  | Usage allowance and overage budget exhausted                     | Response includes balance/reset metadata — surface it, don't blind-retry         |
| `403`  | Key lacks the required scope                                     | Grant the scope on the Integration                                               |
| `409`  | Version conflict on the source lifecycle                         | See [source-owned memories](/memory/lifecycle) — usually means "already durable" |
| `413`  | Content too large                                                | Split the payload                                                                |
| `429`  | Rate limited                                                     | Back off per the rate-limit headers                                              |
| `503`  | Backend not ready (e.g. `integration_unbillable`)                | Retry with backoff; check `/api/v1/status`                                       |

## Degradation instead of failure

Where a cheaper fallback exists, Conare degrades rather than erroring:

* **Deep recall** on an exhausted legacy quota returns `{ answer: null, results: [...], deepUsed: false }` — you still get ranked raw memories.
* **Suggestions** has no meaningful shallow fallback, so exhaustion is a hard `402` (legacy quota plans: `429`).
* **Malformed model output** on suggestions returns `{ suggestions: [], raw: "<text>" }` — treat `raw` as displayable fallback text.

## Never metered

Session ingest, `save`, and shallow search/recall are never metered, on any plan. Spend alerts fire at 75/90/100% and the default is a hard stop — no surprise overages.
