Busca CEP - APIs para pesquisa automatizada

Modificado em Sex, 17 Jul na (o) 11:26 AM

ÍNDICE


Visão geral


O sistema BuscaCEP permite que organizações e contas pessoais integrem sistemas externos, para a realização de consultas automáticas, de duas formas:
  1. Chave de aplicação (API Key) - autentica e autoriza chamadas de sistemas externos à API do BuscaCEP, atuando em nome da organização ou da conta pessoal.
  2.  Webhook - permite que o BuscaCEP notifique um sistema externo, via HTTP POST, quando ocorrerem eventos, como a conclusão de execução de consulta automática.


Ambas são configuradas pelos administradores na página de gerenciamento da organização.


Gerar uma chave de aplicação


Para utilizar as APIs, gere uma chave de aplicação.


1. Acesse a página de gerenciamento em https://hml.buscacep.org.br/private/management → Chaves de aplicação → Adicionar.


2. Informe:

  • Descrição - obrigatória, até 100 caracteres.
  • Validade - em 1-2 ano(s), a partir da data de criação.

3. Clique em 'Criar'.


4. Copie a chave que é exibida uma única vez na tela.


⚠ A chave não pode ser visualizada depois. Se for perdida, é necessário deletar e gerar uma nova.



Deletar uma chave

Caso deseje excluir uma chave de integração, clique em Deletar na lista de chaves. A exclusão é imediata, e todas as chamadas realizadas com essa chave serão rejeitadas a partir desse momento.


Como utilizar a chave nas chamadas à API

Toda requisição que utiliza a chave de aplicação deve enviar o header:

X-Api-Key: <chave gerada>


Exemplo ( curl )


curl -X GET "https://<host>/api/automated-searches/<automatedSearchId>" -H "X-ApiKey: <chave>"


Consumo da API

As rotas expostas pela API estão documentadas em https://buscacep.org.br/swagger/index.html:

 

Para utilizar, primeiro informe a chave de API:


Rotas (Endpoints)

MétodoRotaDescrição
POST

/api/automated-searches

Cria uma consulta automática
GET

/api/automated-searches/{id}

Obtém uma consulta automática
PUT

/api/automated-searches/{id}

Atualiza uma consulta automática
PATCH

/api/automated-searches/{id}/active

Ativa/desativa uma consulta automática
GET

/api/automated-searches

Lista todas as consultas automáticas da organização
GET

/api/automatedsearches/{id}/notarial-acts


Lista (paginado) os atos notariais encontrados pela consulta




Especificação das rotas

Criar consulta automática - POST /api/automated-searches


Cria uma nova consulta automática para a organização/conta pessoal.


Requisição ( AutomatedSearchData ):


{

"personEntries": [

{ "identifier": "12345678901", "name": "Nome da pessoa/empresa" }

],

"actType": "Deed",

"startDate": "2024-01-01T00:00:00",

"endDate": null,

"nextExecutionDate": "2026-08-01T00:00:00",

"recurrenceIntervalInDays": 30,

"resultType": "Full",

"emailNotificationType": "OnlyWhenNewActsFound",

"responsibleIdentifier": "12345678901"

}


CampoTipoObrigatórioObservações
personEntries[]PersonEntryData[]Sim (mín. 1)Pessoas/empresas monitoradas pela consulta automática. Campos de cada item abaixo.
personEntries[].identifierstring (CPF ou CNPJ)SimCPF ou CNPJ da pessoa/empresa monitorada
personEntries[].namestring (2–200 caracteres)SimNome da pessoa/empresa monitorada, sem espaços nas pontas
actType"PowerOfAttorney" |
"Deed"
NãoFiltra por tipo de ato
(Procuração ou Escritura). Omitido =
ambos
startDatedatetimeNãoRetorna os atos que foram criados a partir dessa data
endDatedatetimeNãoRetorna os atos que foram criados até essa data
nextExecutionDatedatetimeNãoPróxima data de execução agendada. Quando não informada, é calculada automaticamente.
recurrenceIntervalInDaysint (15 - 30)SimIntervalo de recorrência da execução automática, em dias. Atualmente, pode ser configurado para o intervalo de 15 a 30 dias.
resultType"Full" | "Incremental"SimFull = o resultado de cada consulta e documento gerado irá conter todos os atos que já foram encontrados;
Incremental = só o que mudou desde a última execução da consulta
emailNotificationType"EveryExecution" |
"OnlyWhenNewActsFound"
NãoQuando notificar por email. Os e-mails que vão receber notificação devem ser configurados no site.

