# Como consumir API de CPF em Azure Functions com C#

> Aprenda a consumir uma API de consulta de CPF em Azure Functions usando C# e HttpClient. Exemplos com HTTP Trigger, Key Vault e boas práticas.

**Publicado:** 18/09/2025
**Autor:** Redação CPFHub.io
**URL:** https://cpfhub.io/blog/como-consumir-api-de-cpf-em-azure-functions-com-csharp

---


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**](https://www.cpfhub.io/) e gere sua API key gratuitamente no painel, sem necessidade de cartão de crédito.

### Criando o projeto

```bash
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:

```csharp
// 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

```csharp
// 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

```csharp
// 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`:

```csharp
// 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:

```json
{
 "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:

```json
// 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:

```bash
# 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

```bash
func start
```

Em outro terminal:

```bash
curl -X GET "http://localhost:7071/api/cpf/12345678900" \
 -H "Accept: application/json" \
 --max-time 30
```

---

## 7. Deploy para o Azure

```bash
func azure functionapp publish minha-function-app
```

---

## 8. Boas práticas

* **Use IHttpClientFactory** -- A injeção de `HttpClient` via 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](https://www.gov.br/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.

### Leia também

- [Como validar CPF no frontend com React e API REST](https://cpfhub.io/blog/como-validar-cpf-no-frontend-com-react-e-api-rest)
- [SLA de API de CPF: níveis de disponibilidade e o que exigir do seu provedor](https://cpfhub.io/blog/sla-api-cpf-niveis-disponibilidade)
- [API de CPF grátis para desenvolvedores: como começar em 5 minutos](https://cpfhub.io/blog/api-cpf-gratis-desenvolvedores-comecar-5-minutos)
- [10 erros mais comuns ao integrar uma API de CPF e como evitá-los](https://cpfhub.io/blog/10-erros-mais-comuns-ao-integrar-uma-api-de-cpf)

---

## 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](https://www.cpfhub.io/) — 50 consultas mensais gratuitas, sem cartão de crédito — e comece hoje mesmo.

