Biblioteca para consulta de CNPJ em APIs públicas brasileiras (ReceitaWS, BrasilAPI, CNPJA). Suporta .NET Framework 4.5+, .NET 8, .NET 9 e .NET Standard 2.0 com rate limiting integrado.
$ dotnet add package GetCNPJBiblioteca .NET para consulta de CNPJ em APIs públicas brasileiras, com suporte a múltiplos provedores e rate limiting integrado.
dotnet add package GetCNPJ
Ou via NuGet Package Manager:
Install-Package GetCNPJ
using GetCNPJ;
using System;
// Criar cliente
using var client = new CnpjClient();
// Consultar CNPJ (aceita formatado ou apenas números)
var result = await client.GetAsync("03.312.791/0001-83");
if (result.Success)
{
var data = result.Data;
Console.WriteLine($"Razão Social: {data.RazaoSocial}");
Console.WriteLine($"Nome Fantasia: {data.NomeFantasia}");
Console.WriteLine($"CNPJ: {data.Cnpj}");
Console.WriteLine($"Situação: {data.Situacao}");
Console.WriteLine($"Endereço: {data.Endereco.EnderecoCompleto}");
Console.WriteLine($"Email: {data.Email}");
Console.WriteLine($"Telefones: {string.Join(", ", data.Telefones)}");
// Inscrições Estaduais (disponível quando usa CNPJ.WS)
if (data.InscricoesEstaduais != null && data.InscricoesEstaduais.Any())
{
Console.WriteLine("Inscrições Estaduais:");
foreach (var ie in data.InscricoesEstaduais)
{
Console.WriteLine($" - {ie}"); // Formato: Inscrição (UF) - Status
}
}
Console.WriteLine($"Provedor usado: {data.Provedor}");
}
else
{
Console.WriteLine($"Erro: {result.ErrorMessage}");
// Exibir erros de cada provedor
foreach (var error in result.Errors)
{
Console.WriteLine($"- {error.ProviderName}: {error.ErrorMessage}");
}
}
using var client = new CnpjClient();
// Forçar uso de um provedor específico
var result = await client.GetFromProviderAsync("03312791000183", "BrasilAPI");
if (result.Success)
{
Console.WriteLine($"Razão Social: {result.Data.RazaoSocial}");
}
Para aplicações que não usam async/await, você pode usar os métodos síncronos:
using var client = new CnpjClient();
// Método síncrono
var result = client.Get("03312791000183");
if (result.Success)
{
Console.WriteLine($"Razão Social: {result.Data.RazaoSocial}");
Console.WriteLine($"Nome Fantasia: {result.Data.NomeFantasia}");
}
// Provedor específico síncrono
var result2 = client.GetFromProvider("03312791000183", "ReceitaWS");
Nota: Os métodos síncronos bloqueiam a thread atual. Para aplicações modernas (ASP.NET Core, WPF, etc.), recomenda-se usar os métodos assíncronos.
var options = new CnpjClientOptions
{
MaxRequestsPerMinute = 5, // Aumentar rate limit (use com cuidado!)
Timeout = TimeSpan.FromSeconds(60), // Timeout customizado
EnableReceitaWS = true, // Habilitar/desabilitar provedores
EnableBrasilAPI = true,
EnableCNPJA = false // Desabilitar CNPJA, por exemplo
};
using var client = new CnpjClient(null, options);
var result = await client.GetAsync("03312791000183");
// Usar seu próprio HttpClient (recomendado em aplicações ASP.NET Core)
var httpClient = new HttpClient
{
Timeout = TimeSpan.FromSeconds(30)
};
using var client = new CnpjClient(httpClient);
var result = await client.GetAsync("03312791000183");
public class CnpjData
{
public string Cnpj { get; set; } // CNPJ formatado
public string RazaoSocial { get; set; } // Razão social
public string NomeFantasia { get; set; } // Nome fantasia
public DateTime? DataAbertura { get; set; } // Data de abertura
public string Situacao { get; set; } // Situação cadastral
public DateTime? DataSituacao { get; set; } // Data da situação
public string Tipo { get; set; } // MATRIZ/FILIAL
public string Porte { get; set; } // Porte da empresa
public string NaturezaJuridica { get; set; } // Natureza jurídica
public decimal? CapitalSocial { get; set; } // Capital social
public Endereco Endereco { get; set; } // Endereço completo
public AtividadeEconomica AtividadePrincipal { get; set; }
public List<AtividadeEconomica> AtividadesSecundarias { get; set; }
public List<Socio> QuadroSocietario { get; set; } // QSA
public List<string> Telefones { get; set; } // Telefones
public string Email { get; set; } // Email
public List<InscricaoEstadual> InscricoesEstaduais { get; set; } // Inscrições estaduais (CNPJ.WS)
public SimplesNacional Simples { get; set; } // Info Simples Nacional
public DateTime? UltimaAtualizacao { get; set; } // Data da atualização
public string Provedor { get; set; } // Provedor usado
}
A biblioteca implementa rate limiting automático de 3 requisições por minuto por provedor, conforme solicitado. Cada provedor tem seu próprio contador independente.
O algoritmo utilizado é o Sliding Window, que garante distribuição uniforme das requisições ao longo do tempo.
GetCNPJ/
├── Models/ # DTOs padronizados
├── Interfaces/ # Contratos da biblioteca
├── Exceptions/ # Exceções customizadas
├── Enums/ # Enumerações
├── Providers/
│ ├── Base/ # Classe base para providers
│ ├── ReceitaWS/ # Provider ReceitaWS
│ ├── BrasilAPI/ # Provider BrasilAPI
│ └── CNPJA/ # Provider CNPJA
├── Services/ # Serviço principal (Chain of Responsibility)
├── RateLimiter/ # Implementação do Rate Limiter
└── CnpjClient.cs # Cliente principal
A biblioteca trata erros de forma elegante:
InvalidCnpjExceptionCnpjClientOptionsCnpjResult com Success = false e lista de errosContribuições são bem-vindas! Sinta-se à vontade para:
git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)Este projeto está licenciado sob a licença MIT - veja o arquivo LICENSE para detalhes.
Nota: Por padrão, a biblioteca usa o provedor CNPJ.WS como primeira opção (prioridade 1) pois é o único que fornece dados de inscrição estadual. Os demais provedores são utilizados como fallback em caso de falha.
Para reportar bugs ou solicitar features, abra uma issue no GitHub.
Desenvolvido com ❤️ seguindo as melhores práticas de Clean Code e SOLID