OnlyWhenNewActsFound só tem efeito quando o resultType é
Incremental . Quando resultType = Full , a
notificação ocorre sempre.
responsibleIdentifierstring (CPF)SimCPF do responsável referenciado no documento gerado ao fim de cada processamento. Deve ser administrador da organização.
Não pode ser alterado depois de criado.



Resposta ( AutomatedSearchSummary ):


{

"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",

"dateCreated": "2026-01-10T12:00:00Z",

"dateUpdated": null,

"nextExecutionDate": "2026-08-01T00:00:00Z",

"isActive": true,

"recurrenceIntervalInDays": 30,

"resultType": "Full",

"emailNotificationType": "OnlyWhenNewActsFound"

}



CampoTipoObservações
idGuidIdentificador da consulta automática criada
dateCreateddatetimeData/hora de criação
dateUpdateddatetimeData/hora da última atualização
nextExecutionDatedatetimePróxima data de execução agendada
isActiveboolIndicativo de consulta ativa
recurrenceIntervalInDaysintRecorrência da execução em dias
resultType"Full" | "Incremental"Tipo da consulta
emailNotificationType"EveryExecution" | "OnlyWhenActsFound" | nullCondição para disparo do e-mail de notificação.



Obter consulta automática - GET /api/automated-searches/{id}


Retorna os detalhes completos de uma consulta automática.


Requisição: identificador da consulta automática na rota.


Resposta: (AutomatedSearchModel que estende AutomatedSearchSummary):


CampoTipoObservações
idGuidIdentificador da consulta automática criada
dateCreateddatetimeData/hora de criação
dateUpdateddatetimeData/hora da última atualização
nextExecutionDatedatetimePróxima data de execução agendada
isActiveboolIndicativo de consulta ativa
recurrenceIntervalInDaysintRecorrência da execução em dias
resultType"Full" | "Incremental"Tipo da consulta
emailNotificationType"EveryExecution" | "OnlyWhenActsFound" | nullCondição para disparo do e-mail de notificação.
actType"PowerOfAttorney" |
"Deed"

startDatedatetimeRetorna os atos que foram criados a partir dessa data
endDatedatetimeRetorna os atos que foram criados até essa data
personEntries[]personEntryData[]Pessoas/empresas monitoradas pela consulta
personEntries[].identifierstring (CPF ou CNPJ)CPF ou CNPJ da pessoa/empresa monitorada
personEntries[].namestringNome da pessoa/empresa monitorada
contacts[]ContactSummary[]Contatos que recebem notificação por e-mail desta consulta.
contacts[].idGuidIdentificador do contato
contacts[].namestringNome do contato
contacts[].emailstringe-mail do contato



Atualizar consulta automática - PUT /api/automated-searches/{id}


Atualizar uma consulta automática existente.


Requisição (AutomatedSearchData): identificador da consulta automática na rota e mesmos campos da criação (seção Criar consulta automática acima), apenas com a inclusão do campo abaixo:


CampoTipoObservações
responsibleIdentifierstring (CPF)Campo ignorado nas atualizações.


Resposta: (AutomatedSearchSummary): mesmo formato e campos da criação.



Ativa/desativar consulta automática - PATCH /api/automated-searches/{id}/active


Ativa ou desativa a execução recorrente de uma consulta automática, sem excluí-la.


