Pular para o conteúdo principal

Erros

Todo erro tem o mesmo formato:

{
"code": "sql_rejected",
"message": "A consulta SQL gerada foi rejeitada.",
"details": { "violations": [{ "code": "unknown_column", "params": {} }] }
}
  • code é estável e em inglês. Programe contra ele.
  • message vem traduzida no idioma resolvido (locale → Accept-Language → padrão do tenant → pt-BR) e pode ser mostrada ao usuário, mas pode mudar de texto.
  • details traz dados extras, que variam por código.

Toda resposta, de sucesso ou de erro, traz o header X-Request-ID (req_…). Registre-o nos seus logs e informe-o ao pedir suporte.

Códigos​

HTTPcodeSignificado e ação
400end_user_requiredO tenant exige end_user e a pergunta veio sem ele.
401invalid_api_keyHeader ausente, mal formado, chave inexistente ou revogada. Não repita sem corrigir.
404request_not_foundrequest_id desconhecido, de outro tenant ou não avaliável (feedback e histórico).
404not_foundRota inexistente.
405method_not_allowedMétodo HTTP não aceito pela rota (veja o header Allow).
409schema_not_configuredO tenant ainda não cadastrou o DDL no painel.
409llm_not_configuredO tenant não configurou provedor, modelo e chave de LLM.
409unsupported_llm_providerO provedor salvo não é mais aceito; o administrador precisa trocá-lo.
409secret_unreadableA chave de LLM salva não pode mais ser lida; o administrador precisa cadastrá-la de novo.
413payload_too_largeCorpo acima de 96 KiB.
422invalid_requestCorpo ou query inválidos, ou campo desconhecido. details.fields lista os campos.
422invalid_end_userend_user fora do formato: parece e-mail ou nome, tem espaço ou é curto demais.
422question_too_longPergunta acima de 2.000 caracteres (details.limit).
422invalid_max_rowsmax_rows inválido.
422prompt_too_largeSchema, contexto e exemplos não cabem no prompt. Avise o administrador.
422no_answerA LLM concluiu que o schema não responde à pergunta. Peça para o usuário reformular.
422sql_rejectedO SQL gerado não passou no SQL Guard, mesmo após a correção automática. details.violations é uma lista de {code, params} com códigos genéricos.
422invalid_feedbackAvaliação inválida em /v1/feedback.
429rate_limitedLimite de requisições atingido. details.scope = "end_user" quando o limite é o do usuário final. Respeite Retry-After.
500internal_errorErro inesperado. Envie o X-Request-ID ao suporte.
502llm_errorFalha da LLM do tenant. Veja details.reason abaixo.
503service_unavailableBanco da plataforma inacessível ou sobrecarregado. Traz Retry-After.
503not_readyServiço sem acesso ao banco; tente de novo.

sql_rejected​

Para não revelar o que o seu administrador ocultou, tabelas e colunas ocultas aparecem como unknown_table e unknown_column, e nomes de coluna nunca são devolvidos. O motivo real fica no Histórico do painel. Reformular a pergunta costuma resolver; se uma pergunta legítima é rejeitada com frequência, cadastre um exemplo para ela no painel.

llm_error e details.reason​

reasonAção
timeout, llm_unavailable, llm_rate_limitedTransitório: tente de novo com backoff.
invalid_llm_key, invalid_modelO administrador precisa corrigir a configuração de LLM no painel.
empty_response, invalid_responseA LLM respondeu algo inutilizável; tentar de novo ou reformular.

Política de retry sugerida​

SituaçãoO que fazer
429Aguardar os segundos de Retry-After antes de repetir.
502 com reason transitório, 503Backoff exponencial (1 s, 2 s, 4 s), no máximo 3 tentativas.
401, 409, 422Não repetir a mesma requisição.
Timeout do seu cliente HTTP em /v1/askNão repetir automaticamente: cada tentativa gasta tokens. Deixe o usuário tentar de novo.