# Errors and limits

> Error codes, what causes them, and the limits that apply to your workspace.

# Errors and limits

:::info Generated page
The error table is emitted from the API's error registry, so a code that exists here exists in the
running API and vice versa. Do not hand-edit it.
:::

<!-- TODO(docs-infra): render the error table from the transport error registry at build time.
     Tracking: docs-ia.md §4.5 rule 3. -->

## Error shape

Every error returns the same structure: a stable machine-readable code, a human-readable message,
and — where there is one — the specific fix. Match on the code, not the message; messages get
clearer over time, codes don't change.

## Reading an error

Errors fall into four groups, and which one you're in determines what to do:

| Kind | Meaning | What to do |
|---|---|---|
| Validation | The request or the project is malformed | Fix and resubmit; nothing was charged |
| Authorisation | The credential can't do this | Check the token's workspace and scope |
| Conflict | The resource changed underneath you | Re-read and retry |
| Render failure | The job started and could not finish | Read the failing stage; see [Help](/docs/help) |

Validation errors are the good kind — they happen before any paid work.

## Limits

<!-- TODO(product): confirm the current published limits before this page ships.
     Do not publish inferred numbers — see docs-ia.md §P2 on documenting what isn't there. -->

Limits that apply to a workspace — concurrent renders, maximum source length, upload size, retention
of rendered artifacts — depend on your plan. See
[Billing and plans](/docs/account/billing-and-plans).
