Integrar uma API de consulta de CPF parece simples — e é, quando feito corretamente. Mas existem erros recorrentes que comprometem a segurança, a performance e a confiabilidade da aplicação. Os mais comuns vão desde expor a chave de API no front-end até não tratar erros HTTP e ignorar cache, e cada um deles é evitável com práticas diretas descritas abaixo.
Erro 1: Expor a chave de API no front-end
O problema: Colocar a x-api-key diretamente no código JavaScript do navegador. Qualquer pessoa pode abrir o DevTools e copiar sua chave.
Como evitar: Sempre faça a chamada à API pelo servidor (back-end). Crie um endpoint intermediário:
// ERRADO: chamada direta do front-end
fetch('https://api.cpfhub.io/cpf/12345678900', {
headers: { 'x-api-key': 'SUA_CHAVE_AQUI' } // exposta!
});
// CORRETO: chamar seu proprio back-end
fetch('/api/validar-cpf/12345678900');
Erro 2: Não validar o formato antes de chamar a API
O problema: Enviar CPFs com formato inválido para a API, desperdiçando consultas e cota.
Como evitar: Valide os dígitos verificadores localmente antes de fazer a requisição:
function cpfValido(cpf) {
cpf = cpf.replace(/\D/g, '');
if (cpf.length !== 11 || /^(\d)\1{10}$/.test(cpf)) return false;
// ... validacao de digitos verificadores
return true;
}
if (cpfValido(cpf)) {
// so entao chama a API
}
Erro 3: Não tratar erros HTTP
O problema: Assumir que a API sempre retorna 200. Quando ocorre um erro (400, 401, 500), a aplicação quebra.
Como evitar: Trate cada código de status:
const response = await fetch(`https://api.cpfhub.io/cpf/${cpf}`, { headers });
switch (response.status) {
case 200: return await response.json();
case 400: throw new Error('CPF com formato invalido');
case 401: throw new Error('Chave de API invalida');
case 404: throw new Error('CPF nao encontrado');
default: throw new Error('Erro inesperado');
}
Erro 4: Não implementar retry para falhas temporárias
O problema: Falhas de rede e erros 5xx são temporários. Sem retry, o usuário recebe uma mensagem de erro desnecessária que poderia ser resolvida automaticamente.
Como evitar: Implemente backoff exponencial para erros de servidor. O OWASP recomenda tratar resiliência de integração como parte da segurança da aplicação:
async function consultarComRetry(cpf, tentativas = 3) {
for (let i = 0; i < tentativas; i++) {
try {
const response = await fetch(`https://api.cpfhub.io/cpf/${cpf}`, { headers });
if (response.status < 500) return response; // nao faz retry para 4xx
} catch (e) {
// erro de rede, tenta novamente
}
await new Promise(r => setTimeout(r, Math.pow(2, i) * 1000));
}
throw new Error('Servico temporariamente indisponivel');
}
Erro 5: Não configurar timeout
O problema: Se a rede estiver lenta, a requisição pode travar indefinidamente.
Como evitar: Configure timeout em todas as chamadas. A latência típica da CPFHub.io é ~900ms, então um timeout de 10 segundos é adequado para a maioria dos cenários:
response = requests.get(url, headers=headers, timeout=10) # 10 segundos
const controller = new AbortController();
setTimeout(() => controller.abort(), 10000);
const response = await fetch(url, { headers, signal: controller.signal });
Erro 6: Armazenar o CPF completo nos logs
O problema: CPF é dado pessoal protegido pela LGPD. Armazená-lo em logs sem mascaramento é uma violação.
Como evitar: Mascare sempre:
def mascarar(cpf):
return f'{cpf[:3]}.***.**{cpf[8]}-{cpf[9:]}'
# '123.***.**9-00'
Erro 7: Hardcode da chave de API
O problema: Colocar a chave diretamente no código-fonte, onde pode ser commitada no Git.
Como evitar: Use variáveis de ambiente:
export CPFHUB_API_KEY=sua_chave_aqui
import os
api_key = os.environ['CPFHUB_API_KEY']
Erro 8: Não implementar cache
O problema: Consultar o mesmo CPF repetidamente desperdiça cota e aumenta latência.
Como evitar: Implemente cache com TTL adequado:
const cache = new Map();
async function consultarCPF(cpf) {
if (cache.has(cpf)) return cache.get(cpf);
const data = await fetchAPI(cpf);
cache.set(cpf, data);
setTimeout(() => cache.delete(cpf), 24 * 60 * 60 * 1000); // 24h
return data;
}
Erro 9: Não ter plano de fallback
O problema: Se a API ficar indisponível (mesmo com 99,9% de uptime), a aplicação inteira para.
Como evitar: Implemente fallback gracioso:
-
Permitir que o formulário continue sem validação real (valide depois).
-
Usar validação sintática como fallback temporário.
-
Registrar para revalidação posterior.
Erro 10: Não testar cenários de erro
O problema: Testar apenas o "caminho feliz" (CPF válido, resposta 200). Em produção, os cenários de erro aparecem.
Como evitar: Crie testes automatizados para todos os cenários:
-
CPF válido (200).
-
CPF não encontrado (404).
-
Formato inválido (400).
-
Chave inválida (401).
-
Timeout.
-
Erro de rede.
Resumo
| # | Erro | Solução |
|---|---|---|
| 1 | Chave no front-end | Usar back-end intermediário |
| 2 | Sem validação local | Validar dígitos antes da API |
| 3 | Sem tratamento de erros | Switch por status code |
| 4 | Sem retry | Backoff exponencial para 5xx |
| 5 | Sem timeout | Configurar 10s |
| 6 | CPF completo em logs | Mascarar dados |
| 7 | Hardcode da chave | Variáveis de ambiente |
| 8 | Sem cache | Cache com TTL |
| 9 | Sem fallback | Degradação graciosa |
| 10 | Sem testes de erro | Testes automatizados |
Perguntas frequentes
Por que não devo expor a chave de API no front-end?
Qualquer pessoa com acesso ao DevTools do navegador consegue ver o código JavaScript e copiar a chave. Com ela, podem fazer consultas à sua custa até esgotar a cota ou gerar custos inesperados. Sempre mova a chamada à API para o back-end e exponha apenas um endpoint intermediário sem credenciais visíveis.
O que acontece quando o limite de consultas do plano é atingido?
A API não bloqueia as requisições. Cada consulta acima do limite do plano é cobrada a R$0,15. Isso significa que a aplicação continua funcionando sem interrupção — o controle de volume fica na sua gestão financeira, não em bloqueios operacionais.
Como garantir conformidade com a LGPD ao integrar uma API de CPF?
Nunca armazene o CPF completo em logs. Use mascaramento (123.***.***-00), guarde apenas o necessário para a finalidade declarada e documente a base legal para o tratamento. A ANPD orienta que dados de identificação devem seguir o princípio da necessidade — colete apenas o que o processo exige.
Qual o tempo de resposta esperado da API e como isso afeta o timeout configurado?
A latência média da CPFHub.io é de ~900ms. Um timeout de 10 segundos cobre a grande maioria dos cenários, incluindo variações de rede. Valores abaixo de 2 segundos aumentam o risco de falsos erros de timeout em condições normais de operação.
Conclusão
Evitar esses 10 erros garante uma integração segura, performática e resiliente com a API de CPF. A maioria dos problemas listados aqui decorre de atalhos no início do desenvolvimento — expor a chave no front-end por conveniência, não configurar timeout porque "parece funcionar", não testar erros porque o ambiente de desenvolvimento nunca falha. Em produção, esses atalhos cobram seu preço.
A CPFHub.io foi construída para facilitar a integração correta desde o primeiro momento: documentação completa em mais de 13 linguagens, plano gratuito sem cartão de crédito para testes e um modelo de preços sem bloqueios. Se a sua integração atual tem algum dos erros listados acima, este é um bom momento para revisá-la.
Cadastre-se em cpfhub.io e comece com 50 consultas gratuitas.
CPFHub.io
Pronto para integrar a API?
50 consultas gratuitas para testar agora. Sem cartão de crédito. Acesso imediato à documentação.
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.



