A validação de CPF é a base da confiança em plataformas de aluguel temporário: ela garante que hóspedes e anfitriões são pessoas reais, identificáveis e responsabilizáveis. Com a API da CPFHub.io, plataformas brasileiras integram essa verificação em segundos, protegendo ambos os lados da transação e atendendo às exigências fiscais e legais vigentes.
Introdução
Plataformas de aluguel temporário conectam anfitriões e hóspedes em transações que envolvem valores significativos e, mais importante, o acesso a propriedades privadas. A confiança entre as partes é o alicerce desse modelo de negócio. Quando um anfitrião aceita um hóspede, ele está permitindo que uma pessoa entre em sua casa — e quando um hóspede faz uma reserva, ele confia que o imóvel existe e corresponde ao anunciado.
A validação de CPF via API é essencial para garantir que ambas as partes são pessoas reais e identificáveis.
Por que a verificação de identidade é crítica
Segurança do anfitrião
O anfitrião precisa saber quem está entrando em seu imóvel. Hóspedes não verificados representam riscos que vão desde danos ao imóvel até atividades ilegais. A validação de CPF garante que o hóspede é uma pessoa real, identificável e rastreável.
Segurança do hóspede
Do lado do hóspede, a verificação do anfitrião confirma que a pessoa que está alugando o imóvel tem identidade verificada. Golpes com anúncios falsos — onde o "anfitrião" recebe o pagamento e desaparece — são combatidos quando o CPF do anfitrião é validado.
Conformidade fiscal
O aluguel temporário gera obrigações fiscais para o anfitrião. A Receita Federal exige que a renda de aluguéis seja declarada, e o CPF é o identificador usado para essa finalidade. Plataformas que operam no Brasil podem ser obrigadas a reportar essas informações.
Exigências legais
Municípios como São Paulo, Rio de Janeiro e Florianópolis possuem regulamentações específicas para aluguel temporário. Muitas exigem que o anfitrião mantenha registros dos hóspedes, incluindo dados de identificação.
Implementação em Node.js
O exemplo a seguir demonstra a verificação de CPF para hóspedes e anfitriões em uma plataforma de aluguel temporário.
const express = require("express");
const axios = require("axios");
const crypto = require("crypto");
const app = express();
app.use(express.json());
const CPFHUB_API_URL = "https://api.cpfhub.io/cpf";
const CPFHUB_API_KEY = "SUA_CHAVE_DE_API";
const REQUEST_TIMEOUT = 10000; // 10 segundos
// Simulação de banco de dados
const usuarios = new Map();
const imoveis = new Map();
const reservas = new Map();
const cpfsCadastrados = new Set();
function limparCpf(cpf) {
return cpf.replace(/\D/g, "");
}
async function consultarCpf(cpf) {
const cpfLimpo = limparCpf(cpf);
try {
const response = await axios.get(`${CPFHUB_API_URL}/${cpfLimpo}`, {
headers: {
"x-api-key": CPFHUB_API_KEY,
Accept: "application/json",
},
timeout: REQUEST_TIMEOUT,
});
if (response.data.success) {
return response.data.data;
}
return null;
} catch (error) {
if (error.code === "ECONNABORTED") {
throw new Error("Timeout na consulta de CPF");
}
if (error.response) {
const { status } = error.response;
if (status === 401) throw new Error("API key inválida");
if (status === 404) return null;
}
throw new Error("Erro na consulta de CPF");
}
}
// Cadastro de usuário (hóspede ou anfitrião)
app.post("/api/usuario/cadastro", async (req, res) => {
const { nome, email, cpf, tipo } = req.body;
// tipo: "HOSPEDE" ou "ANFITRIAO"
if (!cpf || !nome || !email || !tipo) {
return res.status(400).json({
erro: "Nome, email, CPF e tipo são obrigatórios",
});
}
if (!["HOSPEDE", "ANFITRIAO"].includes(tipo)) {
return res.status(400).json({
erro: "Tipo deve ser HOSPEDE ou ANFITRIAO",
});
}
const cpfLimpo = limparCpf(cpf);
// Verifica duplicidade
if (cpfsCadastrados.has(cpfLimpo)) {
return res.status(409).json({
erro: "Este CPF já está cadastrado na plataforma",
});
}
try {
const dados = await consultarCpf(cpfLimpo);
if (!dados) {
return res.status(422).json({
erro: "CPF não encontrado na base de dados",
});
}
// Verificação de maioridade
const anoNascimento = dados.year || 0;
const idade = new Date().getFullYear() - anoNascimento;
if (idade < 18) {
return res.status(403).json({
erro: "É necessário ter pelo menos 18 anos para se cadastrar",
});
}
// Verificação de nome
const primeiroNomeInformado = nome.trim().split(" ")[0].toUpperCase();
const primeiroNomeApi = dados.name.trim().split(" ")[0].toUpperCase();
if (primeiroNomeInformado !== primeiroNomeApi) {
return res.status(422).json({
erro: "Nome informado não corresponde ao CPF",
});
}
const id = crypto.randomUUID();
usuarios.set(id, {
id,
nome: dados.name,
nomeUpper: dados.nameUpper,
email,
cpf: cpfLimpo,
dataNascimento: dados.birthDate,
genero: dados.gender,
idade,
tipo,
verificado: true,
avaliacaoMedia: null,
totalAvaliacoes: 0,
criadoEm: new Date().toISOString(),
});
cpfsCadastrados.add(cpfLimpo);
res.json({
sucesso: true,
usuarioId: id,
nome: dados.name,
tipo,
verificado: true,
});
} catch (error) {
res.status(503).json({ erro: error.message });
}
});
// Anfitrião cadastra imóvel
app.post("/api/imovel/cadastrar", (req, res) => {
const { anfitriaoId, titulo, endereco, precoDiaria, maxHospedes } = req.body;
const anfitriao = usuarios.get(anfitriaoId);
if (!anfitriao || anfitriao.tipo !== "ANFITRIAO") {
return res.status(403).json({
erro: "Apenas anfitriões verificados podem cadastrar imóveis",
});
}
if (!anfitriao.verificado) {
return res.status(403).json({
erro: "Anfitrião precisa ter CPF verificado",
});
}
const imovelId = crypto.randomUUID();
imoveis.set(imovelId, {
id: imovelId,
anfitriaoId,
cpfAnfitriao: anfitriao.cpf,
nomeAnfitriao: anfitriao.nome,
titulo,
endereco,
precoDiaria,
maxHospedes,
ativo: true,
criadoEm: new Date().toISOString(),
});
res.json({
sucesso: true,
imovelId,
mensagem: "Imóvel cadastrado com sucesso",
});
});
// Hóspede faz reserva
app.post("/api/reserva/criar", async (req, res) => {
const { hospedeId, imovelId, checkin, checkout, numHospedes } = req.body;
const hospede = usuarios.get(hospedeId);
if (!hospede || hospede.tipo !== "HOSPEDE") {
return res.status(403).json({
erro: "Apenas hóspedes verificados podem fazer reservas",
});
}
if (!hospede.verificado) {
return res.status(403).json({
erro: "CPF precisa ser verificado antes de reservar",
});
}
const imovel = imoveis.get(imovelId);
if (!imovel || !imovel.ativo) {
return res.status(404).json({ erro: "Imóvel não encontrado ou inativo" });
}
if (numHospedes > imovel.maxHospedes) {
return res.status(400).json({
erro: `Imóvel comporta no máximo ${imovel.maxHospedes} hóspedes`,
});
}
// Revalida CPF do hóspede antes de reservas de alto valor
const dataCheckin = new Date(checkin);
const dataCheckout = new Date(checkout);
const noites = Math.ceil(
(dataCheckout - dataCheckin) / (1000 * 60 * 60 * 24)
);
const valorTotal = noites * imovel.precoDiaria;
if (valorTotal > 2000) {
try {
const dadosAtuais = await consultarCpf(hospede.cpf);
if (!dadosAtuais) {
return res.status(422).json({
erro: "Falha na revalidação de CPF para reserva de alto valor",
});
}
} catch (error) {
return res.status(503).json({
erro: "Não foi possível revalidar CPF. Tente novamente.",
});
}
}
const reservaId = `RES-${Date.now()}`;
reservas.set(reservaId, {
id: reservaId,
hospedeId,
cpfHospede: hospede.cpf,
nomeHospede: hospede.nome,
imovelId,
anfitriaoId: imovel.anfitriaoId,
cpfAnfitriao: imovel.cpfAnfitriao,
checkin,
checkout,
noites,
numHospedes,
valorTotal,
status: "PENDENTE",
criadoEm: new Date().toISOString(),
});
res.json({
sucesso: true,
reservaId,
imovel: imovel.titulo,
anfitriao: imovel.nomeAnfitriao,
checkin,
checkout,
noites,
valorTotal: `R$ ${valorTotal.toFixed(2)}`,
status: "PENDENTE",
mensagem: "Reserva criada. Aguardando aprovação do anfitrião.",
});
});
app.listen(3000, () => {
console.log("Servidor rodando na porta 3000");
});
Verificação diferenciada por papel
A profundidade da verificação deve variar conforme o papel do usuário na plataforma.
Hóspedes
Para hóspedes, a validação de CPF no cadastro é suficiente para a maioria dos casos. Revalidações podem ser acionadas para reservas de alto valor ou em imóveis premium. A plataforma deve também verificar a maioridade do hóspede, pois menores de 18 anos geralmente não podem celebrar contratos de locação.
Anfitriões
A verificação de anfitriões deve ser mais rigorosa. Além do CPF, recomenda-se verificar se o nome no CPF corresponde ao titular da conta bancária de recebimento — assim como em marketplaces de produtos. Anfitriões com múltiplos imóveis podem ser submetidos a verificações periódicas.
Registro de hóspedes para conformidade
Muitos municípios brasileiros exigem que estabelecimentos de hospedagem mantenham registros de hóspedes. A validação de CPF automatiza parte desse processo.
Os dados retornados pela API da CPFHub.io — nome completo, data de nascimento e gênero — já atendem aos requisitos mínimos de registro exigidos pela maioria das legislações municipais, dispensando etapas manuais de coleta e conferência de dados.
Prevenção de golpes comuns
Golpe do anúncio falso
Um fraudador cria um anúncio com fotos atraentes de um imóvel que não existe ou não pertence a ele. Hóspedes pagam e só descobrem o golpe ao chegar. A validação rigorosa do CPF do anfitrião, combinada com verificação de propriedade, reduz significativamente esse risco.
Golpe da reserva falsa
Um hóspede faz reservas sem intenção de pagar, ocupando datas no calendário do anfitrião e impedindo reservas legítimas. O CPF verificado permite identificar e banir esses usuários.
Festas não autorizadas
Hóspedes que alugam imóveis para festas causam danos e problemas com vizinhos. A validação de CPF e a verificação de idade ajudam a criar um perfil do hóspede e identificar padrões de risco.
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 em ~900ms, 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
Plataformas de aluguel temporário dependem fundamentalmente da confiança entre hóspedes e anfitriões. A validação de CPF via API é a pedra angular dessa confiança no mercado brasileiro, garantindo que cada usuário é uma pessoa real, identificável e responsabilizável.
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.
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.



