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

# Errors and Limits

> Status codes, rate limits, and request constraints

This page collects operational details that apply across the Engramme API.

## Rate Limits

Requests are subject to gateway and application-level limits. The public gateway currently enforces:

| Limit               | Value               |
| ------------------- | ------------------- |
| Requests per minute | `1,000` per project |

If you receive `429 Too Many Requests`, retry with exponential backoff. Response bodies can vary by which layer returns the limit. Application-level limits may return:

```json theme={null}
{
  "detail": "RATE_LIMIT_EXCEEDED"
}
```

## Request Limits

| Limit                       | Value              |
| --------------------------- | ------------------ |
| Text/file uploads           | `10MB`             |
| PDF uploads                 | `20MB`             |
| Recall query text           | `1,000` characters |
| `item_id` length            | `500` characters   |
| Pre-extracted `memory_json` | `256KB` default    |

`item_id` may contain word characters plus `-`, `_`, `=`, `!`, and `:`.

## Status Codes

| Status | Meaning                                                              |
| ------ | -------------------------------------------------------------------- |
| `400`  | Invalid request parameters or malformed input                        |
| `401`  | Missing or invalid API key                                           |
| `402`  | Billing or usage check failed, such as `INSUFFICIENT_FUNDS`          |
| `403`  | The API key does not have access to the requested source or endpoint |
| `404`  | Resource not found                                                   |
| `409`  | Conflict, such as an `item_id` that is currently being processed     |
| `429`  | Rate limit exceeded                                                  |
| `500`  | Internal server error                                                |
| `503`  | Service temporarily unavailable                                      |

## Upload Conflicts

If you provide your own `item_id`, `/v1/memorize` may return `409` when the item is already being processed.

Use generated IDs for simple uploads. Use stable unique `item_id` values when you want deduplication or idempotent behavior.

## Async Processing

`/v1/memorize` returns after upload is accepted and processing has started. Memories may not be immediately available through `/v1/memories/recall`.

If recall returns no results right after upload, retry after a short delay.
