# Validação de CPF para plataformas de aposta esportiva (betting) no Brasil

> Saiba como validar CPF via API em plataformas de betting para cumprir a regulamentação brasileira e prevenir fraudes em apostas.

**Publicado:** 28/01/2026
**Autor:** Redação CPFHub.io
**URL:** https://cpfhub.io/blog/validacao-de-cpf-para-plataformas-de-aposta-esportiva-betting

---


Plataformas de aposta esportiva no Brasil são obrigadas por lei a validar o CPF de cada apostador antes de permitir qualquer operação. A Lei 14.790/2023 exige verificação de identidade, confirmação de maioridade e controles de jogo responsável — todos vinculados ao CPF como identificador único. A API CPFHub.io realiza essa verificação em ~900ms, com retorno de nome, data de nascimento e status do documento.

## Introdução

O mercado de apostas esportivas no Brasil foi regulamentado pela Lei 14.790/2023, criando um dos maiores mercados de betting do mundo. A regulamentação exige que as plataformas operem com rigorosos controles de identidade — e o CPF é o identificador central desse processo. Cada apostador deve ser identificado, verificado e monitorado para cumprir as exigências legais e prevenir fraudes.

---

## Exigências regulatórias

### Identificação obrigatória

A legislação brasileira de apostas esportivas exige que todo apostador seja identificado com CPF antes de realizar qualquer aposta. A plataforma deve verificar que o CPF é válido, pertence a uma pessoa real e que o apostador é maior de 18 anos.

### Prevenção à lavagem de dinheiro

A regulamentação de betting no Brasil segue diretrizes de PLD (Prevenção à Lavagem de Dinheiro) e FT (Financiamento ao Terrorismo). O CPF é a chave para o monitoramento de transações suspeitas e a comunicação com o COAF (Conselho de Controle de Atividades Financeiras).

### Jogo responsável

Plataformas são obrigadas a implementar medidas de jogo responsável, incluindo limites de depósito e autoexclusão. O CPF garante que essas medidas sejam eficazes, pois impede que um apostador autoexcluído crie outra conta.

### Restrições específicas

Determinadas categorias de pessoas são proibidas de apostar — como atletas profissionais em suas modalidades, dirigentes de clubes e funcionários da plataforma. O CPF permite verificar e cruzar essas restrições.

---

## Implementação em Node.js

O exemplo a seguir demonstra um sistema de cadastro e verificação para plataformas de betting.

