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

# Problem catalog

> Every Cortex error code, its HTTP status, whether retrying helps, and the page that explains it.

Every Cortex failure carries a `code` and a `type`. The `type` is a URL that resolves to a page on this site, so an error message can point at its own explanation.

The base is `https://docs.cortex.foundation/problems`. Each code has a page at `/problems/{code}`, and the path is the snake\_case `code` — `rate_limited`, not `rate-limited`.

## Start with the status

| Status              | Usually means                                        | Where to look                                                                                                                                                                                                                        |
| ------------------- | ---------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **400 / 422**       | The request was malformed or the resource forbids it | [`validation_failed`](/problems/validation_failed), [`bad_request`](/problems/bad_request), [`invalid_state`](/problems/invalid_state)                                                                                               |
| **401 / 403**       | Sign-in, permission, or plan                         | [`unauthenticated`](/problems/unauthenticated), [`invalid_credential`](/problems/invalid_credential), [`forbidden`](/problems/forbidden), [`entitlement_required`](/problems/entitlement_required)                                   |
| **404 / 409 / 410** | The resource moved, changed, or was deleted          | [`not_found`](/problems/not_found), [`conflict`](/problems/conflict), [`gone`](/problems/gone)                                                                                                                                       |
| **413 / 415**       | The payload is too big or the wrong type             | [`payload_too_large`](/problems/payload_too_large), [`unsupported_media_type`](/problems/unsupported_media_type)                                                                                                                     |
| **429**             | Too fast, or out of plan quota                       | [`rate_limited`](/problems/rate_limited), [`quota_exceeded`](/problems/quota_exceeded), [`concurrency_limit_reached`](/problems/concurrency_limit_reached)                                                                           |
| **500–504**         | Our side                                             | [`internal`](/problems/internal), [`service_unavailable`](/problems/service_unavailable), [`no_capacity`](/problems/no_capacity), [`upstream_failure`](/problems/upstream_failure), [`upstream_timeout`](/problems/upstream_timeout) |

**Retryable: yes** means the same request can succeed later. **Retryable: no** means retrying changes nothing — the request, the plan, or the state has to change first.

## All codes

| Code                                                               | HTTP | Retryable |
| ------------------------------------------------------------------ | ---- | --------- |
| [`validation_failed`](/problems/validation_failed)                 | 422  | no        |
| [`bad_request`](/problems/bad_request)                             | 400  | no        |
| [`idempotency_key_reuse`](/problems/idempotency_key_reuse)         | 400  | no        |
| [`payload_too_large`](/problems/payload_too_large)                 | 413  | no        |
| [`unsupported_media_type`](/problems/unsupported_media_type)       | 415  | no        |
| [`unauthenticated`](/problems/unauthenticated)                     | 401  | no        |
| [`invalid_credential`](/problems/invalid_credential)               | 401  | no        |
| [`forbidden`](/problems/forbidden)                                 | 403  | no        |
| [`entitlement_required`](/problems/entitlement_required)           | 403  | no        |
| [`safety_intervention`](/problems/safety_intervention)             | 403  | no        |
| [`content_policy`](/problems/content_policy)                       | 403  | no        |
| [`jurisdiction_restricted`](/problems/jurisdiction_restricted)     | 403  | no        |
| [`not_found`](/problems/not_found)                                 | 404  | no        |
| [`conflict`](/problems/conflict)                                   | 409  | yes       |
| [`gone`](/problems/gone)                                           | 410  | no        |
| [`invalid_state`](/problems/invalid_state)                         | 422  | no        |
| [`quota_exceeded`](/problems/quota_exceeded)                       | 429  | no        |
| [`rate_limited`](/problems/rate_limited)                           | 429  | yes       |
| [`concurrency_limit_reached`](/problems/concurrency_limit_reached) | 429  | no        |
| [`internal`](/problems/internal)                                   | 500  | yes       |
| [`upstream_failure`](/problems/upstream_failure)                   | 502  | yes       |
| [`service_unavailable`](/problems/service_unavailable)             | 503  | yes       |
| [`no_capacity`](/problems/no_capacity)                             | 503  | yes       |
| [`upstream_timeout`](/problems/upstream_timeout)                   | 504  | yes       |

## Two 429s that mean different things

[`rate_limited`](/problems/rate_limited) is transport throttling — you are sending requests too fast, and waiting fixes it. [`quota_exceeded`](/problems/quota_exceeded) is a plan window running out — waiting for the reset or changing plan fixes it. Read the `code`, not the status.

## Related

* [Errors](/reference/errors) - the shape of a problem document and which fields to render.
* [Platform API](/reference/platform-api) - why there is no public inference API to raise these codes against yet.
* [Troubleshooting](/getting-started/troubleshooting) - what a message in the product means.
