Portal do desenvolvedor

Construa com endereços do Brasil.

A BrasilAddress transforma CEP, logradouros, municípios e coordenadas em uma API REST previsível, com dados nacionais e contratos versionados.

14 operações públicasv1 contrato atualJSON respostas
01 / Primeiros passos

Crie uma conta e uma API key

Crie uma conta, escolha um plano publicado no catálogo e gere uma chave no portal do cliente. A chave completa aparece somente no momento da criação.

Segurança em primeiro lugarGuarde a API key em um secret manager. Nunca a inclua no frontend, no Git ou em uma URL.
02 / Conceitos

Autenticação

Os endpoints protegidos aceitam uma chave em um destes headers. O health check e o readiness são públicos.

X-API-Key: SUA_API_KEY
Authorization: Bearer SUA_API_KEY

A API não aceita chaves em query string. Respostas sem credencial retornam 401 authentication_required; credenciais inválidas retornam 401 invalid_api_key.

03 / Primeiros passos

Primeira requisição

Use o exemplo abaixo com uma chave ativa. A URL dos exemplos vem da configuração BRASILADDRESS_API_PUBLIC_BASE_URL.

curl --fail-with-body --connect-timeout 5 --max-time 15 \
  -H "X-API-Key: SUA_API_KEY" \
  https://brasiladdress.io/api/v1/cep/01001000
04 / Primeiros passos

Interpretando a resposta

As consultas retornam um envelope JSON. data contém os registros; meta informa página, limite, ambiguidade ou cobertura quando aplicável.

{
  "data": [{
    "street": "Praça da Sé",
    "district": "Sé",
    "city": "São Paulo",
    "uf": "SP",
    "ibge_code": 3550308,
    "cep": "01001000",
    "number": null,
    "latitude": null,
    "longitude": null,
    "precision": null,
    "source": "base nacional"
  }],
  "meta": {"count": 1}
}
05 / Operação

Quotas e rate limiting

Cada requisição autenticada reserva uma unidade da quota mensal da assinatura e passa pelo limite de requisições por minuto mais o burst contratado. Ao exceder um limite, a API responde 429 e envia Retry-After.

Retry seguroRespeite o header Retry-After. Para falhas transitórias, use backoff exponencial com jitter e limite o número de tentativas.
06 / Operação

Erros HTTP

StatusCódigoQuando acontece
401authentication_required / invalid_api_keyChave ausente, expirada, revogada ou inválida.
403access_deniedCredencial sem a permissão exigida.
422invalid_cep, invalid_query, invalid_coordinatesParâmetro ausente, inválido ou fora do domínio aceito.
429rate_limited / quota_exceededLimite por minuto ou quota mensal atingido.
503not_readyDependência de dados indisponível no readiness.
{"error":{"code":"invalid_query","message":"q deve ter ao menos 3 caracteres."}}
07 / Conceitos

Versionamento e formato

O contrato atual vive em /api/v1. Respostas são JSON UTF-8 e os filtros de texto são normalizados para busca. O campo source e a observação de cobertura ajudam a interpretar a procedência dos registros.

08 / Referência da API

Endpoints

Esta lista é derivada dos controllers reais. Use o explorer para preencher parâmetros e executar uma chamada manual.

GET/api/v1/healthSistema

Health check

Verifica se o serviço está disponível. Esta operação não exige API key.

Sem parâmetros.

GET/api/v1/cep/{cep}Endereços

Consultar CEP

Retorna os registros associados a um CEP normalizado.

ParâmetroTipoObrigatórioDescrição
cep
path
stringSimCEP com 8 dígitos, com ou sem máscara.
Exemplo: 01001000
GET/api/v1/addresses/searchEndereços

Buscar endereços

Pesquisa por logradouro, bairro, cidade, UF, município IBGE, CEP e número.

