VenddorDocumentação API
API atualAPI legada
Guia rápidoReferência completa
Carregando índice…
API atual/Guia rápido/Primeiros passos

Erros

O formato de erro da API, com exemplos reais e o significado de cada código HTTP.

Quando algo dá errado, a API responde com um código HTTP (4xx para erro seu, 5xx para erro da plataforma) e um corpo JSON com a descrição. O código HTTP é o que decide o seu fluxo (repetir, corrigir, parar); a mensagem serve para o log e para a pessoa que vai investigar.

Pontos-chave
  • O corpo é {"error": "mensagem"}, às vezes com detail ou code. Validação de campos: {"error": "validation_failed", "fields": {...}}.
  • Decida pelo código HTTP, nunca pelo texto da mensagem: o texto pode mudar.
  • Algumas mensagens vêm em português (campo detail). Elas são devolvidas como o servidor as escreve.
  • Guarde o cabeçalho X-Request-Id da resposta: é o que o suporte precisa para achar a chamada.

O formato do erro

json
{ "error": "order not found" }

O campo error é a mensagem curta (ou um código em snake_case, como account_locked). Dependendo da rota, vêm campos extras:

Campo extraQuandoExemplo
detailExplicação adicional. Pode vir em português.{"error":"invalid request body","detail":"invalid character 'b' looking for beginning of object key string"}
codeCódigo estável para tratar no programa.{"error":"this token is not valid for this route","code":"token_scope"}
requiredPrivilégio que faltou.{"error":"insufficient privileges","required":"manage_orders"}
fieldsErro por campo, numa validação.{"error":"validation_failed","fields":{"category_id":"category_required","name":"name_required"}}
messageTexto legível, em erros de loja e de conta.{"error":"tenant_suspended","message":"this storefront is temporarily unavailable"}

Códigos HTTP

StatusSignificadoO que fazer
200, 201Deu certo. 201 indica que algo foi criado.Siga em frente.
400Requisição inválida: JSON quebrado, campo obrigatório ausente, valor fora do permitido, regra de negócio violada.Corrija a requisição. Repetir igual falha de novo.
401Sem credencial, credencial inválida ou token vencido ou revogado.Renove o token ou faça login. Confira o token.
403A credencial é válida, mas não tem permissão: privilégio ausente, token de outra loja, conta bloqueada por política.Ajuste permissões. Não adianta repetir.
404O registro não existe (ou o id está malformado), ou a loja não foi encontrada.Confira o id e a loja.
409Conflito: conta ambígua no login (multiple_accounts_cpf), operação em andamento (in_progress).Resolva o conflito ou espere e consulte.
422Uma regra da loja recusou a operação. A mensagem é a da loja, com detail: "refused_by_store".Mostre a mensagem; corrija os dados.
429Limite de requisições ou de tentativas de login. Vem com Retry-After.Espere e tente de novo (Limites).
500Erro interno, ou uma validação que a rota não trata.Pode repetir com espera crescente; se persistir, abra um chamado com o X-Request-Id.
503Loja suspensa, em manutenção, ou a rota estourou o tempo (handler_timeout).Espere e repita.

Exemplos reais

Falta a credencial (401)

json
{ "error": "missing authorization header" }

Sem permissão (403)

json
{ "error": "insufficient privileges", "required": "manage_orders" }

Registro inexistente (404)

json
{ "error": "order not found" }

Validação (400)

json
{ "error": "validation_failed", "fields": { "category_id": "category_required", "name": "name_required" } }
json
{ "error": "at least one item is required" }

Conflito de dados (500 em alguns casos)

Algumas regras de unicidade ainda respondem 500 em vez de 409. Um exemplo é o CPF de um cliente que já pertence a outra conta:

json
{ "error": "failed to create user", "detail": "CPF already registered by another user" }

Leia o detail quando um 500 vier de uma escrita; ele costuma dizer o que há de errado nos seus dados.

Limite de requisições (429)

json
{ "error": "rate limit exceeded", "detail": "too many requests, please try again later" }

Tempo esgotado (503)

json
{ "error": "request timeout", "code": "handler_timeout" }

Erros que acontecem antes da sua rota

Três verificações rodam antes do código da operação, e por isso os erros delas se parecem em toda a API:

  1. A loja (Endereço e ambientes): 404 tenant not found, 503 tenant_suspended.
  2. O limite de requisições (429 rate limit exceeded).
  3. A autenticação (Autenticação): 401 e 403 com as mensagens da tabela daquela página.

Mensagens em português

Alguns textos de detail e de regras da loja vêm em português, porque nascem de validações escritas em português (por exemplo, o aviso de uma data inválida em um filtro). Eles são devolvidos como o servidor os escreve e podem mudar. Não faça comparação de texto com eles.

Como tratar erros no seu código

  1. Olhe o código HTTP primeiro

    2xx segue em frente. 401 tenta renovar o token uma vez. 429, 503 e 5xx entram em repetição com espera. O resto é erro seu.

  2. Leia o corpo para o log e para o usuário

    Registre o corpo inteiro e o X-Request-Id. Use error e, em validações, fields.

  3. Repita só o que é seguro repetir

    Nunca repita um 400, 403 ou 404 sem mudar algo. Para criações (pedido), use o idempotency_key para que uma repetição não duplique o registro (Limites e boas práticas).

Erros comuns

  • Ignorar os campos extras. fields, code e required dizem exatamente o que corrigir.
  • Repetir um 400 em loop. Ele nunca passa sem mudança.
  • Fazer if mensagem == "...". Use o código HTTP e, quando existir, o campo code.
  • Ignorar o 500 com detail. Em escritas, ele costuma apontar um dado duplicado ou inválido.

Veja também

Autenticação
Os erros 401 e 403 em detalhe.
Limites e boas práticas
429, repetição e idempotência.
Fundamentos da API
Conceitos comuns a toda a plataforma.
Anterior
Convenções
Próxima
Limites e boas práticas
Nesta página
  • O formato do erro
  • Códigos HTTP
  • Exemplos reais
  • Falta a credencial (401)
  • Sem permissão (403)
  • Registro inexistente (404)
  • Validação (400)
  • Conflito de dados (500 em alguns casos)
  • Limite de requisições (429)
  • Tempo esgotado (503)
  • Erros que acontecem antes da sua rota
  • Mensagens em português
  • Como tratar erros no seu código
  • Erros comuns
  • Veja também