Dashboard

Introdução

Códigos de Erro

Todas as respostas de erro seguem o formato:

{
  "error": "Descrição legível do erro."
}

O campo error é sempre uma string em português.

Códigos HTTP

Erros do cliente (4xx)

CódigoNomeDescriçãoQuando ocorre
400Bad RequestRequisição inválidaCampos obrigatórios ausentes, formato inválido, imagem vazia
401UnauthorizedNão autenticadoChave de API ausente, inválida, expirada ou inativa
402Payment RequiredCréditos insuficientesPOST /api/recognize sem créditos disponíveis
403ForbiddenSem permissãoChave válida mas sem scope para este recurso
404Not FoundRecurso não encontradoID inexistente ou pertence a outro usuário
409ConflictConflitoCâmera duplicada no agente, nome já existente
429Too Many RequestsRate limit excedidoMuitas requisições em pouco tempo

Erros do servidor (5xx)

CódigoNomeDescriçãoQuando ocorre
500Internal Server ErrorErro internoErro inesperado no servidor
502Bad GatewayAgente indisponívelAgente de processamento não respondeu
503Service UnavailableServiço indisponívelNenhum servidor de processamento disponível

Exemplos por cenário

Chave de API inválida

HTTP 401

{ "error": "Não autenticado." }

Câmera não encontrada

HTTP 404

{ "error": "Câmera não encontrada." }

Créditos insuficientes

HTTP 402

{ "error": "Créditos insuficientes. Adquira mais créditos para continuar." }

Agente de processamento offline

HTTP 502

{ "error": "Erro ao registrar câmera no agente de processamento." }

Imagem muito grande

HTTP 400

{ "error": "Imagem muito grande. Máximo 10MB." }

Rate limit

HTTP 429

{ "error": "Limite de requisições atingido. Aguarde um momento." }

Tratamento recomendado

async function apiCall(url, options) {
  const res = await fetch(url, options);

  if (res.ok) {
    return await res.json();
  }

  const { error } = await res.json();

  switch (res.status) {
    case 401:
      // Chave inválida — verificar configuração
      throw new Error(`Auth error: ${error}`);
    case 402:
      // Sem créditos — comprar mais
      throw new Error(`Credits: ${error}`);
    case 429:
      // Rate limit — aguardar e tentar novamente
      await sleep(60000);
      return apiCall(url, options);
    case 502:
    case 503:
      // Servidor indisponível — retry com backoff
      await sleep(5000);
      return apiCall(url, options);
    default:
      throw new Error(`API error ${res.status}: ${error}`);
  }
}

Dica

Para erros 5xx, implemente retry com backoff exponencial: 1s, 2s, 4s, 8s, máximo 3 tentativas. Para erros 4xx, corrija a requisição antes de tentar novamente.

Esta página foi útil?