Consentimento granular para consultas de CPF significa permitir que o titular autorize — ou recuse — cada finalidade de tratamento separadamente, em vez de assinar um único termo genérico. Conforme o Art. 8º, §4º da LGPD, o consentimento vago é considerado nulo; por isso, cada uso distinto do CPF (validação de cadastro, análise de perfil, compartilhamento com parceiros) deve ter seu próprio registro de consentimento, revogável a qualquer momento pelo titular.
Introdução
O consentimento é uma das bases legais previstas na LGPD para o tratamento de dados pessoais, e quando utilizado, deve ser livre, informado, inequívoco e referir-se a finalidades determinadas. No contexto de APIs de CPF, o consentimento granular permite que o titular escolha especificamente para quais finalidades seus dados de CPF podem ser utilizados, ao invés de autorizar um tratamento genérico e abrangente.
O que a LGPD exige do consentimento
O consentimento na LGPD possui requisitos específicos que o diferenciam de uma simples autorização:
| Requisito | Artigo LGPD | Aplicação com CPF |
|---|---|---|
| Livre | Art. 5o, XII | Não pode condicionar serviço ao consentimento total |
| Informado | Art. 5o, XII | Titular sabe exatamente como o CPF será usado |
| Inequívoco | Art. 5o, XII | Manifestação clara, não silêncio ou pré-seleção |
| Finalidade determinada | Art. 8o, par. 4o | Cada uso do CPF tem consentimento separado |
| Revogável | Art. 8o, par. 5o | Titular pode revogar a qualquer momento |
| Documentado | Art. 8o, par. 1o | Ônus da prova cabe ao controlador |
| Nulidade de vícios | Art. 8o, par. 3o | Consentimento genérico é considerado nulo |
Arquitetura de consentimento granular
Implemente um sistema que permita ao titular gerenciar consentimentos individuais por finalidade:
from datetime import datetime
from typing import Optional
import uuid
import hashlib
class GestorConsentimento:
"""Sistema de gestão de consentimento granular para CPF."""
FINALIDADES = {
"validacao_cadastro": {
"descricao": "Validar seu CPF durante o processo de cadastro",
"dados_tratados": ["cpf"],
"base_alternativa": "Art. 7, V - Execução de contrato",
"obrigatorio": True
},
"verificacao_nome": {
"descricao": "Verificar se o nome informado corresponde ao CPF",
"dados_tratados": ["cpf", "name"],
"base_alternativa": None,
"obrigatorio": False
},
"analise_perfil": {
"descricao": "Analisar perfil demográfico para personalização",
"dados_tratados": ["cpf", "name", "birthDate", "gender"],
"base_alternativa": None,
"obrigatorio": False
},
"compartilhamento_parceiros": {
"descricao": "Compartilhar dados com parceiros comerciais",
"dados_tratados": ["cpf", "name"],
"base_alternativa": None,
"obrigatorio": False
}
}
def __init__(self, db):
self.db = db
def registrar_consentimento(self, cpf: str, finalidade: str,
concedido: bool, ip: str) -> dict:
"""Registra decisão de consentimento do titular."""
if finalidade not in self.FINALIDADES:
raise ValueError(f"Finalidade desconhecida: {finalidade}")
registro = {
"id": str(uuid.uuid4()),
"cpf_hash": hashlib.sha256(cpf.encode()).hexdigest(),
"finalidade": finalidade,
"concedido": concedido,
"timestamp": datetime.utcnow().isoformat(),
"ip_origem": ip,
"versao_termos": "v2.1",
"metodo": "formulario_web"
}
self.db.insert("consentimentos", registro)
return registro
def verificar_consentimento(self, cpf: str,
finalidade: str) -> bool:
"""Verifica se existe consentimento ativo."""
cpf_hash = hashlib.sha256(cpf.encode()).hexdigest()
consentimento = self.db.find_latest(
"consentimentos",
{"cpf_hash": cpf_hash, "finalidade": finalidade}
)
if not consentimento:
return False
return consentimento["concedido"]
def revogar_consentimento(self, cpf: str,
finalidade: str, ip: str) -> dict:
"""Registra revogação de consentimento."""
return self.registrar_consentimento(
cpf, finalidade, False, ip
)
def listar_consentimentos(self, cpf: str) -> list:
"""Lista todos os consentimentos do titular."""
cpf_hash = hashlib.sha256(cpf.encode()).hexdigest()
return self.db.find_all(
"consentimentos", {"cpf_hash": cpf_hash}
)
Interface de consentimento para o usuário
A interface deve apresentar cada finalidade de forma clara e independente:
- Linguagem acessível -- descreva cada finalidade em termos que qualquer pessoa compreenda, sem jargão jurídico
- Opções independentes -- cada finalidade deve ter seu próprio toggle ou checkbox, sem agrupamento forçado
- Pré-seleção proibida -- nenhum consentimento deve vir pré-marcado, o titular deve agir ativamente
- Informação contextual -- ao lado de cada opção, forneça link para mais detalhes sobre o tratamento
- Revogação acessível -- o mesmo painel deve permitir revogar consentimentos anteriores com a mesma facilidade
// API para painel de consentimento do usuário
app.get("/api/meus-consentimentos", authMiddleware, async (req, res) => {
const cpf = req.user.cpf;
const gestor = new GestorConsentimento(db);
const finalidades = Object.entries(gestor.FINALIDADES).map(
([key, config]) => ({
id: key,
descricao: config.descricao,
dados_utilizados: config.dados_tratados,
obrigatorio: config.obrigatorio,
consentido: gestor.verificarConsentimento(cpf, key),
base_alternativa: config.base_alternativa
? "Tratamento também amparado por base legal independente"
: null
})
);
res.json({
titular: { cpf_mascarado: mascararCPF(cpf) },
consentimentos: finalidades,
instrucoes: "Você pode alterar suas preferências a qualquer " +
"momento. Consentimentos obrigatórios são necessários " +
"para a prestação do serviço."
});
});
app.post(
"/api/meus-consentimentos/:finalidade",
authMiddleware,
async (req, res) => {
const { finalidade } = req.params;
const { concedido } = req.body;
const resultado = await gestor.registrarConsentimento(
req.user.cpf, finalidade, concedido, req.ip
);
res.json({ sucesso: true, registro: resultado });
}
);
Consentimento vs. outras bases legais
Nem toda consulta de CPF via API exige consentimento. Avalie se outra base legal é mais adequada:
| Situação | Base Legal Recomendada | Consentimento Necessário? |
|---|---|---|
| Cadastro de cliente | Execução de contrato (Art. 7o, V) | Não |
| Análise de crédito | Proteção ao crédito (Art. 7o, X) | Não |
| KYC regulatório | Obrigação legal (Art. 7o, II) | Não |
| Personalização de ofertas | Legítimo interesse (Art. 7o, IX) | Depende do RIPD |
| Envio de publicidade | Consentimento (Art. 7o, I) | Sim |
| Compartilhamento com terceiros | Consentimento (Art. 7o, I) | Geralmente sim |
Quando existe base legal independente, o consentimento pode ser dispensado, mas a transparência sobre o tratamento continua obrigatória.
Registro e auditoria de consentimentos
Mantenha trilha de auditoria completa de todas as decisões de consentimento:
| Informação | Finalidade | Retenção |
|---|---|---|
| Hash do CPF do titular | Identificação sem exposição | Enquanto houver relação |
| Finalidade do consentimento | Demonstrar especificidade | 5 anos após revogação |
| Data e hora da decisão | Comprovar temporalidade | 5 anos após revogação |
| IP de origem | Comprovar autenticidade | 5 anos após revogação |
| Versão dos termos aceitos | Comprovar informação adequada | 5 anos após revogação |
| Histórico de alterações | Demonstrar direito de revogação | 5 anos após última ação |
Perguntas frequentes
Por que o consentimento genérico para uso do CPF é nulo pela LGPD?
O Art. 8º, §4º da LGPD determina que o consentimento deve referir-se a finalidades determinadas. Um termo do tipo "autorizo o uso dos meus dados" sem especificar cada tratamento é considerado nulo, pois não cumpre o requisito de finalidade determinada. Isso significa que qualquer uso de CPF baseado nesse consentimento fica sem base legal, expondo a empresa a sanções da ANPD.
Como armazenar o CPF do titular sem comprometer a segurança no registro de consentimentos?
A boa prática é armazenar apenas o hash criptográfico do CPF (SHA-256 ou similar) na tabela de consentimentos, nunca o número em claro. Isso permite verificar se um consentimento existe para um determinado titular sem expor o CPF em caso de vazamento do banco de dados de consentimentos.
O titular pode revogar o consentimento e exigir que a empresa pare de usar seu CPF?
Sim. O Art. 8º, §5º da LGPD garante o direito de revogação a qualquer momento, sem ônus para o titular. A empresa deve parar o tratamento fundamentado naquele consentimento, mas pode continuar tratando o CPF se houver outra base legal válida — como execução de contrato ou obrigação legal.
Com que frequência devo atualizar os termos de consentimento e como tratar consentimentos anteriores?
A atualização dos termos exige novo consentimento sempre que houver mudança na finalidade do tratamento. Consentimentos obtidos com base nos termos anteriores permanecem válidos para as finalidades originalmente declaradas. A versão dos termos deve ser registrada em cada consentimento para facilitar a gestão de versões.
Conclusão
O consentimento granular para consultas de CPF não é apenas uma exigência legal, mas uma demonstração de respeito à autonomia do titular. Ao permitir que cada pessoa escolha especificamente para quais finalidades seu CPF pode ser utilizado, sua empresa constrói confiança e demonstra maturidade na proteção de dados.
Cadastre-se em cpfhub.io — 50 consultas mensais gratuitas, sem cartão de crédito — e implemente uma integração com API de CPF que respeita o consentimento granular exigido pela LGPD 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.



