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

# Errors

> Standard error response shape and status codes.

All Currents errors share a single shape:

```json theme={null}
{
  "error": "invalid_credentials",
  "message": "API key revoked.",
  "request_id": "req_8c3e0b4a9d1e4d7e8c3e0b4a9d1e4d7e"
}
```

* `error` — a stable, machine-readable code (e.g. `invalid_credentials`, `pending_change_exists`, `unresolvable_ip`). Branch on this, not on `message`.
* `message` — a human-readable explanation. Phrasing may change between releases.
* `request_id` — include this in any support correspondence; it pins the exact server-side log row.

## Status codes

| Status                      | Meaning                                                                                           |
| --------------------------- | ------------------------------------------------------------------------------------------------- |
| `200 OK`                    | Successful request, includes existing-resource hits for idempotent endpoints.                     |
| `201 Created`               | New resource created.                                                                             |
| `202 Accepted`              | Request queued for asynchronous processing (AML events, KYC submissions).                         |
| `400 Bad Request`           | Request body or query parameters failed schema validation.                                        |
| `401 Unauthorized`          | Missing or invalid bearer key.                                                                    |
| `403 Forbidden`             | Authenticated, but the operation requires elevated (admin) privileges.                            |
| `404 Not Found`             | The referenced resource does not exist or is not visible to your tenant.                          |
| `409 Conflict`              | Idempotency conflict (e.g. a pending change already exists).                                      |
| `422 Unprocessable Entity`  | Request is syntactically valid but semantically rejected (rare; most validation surfaces as 400). |
| `429 Too Many Requests`     | Per-key rate limit exceeded.                                                                      |
| `500 Internal Server Error` | An unexpected server error. The `request_id` lets us trace it.                                    |

## Idempotency

Several endpoints are idempotent on natural keys:

* `POST /v1/exclusions` — `(tenant, user, duration)`
* `POST /v1/limits` — `(tenant, user, limit_type)` while a pending change exists
* `POST /v1/limits/commit` — `(tenant, transaction_id)`
* `POST /v1/sanctions/screen` — `(tenant, external_user_id)`
* `POST /v1/aml/event` — `(tenant, transaction_id)`
* `POST /v1/kyc/start` — `(tenant, user, target_tier)`

A second submission of the same logical request returns the original result with `200 OK` rather than creating a duplicate. Use this freely under retry.

## Rate limiting

The default sandbox limit is **100 requests per minute per API key**. Production limits are set per-tenant. `429` responses include a `Retry-After` header in seconds.
