# Errores, rate limits y reintentos

> Errores de la API del LLM: estado HTTP, código y causa, cuáles reintentar, rate limits y qué hacer ante un 402. Son gratuitos.

- URL: https://llmwithcrypto.com/es/docs/errors/
- Última actualización: 2026-10-23
- Editor: LLMwithCrypto (https://llmwithcrypto.com)

Los errores llegan en el formato de OpenAI, así que los SDK los lanzan como excepciones habituales. Esta página enumera cada estado y código, indica cuáles merecen un reintento y muestra un bucle de reintentos que respeta el rate limit.

**Respuesta rápida — ¿Qué errores puede devolver la API de LLMwithCrypto y se cobran?**

La API responde a los errores con un estado HTTP y un cuerpo al estilo de OpenAI: `{"error": {"message", "type", "param", "code"}}`. **LLMwithCrypto** usa 400 para una petición incorrecta, 401 para una clave errónea, 402 cuando el crédito no puede pagar, 404 para un modelo desconocido, 429 para el rate limit y 500 o 503 por nuestra parte. Una llamada que termina en error no cuesta nada, según la documentación del 23 de octubre de 2026.

## ¿Qué errores existen?

Ningún error consume crédito. `code` es el valor estable que debes comprobar en tu código; `message` es para personas y puede cambiar.

| HTTP | `code` | Causa | ¿Reintentar? |
| --- | --- | --- | --- |
| 400 | `invalid_parameter` | Falta un campo obligatorio, o un valor está fuera de rango o es de un tipo incorrecto | No: corrige la petición |
| 400 | `context_length_exceeded` | Los mensajes más `max_tokens` no caben en la ventana de contexto del modelo | No: acorta la entrada o reduce `max_tokens` |
| 400 | `unsupported_parameter` | Un campo que este modelo no admite, como `response_format` en un modelo sin modo JSON | No: quítalo o cambia de modelo |
| 401 | `invalid_api_key` | La clave falta, está mal escrita o fue revocada | No: revisa la clave |
| 402 | `insufficient_balance` | El saldo restante no alcanza para esta llamada | No: compra un pack de créditos |
| 404 | `model_not_found` | El id `model` no está en nuestra lista | No: usa un id de `GET /api/v1/models` |
| 429 | `rate_limit_exceeded` | Más solicitudes o tokens por minuto de los que permite la cuenta | Sí, tras una pausa |
| 500 | `server_error` | Algo falló por nuestra parte | Sí, con backoff |
| 503 | `model_overloaded` | El modelo está al límite de capacidad por un momento | Sí, con backoff, o prueba otro modelo |

*Cuerpo del error: un modelo desconocido*

```json
{
  "error": {
    "message": "The model `gpt-4o` does not exist or is not available to your key.",
    "type": "invalid_request_error",
    "param": "model",
    "code": "model_not_found"
  }
}

```

## ¿Por qué recibo 404 con gpt-4o o claude?

Porque esos modelos no se venden aquí. No vendemos acceso a GPT, Claude, Gemini ni Grok: sus creadores prohíben revender el acceso a la API sin su aprobación, y nosotros no la tenemos. El código escrito para la API de OpenAI suele nombrar un modelo en varios sitios; busca en tu proyecto el nombre antiguo y reemplázalo por un id de la [página de modelos](https://llmwithcrypto.com/es/models/), como `deepseek-v4-pro` o `gpt-oss-120b`.

## ¿Cuándo debe reintentar mi código?

Reintenta `429`, `500` y `503`, y los errores de red como un timeout o una conexión reiniciada. Nunca reintentes `400`, `401`, `402` ni `404`: la misma solicitud fallará de la misma forma.

Espera antes de cada nuevo intento. Cuando la respuesta tenga una cabecera `Retry-After`, espera esos segundos; si no, duplica la pausa cada vez (1, 2, 4, 8 segundos…) y añade un poco de tiempo aleatorio, para que muchos workers no reintenten a la vez. Abandona tras unos cuantos intentos y registra el error. Los SDK de OpenAI ya reintentan por su cuenta; el ejemplo de abajo lo desactiva para mostrar la lógica completa.

*Python: reintentar 429, 500 y 503 con backoff exponencial*

```python
import os
import random
import time

from openai import APIConnectionError, APIStatusError, OpenAI

client = OpenAI(
    base_url="https://llmwithcrypto.com/api/v1",
    api_key=os.environ["LLMWITHCRYPTO_API_KEY"],
    max_retries=0,
)
RETRY = {429, 500, 503}


def chat(messages, model="deepseek-v4-pro", attempts=5):
    for attempt in range(attempts):
        try:
            return client.chat.completions.create(model=model, messages=messages, max_tokens=500)
        except APIStatusError as err:
            if err.status_code not in RETRY or attempt == attempts - 1:
                raise
            wait = err.response.headers.get("retry-after")
            delay = float(wait) if wait else min(30, 2**attempt) + random.random()
        except APIConnectionError:
            if attempt == attempts - 1:
                raise
            delay = min(30, 2**attempt) + random.random()
        time.sleep(delay)

```

## ¿Qué hago con 402 insufficient_balance?

Recarga. La llamada no se cobró y nada más de la cuenta cambia: tus claves siguen funcionando en cuanto vuelva a haber crédito. En cuanto se confirma tu recarga con criptomonedas y compras un pack de créditos, tu clave API te espera en el panel.

Para evitar sorpresas en producción, lee `GET https://llmwithcrypto.com/api/v1/credits` de vez en cuando y actívate una alerta por debajo de un umbral que elijas; la [página de modelos y créditos](https://llmwithcrypto.com/es/docs/models/) muestra la llamada. Los créditos no caducan: lo que no gastes este mes seguirá ahí el año que viene, así que un pack más grande comprado antes no cuesta nada extra.

## ¿Cómo me mantengo por debajo del rate limit?

Cada cuenta tiene un límite de peticiones y de tokens por minuto, que se muestra en el panel; pídelo a soporte y se puede ampliar.

- **Limita la concurrencia.** Ejecuta un número fijo de solicitudes en paralelo en lugar de lanzar un lote entero de golpe.
- **Limita la salida.** Los límites de tokens también cuentan lo que escribe el modelo, así que un `max_tokens` razonable deja más solicitudes dentro del límite.
- **Reparte los lotes.** Para trabajos grandes offline, marca el ritmo de las solicitudes a lo largo del minuto en lugar de enviarlas a ráfagas.

## Errores: preguntas frecuentes

### ¿Me cobran por una llamada fallida?

No. Pagas por token desde tu saldo: los tokens de entrada y de salida se cuentan con el tokenizador propio del modelo y se cobran al precio de ese modelo por 1M de tokens. Una llamada que termina en error no cuesta nada.

### ¿Dónde puedo ver si hay una caída?

En la [página de estado](https://llmwithcrypto.com/es/status/). Una racha de errores `500` o `503` en varios modelos suele indicar un incidente por nuestra parte; escribe a support@llmwithcrypto.com si persiste.

### ¿Puedo ver la solicitud que falló?

No por nuestra parte. No guardamos tus prompts ni las respuestas del modelo: una vez enviada una respuesta, su texto desaparece. Cada llamada deja una línea de log con la hora, la cuenta, el modelo y el recuento de tokens, que se borra a los 30 días. Registra el error `code` y tu propio id de solicitud en tu app.

---

LLMwithCrypto: LLMwithCrypto es una API de LLM compatible con OpenAI para modelos de pesos abiertos — DeepSeek V4 Pro, DeepSeek V4.1 Flash, DeepSeek R1, Qwen3.5 397B A17B, Qwen3 235B A22B Instruct, gpt-oss-120b, gpt-oss-20b, GLM-4.7, Llama 3.3 70B Instruct, Gemma 4 31B, Mistral Large 3, Mistral Small 4 — con pago por token desde un saldo de criptomonedas prepago, a un 5% por debajo del precio medio de los hosts públicos. Sin KYC: sin identificación, sin selfie, sin documentos. Los prompts y las salidas no se almacenan.
