Integrar a API de CPF da CPFHub.io em Azure Functions com C# é uma escolha natural para equipes que já operam no ecossistema Microsoft: a função escala automaticamente, o segredo da API key fica protegido no Azure Key Vault e o monitoramento ocorre pelo Application Insights. Com latência de ~900ms e plano gratuito de 50 consultas mensais sem cartão de crédito, você pode validar CPFs em produção sem custo inicial.
Introdução
O Azure Functions é a plataforma serverless da Microsoft, integrada ao ecossistema Azure e com suporte nativo a C# e .NET. Para empresas que já utilizam o stack Microsoft, criar funções de validação de CPF no Azure Functions é uma escolha natural, oferecendo escalabilidade automática, integração com Azure Key Vault para gerenciamento de segredos e monitoramento via Application Insights.
1. Pré-requisitos
-
Azure CLI ou Visual Studio 2022 -- Para criar e publicar a função.
-
.NET 8 SDK -- Runtime suportado pelo Azure Functions v4.
-
Azure Functions Core Tools -- Para desenvolvimento e testes locais.
-
Conta na CPFHub.io -- Cadastre-se em CPFHub.io e gere sua API key gratuitamente no painel, sem necessidade de cartão de crédito.
Criando o projeto
func init CpfValidation --dotnet
cd CpfValidation
func new --name ValidarCpf --template "HTTP trigger" --authlevel anonymous
2. Implementação da função
Modelo de dados
Crie as classes para deserializar a resposta da API:
// Models/CpfResponse.cs
namespace CpfValidation.Models;
public class CpfResponse
{
public bool Success { get; set; }
public CpfData? Data { get; set; }
}
public class CpfData
{
public string Cpf { get; set; } = string.Empty;
public string Name { get; set; } = string.Empty;
public string NameUpper { get; set; } = string.Empty;
public string Gender { get; set; } = string.Empty;
public string BirthDate { get; set; } = string.Empty;
public int Day { get; set; }
public int Month { get; set; }
public int Year { get; set; }
}
Serviço de consulta
// Services/CpfHubService.cs
using System.Net.Http.Json;
using CpfValidation.Models;
using Microsoft.Extensions.Logging;
namespace CpfValidation.Services;
public class CpfHubService
{
private readonly HttpClient _httpClient;
private readonly ILogger<CpfHubService> _logger;
public CpfHubService(HttpClient httpClient, ILogger<CpfHubService> logger)
{
_httpClient = httpClient;
_logger = logger;
}
public async Task<CpfData?> ConsultarAsync(string cpf)
{
var cpfLimpo = new string(cpf.Where(char.IsDigit).ToArray());
try
{
var response = await _httpClient.GetAsync($"cpf/{cpfLimpo}");
if (response.IsSuccessStatusCode)
{
var result = await response.Content.ReadFromJsonAsync<CpfResponse>();
if (result?.Success == true)
{
return result.Data;
}
}
_logger.LogWarning("CPFHub retornou status {Status} para CPF {Cpf}",
response.StatusCode, cpfLimpo);
return null;
}
catch (TaskCanceledException)
{
_logger.LogError("Timeout ao consultar CPF {Cpf}", cpfLimpo);
return null;
}
catch (Exception ex)
{
_logger.LogError(ex, "Erro ao consultar CPF {Cpf}", cpfLimpo);
return null;
}
}
}
Função HTTP Trigger
// Functions/ValidarCpf.cs
using System.Text.RegularExpressions;
using CpfValidation.Services;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.Extensions.Logging;
namespace CpfValidation.Functions;
public class ValidarCpf
{
private readonly CpfHubService _cpfHubService;
private readonly ILogger<ValidarCpf> _logger;
public ValidarCpf(CpfHubService cpfHubService, ILogger<ValidarCpf> logger)
{
_cpfHubService = cpfHubService;
_logger = logger;
}
[Function("ValidarCpf")]
public async Task<HttpResponseData> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "cpf/{cpf}")] HttpRequestData req,
string cpf)
{
_logger.LogInformation("Consulta de CPF recebida: {Cpf}", cpf);
if (!Regex.IsMatch(cpf, @"^\d{11}$"))
{
var badRequest = req.CreateResponse(System.Net.HttpStatusCode.BadRequest);
await badRequest.WriteAsJsonAsync(new { error = "CPF deve conter 11 digitos numericos." });
return badRequest;
}
var dados = await _cpfHubService.ConsultarAsync(cpf);
if (dados != null)
{
var okResponse = req.CreateResponse(System.Net.HttpStatusCode.OK);
await okResponse.WriteAsJsonAsync(new { success = true, data = dados });
return okResponse;
}
var notFound = req.CreateResponse(System.Net.HttpStatusCode.NotFound);
await notFound.WriteAsJsonAsync(new { error = "CPF nao encontrado." });
return notFound;
}
}
3. Configuração de injeção de dependência
Configure o HttpClient com as credenciais da API no Program.cs:
// Program.cs
using CpfValidation.Services;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
var host = new HostBuilder()
.ConfigureFunctionsWorkerDefaults()
.ConfigureServices(services =>
{
services.AddHttpClient<CpfHubService>(client =>
{
client.BaseAddress = new Uri("https://api.cpfhub.io/");
client.DefaultRequestHeaders.Add("x-api-key",
Environment.GetEnvironmentVariable("CPFHUB_API_KEY"));
client.DefaultRequestHeaders.Add("Accept", "application/json");
client.Timeout = TimeSpan.FromSeconds(30);
});
})
.Build();
host.Run();
4. Exemplo de resposta da API
A API da CPFHub.io retorna um JSON estruturado com os dados cadastrais do titular:
{
"success": true,
"data": {
"cpf": "12345678900",
"name": "Joao da Silva",
"nameUpper": "JOAO DA SILVA",
"gender": "M",
"birthDate": "15/06/1990",
"day": 15,
"month": 6,
"year": 1990
}
}
- success -- Indica se a consulta foi bem-sucedida.
- name / nameUpper -- Nome completo do titular.
- gender -- Gênero (M ou F).
- birthDate -- Data de nascimento no formato dd/mm/aaaa.
- day, month, year -- Componentes da data separados.
5. Configurações de aplicação
Adicione a chave de API nas configurações locais e no Azure:
// local.settings.json
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
"CPFHUB_API_KEY": "SUA_CHAVE_DE_API"
}
}
Para produção, utilize o Azure Key Vault com referências de configuração:
# Criar segredo no Key Vault
az keyvault secret set --vault-name meu-vault --name CpfHubApiKey --value "SUA_CHAVE_DE_API"
# Configurar referência na Function App
az functionapp config appsettings set \
--name minha-function \
--resource-group meu-grupo \
--settings "CPFHUB_API_KEY=@Microsoft.KeyVault(VaultName=meu-vault;SecretName=CpfHubApiKey)"
6. Testando localmente
func start
Em outro terminal:
curl -X GET "http://localhost:7071/api/cpf/12345678900" \
-H "Accept: application/json" \
--max-time 30
7. Deploy para o Azure
func azure functionapp publish minha-function-app
8. Boas práticas
-
Use IHttpClientFactory -- A injeção de
HttpClientvia DI evita problemas de socket exhaustion comuns em aplicações serverless. -
Configure timeout -- O timeout de 30 segundos no HttpClient garante que a função não fique presa em requisições lentas.
-
Armazene segredos no Key Vault -- Nunca coloque chaves de API diretamente no código ou em arquivos de configuração versionados.
-
Monitore com Application Insights -- Configure alertas para erros e latência elevada.
-
Gerencie cotas com consciência -- O plano gratuito oferece 50 consultas/mês; ao ultrapassar, a API cobra R$0,15 por consulta adicional sem bloquear o serviço. O plano Pro (R$149/mês) inclui 1.000 consultas mensais.
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 menos de 200ms, 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
O Azure Functions com C# oferece uma plataforma serverless robusta para validação de CPF, com integração nativa ao ecossistema Azure. A combinação de HttpClient com injeção de dependência e Azure Key Vault garante uma implementação segura e escalável.
A CPFHub.io complementa essa arquitetura com uma API simples, latência de ~900ms e plano gratuito de 50 consultas mensais — ideal para validar a integração antes de escalar para produção.
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.