ParâmetroTipoObrigatórioDescrição
logradouro
query
stringNãoParte do nome do logradouro.
Exemplo: Paulista
bairro
query
stringNãoParte do nome do bairro.
Exemplo: Bela Vista
cidade
query
stringNãoParte do nome da cidade.
Exemplo: São Paulo
uf
query
stringNãoSigla da UF.
Exemplo: SP
municipio
query
integerNãoCódigo IBGE do município.
Exemplo: 3550308
cep
query
stringNãoCEP com 8 dígitos.
Exemplo: 01001000
numero
query
stringNãoNúmero do endereço.
Exemplo: 100
page
query
integerNãoPágina, iniciando em 1.
Exemplo: 1
limit
query
integerNãoItens por página, limitado a 100.
Exemplo: 20
GET/api/v1/enderecosEndereços

Buscar endereços (alias)

Alias em português para a busca de endereços.

ParâmetroTipoObrigatórioDescrição
logradouro
query
stringNãoParte do nome do logradouro.
Exemplo: Paulista
uf
query
stringNãoSigla da UF.
Exemplo: SP
page
query
integerNãoPágina, iniciando em 1.
Exemplo: 1
limit
query
integerNãoItens por página, limitado a 100.
Exemplo: 20
GET/api/v1/enderecos/buscaEndereços

Busca textual

Busca um termo normalizado no nome do logradouro.

ParâmetroTipoObrigatórioDescrição
q
query
stringSimTermo com pelo menos um caractere.
Exemplo: Avenida Paulista
page
query
integerNãoPágina, iniciando em 1.
Exemplo: 1
limit
query
integerNãoItens por página, limitado a 100.
Exemplo: 20
GET/api/v1/geocodeGeocodificação

Geocodificação

Encontra candidatos de endereço para um texto e informa a ambiguidade.

ParâmetroTipoObrigatórioDescrição
q
query
stringSimConsulta com pelo menos 3 caracteres.
Exemplo: Avenida Paulista São Paulo
limit
query
integerNãoMáximo de 50 resultados.
Exemplo: 10
GET/api/v1/geocodingGeocodificação

Geocodificação (alias)

Alias em inglês para geocodificação.

ParâmetroTipoObrigatórioDescrição
q
query
stringSimConsulta com pelo menos 3 caracteres.
Exemplo: Avenida Paulista São Paulo
limit
query
integerNãoMáximo de 50 resultados.
Exemplo: 10
GET/api/v1/reverseGeocodificação

Geocodificação reversa

Retorna endereços próximos de uma latitude e longitude dentro do Brasil.

ParâmetroTipoObrigatórioDescrição
lat
query
numberSimLatitude entre -34 e 6.
Exemplo: -23.561684
lon
query
numberSimLongitude entre -74 e -28.
Exemplo: -46.655981
limit
query
integerNãoMáximo de 50 resultados.
Exemplo: 10
GET/api/v1/autocompleteBusca

Autocomplete

Sugere logradouros a partir de um prefixo. Exige pelo menos 2 caracteres.

ParâmetroTipoObrigatórioDescrição
q
query
stringSimPrefixo com pelo menos 2 caracteres.
Exemplo: Avenida Pau
limit
query
integerNãoMáximo de 50 resultados.
Exemplo: 10
GET/api/v1/municipiosGeografia

Listar municípios

Lista municípios e seus registros de cobertura, opcionalmente filtrados por UF.

ParâmetroTipoObrigatórioDescrição
uf
query
stringNãoSigla da UF.
Exemplo: SP
GET/api/v1/municipios/{codigoIbge}Geografia

Consultar município

Retorna um município pelo código IBGE.

ParâmetroTipoObrigatórioDescrição
codigoIbge
path
integerSimCódigo IBGE do município.
Exemplo: 3550308
GET/api/v1/bairrosGeografia

Listar bairros

Lista bairros associados a um município.

ParâmetroTipoObrigatórioDescrição
municipio
query
integerSimCódigo IBGE do município.
Exemplo: 3550308
GET/api/v1/logradourosGeografia

Listar logradouros

Lista logradouros associados a um município.

ParâmetroTipoObrigatórioDescrição
municipio
query
integerSimCódigo IBGE do município.
Exemplo: 3550308
09 / Guias de integração

Exemplos executáveis

Todos os exemplos usam a mesma API REST e tratam timeout, erros de HTTP e 429. Substitua a variável de ambiente pela chave armazenada no seu ambiente seguro.

JavaScript / Node.js

