Solución de problemas
La forma del error coincide con el protocolo que llamaste. /v1/chat/completions y /v1/responses devuelven errores con formato OpenAI; /v1/messages devuelve errores con formato Anthropic. Los códigos de estado HTTP son idénticos en los tres protocolos.
Formato de respuesta de error
Formato OpenAI (/v1/chat/completions, /v1/responses)
{
"error": {
"message": "Invalid API key",
"type": "authentication_error",
"code": "invalid_api_key"
}
} Formato Anthropic (/v1/messages)
{
"type": "error",
"error": {
"type": "authentication_error",
"message": "Invalid API key"
}
} 401 · Error de autenticación authentication_error
{"error":{"message":"missing API key in Authorization header or X-API-Key","type":"authentication_error"}} Causas
- Falta el encabezado
Authorization: Bearer(oX-API-Key) — mensaje:missing API key in Authorization header or X-API-Key. - La clave no coincide con ninguna clave activa — mensaje:
invalid API key. - La clave ha caducado — mensaje:
API key expired.
Solución
- Envía
Authorization: Bearer sk-syn-…(oX-API-Key: sk-syn-…). - Confirma que la clave está activa en la consola y que se copió por completo.
No reintentable: corrige la credencial.
400 · Solicitud no válida invalid_request
{"error":{"message":"model or models field is required","type":"invalid_request"}} Causas
- Falta el campo
model, o el cuerpo JSON está vacío o mal formado.
Solución
- Incluye un
modely un cuerpo JSON bien formado. Consulta la referencia de Chat Completions.
No reintentable: corrige la solicitud.
403 · Cuota agotada quota_exhausted
{"error":{"message":"API key quota exhausted","type":"quota_exhausted"}} Causas
- El saldo prepago de la clave o del espacio de trabajo se ha agotado.
Solución
- Recarga el saldo del espacio de trabajo. Nota: Synthorai devuelve
403 quota_exhaustedcuando el saldo se agota, no429— por lo que el backoff exponencial no ayudará; solo una recarga lo resuelve.
No reintentable con backoff: recarga.
403 · Cumplimiento — sin compartir datos compliance_blocked / compliance_no_data_share
{"error":{"type":"compliance_blocked","code":"compliance_no_data_share","message":"model 'MODEL' is unavailable: your workspace compliance setting disallows providers that retain/train on data"}} Causas
- Tu espacio de trabajo tiene
no_provider_data_sharehabilitado, y el modelo solicitado solo lo ofrece un proveedor que exige retención/uso compartido de datos (p. ej., un modelo de Bedrock o Vertex solo con uso compartido de datos).
Solución
- Enruta la solicitud a un modelo sin retención, o desactiva el interruptor de cumplimiento del espacio de trabajo si el uso compartido de datos es aceptable para esa carga. La clase de retención es un criterio de enrutamiento por modelo — consulta el desglose de la retención de 30 días.
No reintentable: es una decisión de política, no un error transitorio.
429 · Límite de tasa alcanzado rate_limit_exceeded
{"error":{"message":"rate limit exceeded: max 60 requests per minute","type":"rate_limit_exceeded"}} Causas
- Superaste el límite de solicitudes por minuto (RPM). El mensaje indica el límite exacto.
Solución
- Espera y reintenta con backoff exponencial + jitter (fragmento abajo). Solicita un límite mayor si necesitas rendimiento sostenido.
Reintentable: espera y reintenta.
502 · Sin canal para el modelo upstream_error
{"error":{"message":"no channels available for model \"MODEL\" in group \"default\"","type":"upstream_error"}} Causas
- El id del modelo no coincide con ningún canal enrutable para tu espacio de trabajo: un error tipográfico, un modelo retirado o uno que tu plan no puede alcanzar.
Solución
- Comprueba el id exacto en la lista de modelos en vivo. Si un modelo se retiró recientemente, elige uno vigente.
No reintentable sin cambios: corrige el id del modelo.
BYOK: errores del proveedor upstream
Con bring-your-own-key, la solicitud se ejecuta en tu cuenta del proveedor (AWS Bedrock, Google Vertex AI o la API de Anthropic), por lo que Synthorai transmite el error original del proveedor sin cambios — las respuestas llevan usage.is_byok: true. La solución está en la consola o configuración de ese proveedor, no en la pasarela. Los más comunes son los ajustes de acceso a modelos y de uso compartido de datos a nivel de cuenta:
| Error / config del proveedor | Causa | Solución |
|---|---|---|
model "…" is currently unavailable | En tu cuenta BYOK el modelo no está habilitado, fue retirado o tiene capacidad limitada (p. ej., Claude Fable 5, retirado temporalmente en Bedrock). | Habilita el acceso al modelo en la consola del proveedor (Bedrock → Model access; Vertex → Model Garden), o enruta a un modelo disponible. |
setPublisherModelConfig / dataSharingEnabledProvider: "anthropic" (Vertex AI) | Google Vertex AI condiciona los modelos asociados de Anthropic a una aceptación de uso compartido de datos a nivel de proyecto y a la aceptación de los términos de Model Garden. | Llama a setPublisherModelConfig con dataSharingEnabledProvider: "anthropic" y acepta los términos. Consulta la documentación de modelos asociados de Vertex de Google. |
data_retention_mode: provider_data_share (AWS Bedrock) | Bedrock condiciona ciertos modelos Claude a una aceptación explícita de retención de datos a nivel de cuenta; sin ella, el modelo aparece como no disponible. | Establece data_retention_mode: provider_data_share en la cuenta (opcionalmente, fíjalo con una SCP sobre bedrock:DataRetentionMode). |
Errores del proveedor upstream
Estos se transmiten desde el proveedor del modelo con su propio estado HTTP y type. Solo 500 y 529 indican el lado del proveedor; trátalos (y 429) como transitorios y reintenta, mientras que los 4xx reflejan la solicitud. Referencia completa: la documentación de errores de Anthropic.
| Estado | Tipo | Significado |
|---|---|---|
413 | request_too_large | El cuerpo de la solicitud supera el límite de tamaño — reduce la carga útil. |
500 | api_error | El proveedor upstream tuvo un error interno — transitorio; reintenta con backoff. |
529 | overloaded_error | El proveedor upstream está temporalmente sobrecargado — transitorio; reintenta con backoff. |
Límites de tasa
Los límites de tasa se aplican por clave API para garantizar un uso justo entre todos los usuarios.
Límites predeterminados
| Parámetro | Tipo | Descripción |
|---|---|---|
RPM | integer | Solicitudes por minuto. Predeterminado: 60 RPM por clave. |
TPM | integer | Tokens por minuto. Predeterminado: 100,000 TPM por clave. |
Cuota diaria | integer | Total de tokens por día. Configurable por el administrador para cada usuario. |
Cuando se alcanza un límite de tasa, recibes una respuesta 429 con una cabecera Retry-After que indica el tiempo de espera en segundos.
¿Presupuestando el rendimiento de tokens con precios reales por token? Ejecuta tu carga de trabajo en la calculadora de costes de API LLM.
Gestión de errores 429
import time
import openai
client = openai.OpenAI(base_url="https://synthorai.io/v1", api_key="YOUR_API_KEY")
for attempt in range(5):
try:
response = client.chat.completions.create(
model="gpt-5.4-mini",
messages=[{"role": "user", "content": "Hello"}]
)
break
except openai.RateLimitError as e:
wait = 2 ** attempt # exponential backoff
print(f"Rate limited. Retrying in {wait}s...")
time.sleep(wait)async function withRetry(fn, maxAttempts = 5) {
for (let attempt = 0; attempt < maxAttempts; attempt++) {
try {
return await fn();
} catch (err) {
if (err.status === 429 && attempt < maxAttempts - 1) {
const wait = Math.pow(2, attempt) * 1000;
await new Promise(r => setTimeout(r, wait));
} else throw err;
}
}
}¿Un 502 o sobrecarga en un modelo? Elige una alternativa en la comparación de precios de modelos — cada modelo enrutable y su precio por token en una sola tabla.