Cuenta
Errores
Consulta todos los códigos de error que devuelve la pasarela de api14 con el formato de error de OpenAI, con su causa y cómo resolverlos o reintentarlos.
Los errores usan el formato de error de OpenAI, así que los SDK oficiales los convierten en sus excepciones habituales (APIError, RateLimitError, AuthenticationError, etc.). Toma decisiones según code; message es una explicación legible en inglés.
{
"error": {
"message": "This request may cost up to $0.0123 but your balance is $0.0040. Add funds at /pricing.",
"type": "insufficient_quota",
"code": "insufficient_balance"
}
}
Las peticiones fallidas no se cobran. Cualquier respuesta con un estado 4xx o 5xx no cuesta nada.
Códigos de error de la pasarela
| Estado | code | type | Significado |
|---|---|---|---|
| 400 | model_required | invalid_request_error | Falta el campo model. |
| 400 | invalid_json | invalid_request_error | El cuerpo no es un objeto JSON. |
| 400 | invalid_body | invalid_request_error | No se pudo leer el cuerpo multipart. |
| 400 | max_tokens_too_large | invalid_request_error | Una petición de prueba del playground pidió demasiados tokens de salida. |
| 401 | invalid_api_key | authentication_error | La clave falta, está mal formada o está revocada. |
| 402 | insufficient_balance | insufficient_quota | Tu saldo en USD es de $0 o inferior al coste máximo estimado de la solicitud (entrada, límite de salida, imágenes o duración del vídeo). La solicitud no se envía. |
| 403 | model_not_allowed | permission_error | La lista de modelos permitidos de la clave no incluye este modelo. |
| 403 | plan_required | permission_error | Tu plan no incluye esta categoría de modelos. |
| 404 | model_not_found | not_found_error | El id del modelo es desconocido, está desactivado o se ha eliminado. |
| 404 | not_found | not_found_error | Endpoint desconocido, o una tarea de vídeo o generación que no es tuya. |
| 413 | payload_too_large | invalid_request_error | El cuerpo de la petición supera el límite de tamaño (25 MB por defecto). |
| 429 | rate_limited | rate_limit_error | Se superaron las peticiones por minuto. Llega con Retry-After: 60. |
| 429 | daily_limit_reached | rate_limit_error | La clave alcanzó su límite de gasto diario en USD. |
| 409 | idempotency_conflict | api_error | Ya se envió una solicitud con esta Idempotency-Key. Usa una clave nueva para enviar otra solicitud. Límites de uso. |
| 403 | site_not_allowed | permission_error | Solo widgets: el sitio de la página no está entre tus sitios de widget permitidos. Widgets. |
| 429 | widget_daily_limit | rate_limit_error | Solo widgets: el widget, o todos los widgets juntos, alcanzaron el límite de gasto diario en USD. |
| 429 | visitor_daily_limit | rate_limit_error | Solo widgets: este visitante alcanzó el límite diario de solicitudes de los controles de widgets. |
| 502 | upstream_unavailable | api_error | No se pudo contactar con el proveedor upstream. |
| 4xx/502 | content_unavailable | variable | Todavía no se pudo obtener el contenido de un vídeo (el estado refleja el del upstream, o 502 si no hay ninguno). |
| 503 | maintenance | service_unavailable | Modo de mantenimiento: los endpoints de generación están en pausa, los endpoints GET siguen funcionando. |
| 503 | not_configured | service_unavailable | La pasarela aún no está configurada. |
Errores del upstream
Los errores que devuelve el proveedor upstream (por ejemplo, un parámetro no válido para un modelo concreto, un desbordamiento de la longitud de contexto, un rechazo por política de contenido o un 429 del propio proveedor) se reenvían con su código de estado original y el mismo formato { error: { ... } }.
Qué hacer
| Estado | ¿Reintentar? | Acción |
|---|---|---|
| 400 | No | Corrige el cuerpo de la petición. |
| 401 | No | Comprueba la clave y la cabecera Authorization: Bearer. Consulta Autenticación. |
| 402 | No | Añade fondos o activa la recarga automática. |
| 403 | No | Usa un modelo permitido, edita la lista de modelos permitidos de la clave o mejora tu plan. |
| 404 | No | Comprueba el id del modelo en la página de modelos. |
| 413 | No | Envía un cuerpo más pequeño, o pasa los archivos por URL en lugar de en base64. |
| 429 | Más tarde | rate_limited: espera lo que indique Retry-After. daily_limit_reached: espera al siguiente día UTC o aumenta el límite de la clave. Consulta Límites de tasa. |
| 502 | Sí | Reintenta con backoff, o añade modelos de respaldo. |
| 503 | Sí | Reintenta más tarde. |
Gestionar errores en el código
import OpenAI from 'openai'
const client = new OpenAI({ baseURL: 'https://api14.com/api/v1', apiKey: process.env.API14_API_KEY })
try {
await client.chat.completions.create({ model: 'openai/gpt-5-mini', messages: [{ role: 'user', content: 'Hi' }] })
} catch (err) {
if (err instanceof OpenAI.APIError) {
console.error(err.status, err.code, err.message)
if (err.code === 'insufficient_balance') {
// prompt the user to add funds
}
} else {
throw err
}
}
from openai import OpenAI, APIStatusError
client = OpenAI(base_url="https://api14.com/api/v1", api_key="sk-api14-...")
try:
client.chat.completions.create(model="openai/gpt-5-mini", messages=[{"role": "user", "content": "Hi"}])
except APIStatusError as e:
print(e.status_code, e.code, e.message)
Los errores que se producen después de que haya empezado un stream llegan dentro del propio stream. Consulta Streaming.