Confira o preço antes de iniciar a pesquisa. Envie POST /v1/orcamento/pesquisa-previa-bens com os dados que deseja pesquisar. O orçamento informa o valor e a disponibilidade, sem cobrar.
Registro de Imóveis
Pesquisa Prévia de Bens
Busca reversa de imóveis por CPF/CNPJ nos cartórios de registro de imóveis de um estado.
/v1/consultas/pesquisa-previa-bens
v1
UFs vendáveis
26/27
Cartórios
3.567
85 indisponíveis
Tempo típico
76s
A partir de
R$ 17,52
por consulta, varia por UF
Cobertura medida na origem em 19/08/2026. Cartório indisponível na medição entra na contagem.
Visão geral
Busca matrículas em que um CPF ou CNPJ aparece nos cartórios de registro de imóveis do estado escolhido.
A pesquisa roda em segundo plano: o POST devolve um protocolo e o GET busca o resultado por ele. Acompanhar não cobra de novo.
Achar o documento em uma matrícula não confirma propriedade atual. O resultado também diz quais cartórios responderam e quais têm acervo incompleto.
Testar no Postman, passo a passo
Você faz um pedido e depois busca o resultado pelo protocolo. A pesquisa continua rodando mesmo depois que a primeira resposta chega. Seu sistema pode fazer esse acompanhamento automaticamente.
1. Configure seu token
Use uma conta com acesso à API liberado e assinatura ativa. Crie um token em Meus tokens, com acesso à Pesquisa Prévia de Bens.
No Postman, abra Authorization → Bearer Token e cole o token. Use essa configuração em todas as requisições abaixo.
Primeiro envie GET https://api.oficialdata.com.br/v1/token. Uma resposta 200 confirma o acesso. Esse teste não cobra.
2. Confira o preço
Envie POST https://api.oficialdata.com.br/v1/orcamento/pesquisa-previa-bens.
Em Body → raw → JSON, informe os dados abaixo. Troque o documento de exemplo pelo CPF ou CNPJ que deseja pesquisar.
{
"cpf_cnpj": "12345678000190",
"uf": "SP",
"imovel_finalidade": 2
}
O orçamento não cobra. Confira data[0].disponivel e data[0].preco.total. Se estiver indisponível, leia motivo e campos_faltando antes de continuar.
Para cadastrar um CPF novo, inclua também finalidade com um texto que descreva o motivo real da pesquisa. Esse texto é diferente de imovel_finalidade, que informa a finalidade ao cartório.
3. Inicie a pesquisa — este passo cobra
Não precisa de script ou identificador extra no Postman. Mantenha o Bearer Token e envie os dados em Body → raw → JSON.
Envie POST https://api.oficialdata.com.br/v1/consultas/pesquisa-previa-bens com o mesmo JSON do orçamento.
Cada POST inicia uma nova consulta, mesmo com os mesmos dados. Se a resposta se perder, confira o histórico antes de reenviar. Recebeu o protocolo? Use o GET abaixo para acompanhar sem nova cobrança.
A resposta 202 significa que o pedido foi aceito. Dentro de data[0], você recebe:
{
"protocolo": "4713",
"estado": "processando",
"consultar_em": "/v1/consultas/4713",
"intervalo_consulta_segundos": 10
}
protocolo: guarde esse número para acompanhar o pedido.consultar_em: caminho que você deve usar no próximo GET.intervalo_consulta_segundos: quantos segundos aguardar antes do próximo GET. É uma orientação de espera, não um prazo garantido de entrega. Você não precisa reenviar esse campo.
4. Busque o resultado — sem nova cobrança
Depois do intervalo indicado, envie o GET abaixo com o mesmo token. Troque 4713 pelo protocolo recebido no passo 3. O GET não precisa de Body.
GET https://api.oficialdata.com.br/v1/consultas/4713 Authorization: Bearer SEU_TOKEN
code: 202: ainda está processando. Aguarde o novointervalo_consulta_segundose repita o GET no mesmo endereço.code: 200: o resultado está emdata[0]. Leia os campos da seção Resposta abaixo. Os comprovantes ficam emsite_receipts, na raiz do JSON.codeentre 600 e 699: a pesquisa terminou com uma falha ou restrição. Leiacode_messageeerrors. Esses códigos vêm no corpo, mesmo quando o HTTP é 200.
Não repita o POST para acompanhar. Cada GET apenas lê o pedido existente. Se header.billable vier true, ele informa a cobrança do pedido original; não representa outro desconto.
Guarde o endereço recebido em consultar_em. O protocolo dentro do resultado final é o protocolo do serviço de registro de imóveis e pode ser diferente do número usado para acompanhar a API.
Se provisorio ou cobertura.leitura_parcial vier true, a pesquisa tem limitações. A ausência de registros nessa resposta não confirma ausência de imóveis.
Se o Postman mostrar um erro
401: confira o token. 403: confira a liberação da conta, a assinatura e o acesso do token à pesquisa. 402: confira o saldo. 422: corrija os campos indicados em errors. 429: aguarde o tempo do cabeçalho Retry-After.
Você também pode importar o arquivo OpenAPI no Postman usando Import → Link. Depois, configure seu token e os dados da pesquisa.
Antes de começar
Cobrança, idempotência e leitura do resultado. Leia antes da primeira chamada.
Custa dinheiro se você ignorar 3
Como evitar pedidos duplicados
O POST inicia a pesquisa e desconta o valor do saldo. O GET apenas acompanha o pedido, sem nova cobrança.
Basta enviar token e dados. Cada POST inicia uma nova consulta. Se a resposta se perder, confira o histórico antes de reenviar.
Recebeu o protocolo? Acompanhe pelo GET. Não reenvie o CPF/CNPJ.
Cada estado tem um preço
Cada pedido pesquisa um estado. Para pesquisar em outro, faça um novo pedido, com cobrança separada.
Confira o valor no orçamento antes de iniciar. O preço é o emolumento do cartório mais a taxa do serviço, e o pedido não consome a cota do plano. Sem assinatura vale a taxa do canal API; com assinatura, a do seu plano: R$ 6, R$ 8 e R$ 10 no Essencial, R$ 4, R$ 5 e R$ 7 no Profissional e R$ 2,90, R$ 3,90 e R$ 4,90 do Escritório em diante. Acordos vigentes prevalecem.
O Maranhão está fora da venda: a origem devolve emolumento R$ 0,00, que é preço desconhecido, não gratuito.
Quando o resultado ainda é provisório
Se provisorio ou cobertura.retries_pendentes vier true, o serviço de registro de imóveis ainda tem respostas pendentes. Não trate esse resultado como nada consta definitivo, mesmo sem registros.
Se cobertura.leitura_parcial vier true, nem todos os dados da origem foram lidos. Marque o resultado como incompleto do seu lado.
Vale saber antes de integrar 3
Confira o documento pesquisado
Compare pesquisado_documento com o CPF/CNPJ enviado. pesquisado_nome mostra o nome retornado pela origem e pode ter diferenças de grafia.
Se nome_digitado_manualmente vier true, o nome foi informado no pedido e não serve como confirmação de identidade.
Quando a matrícula vem sem número
Item com matricula: null é ocorrência sem o número informado pelo cartório. Não descarte como se nada tivesse sido achado.
Para chegar ao número, contrate uma Pesquisa Qualificada à parte.
Informe o motivo correto da pesquisa
imovel_finalidade informa o motivo ao cartório. O padrão 2 significa investigação jurídica sobre o imóvel e sua titularidade. O valor 3 só se aplica quando o solicitante é titular de direito real sobre o imóvel.
finalidade é outro campo: um texto com o motivo da pesquisa, exigido para cadastrar um CPF novo. Ele não substitui imovel_finalidade.
Contexto 4
Encontrar uma matrícula não confirma propriedade atual
A pesquisa acha matrículas em que o documento aparece. A pessoa pode ser proprietária, ex-proprietária ou ter outra relação com o imóvel.
Por isso confianca vem sempre como INDICIO. Para confirmar titularidade, use a Pesquisa Qualificada.
A pesquisa pode levar alguns minutos
Os pedidos entram em fila. limites.teto_hora diz a capacidade; acima dela a espera cresce.
A resposta 202 traz o protocolo e intervalo_consulta_segundos. Espere esse intervalo e busque o resultado com GET — é orientação de espera, não prazo garantido.
Período dos registros
A busca alcança registros a partir de 01/01/1976. Registro anterior, em livro de transcrição, fica fora dessa pesquisa.
Comprovante da pesquisa
site_receipts traz os comprovantes da pesquisa, inclusive quando nada foi encontrado. Leia na raiz do JSON, fora de data.
Requisição
Autentique com token no cabeçalho. Parâmetro obrigatório ausente é recusado com
422, antes de qualquer cobrança.
cpf_cnpj
string
obrigatório
CPF (11 dígitos) ou CNPJ (14 dígitos) da pessoa ou empresa pesquisada. Aceita com ou sem pontuação.
uf
string(2)
obrigatório
Informe um estado por pedido, por exemplo SP. Cada estado pesquisado tem uma cobrança separada.
nome
string
opcional
Nome do alvo. **Obrigatório quando cpf_cnpj é um CPF** (a origem não aceita o pedido sem ele) — a chamada sem nome é recusada com 422, sem cobrança. Para CNPJ é opcional: usamos a razão social da Receita Federal. Volta na resposta como pesquisado_nome, para conferência.
imovel_finalidade
integer
opcional
Declaração AO CARTÓRIO, não preferência técnica. 1 = avaliação de crédito · 2 = investigação jurídica sobre o imóvel e sua titularidade (padrão) · 3 = o solicitante É titular de direito real. Ver a nota "Finalidade é declaração legal".
finalidade
string
opcional
Motivo da consulta, em texto livre. **Obrigatória (mínimo 10 caracteres) quando cpf_cnpj é um CPF que ainda não está no seu cadastro**: cadastrar uma pessoa física exige finalidade declarada, e a chamada sem ela é recusada com 422, sem cobrança. Para CNPJ, e para CPF já cadastrado, é opcional. Não confundir com imovel_finalidade, que é a declaração ao cartório.
Envie apenas o token e os dados. Cada POST inicia uma nova consulta, mesmo com dados iguais, com protocolo e cobrança próprios.
Use os exemplos no backend. Guarde o protocolo recebido e acompanhe por GET. Se a resposta do POST se perder, confira o histórico antes de reenviar: outro POST é outro pedido.
// Execute somente no backend (Node.js 22+). Configure o token no servidor.
// const pedido = await consultarOficialData(process.env.OFICIALDATA_TOKEN, dados);
// Guarde pedido.protocolo. Depois use acompanharOficialData(token, pedido.protocolo).
// Cada POST inicia uma nova consulta, mesmo com dados iguais.
// Resposta perdida: confira o histórico antes de reenviar; outro POST é outro pedido.
export async function consultarOficialData(token, dados = {"cpf_cnpj":"12345678000190","uf":"SP","nome":"EMPRESA EXEMPLO LTDA","imovel_finalidade":2}) {
const corpo = await enviar(token, "https://api.oficialdata.com.br/v1/consultas/pesquisa-previa-bens", dados);
const protocolo = corpo.data?.[0]?.protocolo;
if (corpo.code !== 202 || !protocolo) throw new Error(JSON.stringify(corpo));
return { protocolo: String(protocolo), resposta: corpo };
}
export async function acompanharOficialData(token, protocolo) {
if (!/^\d+$/.test(String(protocolo))) throw new Error('Informe o protocolo recebido.');
const corpo = await enviar(token, "https://api.oficialdata.com.br" + '/v1/consultas/' + encodeURIComponent(protocolo));
// code 202: aguarde intervalo_consulta_segundos e consulte novamente por GET.
// code 200/6xx: confira o resultado. Não repita o POST para acompanhar.
return { protocolo: String(protocolo), resposta: corpo };
}
async function enviar(token, url, dados) {
if (!token) throw new Error('Informe o token de acesso.');
const post = dados !== undefined;
const resposta = await fetch(url, {
method: post ? 'POST' : 'GET',
headers: {
Authorization: 'Bearer ' + token, Accept: 'application/json',
...(post && { 'Content-Type': 'application/json' }),
},
...(post && { body: JSON.stringify(dados) }),
signal: AbortSignal.timeout(30000),
});
const corpo = await resposta.json();
// Não repita POST automaticamente após timeout: o pedido pode ter sido aceito.
if (!resposta.ok) throw new Error('HTTP ' + resposta.status + ': ' + JSON.stringify(corpo));
return corpo;
}
A consulta aceita responde HTTP 202 com protocolo.
Acompanhe até a conclusão e confira o campo code do resultado.
Resposta
Dentro de data[]:
27 campos em 3 blocos.
Campo que a origem não informou volta null —
nunca 0 nem string vazia. Trate
null como dado ausente, não como zero.
data[]
object
Positiva quando houve achado, Negativa quando não houve.
true quando a busca terminou sem registros encontrados. Confira também as limitações de cobertura.
true quando ainda há respostas pendentes na origem. O resultado pode mudar.
Sempre INDICIO. A prévia não confirma titularidade.
Quantidade de ocorrências encontradas nas matrículas.
Protocolo do serviço de registro de imóveis. Pode ser diferente do protocolo de acompanhamento recebido no POST.
Quando a origem executou a busca.
UF efetivamente pesquisada.
Nome retornado pela origem. Confira junto com o documento.
CPF/CNPJ pesquisado, com pontuação. Compare com o documento enviado.
true quando a origem apenas repetiu o nome informado no pedido, sem confirmar a identidade.
Resumo em português do que aconteceu, pronto para exibir ao usuário final.
Links dos comprovantes oficiais. Ficam na raiz da resposta, fora de data.
imoveis[]
array
Matrículas em que o documento aparece. A lista não confirma que a pessoa seja proprietária atual.
Número da matrícula. null significa que o cartório não informou o número.
Nome do cartório onde o registro foi encontrado.
Código Nacional de Serventia do cartório.
Estado do cartório.
true quando o cartório informou que sua base de registros está incompleta.
true quando o cartório não respondeu nesta pesquisa.
cobertura
object
Informa o alcance da pesquisa e as limitações dos dados.
Quantidade de cartórios distintos que responderam à pesquisa.
Quantidade de linhas retornadas pela origem. Um cartório pode aparecer em várias linhas.
Campo antigo, igual a linhas_na_origem. Para contar cartórios, use cartorios_consultados.
Quantidade de cartórios que não responderam.
Quantidade de cartórios com base de registros incompleta.
true quando parte dos dados da origem não foi lida. Um resultado sem registros pode ser incompleto.
A origem ainda não fechou a busca.
Quantas retentativas a origem já fez.
Códigos de erro
O mesmo mapa que o motor usa em produção. Leia as colunas Estorna e Retenta antes de integrar: nem toda falha devolve o dinheiro.
| Classe | Códigos | Significa | Estorna | Retenta |
|---|---|---|---|---|
sucesso |
200 | A origem respondeu e entregou. | — | — |
nao_encontrado |
612 | A origem respondeu: nada consta para este alvo. | Não | Não |
indeterminado |
611 | A origem não conseguiu emitir pela internet. Não é irregularidade. | Não | Não |
erro_participante |
608 619 620 | A origem recusou os DADOS do pedido. | Não | Sim |
retry |
600 605 609 610 613 614 615 618 | Instabilidade momentânea da origem ou do transporte. | Sim | Sim |
fatal |
601 602 603 604 606 607 617 621 622 | Defeito de integração — nosso, não seu. | Sim | Não |
Estorno:
erro_participante é a única
classe que não devolve o dinheiro — nela a origem
respondeu recusando os dados do pedido. Corrija o alvo antes de repetir.
fatal é falha nossa e sempre estorna.
Permanentes: não retente 602 e 603. A fonte sai do ar na hora e a nossa equipe é avisada.
Preço por UF
Emolumento de cartório, fixado por lei estadual. Orce em
POST /v1/orcamento/pesquisa-previa-bens
antes de disparar em lote.
Mais barata
R$ 17,52
SP
Mediana
R$ 39,07
26 UFs vendáveis
Mais cara
R$ 132,29
RJ — 7,6× a mais barata
Estes são os preços da sua conta: emolumento do cartório, execução aplicável e taxa de serviço do canal API. Acordos vigentes prevalecem.
AC
35,15
AL
53,46
AM
59,38
AP
46,50
BA
49,48
CE
40,89
DF
22,80
ES
18,00
GO
48,34
MG
54,80
MS
26,80
MT
34,88
PA
42,95
PB
84,33
PE
48,95
PI
25,91
PR
48,59
RJ
132,29
RN
25,63
RO
23,61
RR
18,86
RS
74,40
SC
32,44
SE
34,33
SP
17,52
TO
37,24
Fora da venda: MA.
A origem devolve emolumento R$ 0,00 — preço desconhecido, não gratuito. O
orçamento responde disponivel: false
nessas UFs; não dispare o POST.
Como interpretar o orçamento
Motivo do preço, piso mínimo e situação da cota.
Leia data[0].preco.total para saber o valor previsto da consulta.
header.price é zero porque orçar não cobra.
preco.motivo é um slug estável para sua integração;
preco.justificativa é o texto para exibir ao usuário e pode evoluir.
coberto_pela_cota- A cota cobre a consulta, sem débito de saldo. A execução consumirá as unidades previstas.
fonte_gratuita- A regra de preço aplicada considera a fonte gratuita. Confira se o piso do canal permanece cobrado.
cortesia- Aplica-se uma cortesia comercial. Ela pode continuar sujeita ao piso mínimo da API.
cobranca_avulsa- Aplica-se o preço avulso da consulta no canal API.
preco_negociado- Aplica-se uma condição negociada para a conta.
preco_ao_custo- Aplica-se a condição de preço ao custo da conta, com o piso do canal quando indicado.
somente_emolumentos- A cota cobre o serviço; permanece o emolumento do cartório.
taxa_na_cota- A cota cobre o pedido com a taxa reduzida do plano; soma-se o emolumento do cartório.
taxa_do_plano- Aplica-se a taxa de cartório do plano, com a execução por nossa conta; soma-se o emolumento. O pedido não consome cota.
taxa_integrador- Aplica-se a taxa de cartório do plano Integrador; soma-se o emolumento do cartório.
emolumentos_e_servico- O valor inclui emolumentos do cartório e a cobrança pelo serviço.
Quando preco.piso_minimo_aplicado é true, o mínimo da API
permanece cobrado. Use sempre preco.total: cortesia, custo zero da origem
ou plano Gratuito não garantem uma consulta a R$ 0.
cota.status informa disponivel, esgotada,
insuficiente (restam unidades, mas não bastam para a operação),
fonte_fora_da_cota ou plano_sem_cota.
cota.restante é a quantidade livre agora; unidades_necessarias
é o peso da operação e unidades_previstas é o consumo previsto na execução.
Uma consulta gratuita por outra regra pode ter cota disponível e prever consumo zero.
cota.eixo identifica a franquia e cota.limite o limite do ciclo.
cota.origem distingue plano de trial.
cota.reservada é sempre false: o orçamento não reserva nem
consome unidades. Preço, cota e disponibilidade serão revalidados ao executar.
Se disponivel for false, leia o motivo_codigo
e a mensagem motivo da resposta. Nesse caso, preco.total,
preco.motivo, preco.justificativa e cota vêm
null. Preço desconhecido não significa gratuidade. Disponibilidade e preço
também não dispensam saldo ou os demais requisitos da execução.
Limites e desempenho
Números medidos em produção. "Não medido" é falta de amostra — nenhum valor aqui é estimativa.
Tempo típico
76s
p95
130s
Teto por hora
50
Timeout máximo
180s
De onde vem o tempo: cerca de 85% dos ~76s típicos é a origem varrendo os cartórios. Dimensione o seu timeout por esse número e não conte com redução.
Sobre o teto: a origem exige sessão única por conta, então os pedidos são serializados. É limite técnico, não cota comercial: acima dele a fila cresce e paralelizar do seu lado não acelera. Para volume maior, combine antes.
Versionamento
O contrato de resposta é v1,
e a versão viaja em header.api_version
em toda resposta.
- Campo novo opcional pode entrar a qualquer momento e não muda a versão. Seu parser precisa ignorar campo que não conhece.
- Remover campo, renomear campo ou mudar tipo é versão nova, publicada em paralelo, com prazo de desligamento anunciado da anterior.
- Nunca alteramos o significado de um campo existente mantendo o nome. Se o significado muda, o nome muda junto.
Vai integrar?
Diga o volume que você espera e em quais UFs. A ordem de liberação segue a demanda.