```javascript
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 apostadores = new Map();
const cpfsRegistrados = new Set();
const cpfsAutoexcluidos = new Set();
const cpfsRestritos = new Set(); // atletas, dirigentes, etc.
const apostas = [];

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 apostador
app.post("/api/apostador/cadastro", async (req, res) => {
 const { nome, email, cpf, telefone } = req.body;

 if (!cpf || !nome || !email) {
 return res.status(400).json({
 erro: "Nome, email e CPF são obrigatórios",
 });
 }

 const cpfLimpo = limparCpf(cpf);

 // Verificação 1: CPF autoexcluído
 if (cpfsAutoexcluidos.has(cpfLimpo)) {
 return res.status(403).json({
 erro: "Este CPF está em período de autoexclusão",
 codigo: "AUTOEXCLUSAO_ATIVA",
 });
 }

 // Verificação 2: CPF restrito
 if (cpfsRestritos.has(cpfLimpo)) {
 return res.status(403).json({
 erro: "Este CPF está impedido de realizar apostas",
 codigo: "CPF_RESTRITO",
 });
 }

 // Verificação 3: CPF já cadastrado
 if (cpfsRegistrados.has(cpfLimpo)) {
 return res.status(409).json({
 erro: "Este CPF já possui uma conta na plataforma",
 });
 }

 // Verificação 4: Validação via API
 try {
 const dados = await consultarCpf(cpfLimpo);
 if (!dados) {
 return res.status(422).json({
 erro: "CPF não encontrado na base de dados",
 });
 }

 // Verificação 5: Maioridade (obrigatória por lei)
 const anoNascimento = dados.year || 0;
 const idade = new Date().getFullYear() - anoNascimento;

 if (idade < 18) {
 return res.status(403).json({
 erro: "Apostas esportivas são permitidas apenas para maiores de 18 anos",
 codigo: "MENOR_DE_IDADE",
 });
 }

 // Verificação 6: Correspondência de nome
 const primeiroNomeInfo = nome.trim().split(" ")[0].toUpperCase();
 const primeiroNomeApi = dados.name.trim().split(" ")[0].toUpperCase();

 if (primeiroNomeInfo !== primeiroNomeApi) {
 return res.status(422).json({
 erro: "Nome informado não corresponde ao CPF",
 });
 }

 // Cadastro aprovado
 const apostadorId = crypto.randomUUID();

 apostadores.set(apostadorId, {
 id: apostadorId,
 cpf: cpfLimpo,
 nome: dados.name,
 nomeUpper: dados.nameUpper,
 email,
 telefone,
 dataNascimento: dados.birthDate,
 genero: dados.gender,
 idade,
 verificado: true,
 saldo: 0,
 limiteDeposito: {
 diario: 1000,
 semanal: 5000,
 mensal: 15000,
 },
 depositoHoje: 0,
 depositoSemana: 0,
 depositoMes: 0,
 status: "ATIVO",
 criadoEm: new Date().toISOString(),
 });

 cpfsRegistrados.add(cpfLimpo);

 res.json({
 sucesso: true,
 apostadorId,
 nome: dados.name,
 limites: {
 depositoDiario: "R$ 1.000,00",
 depositoSemanal: "R$ 5.000,00",
 depositoMensal: "R$ 15.000,00",
 },
 mensagem: "Conta criada com sucesso. Boas apostas!",
 });
 } catch (error) {
 res.status(503).json({ erro: error.message });
 }
});

// Depósito com verificação de limites
app.post("/api/apostador/:id/deposito", (req, res) => {
 const { id } = req.params;
 const { valor } = req.body;

 const apostador = apostadores.get(id);
 if (!apostador || apostador.status !== "ATIVO") {
 return res.status(404).json({ erro: "Conta não encontrada ou inativa" });
 }

 // Verifica limites de depósito
 if (apostador.depositoHoje + valor > apostador.limiteDeposito.diario) {
 return res.status(400).json({
 erro: `Limite diário de R$ ${apostador.limiteDeposito.diario} seria excedido`,
 depositadoHoje: apostador.depositoHoje,
 limiteRestante: apostador.limiteDeposito.diario - apostador.depositoHoje,
 });
 }

 apostador.saldo += valor;
 apostador.depositoHoje += valor;
 apostador.depositoSemana += valor;
 apostador.depositoMes += valor;

 res.json({
 sucesso: true,
 saldoAtual: apostador.saldo,
 depositoHoje: apostador.depositoHoje,
 limiteRestanteDiario:
 apostador.limiteDeposito.diario - apostador.depositoHoje,
 });
});

// Realizar aposta
app.post("/api/aposta/criar", (req, res) => {
 const { apostadorId, evento, tipo, valor, odd } = req.body;

 const apostador = apostadores.get(apostadorId);
 if (!apostador || apostador.status !== "ATIVO") {
 return res.status(404).json({ erro: "Conta inativa ou não encontrada" });
 }

 if (!apostador.verificado) {
 return res.status(403).json({
 erro: "CPF precisa ser verificado para apostar",
 });
 }

 if (valor > apostador.saldo) {
 return res.status(400).json({
 erro: "Saldo insuficiente",
 saldoAtual: apostador.saldo,
 });
 }

 if (valor < 1) {
 return res.status(400).json({ erro: "Aposta mínima: R$ 1,00" });
 }

 apostador.saldo -= valor;

 const aposta = {
 id: `APO-${Date.now()}`,
 apostadorId,
 cpf: apostador.cpf,
 evento,
 tipo,
 valor,
 odd,
 retornoPotencial: parseFloat((valor * odd).toFixed(2)),
 status: "ABERTA",
 criadaEm: new Date().toISOString(),
 };

 apostas.push(aposta);

 res.json({
 sucesso: true,
 apostaId: aposta.id,
 retornoPotencial: `R$ ${aposta.retornoPotencial.toFixed(2)}`,
 saldoRestante: apostador.saldo,
 });
});

// Autoexclusão
app.post("/api/apostador/:id/autoexclusao", (req, res) => {
 const { id } = req.params;
 const { periodo } = req.body; // "30_DIAS", "90_DIAS", "PERMANENTE"

 const apostador = apostadores.get(id);
 if (!apostador) {
 return res.status(404).json({ erro: "Conta não encontrada" });
 }

 apostador.status = "AUTOEXCLUIDO";
 cpfsAutoexcluidos.add(apostador.cpf);

 res.json({
 sucesso: true,
 periodo,
 mensagem: `Autoexclusão ativada por ${periodo}. Nenhuma aposta será permitida neste período.`,
 suporte: "Se precisar de ajuda, ligue para 0800-XXX-XXXX",
 });
});

app.listen(3000, () => {
 console.log("Servidor rodando na porta 3000");
});
```

---

## Jogo responsável com CPF

A validação de CPF é essencial para as políticas de jogo responsável exigidas pela regulamentação.

### Limites de depósito por CPF

Cada CPF deve ter limites de depósito diário, semanal e mensal. Como o CPF é único, esses limites não podem ser contornados criando múltiplas contas — a unicidade do CPF garante que os limites se apliquem à pessoa, não à conta.

### Autoexclusão efetiva

Quando um apostador solicita autoexclusão, o CPF é adicionado a uma lista de impedidos. Qualquer tentativa de criar uma nova conta com o mesmo CPF é automaticamente bloqueada. Sem verificação de CPF, a autoexclusão seria facilmente contornável.