Requisição identificador da consulta automática na rota e booleano no corpo.


true



CampoTipoObrigatórioObservações
(corpo)boolSimtrue ativa, false desativa a consulta automática


Resposta: AutomatedSearchSummary (mesmo formato e campos da criação, ver seção Criar consulta automática acima, com isActive refletindo o novo valor).


Listar consultas automáticas - GET /api/automated-searches

Lista todas as consultas automáticas da organização/conta pessoal.


Requisição: sem corpo, sem parâmetros.


Resposta: array de AutomatedSearchSummary (mesmo formato da seção Criar consulta automática

acima):


[

{

"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",

"dateCreated": "2026-01-10T12:00:00Z",

"dateUpdated": null,

"nextExecutionDate": "2026-08-01T00:00:00Z",

"isActive": true,

"recurrenceIntervalInDays": 30,

"resultType": "Full",

"emailNotificationType": "OnlyWhenNewActsFound"

}

]



Atos notariais encontrados - GET /api/automated-searches/{id}/notarial-acts


Lista de forma paginada os atos notariais encontrados pela consulta automática.


Requisição: identificador da consulta automática na rota e query params
( AutomatedSearchNotarialActPaginatedSearchParams)



CampoTipoObrigatórioObservações
personEntryIdentifierstring (CPF/CNPJ)NãoFiltra pelos atos de uma pessoa/empresa específica 

da lista monitorada

limitint (1–100)Não

Padrão 10

offsetintNãopaginação
orderAscending | DescendingNãoDireção da ordenação
orderBy

Type | 

NotaryOfficeName | 

Date | City | Uf

NãoCampos de ordenação


Resposta: PaginatedSearchResponse<AutomatedSearchNotarialActModel>


{

"items": [

{

"type": "Deed",

"book": "123",

"bookComplement": "A",

"page": "45",

"pageComplement": null,

"date": "2026-03-15T00:00:00",

"notaryOffice": {

"name": "1º Tabelionato de Notas",

"cns": 12345,

"uf": "SP",

"city": "São Paulo"

}

}

],

"totalCount": 1

}


CampoTipoObservações
items[]AutomatedSearchNotarialActModel[]Página atual de atos notariais encontrados
items[].type"PowerOfAttorney" | "Deed"Tipo do ato
items[].bookstringLivro do ato no cartório
items[].bookComplementstringComplemento do livro
items[].pagestringFolha do ato no cartório
items[].pageComplementstringComplemento da folha
items[].datedatetimeData do ato
items[].notaryOfficeAutomatedSearchNotarialActNotaryOfficeModel

Tabelionato de Notas onde o ato foi lavrado.
Campos abaixo

items[].notaryOffice.namestringDenominação do cartório
items[].notaryOffice.cnsintCNS (Código Nacional de Serventia)
items[].notaryOffice.ufUFUF do cartório
items[].notaryOffice.citystringCidade do cartório
totalCountintTotal de atos encontrados (todas as páginas)



Webhook


Configuração


1. Acesse a área de gerenciamento e vá para a seção Webhook.


2. Clique em Configurar (ou Editar, se já existir).


3. Informe:

  • URL (obrigatória, HTTPS, até 500 caracteres).
  • Ativo (liga/desliga o envio sem precisar excluir a configuração).
  • Eventos(pelo menos 1 selecionado) ver tabela de eventos abaixo.


4. Ao salvar, um segredo é exibido uma única vez, com opção de copiar. Opcionalmente

(recomendável), ele pode ser utilizado para validar a assinatura das entregas (ver Assinatura da

entrega, abaixo).


Cada organização tem no máximo um webhook cadastrado. Para trocar URL, edite o existente.


Regerar segredo


Botão Regenerar segredo na tela de webhook. Gera um novo segredo. O anterior deixa de validar imediatamente. Use se o segredo for exposto/comprometido.


Entrega de eventos


Eventos suportados:

Evento ( eventType no 

payload)

