Documentação

Tratamento de Erros

Aprenda a identificar e tratar erros retornados pela API ActivePayments para criar integrações robustas e com boa experiência para o usuário.

Estrutura de Erro

Quando ocorre um erro, a API retorna um JSON com a seguinte estrutura:

Resposta de Erro (400 Bad Request)
{
  "success": false,
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Dados inválidos na requisição",
    "details": [
      {
        "field": "amount",
        "message": "Valor mínimo é R$ 1,00"
      },
      {
        "field": "customerCpf",
        "message": "CPF inválido"
      }
    ]
  },
  "statusCode": 400,
  "timestamp": "2024-01-15T10:00:00.000Z"
}

Campos da Resposta de Erro

CampoTipoDescrição
successbooleanSempre false em caso de erro
error.codestringCódigo único do erro (use para tratamento programático)
error.messagestringMensagem legível para humanos (pode exibir ao usuário)
error.detailsarrayLista de erros de validação por campo (opcional)
statusCodenumberCódigo HTTP da resposta

Códigos HTTP

CódigoSignificadoQuando Ocorre
200OKRequisição bem-sucedida (GET)
201CreatedRecurso criado com sucesso (POST)
400Bad RequestDados inválidos ou faltando campos obrigatórios
401UnauthorizedAPI Key inválida, expirada ou IP não autorizado
403ForbiddenSem permissão para acessar este recurso
404Not FoundRecurso não encontrado (cobrança, transação)
429Too Many RequestsRate limit excedido
500Internal Server ErrorErro interno - contate o suporte

Códigos de Erro Comuns

Erros de Validação (400)

CódigoDescriçãoSolução
VALIDATION_ERRORCampos com dados inválidosVerifique o array details para erros específicos
INVALID_CPFCPF com formato ou dígitos inválidosEnvie apenas números (11 dígitos) sem pontuação
INVALID_AMOUNTValor fora do range permitidoValor deve ser entre R$ 1,00 e R$ 100.000,00

Erros de Autenticação (401)

Erro de Autenticação
{
  "success": false,
  "error": {
    "code": "UNAUTHORIZED",
    "message": "API Key inválida ou expirada"
  },
  "statusCode": 401,
  "timestamp": "2024-01-15T10:00:00.000Z"
}
CódigoCausa
UNAUTHORIZEDAPI Key não existe ou secret incorreto
API_KEY_EXPIREDAPI Key passou da data de expiração
API_KEY_REVOKEDAPI Key foi revogada no Dashboard
IP_NOT_ALLOWEDIP de origem não está na whitelist

Erro de Recurso Não Encontrado (404)

Erro 404
{
  "success": false,
  "error": {
    "code": "NOT_FOUND",
    "message": "Cobrança não encontrada"
  },
  "statusCode": 404,
  "timestamp": "2024-01-15T10:00:00.000Z"
}

Rate Limit (429)

Rate Limit Excedido
{
  "success": false,
  "error": {
    "code": "RATE_LIMIT_EXCEEDED",
    "message": "Limite de requisições excedido. Tente novamente em 60 segundos.",
    "retryAfter": 60
  },
  "statusCode": 429,
  "timestamp": "2024-01-15T10:00:00.000Z"
}
Limite de RequisiçõesA API permite 100 requisições por minuto por API Key. Ao exceder, aguarde o tempo indicado em retryAfter.

Exemplo de Tratamento

Recomendamos implementar um handler centralizado para tratar os diferentes tipos de erro:

Node.js - Tratamento de Erros
async function createCharge(data) {
  try {
    const response = await fetch('https://api.ActivePayments.com.br/api/v1/charges', {
      method: 'POST',
      headers: {
        'Authorization': `ApiKey ${publicKey}:${secret}`,
        'Content-Type': 'application/json',
      },
      body: JSON.stringify(data),
    });

    const result = await response.json();

    if (!result.success) {
      // Tratar erro baseado no código
      switch (result.error.code) {
        case 'VALIDATION_ERROR':
          // Mostrar erros de validação para o usuário
          result.error.details?.forEach(err => {
            console.error(`Campo ${err.field}: ${err.message}`);
          });
          break;
        
        case 'UNAUTHORIZED':
          // Verificar credenciais ou renovar API Key
          console.error('Credenciais inválidas');
          break;
        
        case 'RATE_LIMIT_EXCEEDED':
          // Aguardar e tentar novamente
          const retryAfter = result.error.retryAfter || 60;
          await new Promise(r => setTimeout(r, retryAfter * 1000));
          return createCharge(data); // Retry
          
        default:
          console.error(result.error.message);
      }
      
      throw new Error(result.error.message);
    }

    return result.data;
  } catch (error) {
    console.error('Erro na requisição:', error);
    throw error;
  }
}

Boas Práticas

  • Use o campo code para lógica de tratamento, não o message (que pode mudar)
  • Implemente retry com backoff exponencial para erros 429 e 5xx
  • Registre logs detalhados incluindo o corpo completo do erro
  • Mostre mensagens amigáveis ao usuário final, não detalhes técnicos
  • Valide dados localmente antes de enviar à API para reduzir erros
Próximo passoVeja como configurar Webhooks para receber notificações.