Diagnóstico da primeira chamada que falha
Resposta direta
Diagnostique em ordem: URL final, header Bearer, model ID, JSON e status; o caso de chave ausente ou inválida tem HTTP 401 no teste registrado.
Pré-requisitos e passos
- Compare a URL final com https://api.mandapi.com/v1/chat/completions.
- Confirme que Authorization começa por Bearer e que a variável não está vazia.
- Compare model e messages com o payload mínimo e capture o status sem vazar segredo.
Exemplo copiável
set -u
test -n "${MANDAPI_API_KEY:-}" || { echo "MANDAPI_API_KEY ausente" >&2; exit 1; }
curl -sS -o response.json -w 'HTTP %{http_code}
' \
https://api.mandapi.com/v1/chat/completions \
-H "Authorization: Bearer ${MANDAPI_API_KEY}" \
-H "Content-Type: application/json" \
-d '{"model":"deepseek-v4-flash","messages":[{"role":"user","content":"ok"}]}'
Como conferir o resultado
A evidência disponível cobre 401 e um Chat Completions 200; para qualquer outro status, preserve o caso para nova investigação em vez de atribuir uma causa não registrada.
← Voltar para API de IA no Brasil
Diagnóstico consolidado da primeira chamada
Use esta sequência para separar erro de rede, autenticação, rota, modelo, limite e timeout antes de alterar produção.
Sequência de diagnóstico
- Registre status HTTP, mensagem, endpoint e modelo.
- Guarde o request ID ou header equivalente.
- Repita com uma única requisição e timeout explícito.
- Confira
GET /v1/modelsantes de suspeitar do modelo. - Só aumente timeout ou concorrência depois de identificar a camada que falhou.
Matriz rápida
| Sinal | Primeiro lugar para olhar |
|---|---|
| 401/403 | Chave, formato Bearer, escopo e permissão |
| 404 | Base URL, rota e model ID |
| 429 | Cadência, tokens, cota e backoff |
| 5xx | Serviço/upstream, request ID e retry limitado |
| Timeout | Timeout do cliente, latência do upstream e resposta em streaming |
Timeout não é o mesmo que erro de autenticação
Defina um timeout maior que a latência esperada, mas finito. Registre início, fim e se algum byte foi recebido. Para streaming, diferencie tempo até o primeiro byte de duração total.
Receita para capturar status sem vazar a chave
Separe o codigo HTTP do corpo: imprima o status em uma linha e grave o corpo em arquivo. Leia os dois em conjunto — status e JSON precisam ser coerentes antes de concluir qualquer causa.
curl -sS -o response.json -w 'HTTP %{http_code}\n' \
https://api.mandapi.com/v1/chat/completions \
-H "Authorization: Bearer ${MANDAPI_API_KEY}" \
-H "Content-Type: application/json" \
-d '{"model":"deepseek-v4-flash","messages":[{"role":"user","content":"ok"}]}'
cat response.json