Erros

Todos os códigos de status que o gateway retorna, suas causas reais e como resolver cada um.

Os erros retornam JSON com um type e uma descrição legível message. Os códigos de status seguem as convenções da Anthropic e da OpenAI.

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

Códigos de status

CódigoSignificadoCausa real mais comumCorreção
400Requisição inválidaAusência de max_tokens em Messages, ou um messages arrayVerifique o corpo de acordo com Messages
401Não autenticadoChave enviada no cabeçalho errado para o formatox-api-key para Messages, Bearer para Chat Completions
402Pagamento necessárioSaldo esgotado ou plano expiradoAdicionar créditos ou comprar um plano
403Acesso proibidoChave revogada ou modelo não habilitado para a contaCrie uma nova chave; verifique /v1/models
404Não encontradoErro na URL base — geralmente por duplicação ou ausência de /v1Consulte URLs base
429Limite de requisições atingidoExcesso de requisições simultâneasAumente exponencialmente o intervalo entre tentativas; consulte Limites de requisições
500Erro de gatewayFalha interna inesperadaTente novamente uma vez; se o problema persistir, entre em contato com o suporte e informe o ID da requisição
529Provedor sobrecarregadoCapacidade do provedor, não da sua contaTente novamente com intervalos crescentes — geralmente se resolve em segundos

Tipos de erro

tipoSignificado
invalid_request_errorO corpo está malformado ou falta um campo obrigatório
authentication_errorChave ausente, malformada ou revogada
permission_errorA chave é válida, mas não tem permissão para usar esse modelo
not_found_errorCaminho desconhecido ou ID de modelo desconhecido
rate_limit_errorRequisições limitadas
api_errorFalha interna
overloaded_errorCapacidade do provedor esgotada

Como repetir tentativas corretamente

Nova tentativa 429, 500, 502, 503 e 529. Nunca repita tentativas às cegas 400, 401, 402 ou 403 — a mesma requisição falha da mesma forma e, no caso de respostas parcialmente geradas, você pode pagar duas vezes.

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")
Adicione uma variação aleatória ao tempo de espera em produção. Tentativas sincronizadas de muitos processos de trabalho transformam uma oscilação pontual em uma avalanche de requisições contra o mesmo provedor.