Solução de problemas
O formato do erro corresponde ao protocolo que você chamou. /v1/chat/completions e /v1/responses retornam erros no formato OpenAI; /v1/messages retorna erros no formato Anthropic. Os códigos de status HTTP são idênticos nos três protocolos.
Formato da resposta de erro
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 · Falha na autenticação authentication_error
{"error":{"message":"missing API key in Authorization header or X-API-Key","type":"authentication_error"}} Causas
- Sem cabeçalho
Authorization: Bearer(ouX-API-Key) — mensagem:missing API key in Authorization header or X-API-Key. - A chave não corresponde a nenhuma chave ativa — mensagem:
invalid API key. - A chave expirou — mensagem:
API key expired.
Correção
- Envie
Authorization: Bearer sk-syn-…(ouX-API-Key: sk-syn-…). - Confirme que a chave está ativa no console e que foi copiada por completo.
Não é possível repetir — corrija a credencial.
400 · Requisição inválida invalid_request
{"error":{"message":"model or models field is required","type":"invalid_request"}} Causas
- O campo
modelestá ausente, ou o corpo JSON está vazio ou malformado.
Correção
- Inclua um
modele um corpo JSON bem formado. Consulte a referência de Chat Completions.
Não é possível repetir — corrija a requisição.
403 · Cota esgotada quota_exhausted
{"error":{"message":"API key quota exhausted","type":"quota_exhausted"}} Causas
- O saldo pré-pago da chave ou do espaço de trabalho acabou.
Correção
- Recarregue o saldo do espaço de trabalho. Nota: a Synthorai retorna
403 quota_exhaustedpara saldo esgotado, não429— portanto o backoff exponencial não ajudará; apenas uma recarga resolve.
Não é possível repetir com backoff — recarregue.
403 · Conformidade — sem compartilhamento de dados 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
- Seu espaço de trabalho tem
no_provider_data_shareativado, e o modelo solicitado só é oferecido por um provedor que exige retenção/compartilhamento de dados (por ex., um modelo do Bedrock ou Vertex apenas com compartilhamento de dados).
Correção
- Encaminhe a requisição para um modelo sem retenção, ou desative o botão de conformidade do espaço de trabalho se o compartilhamento de dados for aceitável para essa carga. A classe de retenção é um critério de roteamento por modelo — veja a análise da retenção de 30 dias.
Não é possível repetir — uma decisão de política, não um erro transitório.
429 · Limite de taxa atingido rate_limit_exceeded
{"error":{"message":"rate limit exceeded: max 60 requests per minute","type":"rate_limit_exceeded"}} Causas
- Você excedeu o teto de requisições por minuto (RPM). A mensagem indica o limite exato.
Correção
- Aguarde e tente novamente com backoff exponencial + jitter (trecho abaixo). Solicite um limite maior se precisar de throughput sustentado.
Pode repetir — aguarde e tente novamente.
502 · Nenhum canal para o modelo upstream_error
{"error":{"message":"no channels available for model \"MODEL\" in group \"default\"","type":"upstream_error"}} Causas
- O id do modelo não corresponde a nenhum canal roteável para seu espaço de trabalho — um erro de digitação, um modelo removido ou um que seu plano não alcança.
Correção
- Verifique o id exato na lista de modelos ao vivo. Se um modelo foi retirado recentemente, escolha um atual.
Não é possível repetir sem alterações — corrija o id do modelo.
BYOK: erros do provedor upstream
Com bring-your-own-key, a requisição é executada na sua conta do provedor (AWS Bedrock, Google Vertex AI ou a API da Anthropic), então a Synthorai repassa o erro original do provedor sem alterações — as respostas trazem usage.is_byok: true. A correção fica no console ou na configuração desse provedor, não no gateway. Os mais comuns são as configurações de acesso a modelos e de compartilhamento de dados no nível da conta:
| Erro / config do provedor | Causa | Correção |
|---|---|---|
model "…" is currently unavailable | Na sua conta BYOK o modelo não está habilitado, foi removido ou tem capacidade limitada (por ex., Claude Fable 5, removido temporariamente no Bedrock). | Habilite o acesso ao modelo no console do provedor (Bedrock → Model access; Vertex → Model Garden) ou encaminhe para um modelo disponível. |
setPublisherModelConfig / dataSharingEnabledProvider: "anthropic" (Vertex AI) | O Google Vertex AI condiciona os modelos parceiros da Anthropic a um opt-in de compartilhamento de dados no nível do projeto e à aceitação dos termos do Model Garden. | Chame setPublisherModelConfig com dataSharingEnabledProvider: "anthropic" e aceite os termos. Veja a documentação de modelos parceiros do Vertex do Google. |
data_retention_mode: provider_data_share (AWS Bedrock) | O Bedrock condiciona certos modelos Claude a um opt-in explícito de retenção de dados no nível da conta; sem ele, o modelo aparece como indisponível. | Defina data_retention_mode: provider_data_share na conta (opcionalmente, fixe-o com uma SCP em bedrock:DataRetentionMode). |
Erros do provedor upstream
Esses são repassados pelo provedor do modelo com o próprio status HTTP e type do provedor. Apenas 500 e 529 indicam o lado do provedor; trate-os (e 429) como transitórios e tente novamente, enquanto os 4xx refletem a requisição. Referência completa: a documentação de erros da Anthropic.
| Status | Tipo | Significado |
|---|---|---|
413 | request_too_large | O corpo da requisição excede o limite de tamanho — reduza o payload. |
500 | api_error | O provedor upstream teve um erro interno — transitório; tente novamente com backoff. |
529 | overloaded_error | O provedor upstream está temporariamente sobrecarregado — transitório; tente novamente com backoff. |
Limites de taxa
Os limites de taxa são aplicados por chave de API para garantir uso justo entre todos os usuários.
Limites padrão
| Parâmetro | Tipo | Descrição |
|---|---|---|
RPM | integer | Requisições por minuto. Padrão: 60 RPM por chave. |
TPM | integer | Tokens por minuto. Padrão: 100.000 TPM por chave. |
Cota diária | integer | Total de tokens por dia. Configurável pelo administrador por usuário. |
Quando um limite de taxa é atingido, você recebe uma resposta 429 com um cabeçalho Retry-After que indica o tempo de espera em segundos.
Planejando o throughput de tokens com preços reais por token? Rode sua carga de trabalho na calculadora de custos de API LLM.
Tratamento de erros 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;
}
}
}Recebendo um 502 ou sobrecarga em um modelo? Escolha uma alternativa na comparação de preços de modelos — cada modelo roteável e seu preço por token em uma única tabela.