Envelope de erro
Toda resposta de erro tem o mesmo formato: um objeto raizerror com type, code e message. Os campos param e issues são opcionais e só aparecem quando aplicáveis.
object
Campos ausentes simplesmente não aparecem no JSON. Trate
param e issues como opcionais.Status HTTP por categoria
Cadatype corresponde a uma faixa de status HTTP. Use o status para a decisão de alto nível (sucesso vs. erro do cliente vs. erro do servidor) e o code para o tratamento específico.
Catálogo de códigos
Mapeamento completo de cada situação para status,type e code. Este mapeamento é aplicado globalmente em todos os endpoints.
Erros
4xx originados por validações de transporte (ex.: 413 por arquivo grande demais num upload multipart) também seguem o envelope padrão, com o status original e type: invalid_request_error.Erros de validação (Zod)
Quando o corpo, a query ou os parâmetros de path falham na validação de schema, a API retorna400 com code: parameter_invalid. A resposta inclui:
param: o caminho do primeiro campo inválido, derivado doinstancePathcom barras convertidas em pontos (ex.:/tiers/0/minCountviratiers.0.minCount).issues: o array completo de problemas de validação, um item por campo, para que você localize todos os erros de uma vez.
percentage com o percentage fora do intervalo permitido (0 a 100).
Exemplos por categoria
404: Recurso não encontrado
404: Recurso não encontrado
Um ID válido que não corresponde a nenhum recurso da sua organização (ou de outra organização, já que o multi-tenancy é estrito) retorna
404.401: Não autenticado
401: Não autenticado
Request sem token, com token inválido/expirado ou sem o header Veja Autenticação para obter e usar uma API key (
Authorization.rstr_...).403: Sem permissão
403: Sem permissão
Você está autenticado, mas seu papel na organização não permite a operação (ex.: criar um job de reprocessamento exige papel
owner ou admin).409: Conflito de estado
409: Conflito de estado
A operação conflita com o estado atual do recurso (ex.: aprovar uma conversão que já foi paga, ou criar um recurso com um identificador único já em uso).
400 / 409: Idempotência
400 / 409: Idempotência
Reusar uma Veja Idempotência para o ciclo completo (escopo
Idempotency-Key com um corpo diferente do request original retorna 400 idempotency_key_reused. Repetir um request enquanto o original ainda está em processamento retorna 409 idempotency_in_flight.org:user, TTL de 24h, replay).500: Erro do servidor
500: Erro do servidor
Um erro inesperado do lado do servidor. O request pode estar correto; é seguro repetir com backoff exponencial. Se persistir, contate o suporte com o horário e o endpoint.
Como tratar erros
Trate erros com base no status HTTP primeiro e nocode em seguida. O type serve para classificação genérica; o code para decisões específicas.
1
Cheque o status HTTP
2xx é sucesso. 4xx é um problema com o request: não repita sem mudar algo (exceto 409 idempotency_in_flight). 5xx é o servidor: repita com backoff exponencial.2
Use error.code para a lógica
Faça branch no
code (estável), nunca na message (sujeita a mudança). Para validação, use param e issues para apontar o(s) campo(s) ao usuário ou ao log.3
Não repita erros determinísticos
Um
400/404/403 se repetirá com o mesmo resultado. Em fluxos com Idempotency-Key, um 4xx determinístico é gravado e retornado como replay nas próximas tentativas com a mesma chave.Próximos passos
Autenticação
Como autenticar com API keys
rstr_... e evitar 401.Idempotência
Escopo, TTL e replay dos erros
idempotency_error.IDs e recursos
Formato dos IDs, centavos e basis points para evitar
parameter_invalid.Paginação
Limites e cursores das listagens, e seus erros de validação.