Como implementar health check para monitorar disponibilidade da API de CPF

Aprenda a implementar health checks automatizados para monitorar a disponibilidade e o tempo de resposta da API de consulta de CPF.

Redação CPFHub.io
Redação CPFHub.io
··7 min de leitura
Como implementar health check para monitorar disponibilidade da API de CPF

Implementar um health check para monitorar a disponibilidade da API de CPF garante que sua aplicação detecte falhas antes que os usuários as percebam. Com a CPFHub.io — que responde em cerca de 900ms e oferece 99,9% de uptime —, um monitoramento bem configurado transforma degradações silenciosas em alertas acionáveis, protegendo processos críticos de onboarding e concessão de crédito.

Introdução

Dependências externas como APIs de terceiros podem falhar a qualquer momento. Quando sua aplicação depende de uma API de consulta de CPF para processos críticos como onboarding e concessao de crédito, saber que a API esta disponível antes que os usuários encontrem problemas e fundamental.


O que é um health check

Um health check e uma verificação periódica e automatizada que testa se um serviço esta funcionando corretamente. Para uma API de CPF, isso inclui:

  • Disponibilidade -- A API esta respondendo?

  • Latência -- O tempo de resposta esta dentro do esperado?

  • Autenticação -- A API key continua válida?

  • Formato da resposta -- A estrutura do JSON esta correta?


Health check básico com cURL

A forma mais simples de verificar a disponibilidade:

curl -X GET https://api.cpfhub.io/cpf/00000000000 \
    -H "x-api-key: SUA_CHAVE_DE_API" \
    -H "Accept: application/json" \
    --max-time 15 \
    -w "\nHTTP_CODE: %{http_code}\nTIME: %{time_total}s\n" \
    -o /dev/null -s

Se o HTTP_CODE for 200 ou 404 (CPF não encontrado, mas API respondendo), o serviço esta disponível.


Health check em Python

Uma implementação mais completa que verifica multiplos aspectos:

import requests
import time
from datetime import datetime
from enum import Enum

class HealthStatus(Enum):
    HEALTHY = 'healthy'
    DEGRADED = 'degraded'
    UNHEALTHY = 'unhealthy'

class CPFHealthChecker:
    def __init__(self, api_key, latencia_limite_ms=3000):
    self.api_key = api_key
    self.latencia_limite = latencia_limite_ms
    self.session = requests.Session()
    self.session.headers.update({
    'x-api-key': api_key,
    'Accept': 'application/json'
    })

    def verificar(self):
    resultado = {
    'timestamp': datetime.utcnow().isoformat(),
    'status': HealthStatus.UNHEALTHY.value,
    'latencia_ms': None,
    'http_status': None,
    'resposta_valida': False,
    'detalhes': ''
    }

    try:
    inicio = time.perf_counter()
    response = self.session.get(
    'https://api.cpfhub.io/cpf/00000000000',
    timeout=15
    )
    fim = time.perf_counter()

    latencia = (fim - inicio) * 1000
    resultado['latencia_ms'] = round(latencia, 2)
    resultado['http_status'] = response.status_code

    # Verificar se a resposta e JSON valido
    try:
    data = response.json()
    resultado['resposta_valida'] = 'success' in data
    except ValueError:
    resultado['detalhes'] = 'Resposta nao e JSON valido'
    return resultado

    # Determinar status
    if response.status_code in [200, 404] and resultado['resposta_valida']:
    if latencia <= self.latencia_limite:
    resultado['status'] = HealthStatus.HEALTHY.value
    else:
    resultado['status'] = HealthStatus.DEGRADED.value
    resultado['detalhes'] = f'Latencia acima do limite ({latencia:.0f}ms > {self.latencia_limite}ms)'
    elif response.status_code == 401:
    resultado['detalhes'] = 'API key invalida'
    else:
    resultado['detalhes'] = f'Status inesperado: {response.status_code}'

    except requests.exceptions.Timeout:
    resultado['detalhes'] = 'Timeout na requisicao'
    except requests.exceptions.ConnectionError:
    resultado['detalhes'] = 'Erro de conexao'
    except Exception as e:
    resultado['detalhes'] = str(e)

    return resultado

# Uso
checker = CPFHealthChecker('SUA_CHAVE_DE_API')
status = checker.verificar()
print(f'Status: {status["status"]}')
print(f'Latencia: {status["latencia_ms"]}ms')

Health check em Node.js

class CPFHealthChecker {
    constructor(apiKey, latenciaLimiteMs = 3000) {
    this.apiKey = apiKey;
    this.latenciaLimite = latenciaLimiteMs;
    }

    async verificar() {
    const resultado = {
    timestamp: new Date().toISOString(),
    status: 'unhealthy',
    latenciaMs: null,
    httpStatus: null,
    respostaValida: false,
    detalhes: ''
    };

    try {
    const inicio = performance.now();

    const response = await fetch('https://api.cpfhub.io/cpf/00000000000', {
    method: 'GET',
    headers: {
    'x-api-key': this.apiKey,
    'Accept': 'application/json'
    },
    signal: AbortSignal.timeout(15000)
    });

    const fim = performance.now();
    const latencia = fim - inicio;

    resultado.latenciaMs = Math.round(latencia * 100) / 100;
    resultado.httpStatus = response.status;

    const data = await response.json();
    resultado.respostaValida = 'success' in data;

    if ([200, 404].includes(response.status) && resultado.respostaValida) {
    resultado.status = latencia <= this.latenciaLimite ? 'healthy' : 'degraded';
    }
    } catch (error) {
    resultado.detalhes = error.message;
    }

    return resultado;
    }
}