Quando disparaDados
automated-searchexecution.completedUma execução de busca 

automatizada termina de 

processar

{ "automatedSearchId": "

<string>" }


lista cresce conforme novas funcionalidades forem adicionadas; a tela de configuração sempre
reflete os eventos disponíveis no momento.


Formato do Payload

Toda entrega é um POST com corpo JSON no formato:


{

"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",

"eventType": "automated-search-execution.completed",

"data": {

"automatedSearchId": "..."

}

}


  • id - identificador único da entrega (útil para deduplicação/idempotência do lado do receptor).
  • eventType — string do evento (tabela acima).
  • data — objeto específico do evento.

Content-Type: application/json .


Assinatura da entrega (segurança)

Cada requisição de webhook chega em dois headers:


X-Webhook-Timestamp: <timestamp Unix em segundos>

X-Webhook-Signature: <hash HMAC-SHA256 em hexadecimal>


Exemplo:


A assinatura é calculada assim:


mensagem = "{timestamp}.{corpo_json_bruto}"

assinatura = HMAC_SHA256(chave = secret, mensagem).hexdigest()


No receptor, para validar:

1. Recalcule a assinatura usando o secret do webhook, o valor exato do header X-WebhookTimestamp e o corpo bruto da requisição (sem re-serializar o JSON, use o "body cru").


2. Compare com X-Webhook-Signature (comparação em tempo constante).


3. (Recomendado) Rejeite se o timestamp estiver muito distante do horário atual (ex.: > 5 minutos),

para mitigar replay de requisições antigas.


Exemplo em Node.js:


const crypto = require('crypto');


function isValidSignature(rawBody, timestampHeader, signatureHeader, secret) {


const expected = crypto

.createHmac('sha256', secret)

.update(timestampHeader, 'utf8')

.update('.', 'utf8')

.update(rawBody)

.digest('hex');


return crypto.timingSafeEqual(

Buffer.from(expected, 'hex'),

Buffer.from(signatureHeader, 'hex')

);

}


Exemplo em C#:


using System.Security.Cryptography ;

using System.Text;


static bool IsValidSignature(string rawBody, string timestampHeader, string

signatureHeader, string secret) {


var key = Encoding.UTF8.GetBytes(secret);

var message = Encoding.UTF8.GetBytes($"{timestampHeader}.{rawBody}");


using var hmac = new HMACSHA256(key);


var expected = hmac.ComputeHash(message);

var received = Convert.FromHexString(signatureHeader);


return CryptographicOperations.FixedTimeEquals(expected, received);

)


Retentativas


  • O BuscaCEP considera sucesso qualquer resposta HTTP 2xx.
  • Em caso de falha (erro de rede, timeout, status ≠ 2xx), reagenda com backoff


TentativaIntervalo até a próxima
1ª falha1 minuto
2ª falha5 minutos
3ª falha30 minutos
4ª falha120 minutos
5ª falhasem novas tentativas


=> Total de até 5 tentativas por entrega antes de desistir definitivamente.


Boas práticas para o receptor


  • Responder rapidamente (2xx) e processar de forma assíncrona, se o processamento for demorado.
  • Validar a assinatura antes de processar o corpo ( payload ).
  • Tratar entregas de forma idempotente usando o campo id (retentativas podem, em cenários de falha de rede após o processamento já ter ocorrido do lado do receptor, gerando reprocessamento).
  • Manter o segredo fora do código-fonte (variável de ambiente / cofre de segredos).
  • Em caso de perda/vazamento, pode gerar um novo segredo no gerenciamento.


Este artigo foi útil?

Que bom!

Obrigado pelo seu feedback

Desculpe! Não conseguimos ajudar você

Obrigado pelo seu feedback

Deixe-nos saber como podemos melhorar este artigo!

Selecione pelo menos um dos motivos
A verificação do CAPTCHA é obrigatória.

Feedback enviado

Agradecemos seu esforço e tentaremos corrigir o artigo