Errores

Todos los códigos de estado que devuelve la pasarela, sus causas reales y cómo solucionarlos.

Los errores devuelven JSON con un type y un mensaje legible para las personas message. Los códigos de estado siguen las convenciones de Anthropic y OpenAI.

{"type": "error", "error": {"type": "authentication_error", "message": "invalid api key"}}

Códigos de estado

CódigoSignificadoCausa real más comúnSolución
400Solicitud incorrectaFalta max_tokens en Messages, o hay un elemento mal formado: messages matrizComprueba el cuerpo con Messages
401Sin autenticarClave enviada en el encabezado incorrecto para el formatox-api-key para Messages, Bearer para Chat Completions
402Pago requeridoSaldo agotado o plan caducadoRecargar saldo o comprar un plan
403Acceso prohibidoClave revocada o modelo no habilitado para la cuentaCrea una nueva clave; comprueba /v1/models
404No encontradoError en la URL base: normalmente se ha duplicado u omitido /v1Consulta URL base
429Límite de solicitudes alcanzadoDemasiadas solicitudes simultáneasAumenta exponencialmente la espera entre reintentos; consulta Límites de solicitudes
500Error de la puerta de enlaceFallo interno inesperadoReintenta una vez; si persiste, contacta con soporte e indica el identificador de la solicitud
529Proveedor sobrecargadoCapacidad del proveedor, no de tu cuentaReintenta aumentando la espera; suele resolverse en segundos

Tipos de error

tipoSignificado
invalid_request_errorEl cuerpo está mal formado o falta un campo obligatorio
authentication_errorLa clave falta, está mal formada o ha sido revocada
permission_errorLa clave es válida, pero no tiene permiso para usar ese modelo
not_found_errorRuta o identificador de modelo desconocido
rate_limit_errorSolicitudes limitadas
api_errorFallo interno
overloaded_errorCapacidad del proveedor agotada

Cómo reintentar correctamente

Reintento 429, 500, 502, 503 y 529. Nunca reintentes a ciegas 400, 401, 402 o 403 : la misma solicitud falla de la misma manera y, si la respuesta se ha generado parcialmente, puedes pagar dos veces.

import time, httpx

def call(body, key, tries=4):
    for i in range(tries):
        r = httpx.post(class="s">"https://aiprimetech.io/v1/messages", json=body, timeout=120,
                       headers={class="s">"x-api-key": key,
                                class="s">"anthropic-version": class="s">"2023-06-01"})
        if r.status_code in (429, 500, 502, 503, 529):
            time.sleep(2 ** i)          class=class="s">"c"># 1s, 2s, 4s, 8s
            continue
        r.raise_for_status()
        return r.json()
    raise RuntimeError(class="s">"upstream unavailable after retries")
Añade una variación aleatoria al tiempo de espera en producción. Los reintentos sincronizados de muchos procesos de trabajo convierten un fallo puntual en una avalancha de solicitudes contra el mismo proveedor.