Toda resposta de erro segue o mesmo shape:
code — string estável (não muda entre versões). Programe contra isto.
message — texto humano. Pode mudar entre releases (é pra log/debug).
details — opcional, presente em VALIDATION. Array com um item por campo problemático.
Códigos possíveis
Códigos HTTP
207 Multi-Status em detalhe
Endpoints de escrita em lote (POST /produtos, /variantes, /estoque, /precos) processam cada item individualmente. Se alguns falham, o response é HTTP 207 com o mesmo formato de sucesso — mas com contagem de erros e resultados[].acao === "erro" em cada item problemático.
Comportamento programático:
- Se
parcial === true: pelo menos 1 item falhou, pelo menos 1 sucedeu → retrata só os itens que falharam (não o lote inteiro)
- Se
totalmente_falho === true: nenhum item passou → response vem com HTTP 400; investigar antes de retentar
Quando retentar
Regra geral: retente 5xx e 429. Não retente 4xx — problema é no payload ou no estado, retentar sem mudar nada gera o mesmo erro.
Exemplo de tratamento