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

  1. Compare a URL final com https://api.mandapi.com/v1/chat/completions.
  2. Confirme que Authorization começa por Bearer e que a variável não está vazia.
  3. 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

  1. Registre status HTTP, mensagem, endpoint e modelo.
  2. Guarde o request ID ou header equivalente.
  3. Repita com uma única requisição e timeout explícito.
  4. Confira GET /v1/models antes de suspeitar do modelo.
  5. Só aumente timeout ou concorrência depois de identificar a camada que falhou.

Matriz rápida

SinalPrimeiro lugar para olhar
401/403Chave, formato Bearer, escopo e permissão
404Base URL, rota e model ID
429Cadência, tokens, cota e backoff
5xxServiço/upstream, request ID e retry limitado
TimeoutTimeout 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

Guias relacionados