APIs Públicas e Gratuitas que Todo Dev Backend Deveria Conhecer
Integrar APIs externas é rotina no backend. O problema é descobrir quais existem, o que realmente oferecem de graça e como integrá-las de forma resiliente. Este artigo é um catálogo comentado — com limitações reais e dicas de produção.
🇧🇷 Endereços e Localidades
ViaCEP
URL: https://viacep.com.br/ws/{cep}/json/
Auth: Nenhuma
Limite: Não documentado
Países: 🇧🇷 Brasil
Retorna logradouro, bairro, cidade e UF a partir de um CEP. Aceita também busca reversa por logradouro (nome de rua + município + UF).
Vantagens: zero configuração, resposta consistente, amplamente adotado.
Limitações: sem SLA público e sem rate limit declarado — cache agressivo é obrigatório.
BrasilAPI
URL: https://brasilapi.com.br/api/
Auth: Nenhuma
Limite: Não documentado
Países: 🇧🇷 Brasil
Hub de dados públicos brasileiros. Uma única dependência, múltiplos endpoints:
GET /cep/v2/{cep}— CEP via múltiplas fontes, mais robusto que ViaCEPGET /banks/v1— lista de bancos com código ISPB e COMPEGET /cnpj/v1/{cnpj}— dados cadastrais completos de empresaGET /ddd/v1/{ddd}— estado e cidades por código de áreaGET /feriados/v1/{ano}— feriados nacionais por anoGET /taxas/v1— SELIC, CDI, poupança e outros índicesGET /ibge/municipios/v1/{uf}— municípios por estado
Vantagens: API unificada para dados oficiais, código aberto, bem mantida pela comunidade.
Limitações: uptime depende de fontes de terceiros — circuit breaker é obrigatório em produção.
IBGE — Localidades
URL: https://servicodados.ibge.gov.br/api/v1/localidades/
Auth: Nenhuma
Limite: Não documentado
Países: 🇧🇷 Brasil
Dados geográficos oficiais: estados, municípios, mesorregiões, microrregiões e distritos. Ideal para validar endereços, popular dropdowns ou gerar relatórios regionais.
Endpoints mais usados: /estados, /estados/{uf}/municipios, /municipios/{codigoIbge}.
💰 Dados Financeiros
AwesomeAPI — Câmbio
URL: https://economia.awesomeapi.com.br/last/{pares}
Auth: Nenhuma
Limite: Não documentado
Países: 🌍 Global
Cotações em tempo real de moedas (USD-BRL, EUR-BRL, GBP-BRL), criptomoedas (BTC-BRL, ETH-BRL) e ações (PETR4, VALE3). Oferece histórico via /daily/{par}/{dias}.
Vantagens: zero configuração, cobre centenas de pares, atualiza a cada poucos minutos.
Limitações: sem SLA declarado — não use como fonte única em sistemas de pagamento críticos. Cache de 5–10 min é o mínimo.
BrasilAPI — Taxas e Índices
URL: https://brasilapi.com.br/api/taxas/v1
Auth: Nenhuma
Limite: Não documentado
Países: 🇧🇷 Brasil
Retorna SELIC, CDI, CDB, poupança e outros indicadores financeiros. Útil em simuladores de investimento, cálculos de correção monetária e dashboards financeiros.
BACEN — PTAX
URL: https://olinda.bcb.gov.br/olinda/servico/PTAX/versao/v1/odata/
Auth: Nenhuma
Limite: Não documentado
Países: 🇧🇷 Brasil
Cotações oficiais de câmbio do Banco Central do Brasil. A PTAX é a taxa de referência usada em contratos financeiros, liquidações e correções monetárias — mais confiável que fontes comerciais para fins legais ou contratuais.
Endpoints mais usados:
GET /CotacaoDolarDia(dataCotacao=@d)?@d='MM-DD-YYYY'— dólar do dia (compra e venda)GET /CotacaoMoedaDia(moeda=@m,dataCotacao=@d)?@m='EUR'&@d='MM-DD-YYYY'— outras moedas
Vantagens: fonte oficial do governo federal, gratuita, sem autenticação.
Limitações: dados disponíveis apenas nos dias úteis bancários; a API usa OData, o que pode ser verboso para usos simples.
₿ Criptomoedas
CoinGecko
URL: https://api.coingecko.com/api/v3/
Auth: Nenhuma (demo) / API key gratuita
Limite: 30 req/min
Países: 🌍 Global
A maior API gratuita de dados de mercado de criptomoedas: preços em tempo real, histórico OHLCV, market cap, volume e metadados de mais de 10.000 tokens. Não cobre dados on-chain (saldo de carteiras, transações ou exploração de blocos) — para isso, use Etherscan ou Blockchain.com abaixo.
Endpoints mais usados:
GET /simple/price?ids=bitcoin,ethereum&vs_currencies=brl,usd— cotação atual de múltiplos tokensGET /coins/{id}/market_chart?vs_currency=brl&days=30— histórico de preçosGET /coins/markets?vs_currency=usd&order=market_cap_desc— ranking por market cap
Vantagens: cobertura abrangente de mercado, sem cadastro para uso básico, documentação excelente.
Limitações: 30 req/min sem API key — cache obrigatório. Para volumes de produção maiores, considere o plano pago.
Etherscan
URL: https://api.etherscan.io/v2/api?chainid=1
Auth: API key gratuita
Limite: 5 req/seg / 100.000 req/dia
Países: 🌍 Global (Ethereum e compatíveis)
O maior explorador da rede Ethereum. Permite consultar saldo de carteiras, histórico de transações, transferências de tokens ERC-20/ERC-721, contratos verificados e dados de blocos — tudo via API REST. O parâmetro chainid permite usar o mesmo API key em múltiplas redes: Ethereum (1), Polygon (137), BNB Chain (56) e dezenas de outras redes EVM compatíveis.
Endpoints mais usados:
GET ?chainid=1&module=account&action=balance&address={address}— saldo ETH de uma carteiraGET ?chainid=1&module=account&action=tokentx&address={address}— transferências de tokens ERC-20GET ?chainid=1&module=block&action=getblocknobytime×tamp={ts}— bloco mais próximo de um timestamp
Vantagens: documentação extensa, dados on-chain em tempo real, gratuito para uso básico, um único API key cobre múltiplas redes EVM.
Limitações: requer cadastro para obter API key; limites do plano gratuito podem ser insuficientes para consultas em lote.
Blockchain.com — Simple API
URL: https://blockchain.info/
Auth: Nenhuma
Limite: Não documentado
Países: 🌍 Global (Bitcoin)
API pública para dados on-chain do Bitcoin. Sem chave, sem cadastro — acesso direto ao saldo de carteiras e histórico de transações.
Endpoints mais usados:
GET /balance?active={address}— saldo BTC de uma ou mais carteirasGET /rawaddr/{address}— histórico completo de transações de um endereçoGET /latestblock— bloco mais recente confirmado
Vantagens: zero configuração, dados básicos de Bitcoin sem depender de provedor externo.
Limitações: exclusivo para Bitcoin; sem limite documentado, mas suscetível a throttling em volume alto — cache obrigatório.
🏢 CNPJ e Empresas
BrasilAPI — CNPJ
URL: https://brasilapi.com.br/api/cnpj/v1/{cnpj}
Auth: Nenhuma
Limite: Não documentado
Países: 🇧🇷 Brasil
Dados cadastrais via Receita Federal: razão social, nome fantasia, CNAEs, situação cadastral, porte, endereço e quadro societário.
Vantagens: dados oficiais sem necessidade de certificado digital ou convênio.
Limitações: dados refletem a última sincronização com a Receita — pode haver defasagem de horas.
🌤 Clima
Open-Meteo
URL: https://api.open-meteo.com/v1/forecast
Auth: Nenhuma
Limite: 10.000 req/dia
Países: 🌍 Global
Previsão meteorológica de código aberto com dados de múltiplos modelos climáticos (ECMWF, GFS, DWD). Cobre previsão horária, diária e dados históricos desde 1940.
Vantagens: sem auth, cobertura global, documentação excelente, 80+ anos de dados históricos.
Limitações: 10k req/dia — cache de no mínimo 15 minutos é obrigatório.
🌐 Geolocalização por IP
ipapi.co
URL: https://ipapi.co/{ip}/json/
Auth: Nenhuma
Limite: 1.000 req/dia
Países: 🌍 Global
Retorna cidade, país, região, timezone, latitude/longitude, organização (ASN) e moeda local. Omitir {ip} usa o IP do solicitante automaticamente — útil para detectar o país do usuário sem login.
Vantagens: dados ricos (ASN, moeda, timezone), HTTPS gratuito.
Limitações: 1k req/dia é pouco para produção com alto tráfego — cache por sessão ou por IP é essencial.
ip-api.com
URL: http://ip-api.com/json/{ip}
Auth: Nenhuma
Limite: 45 req/min
Países: 🌍 Global
Atenção: o plano gratuito é HTTP puro — não use em contextos que requeiram HTTPS. O plano pago habilita HTTPS e eleva o limite.
🌍 Geocodificação e Dados Geográficos
Nominatim — OpenStreetMap
URL: https://nominatim.openstreetmap.org/
Auth: Nenhuma
Limite: 1 req/seg (máximo absoluto por política da OpenStreetMap Foundation)
Países: 🌍 Global
Geocodificação e geocodificação reversa baseada nos dados do OpenStreetMap. Converte endereços em coordenadas geográficas e vice-versa — sem custo e sem registro.
Endpoints mais usados:
GET /search?q={endereco}&format=json— endereço → coordenadasGET /reverse?lat={lat}&lon={lon}&format=json— coordenadas → endereço completo
Vantagens: gratuito, sem auth, cobertura global, dados open source.
Limitações: o limite de 1 req/s é rígido e aplica-se a toda a aplicação (soma de todos os usuários). Não adequado para geocodificação em lote — para volumes maiores, considere auto-hospedar o Photon ou usar o Geoapify.
CountriesNow
URL: https://countriesnow.space/api/v0.1/
Auth: Nenhuma
Limite: Não documentado
Países: 🌍 Global (222 países)
Dados estruturados de 222 países e territórios: nome, capital, código ISO, discagem, fuso horário, população, moeda, idioma e bandeiras (SVG). API gratuita, sem registro, ativamente mantida.
Endpoints mais usados:
GET /countries— lista completa com ISO2, ISO3 e cidades (227 países)GET /countries/flag/images— lista com URLs das bandeiras (SVG)GET /countries/currency— lista com moeda e código ISO por paísPOST /countries/capital— capital de um país específico (body:{"country":"Brazil"})
Vantagens: sem auth, cobertura global, inclui bandeiras e dados demográficos, JSON limpo.
Limitações: sem paginação nativa — retorna listas completas; mantenha cache local (TTL 24h+) para não repetir a chamada a cada request.
🔒 Segurança
Have I Been Pwned
URL: https://api.pwnedpasswords.com/range/{prefixo}
Auth: Nenhuma (senhas) / API key paga (e-mails)
Limite: Não documentado (retorna 429 em caso de abuso)
Países: 🌍 Global
Verifica se uma senha apareceu em vazamentos conhecidos usando k-anonymity: você envia apenas os 5 primeiros caracteres do hash SHA-1. O servidor retorna todos os hashes com aquele prefixo e a comparação é feita localmente — a senha nunca trafega pela rede.
Vantagens: privacidade by design, banco com bilhões de senhas, totalmente gratuito para senhas.
Limitações: verificar e-mails comprometidos exige API key paga ($3,50/mês).
VirusTotal
URL: https://www.virustotal.com/api/v3/
Auth: API key gratuita
Limite: 4 req/min / 500 req/dia
Países: 🌍 Global
Analisa URLs, arquivos, domínios e IPs contra 70+ engines antivírus. Útil para validar links enviados por usuários ou inspecionar arquivos recebidos via upload antes de processá-los.
Hudson Rock — Cavalier
URL: https://cavalier.hudsonrock.com/api/json/v2/osint-tools/
Auth: Nenhuma
Limite: Não documentado
Países: 🌍 Global
Inteligência de cibercrime com foco em malware do tipo infostealer. Diferente do HIBP — que indexa dados de breaches e dumps públicos —, o Cavalier cobre credenciais roubadas diretamente dos dispositivos das vítimas por malware como RedLine, Raccoon e Vidar.
Endpoints públicos:
GET /search-by-email?email={email}— verifica se um e-mail aparece em logs de infostealerGET /search-by-domain?domain={domain}— identifica funcionários e sistemas comprometidos de um domínio
Vantagens: cobre um vetor de ataque distinto do HIBP; sem autenticação nos endpoints básicos.
Limitações: domínios genéricos de grande porte (ex: google.com) podem retornar 400; rate limit não documentado.
📅 Feriados
Nager.Date
URL: https://date.nager.at/api/v3/PublicHolidays/{ano}/{pais}
Auth: Nenhuma
Limite: Não documentado
Países: 🌍 100+ países
Feriados públicos nacionais e regionais em 100+ países. Essencial para cálculos de dias úteis, SLAs e agendamento. Suporta BR, US, DE, PT, ES e dezenas de outros códigos ISO 3166-1.
🧪 Dev e Prototipagem
JSONPlaceholder
URL: https://jsonplaceholder.typicode.com/
Auth: Nenhuma
Limite: Sem limite declarado
Países: 🌍 Global
API fake completa: posts, users, todos, photos, albums, comments. Suporta todos os verbos HTTP (PUT/PATCH/DELETE simulam sem persistir). Ideal para testar pipelines de HttpClient ou gerar dados de exemplo em demos sem subir infraestrutura.
PokeAPI
URL: https://pokeapi.co/api/v2/
Auth: Nenhuma
Limite: 100 req/min
Países: 🌍 Global
Catálogo completo do universo Pokémon. Tem uma das melhores documentações de API REST disponíveis — excelente para praticar paginação com limit/offset, cache e relacionamentos em APIs RESTful.
⚙️ Integrando de Forma Resiliente
O padrão de produção é sempre o mesmo: HttpClient tipado ou Refit para o cliente HTTP, Polly para resiliência e cache por TTL para reduzir latência e respeitar rate limits. O que muda é só o endpoint.
HttpClient Tipado
IHttpClientFactory resolve dois problemas clássicos do new HttpClient() direto: vazamento de sockets — o HttpClient deve ser reutilizado entre requisições, nunca instanciado por chamada — e DNS stale — sem factory, o DNS resolvido fica preso no socket indefinidamente. O cliente tipado encapsula o HttpClient em uma classe de serviço específica; você injeta a classe, não o HttpClient diretamente.
Quando usar: projetos com poucos endpoints externos, ou quando você quer controle total sobre serialização e tratamento de erros sem adicionar dependências externas.
// O HttpClient é injetado já configurado pelo IHttpClientFactory
public class ViaCepClient(HttpClient httpClient)
{
public Task<ViaCepResponse?> GetAddressAsync(string postalCode)
{
// Remove caracteres não-numéricos antes de montar a URL
var digits = new string(postalCode.Where(char.IsDigit).ToArray());
return httpClient.GetFromJsonAsync<ViaCepResponse>($"/ws/{digits}/json/");
}
}
// Program.cs — registra o cliente tipado com a URL base centralizada
builder.Services.AddHttpClient<ViaCepClient>(client =>
client.BaseAddress = new Uri("https://viacep.com.br"));
Refit
Refit gera a implementação do cliente HTTP a partir de uma interface anotada com atributos de rota. Você descreve o contrato da API como interface — Refit cria a classe concreta em tempo de execução via source generators. A interface serve também como documentação viva do contrato.
Quando usar em vez do HttpClient tipado: quando a API tem muitos endpoints ou você quer eliminar o boilerplate de serialização e construção de URL. Desvantagem: é uma dependência externa e tem menor flexibilidade para cenários muito customizados (streaming de respostas grandes, uploads multipart complexos).
// dotnet add package Refit.HttpClientFactory
// A interface declara os endpoints — Refit gera a implementação em tempo de execução
public interface IViaCepApi
{
[Get("/ws/{cep}/json/")]
Task<ViaCepResponse> GetAddressAsync(string cep);
}
// Program.cs — Refit e Polly se encadeiam na mesma pipeline de HttpClient
builder.Services.AddRefitClient<IViaCepApi>()
.ConfigureHttpClient(client =>
client.BaseAddress = new Uri("https://viacep.com.br"));
Refit e Polly se integram na mesma chain: AddRefitClient<T>().ConfigureHttpClient(...).AddResilienceHandler(...).
Cache
Cache armazena localmente a resposta de chamadas externas por um período determinado (TTL — Time to Live), evitando requisições repetidas. Além de reduzir latência, protege contra rate limits e isola sua aplicação de instabilidades momentâneas da dependência externa.
IMemoryCache — armazena em memória do próprio processo. Simples e sem latência adicional. Limitação crítica: não compartilhado entre instâncias. Em ambientes com escala horizontal (múltiplos pods/containers), cada instância mantém seu próprio cache isolado — inconsistências são inevitáveis e o benefício do cache se perde em parte.
IDistributedCache com Redis — cache externo compartilhado entre todas as instâncias. Obrigatório quando a aplicação escala horizontalmente. Adiciona latência de rede (~1ms em LAN), mas garante consistência e permite que o cache sobreviva a reinicializações do pod.
// Program.cs
builder.Services.AddMemoryCache();
// No serviço:
public async Task<ExchangeRate?> GetRateAsync(string pair)
{
var cacheKey = $"rate:{pair.ToUpper()}";
// Retorna imediatamente se o valor já estiver em cache
if (_cache.TryGetValue(cacheKey, out ExchangeRate? cached))
return cached;
var result = await _api.GetRateAsync(pair);
if (result is not null)
_cache.Set(cacheKey, result, new MemoryCacheEntryOptions
{
// Garante expiração máxima absoluta independente de uso
AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(5),
// Renova o TTL a cada leitura — expira só se ficar inativo
SlidingExpiration = TimeSpan.FromMinutes(2),
});
return result;
}
Resiliência com Polly
Polly é a biblioteca de resiliência para .NET. Implementa padrões de estabilidade — retry, circuit breaker, timeout e bulkhead — que protegem sua aplicação quando dependências externas falham ou ficam lentas. No .NET 8+, o Polly v8 é integrado diretamente via Microsoft.Extensions.Http.Resilience, sem necessidade de pipeline manual.
Retry tenta novamente automaticamente em falhas transitórias (timeouts de rede, 503 momentâneos). Circuit Breaker para de tentar quando a dependência está claramente indisponível — evita que uma API lenta derrube sua aplicação e dá tempo para o serviço externo se recuperar. A ordem das estratégias é crítica: de dentro para fora, cada camada envolve a anterior.
builder.Services.AddHttpClient<ViaCepClient>(client =>
client.BaseAddress = new Uri("https://viacep.com.br"))
.AddResilienceHandler("viacep-pipeline", pipeline =>
{
// Timeout aplicado individualmente a cada tentativa
pipeline.AddTimeout(TimeSpan.FromSeconds(4));
pipeline.AddRetry(new HttpRetryStrategyOptions
{
// Número máximo de novas tentativas após a falha inicial
MaxRetryAttempts = 3,
// Delay base antes da primeira nova tentativa
Delay = TimeSpan.FromMilliseconds(500),
// Exponencial: cada tentativa dobra o delay anterior (500ms → 1s → 2s)
BackoffType = DelayBackoffType.Exponential,
// Variação aleatória no delay para evitar pico simultâneo de requisições
UseJitter = true,
// Aciona retry em exceções de rede ou respostas 5xx
ShouldHandle = args => ValueTask.FromResult(
args.Outcome.Exception is not null ||
args.Outcome.Result?.StatusCode >= HttpStatusCode.InternalServerError),
});
pipeline.AddCircuitBreaker(new HttpCircuitBreakerStrategyOptions
{
// Janela de tempo usada para calcular a taxa de falhas
SamplingDuration = TimeSpan.FromSeconds(30),
// Mínimo de requisições na janela antes de avaliar o circuito
MinimumThroughput = 5,
// Abre o circuito se 50% ou mais das requisições falharem
FailureRatio = 0.5,
// Tempo que o circuito fica aberto antes de tentar se recuperar
BreakDuration = TimeSpan.FromSeconds(15),
});
});
A ordem das estratégias importa: timeout → retry → circuit breaker, de dentro para fora.
Referências Oficiais
- Microsoft.Extensions.Http.Resilience — documentação completa do Polly v8 integrado
- Refit — documentação e exemplos avançados
- IMemoryCache — cache em memória no ASP.NET Core
- IDistributedCache — cache distribuído e integração com Redis