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

# Errors

> HTTP status codes and error response format

All application errors return JSON:

```json theme={null}
{
  "message": "string",
  "action": "string",
  "code": "string",
  "data": {}
}
```

| Field     | Required | Description                                  |
| --------- | -------- | -------------------------------------------- |
| `message` | yes      | Human-readable error                         |
| `action`  | yes      | Suggested next step                          |
| `code`    | no       | Machine-readable code                        |
| `data`    | no       | Extra context (e.g. validation field errors) |

## HTTP status codes

| HTTP  | Meaning                                                            |
| ----- | ------------------------------------------------------------------ |
| `401` | Missing, invalid, expired, or revoked API key                      |
| `403` | Missing scope, API keys disabled on plan, or inactive subscription |
| `404` | Resource not found (or not owned by your account)                  |
| `422` | Validation error (`data` contains field errors)                    |
| `429` | Rate limit exceeded (120 req/min per key)                          |

## Validation errors (`422`)

When request body or query fails validation, `data` is an object keyed by field name:

```json theme={null}
{
  "message": "Validation failed",
  "action": "Fix the fields in data",
  "data": {
    "name": ["Name is required"]
  }
}
```

Campaign filter format rules are documented in [Campaign filters](/guides/campaign-filters).