const controller = new AbortController();
const timer = setTimeout(() => controller.abort(), 15000);
const response = await fetch(`${BASE_URL}/api/v1/cep/01001000`, {
  headers: { 'X-API-Key': process.env.BRASILADDRESS_API_KEY },
  signal: controller.signal
});
clearTimeout(timer);
if (response.status === 429) throw new Error(`Retry after ${response.headers.get('Retry-After')}s`);
if (!response.ok) throw new Error(await response.text());
console.log(await response.json());

Python / httpx

import os, httpx

with httpx.Client(timeout=15) as client:
    response = client.get(
        os.environ["BRASILADDRESS_BASE_URL"] + "/api/v1/cep/01001000",
        headers={"X-API-Key": os.environ["BRASILADDRESS_API_KEY"]},
    )
    if response.status_code == 429:
        raise RuntimeError("Aguarde o Retry-After antes de tentar novamente")
    response.raise_for_status()
    print(response.json())

PHP / cURL

$ch = curl_init(getenv('BRASILADDRESS_BASE_URL').'/api/v1/cep/01001000');
  CURLOPT_HTTPHEADER => ['X-API-Key: '.getenv('BRASILADDRESS_API_KEY')],
  CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 15,
]);
$body = curl_exec($ch); $status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status === 429) throw new RuntimeException('Respeite Retry-After');
if ($status >= 400) throw new RuntimeException($body ?: curl_error($ch));
echo $body;
10 / Ferramenta

API Explorer

As requisições são feitas pelo seu navegador contra a URL configurada. A chave fica somente na memória desta página, nunca em localStorage, URL ou serviço externo.

Execução manual. Cada chamada autenticada pode consumir quota do seu plano.
Aguardando execução
Selecione um endpoint e preencha os parâmetros.
O resultado JSON aparecerá aqui.
11 / Recursos comerciais

Planos e limites

Os valores abaixo são carregados do catálogo de planos publicados, o mesmo usado na página comercial e administrado em /admin/planos.

Plano

Developer

Plano gratuito para desenvolvimento, testes e integração com a API BrasilAddress.

10.000requisições / mês
Rate limit
10 rpm + 2 burst
API keys
1
Endpoints
Conforme contrato
{else}

Nenhum plano publicado

O catálogo ainda não possui planos visíveis para o público.

Plano

Starter

Para pequenas aplicações e lojas virtuais que precisam consultar e validar endereços brasileiros.

100.000requisições / mês
Rate limit
60 rpm + 5 burst
API keys
2
Endpoints
Conforme contrato
{else}

Nenhum plano publicado

O catálogo ainda não possui planos visíveis para o público.

Recomendado

Professional

Para e-commerces e sistemas de gestão que precisam de consultas de endereços, autocomplete e geocodificação em maior escala.

500.000requisições / mês
Rate limit
180 rpm + 10 burst
API keys
5
Endpoints
Conforme contrato
{else}

Nenhum plano publicado

O catálogo ainda não possui planos visíveis para o público.

Plano

Business

Para transportadoras, plataformas logísticas e empresas com alto volume de consultas de endereços.

2.000.000requisições / mês
Rate limit
300 rpm + 15 burst
API keys
10
Endpoints
Conforme contrato
{else}

Nenhum plano publicado

O catálogo ainda não possui planos visíveis para o público.

12 / Recursos

OpenAPI, Swagger UI e ReDoc

A especificação é gerada pelo contrato da aplicação e alimenta as três interfaces. Baixe o formato que preferir ou abra uma ferramenta interativa.

Status e suporte: use o health check para monitoramento técnico e o portal do cliente para consumo, chaves e assinatura.

09.1 / TypeScript

TypeScript

O exemplo usa fetch, timeout e tratamento explícito de HTTP 429.

const response = await fetch(`${process.env.BRASILADDRESS_BASE_URL}/api/v1/cep/01001000`, {
  headers: { 'X-API-Key': process.env.BRASILADDRESS_API_KEY ?? '' },
  signal: AbortSignal.timeout(15000),
});
if (response.status === 429) throw new Error(`Retry-After: ${response.headers.get('Retry-After')}`);
if (!response.ok) throw new Error(await response.text());
console.log(await response.json());