### Monitoramento de comportamento

O CPF como chave permite rastrear padrões de apostas ao longo do tempo — frequência, valores, horários — e identificar comportamentos que indicam possível vício em jogo. A plataforma pode então intervir com alertas e sugestões de limites.

---

## Prevenção à lavagem de dinheiro

A regulamentação de betting exige comunicação ao COAF de operações suspeitas. O CPF é essencial para esse processo.

### Operações reportáveis

Depósitos ou saques acima de determinados valores. Padrões de depósitos fracionados (structuring) para evitar limites. Múltiplas contas associadas a CPFs com padrões similares de data de nascimento ou sobrenome, sugerindo organização familiar.

### Know Your Customer (KYC)

O processo de KYC em plataformas de betting começa com a validação de CPF. Os dados retornados pela API confirmam nome completo, data de nascimento e situação cadastral do documento, permitindo que a plataforma construa o dossiê do apostador com informações confiáveis desde o primeiro acesso.

---

## Performance para operações em tempo real

Apostas esportivas operam em tempo real — especialmente as apostas ao vivo, onde as odds mudam a cada segundo. A validação de CPF deve acontecer no cadastro, não a cada aposta, para não impactar a experiência do apostador.

A API CPFHub.io responde em ~900ms, tempo adequado para o fluxo de cadastro sem comprometer a experiência do usuário. Como a verificação ocorre uma única vez no onboarding, o impacto no desempenho operacional diário é zero.

---

## Perguntas frequentes

### O que a Lei 14.790/2023 exige das plataformas de betting quanto à verificação de CPF?

A Lei 14.790/2023 e as portarias do Ministério da Fazenda exigem que toda plataforma de apostas esportivas autorizada no Brasil identifique cada apostador com CPF válido, confirme maioridade (18 anos ou mais), implemente limites de depósito vinculados ao CPF e mantenha um sistema de autoexclusão funcional. O descumprimento pode resultar em suspensão da licença operacional.

### Como o CPF garante que a autoexclusão não seja burlada?

Quando um apostador solicita autoexclusão, o CPF é registrado numa lista de impedidos. Qualquer tentativa de criar nova conta com o mesmo CPF é bloqueada na validação via API, antes mesmo do cadastro ser completado. Como o CPF é um identificador único e intransferível, não há como criar uma conta alternativa com o mesmo documento.

### Quais dados a API CPFHub.io retorna para plataformas de betting?

A API retorna nome completo, data de nascimento, gênero e situação cadastral do CPF. Com esses dados, a plataforma consegue confirmar maioridade, validar a correspondência do nome informado pelo apostador e detectar tentativas de cadastro com documentos de terceiros — tudo em uma única chamada que responde em ~900ms.

### Como funciona o monitoramento de PLD (prevenção à lavagem de dinheiro) com CPF?

O CPF é a chave que une todas as transações de um apostador: depósitos, saques, apostas e transferências. Com ele, a plataforma detecta padrões suspeitos como fracionamento de depósitos e movimentações atípicas para o perfil do cliente. Operações que ultrapassam os limites estabelecidos pelo [COAF](https://www.gov.br/coaf) devem ser comunicadas com o CPF do apostador como identificador principal.

### Leia também

- [KYC no Brasil: quais setores são obrigados a validar CPF por lei](https://cpfhub.io/blog/kyc-no-brasil-quais-setores-sao-obrigados-a-validar-cpf-por-lei)
- [Diferença entre validação de CPF e consulta de CPF: quando usar cada uma](https://cpfhub.io/blog/diferenca-entre-validacao-de-cpf-e-consulta-de-cpf-quando-usar-cada-uma)
- [Onboarding digital em fintechs: como validar CPF em menos de 30 segundos](https://cpfhub.io/blog/onboarding-digital-em-fintechs-como-validar-cpf-em-menos-de-30-segundos)
- [LGPD: CPF é dado pessoal sensível ou não? Entenda a classificação correta](https://cpfhub.io/blog/lgpd-cpf-e-dado-pessoal-sensivel-ou-nao-entenda-a-classificacao-correta)

---

## Conclusão

Plataformas de aposta esportiva no Brasil operam sob uma das regulamentações mais rigorosas do setor, e a validação de CPF é o pilar de todo o processo de compliance. Desde a verificação de maioridade até a prevenção à lavagem de dinheiro, passando pelo jogo responsável e a autoexclusão, o CPF é o identificador que torna tudo possível. Uma API confiável garante que esse processo aconteça de forma rápida, precisa e dentro dos padrões exigidos pela Lei 14.790/2023.

Comece agora em [cpfhub.io](https://www.cpfhub.io/) — são 50 consultas gratuitas por mês, sem cartão de crédito. Para volumes maiores, o plano Pro oferece 1.000 consultas mensais por R$149, com consultas adicionais a R$0,15 cada.

