Saltar para o conteúdo principal

Envelope de erro

A maioria das respostas de erro usa este formato JSON compatível com OpenAI:
{
  "error": {
    "message": "Descriptive error message",
    "type": "orcarouter_api_error",
    "code": "model_not_found"
  }
}
type é uma categoria ampla, code é um identificador específico. Algumas falhas de caminho rápido (notavelmente 429s no nível do workspace) retornam apenas um código de status HTTP com os cabeçalhos relevantes e nenhum corpo JSON.

Códigos de status HTTP

StatusSignificadoCausa típica
400Requisição inválidaParâmetros inválidos, campos obrigatórios ausentes, violação de schema
401Não autorizadoChave de API ausente ou inválida
403ProibidoCota insuficiente, ou a chave não pode chamar este modelo
404Não encontradoModelo ou endpoint não existe
429Excesso de requisiçõesLimite de taxa atingido — veja Limites de taxa. A resposta sempre inclui um cabeçalho Retry-After.
500Erro internoBug do lado do OrcaRouter
502Erro upstreamTodos os provedores upstream falharam (incluindo qualquer cadeia de fallback)
503Serviço indisponívelO modelo solicitado está temporariamente indisponível no upstream

Tipos de erro que você pode ver em error.type

error.typeDe onde vem
orcarouter_api_errorFalhas do lado do gateway (auth, cota, rate-limit, interno)
upstream_errorO provedor upstream retornou um erro ou expirou
openai_errorErro upstream compatível com OpenAI preservado literalmente
claude_errorErro upstream da Anthropic preservado literalmente
gemini_errorErro upstream do Gemini preservado literalmente

Códigos de erro que você pode ver em error.code

Estes são códigos emitidos pelo gateway para falhas que se originam no OrcaRouter (não no upstream):
error.codeHTTPSignificado
insufficient_user_quota403Crédito da conta esgotado. Faça recarga.
model_not_found503Este modelo não está disponível para sua conta.
model_price_error400Preço para este modelo não foi configurado. Contate o suporte.
api_not_implemented400Endpoint ou operação não suportado para o modelo escolhido.
bad_request_body400Corpo da requisição não pôde ser analisado.
prompt_blocked400Política de segurança do provedor bloqueou o prompt antes da geração.
sensitive_words_detected400Filtro de conteúdo sensível rejeitou o prompt.
Se você precisa distinguir programaticamente, faça match em error.code primeiro (específico) e caia para error.type (categoria ampla).

Erros de streaming

Erros durante uma resposta com streaming não podem usar códigos de status HTTP (o status foi enviado quando o stream foi aberto). O formato depende do endpoint:

/v1/chat/completions e /v1/responses (compatível com OpenAI)

O erro chega como um chunk in-band data: {...}:
data: {"error":{"message":"...","type":"upstream_error","code":""}}

data: [DONE]
Analise cada chunk data: como JSON; se ele tiver um campo error, trate o stream como falho.

/v1/messages (compatível com Anthropic)

A Anthropic usa eventos SSE nomeados. Uma falha de stream chega como:
event: error
data: {"type":"error","error":{"type":"overloaded_error","message":"..."}}
O stream termina com event: message_stop (ou é cortado) depois do evento de erro.

Erros de fallback

Quando extra_body.models está definido e todos os modelos da cadeia falham, você recebe um 502 com detalhes sobre o último erro upstream. Os cabeçalhos de resposta X-Orca-Fallback-Level e X-Orca-Fallback-Model indicam qual fallback estava sendo tentado quando a cadeia esgotou. Veja Cabeçalhos de resposta.