Cuenta
Límites de tasa
Peticiones por minuto según el plan, límites de RPM y diarios en USD por clave, cabeceras X-RateLimit y cómo gestionar el error 429 con reintentos.
Los límites de tasa protegen tu saldo y el servicio. Se cuentan en peticiones por minuto (RPM) por clave de API, y las claves también pueden tener un límite de gasto diario en USD.
Límites por plan
| Plan | Peticiones por minuto |
|---|---|
| Free | 5 |
| Pro | 100 |
| Team | 3,000 |
| Enterprise | 3,000+ |
Mejora tu plan en la página de precios para aumentar tu límite.
Límites por clave
Al crear o editar una clave en Claves de API puedes configurar:
| Límite | Efecto |
|---|---|
| Límite de RPM | Limita las peticiones por minuto de esta clave. El límite efectivo es el menor entre el límite de la clave y el de tu plan. |
| Límite diario en USD | Cuando la clave ha gastado esta cantidad hoy (UTC), las siguientes peticiones devuelven 429 daily_limit_reached hasta el día siguiente. |
| Lista de modelos permitidos | Con esta clave solo se pueden usar los ids de modelo de la lista; los demás devuelven 403 model_not_allowed. |
La ventana de RPM es de un minuto y se cuenta por clave, así que las claves separadas para aplicaciones distintas no comparten límite, aunque todas siguen sujetas al límite de tu plan.
Cabeceras de límite
Cada respuesta de generación (éxito o error) indica en qué punto estás, para que puedas frenar antes de llegar al límite:
| Cabecera | Significado |
|---|---|
X-RateLimit-Limit | Solicitudes permitidas en la ventana actual de un minuto para esta clave. |
X-RateLimit-Remaining | Solicitudes que quedan en la ventana. |
X-RateLimit-Reset | Segundos hasta que se reinicia la ventana. |
Los clientes de navegador también pueden leerlas (están en Access-Control-Expose-Headers).
Picos y concurrencia
Las peticiones que superan el límite no se rechazan de inmediato: esperan en una cola y empiezan en cuanto se libera la ventana de un minuto. Por cuenta se ejecutan hasta 10 peticiones a la vez; el resto espera a que termine una. Antes de empezar, el coste máximo estimado de cada petición se reserva de tu saldo junto con el de las que ya se están ejecutando, así que las peticiones paralelas nunca gastan más de lo que tienes. Una petición que no puede empezar en 60 segundos devuelve 429 (rate_limited o concurrency_limit) con Retry-After; si su coste ya no cabe en tu saldo, devuelve 402 insufficient_balance.
Reintentos seguros con Idempotency-Key
Tras un error de red quizá no sepas si la solicitud llegó. Envía una cabecera Idempotency-Key (una cadena única de hasta 120 caracteres, por ejemplo un UUID) y reintenta con la misma clave: si la primera solicitud ya se envió al modelo, el reintento devuelve 409 idempotency_conflict en lugar de ejecutar y cobrar el trabajo dos veces. Si la primera falló antes de llegar al modelo, la clave se libera y el reintento funciona con normalidad. Cada clave se puede usar una vez por cuenta durante 24 horas.
curl https://api14.com/api/v1/images/generations \
-H "Authorization: Bearer $API14_KEY" \
-H "Idempotency-Key: 6f1c2a3e-order-1842" \
-H "Content-Type: application/json" \
-d '{"model": "black-forest-labs/flux-3-image", "prompt": "a red bicycle"}'
Cuando alcanzas un límite
Demasiadas peticiones
HTTP/1.1 429 Too Many Requests
Retry-After: 60
{
"error": {
"message": "Rate limit of 5 requests per minute exceeded.",
"type": "rate_limit_error",
"code": "rate_limited"
}
}
Espera los segundos que indica Retry-After y vuelve a intentarlo. Los SDK oficiales de OpenAI reintentan automáticamente las respuestas 429 con backoff (dos reintentos por defecto; configurable con maxRetries / max_retries).
Límite de gasto diario
{
"error": {
"message": "This API key reached its daily spend limit.",
"type": "rate_limit_error",
"code": "daily_limit_reached"
}
}
Reintentar no sirve de nada hasta el siguiente día UTC. Si se trata de tráfico esperado, aumenta o elimina el límite diario de la clave en Claves de API.
Límites del upstream
Los proveedores tienen sus propios límites, más estrictos en las variantes de modelo :free. Cuando un proveedor limita una petición, su 429 te llega tal cual. Usa modelos de respaldo o enrutamiento de proveedores para repartir la carga entre proveedores.
Gestionar los límites en el código
- Respeta
Retry-Aftery reintenta con backoff exponencial y jitter. - Distingue
rate_limited(reintentar más tarde) dedaily_limit_reachedeinsufficient_balance(reintentar no sirve de nada). - Pon en cola las tareas en segundo plano en lugar de lanzarlas todas a la vez.
- Usa streaming para respuestas largas: una petición en streaming cuenta como una sola petición.
import time
from openai import OpenAI, RateLimitError
client = OpenAI(base_url="https://api14.com/api/v1", api_key="sk-api14-...", max_retries=0)
for attempt in range(5):
try:
r = client.chat.completions.create(model="openai/gpt-5-mini", messages=[{"role": "user", "content": "Hi"}])
break
except RateLimitError as e:
if e.code == "daily_limit_reached":
raise
time.sleep(int(e.response.headers.get("retry-after", 2 ** attempt)))
Consulta Errores para ver todos los códigos de estado.