---
title: "Errores y códigos"
url: https://lumean.app/es/developers/docs/errors
locale: es
description: "Códigos HTTP y valores `reason` explicados: qué pasó, por qué y qué hacer a continuación."
generated: 2026-10-17
---

# Errores y códigos

Códigos HTTP y valores `reason` explicados: qué pasó, por qué y qué hacer a continuación.

| HTTP | reason | Título | Encabezado `Retry-After` | Página |
| --- | --- | --- | --- | --- |
| 401 | — | 401 — key rejected | no | [401](https://lumean.app/es/developers/docs/md/errors/401) |
| 402 | — | 402 — payment required | no | [402](https://lumean.app/es/developers/docs/md/errors/402) |
| 403 | — | 403 — insufficient permissions | no | [403](https://lumean.app/es/developers/docs/md/errors/403) |
| 404 | — | 404 — resource not found | no | [404](https://lumean.app/es/developers/docs/md/errors/404) |
| 409 | — | 409 — state conflict | no | [409](https://lumean.app/es/developers/docs/md/errors/409) |
| 422 | — | 422 — request not accepted | no | [422](https://lumean.app/es/developers/docs/md/errors/422) |
| 429 | — | 429 — one of five limits was hit | a veces | [429](https://lumean.app/es/developers/docs/md/errors/429) |
| 402 | `payg_topup_required` | payg_topup_required — PAYG top-up required | no | [payg-topup-required](https://lumean.app/es/developers/docs/md/errors/payg-topup-required) |
| 409 | `quote_mismatch` | quote_mismatch — top-up quote is stale | no | [quote-mismatch](https://lumean.app/es/developers/docs/md/errors/quote-mismatch) |
| 402 | `insufficient_balance` | insufficient_balance — not enough LMC | no | [insufficient-balance](https://lumean.app/es/developers/docs/md/errors/insufficient-balance) |
| 402 | `insufficient_allowance` | insufficient_allowance — top-up not possible | no | [insufficient-allowance](https://lumean.app/es/developers/docs/md/errors/insufficient-allowance) |
| 429 | `token_quota_exceeded` | token_quota_exceeded — key token quota exhausted | sí | [token-quota-exceeded](https://lumean.app/es/developers/docs/md/errors/token-quota-exceeded) |
| 429 | `limit_exceeded` | limit_exceeded — subscription usage limit exceeded | no | [limit-exceeded](https://lumean.app/es/developers/docs/md/errors/limit-exceeded) |
| 429 | `concurrency_limit_exceeded` | concurrency_limit_exceeded — concurrent task slots are full | no | [concurrency-limit-exceeded](https://lumean.app/es/developers/docs/md/errors/concurrency-limit-exceeded) |
| 429 | `policy_cooldown_active` | policy_cooldown_active — cooldown after policy blocks | sí | [policy-cooldown-active](https://lumean.app/es/developers/docs/md/errors/policy-cooldown-active) |
| 422 | `content_blocked` | content_blocked — text is on the blocklist | no | [content-blocked](https://lumean.app/es/developers/docs/md/errors/content-blocked) |
| 422 | `text_empty` | text_empty — nothing to voice | no | [text-empty](https://lumean.app/es/developers/docs/md/errors/text-empty) |
| 202 | `policy_flagged` | policy_flagged — chunk rejected by policy | no | [policy-flagged](https://lumean.app/es/developers/docs/md/errors/policy-flagged) |
| 403 | `template_access_denied` | template_access_denied — no access to the template | no | [template-access-denied](https://lumean.app/es/developers/docs/md/errors/template-access-denied) |
| 422 | `service_not_found` | service_not_found — no such service | no | [service-not-found](https://lumean.app/es/developers/docs/md/errors/service-not-found) |
| 422 | `invalid_order_status` | invalid_order_status — order is in the wrong status | no | [invalid-order-status](https://lumean.app/es/developers/docs/md/errors/invalid-order-status) |
| 202 | `max_attempts_reached` | max_attempts_reached — chunk attempts exhausted | no | [max-attempts-reached](https://lumean.app/es/developers/docs/md/errors/max-attempts-reached) |
| 404 | `storage_expired` | storage_expired — files deleted by retention | no | [storage-expired](https://lumean.app/es/developers/docs/md/errors/storage-expired) |

## Cinco fuentes del 429

| Fuente | reason | Encabezado `Retry-After` | Cómo distinguirlo | Qué hacer |
| --- | --- | --- | --- | --- |
| Key rate limit (request frequency) | — | no | There is no `reason` in the body at all, and no `Retry-After` header either — the body consists of `success` and `message`. This is the only one of the five sources without a machine code. | Client-side backoff based on the configured windows of the key (`limits.requests.per_minute\|per_hour\|per_day`). The default is "no limit", not 60/min: a key without explicit request windows is not rate-limited at all, and a numeric default applies only if an operator has set one. The active windows are visible in the developer section. |
| Key token quota (generation volume) | `token_quota_exceeded` | sí | The only detailed body: `window`, `limit`, `used`, `requested`, `reset_at`, `retry_after` — plus a `Retry-After` header. | Wait for `reset_at`, or reduce the size of a single request so that `requested` fits into what remains in the window (`limit − used`). The check happens before the order is created, so a 429 comes instead of a 201 and nothing is charged. |
| Subscription usage limit | `limit_exceeded` | no | `reason: "limit_exceeded"`, but there are no window fields and no `Retry-After`. It is precisely the missing header that distinguishes it from the token quota. | Wait for the end of the billing period (`period_end` / `resets_in` in `GET /usage`) or change your plan. The limit is account-wide: switching keys does not help, all keys hit the same counter. |
| Concurrently active task limit | `concurrency_limit_exceeded` | no | `reason: "concurrency_limit_exceeded"`, no `Retry-After`. Typical context: a burst of many orders while quotas are free. | Wait for YOUR OWN active orders to finish, not for the end of the period: a retry right after any of them reaches a terminal status goes through. The fix is a queue with a concurrency cap, not pauses. The ceiling and the current count are in the `limit_type: "concurrent"` entry in `GET /usage`. |
| Cooldown after policy blocks | `policy_cooldown_active` | sí | `reason: "policy_cooldown_active"` plus `retry_after` / `retry_at` in the body and a `Retry-After` header. The second and last source with the header — it differs from the token quota precisely by `reason`. | Edit the text instead of waiting: the same text will be blocked again after the pause and raise the step (5 → 10 → 15 minutes). Any successfully completed task resets both the counter and the step. |

---

- Esta página en el navegador: https://lumean.app/es/developers/docs/errors
- Referencia completa legible por máquina: https://api.lumean.app/docs/llm.md