// Uso
const checker = new CPFHealthChecker(process.env.CPFHUB_API_KEY);
const status = await checker.verificar();
console.log(JSON.stringify(status, null, 2));

Agendando verificações periódicas

Com cron (Linux/macOS)

# Verificar a cada 5 minutos
*/5 * * * * /usr/bin/python3 /opt/scripts/health_check_cpf.py >> /var/log/cpf_health.log 2>&1

Com Node.js (setInterval)

const INTERVALO_MS = 5 * 60 * 1000; // 5 minutos

const checker = new CPFHealthChecker(process.env.CPFHUB_API_KEY);

setInterval(async () => {
    const status = await checker.verificar();
    console.log(`[${status.timestamp}] Status: ${status.status} | Latencia: ${status.latenciaMs}ms`);

    if (status.status === 'unhealthy') {
    // Disparar alerta (e-mail, Slack, PagerDuty)
    await enviarAlerta(status);
    }
}, INTERVALO_MS);

Expondo o health check como endpoint

Crie um endpoint na sua aplicação que expoe o status das dependências:

from flask import Flask, jsonify

app = Flask(__name__)
checker = CPFHealthChecker('SUA_CHAVE_DE_API')

@app.route('/health')
def health():
    status_cpfhub = checker.verificar()

    saude_geral = 'healthy'
    if status_cpfhub['status'] == 'unhealthy':
    saude_geral = 'unhealthy'
    elif status_cpfhub['status'] == 'degraded':
    saude_geral = 'degraded'

    return jsonify({
    'status': saude_geral,
    'dependencias': {
    'cpfhub_api': status_cpfhub
    }
    }), 200 if saude_geral == 'healthy' else 503

Integrando com ferramentas de monitoramento

  • Grafana + Prometheus -- Exportar metricas de latência e disponibilidade.

  • Datadog -- Health check nativo com alertas configurados.

  • UptimeRobot / Pingdom -- Monitoramento externo do seu endpoint /health.

  • PagerDuty / OpsGenie -- Alertas para a equipe de plantao quando o status muda para unhealthy.


Definindo thresholds

MetricaHealthyDegradedUnhealthy
Latência< 2s2s a 5s> 5s ou timeout
Status HTTP200 ou 404500, 503Sem resposta
Taxa de sucesso> 99%95% a 99%< 95%

Perguntas frequentes

O que é necessário para implementar validação de CPF neste contexto?

A validação de CPF exige uma chamada à API com o número do documento e a chave de autenticação. A CPFHub.io retorna o status do CPF, nome do titular e data de nascimento, permitindo a verificação em tempo real durante o cadastro ou transação.

A API CPFHub.io funciona para todos os volumes de consulta?

Sim. O plano gratuito oferece 50 consultas por mês sem cartão de crédito — ideal para testes e projetos pequenos. Para volumes maiores, o plano Pro inclui 1.000 consultas mensais por R$149. Se o limite for ultrapassado, a API não bloqueia: cobra R$0,15 por consulta adicional.

Como garantir conformidade com a LGPD ao usar uma API de CPF?

Use o CPF apenas para a finalidade declarada ao titular, armazene apenas o necessário (não guarde o CPF cru se um token bastar), implemente controle de acesso aos logs de consulta e documente a base legal para o tratamento. A ANPD orienta que dados de identificação devem ser tratados com o princípio da necessidade.

Quanto tempo leva para integrar a API CPFHub.io?

A integração básica leva menos de 30 minutos: crie uma conta em cpfhub.io, gere a API key no painel e faça uma chamada GET para https://api.cpfhub.io/cpf/{CPF} com o header x-api-key. A documentação inclui exemplos em Python, Node.js, PHP, Java e outras linguagens.


Conclusão

Health checks automatizados são a linha de defesa entre uma degradacao silenciosa e uma resposta proativa. Monitorar a disponibilidade e a latência da API de CPF garante que você identifique problemas antes dos seus usuários e tome decisões informadas sobre fallbacks e retentativas.

Cadastre-se em cpfhub.io — 50 consultas mensais gratuitas, sem cartão de crédito — e comece hoje mesmo.

CPFHub.io

Pronto para integrar a API?

50 consultas gratuitas para testar agora. Sem cartão de crédito. Acesso imediato à documentação.

Redação CPFHub.io

Sobre a redação

Redação CPFHub.io

Time editorial especializado em APIs de CPF, identidade digital e compliance no mercado brasileiro. Produzimos guias técnicos, análises regulatórias e tutoriais sobre LGPD e KYC para desenvolvedores e líderes de produto.

WhatsAppFale conosco via WhatsApp