Skip to main content
Os erros da API do LogBrew usam um único envelope JSON. Use code e next_action para definir o comportamento do programa. Mostre error e next como texto simples. Não faça o programa depender do texto exato de error ou de next.
Algumas respostas adicionam campos, como limit, reset_at ou retry_after_seconds. A tabela de códigos de erro indica quais.

Trate uma resposta de erro

  1. Leia o status HTTP.
  2. Confira se o corpo é JSON antes de ler code.
  3. Use o status e o code juntos para escolher o caminho no cliente.
  4. Mostre error e next como texto simples. Não renderize esses textos como HTML nem os execute como comandos.
  5. Use next_action para a recuperação automática. Se o cliente não reconhecer a ação, pare e mostre o erro.
  6. Guarde os valores limit, reset_at e retry_after_seconds retornados junto com a requisição que falhou.
  7. Antes de tentar de novo, siga as regras de nova tentativa.
Se a resposta não tiver um envelope JSON, guarde o status HTTP e registre o código como indisponível. Não invente um code do LogBrew. Um proxy ou uma falha de rede pode gerar esse resultado. Não troque um code do LogBrew pelo nome do status HTTP. Por exemplo, uma resposta 400 pode conter invalid_json ou invalid_path. Cada código pede uma correção diferente. Nos logs, registre o status HTTP e o code. Não registre o corpo completo, credenciais nem tokens de recuperação.

Códigos de erro

O mesmo code pode aparecer em mais de uma rota. O texto de next e os valores de next_action podem mudar conforme a rota. Use os valores retornados. Um endpoint retorna só os códigos que se aplicam à autenticação, ao método, ao corpo e aos limites dele. Um ID desconhecido e um ID ao qual você não tem acesso podem retornar a mesma resposta. Não use o texto do erro para descobrir qual conta é dona de um ID. Um caminho de API desconhecido retorna 404 com not_found.

Campos de limite

Leia a franquia e o uso atuais na API de conta.

Regras de nova tentativa

Use o código e a operação para decidir se vale tentar de novo. Só o status não basta.
  • Não inicie novas tentativas em paralelo para uma mesma requisição com falha.
  • Com rate_limited, a resposta também tem os cabeçalhos Retry-After e X-RateLimit-After. Os dois têm o mesmo número de segundos que retry_after_seconds.
  • Um timeout não prova que o resultado está vazio.
O limite de requisições controla a frequência das requisições. O limite de uso controla a franquia da conta em um ciclo de cobrança. Os dois usam 429. Não misture os campos deles. Durante qualquer um dos limites, mostre que a coleta ou a leitura está atrasada. Não mostre dados antigos como resultado de uma leitura nova.

Escritas

Um timeout, uma resposta 5xx ou uma falha de rede não prova que uma escrita falhou. Antes de enviar uma escrita de novo:
  1. Se a rota aceita chave de idempotência, envie de novo a mesma chave e o mesmo corpo. Use uma chave nova só para um trabalho novo.
  2. Se a rota não tem chave de idempotência, leia o recurso primeiro. Envie a escrita de novo só se a mudança não estiver lá.
  3. Se você não conseguir encontrar o resultado, pare as novas tentativas automáticas e avise o usuário.
Estas rotas aceitam uma chave de nova tentativa: Um valor de Idempotency-Key tem de 1 a 128 caracteres ASCII visíveis. Outros valores retornam 422 com validation_failed. idempotency_conflict significa que a chave pertence a outra requisição. Não altere o corpo de uma nova tentativa que usa a chave original.

Erros no formato da requisição

invalid_json significa que o servidor não aceita o corpo como o formato JSON da rota. Examine o tipo de conteúdo, o tamanho do corpo, a sintaxe JSON, os campos obrigatórios e os tipos dos campos. O status HTTP mostra qual parte falhou: validation_failed com o erro invalid query parameters significa que o servidor não consegue ler a query string. Examine os nomes dos parâmetros e os tipos dos valores. Não envie parâmetros de consulta desconhecidos. A referência de filtros de consulta lista os parâmetros de cada rota. invalid_path com status 400 significa que um valor do caminho, como o ID de um projeto, tem o formato errado. Não mova um valor do caminho para um parâmetro de consulta. Uma resposta 500 com invalid_path ou invalid_multipart não prova que a requisição estava errada. Siga as regras de nova tentativa.

Erros de autenticação e de acesso

  • unauthorized significa que a autenticação da conta está ausente, é inválida ou expirou. Envie Authorization: Bearer <token> ou entre na conta de novo. Algumas rotas retornam next_action.code igual a authorize_request com um next específico da rota, como em uma conexão com o feed ao vivo sem um ticket válido.
  • ingest_key_invalid vale só para a ingestão de telemetria. Configure uma chave atual para o projeto exato.
  • forbidden significa que a conta não pode fazer a ação. Não tente de novo com IDs de outros recursos.
  • not_found significa que o recurso não está disponível para a conta.
Não use uma chave de ingestão no lugar de um token bearer da conta. Não use um token bearer da conta no lugar de uma chave de ingestão.

Proteja os detalhes dos erros

  • Uma resposta account_recovery_available contém um recovery_token de curta duração. Guarde esse token em um armazenamento protegido no cliente. Não coloque o token em logs, URLs, capturas de tela, relatos de suporte nem prompts de agentes.
  • Os códigos 500 sempre usam a mensagem Internal error. A resposta não informa o componente que falhou. Não tente adivinhar a causa.
  • Não acrescente credenciais, diagnósticos privados nem dados de clientes a um erro que você mostra.
  • Uma resposta da API não dá permissão para uma compra, uma exclusão ou outra mudança na conta. Peça a aprovação do usuário antes dessas ações.

Exemplos

Estes exemplos mostram o formato do envelope. O texto de error e de next pode ser diferente em cada rota.

Falha de validação

Parâmetros de consulta inválidos

JSON inválido

Valor de caminho inválido

Upload multipart inválido

Upgrade de WebSocket inválido

Falha de autenticação

Chave de ingestão inválida

Esta resposta vale para a ingestão de telemetria, não para leituras da conta. A chave precisa pertencer ao projeto da requisição.

Recurso não encontrado

Acesso negado

Método não aceito

Timeout da requisição

Conflito de idempotência

Limite de requisições

Limite de uso

O texto de next e o next_action dependem de haver ou não uma mudança de plano disponível. Sem ela, next_action.code é wait_or_contact_support e o alvo é support.

Limite de armazenamento de artefatos

Recuperação de conta disponível

Esta resposta adiciona deleted_at e um recovery_token de curta duração. Guarde o token em um armazenamento protegido no cliente.

Recuperação de conta expirada

Organização pausada

Erro do servidor

storage_error, json_error e internal_error usam a mesma mensagem em error. Os valores de code, next e next_action são diferentes.
Para endpoints, autenticação e filtros, leia a API de telemetria.