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

# Errors

> Error responses and how to handle them.

Errors return an HTTP status code and, except as noted below, a JSON body:

```json theme={null}
{
  "code": "NOT_FOUND",
  "status": 404,
  "message": "Order not found."
}
```

| Error | Meaning |
| - | - |
| `400 BAD_REQUEST` | The request can't be processed. |
| `401 UNAUTHORIZED` | The API key is missing, invalid or revoked. |
| `403 FORBIDDEN` | The API rejected the request, with a JSON body. A caller may also see a `403` from the edge before reaching the API, with a non-JSON body, usually from a missing or library-default `User-Agent`. See [Identify your client](/authentication#identify-your-client). |
| `404 NOT_FOUND` | The resource doesn't exist. |
| `409 CONFLICT` | The `requestId` conflicts with an earlier request. See [Idempotency](/idempotency). |
| `422 INPUT_VALIDATION_FAILED` | The body is invalid. `data.fieldErrors` lists problems with fields, and `data.formErrors` problems with the body as a whole. |
| `429 rate_limit_exceeded` | Too many requests from one source. The JSON body has `error` and `message` rather than `code` and `status`. Wait `Retry-After` seconds, then retry. |
| `503 SERVICE_UNAVAILABLE` | A temporary outage. Retry with backoff. |

A malformed JSON body returns `400` and a body over 1 MB returns `413`, both as plain text.

Retry `5xx` errors with backoff and the same `requestId`. After a `429`, wait the number of seconds in the `Retry-After` header, then retry with the same `requestId`. Retry a `409` for a request that's still starting, unchanged, after a short delay. Fix the request before retrying any other `4xx` error.
