OficialData · API v1 · Guia de integração

A cadeia do registro de imóveis, por API

Três chamadas que respondem, em sequência, as três perguntas de uma diligência imobiliária: onde essa pessoa tem imóvel, o que está escrito na matrícula e como provar isso com fé pública.

Base URL
api.oficialdata.com.br
Autenticação
Bearer, escopo por fonte
Cobertura
3.567 cartórios · 26 UFs
Preço
Emolumento + taxa desde R$ 9,90

A cadeia

As três APIs funcionam isoladas, mas foram desenhadas para encadear. A Pesquisa Prévia devolve exatamente os quatro campos que as outras duas exigem como entrada — matrícula, cartório, município e UF.

Qual das duas últimas pedir

O conteúdo é o mesmo. A diferença é jurídica: a visualização serve para decidir (due diligence, triagem, análise interna); a certidão serve para provar — instruir processo, registrar ato, fechar financiamento. Se o seu caso não vai a juízo nem a cartório, compare o preço e o prazo cotados para cada serviço antes de confirmar.

A prévia responde indício, não titularidade. Ela diz que o documento aparece na matrícula — pode ser proprietário atual, ex-proprietário, cônjuge que deu anuência, credor hipotecário ou herdeiro. Quem confirma quem é dono hoje é a matrícula ou a certidão.

Antes de começar

01

Criar a conta

Cadastro público em oficialdata.com.br/cadastro. Não precisa de convite. A conta é grátis. O formulário no painel permite solicitar 7 dias de trial do plano Comercial, concedidos após aprovação administrativa, sem bônus de saldo.

Acesso e saldo para integrar

O acesso à API depende só da liberação da conta pela nossa equipe — sem plano obrigatório e sem depósito mínimo. O saldo é pré-pago, consumido nas próprias consultas, a partir de R$ 0,30 cada; quem assina usa primeiro as consultas do plano, sem pagar. O trial não concede saldo para consultas: adicione saldo antes de executar pedidos pagos. Pesquisa prévia, visualização e inteiro teor têm taxas fixas, mais emolumentos e execução aplicável; dentro da cota do plano, a taxa é reduzida.

02

Pôr saldo

O saldo é pré-pago, em reais, e cada consulta debita dele na aceitação. Recarga em /app/saldo, por Pix ou cartão. Sem saldo, o endpoint responde 402 dizendo quanto falta — e não cria pedido nem cobra nada.

03

Emitir o token

Em /app/apis/tokens, com a conta do titular. Escolha os escopos das APIs que vai usar; o segredo aparece uma única vez. Até 20 tokens por conta, validade máxima de 365 dias.

APIEscopo
Pesquisa Prévia de Bensconsultas:pesquisa-previa-bens
Visualização de Matrículaconsultas:visualizacao-matricula
Certidão de Inteiro Teorconsultas:certidao-inteiro-teor

Um token só abre as fontes cujos escopos ele carrega. Token sem o escopo da rota recebe 403 — inclusive ao consultar o resultado ou baixar o documento daquela consulta.

Autenticação

Todo endpoint pede o token no cabeçalho padrão:

Authorization: Bearer od_SEU_TOKEN_AQUI

Confira as credenciais antes de escrever qualquer integração — essa chamada é grátis e não toca em nenhuma origem:

# Quem sou eu, o que posso, até quando
curl https://api.oficialdata.com.br/v1/token \
  -H "Authorization: Bearer od_SEU_TOKEN"

Resposta:

{
  "code": 200,
  "header": { "billable": false, "price": 0.0, "api_version": "v1",
               "request_id": "9f2c…" },
  "data": [{
    "conta": "Parceiro Integrador LTDA",
    "escopos": ["consultas:pesquisa-previa-bens", …],
    "expira_em": "2027-09-01T00:00:00-03:00"
  }]
}
request_id

Toda resposta traz header.request_id, e ele também vem no cabeçalho HTTP Request-Id. Guarde-o no seu log: é o número que resolve um chamado em minutos em vez de horas.

Localizar a serventia antes de pedir documento de imóvel

A outra rota que não cobra. As consultas do registro de imóveis são endereçadas à serventia, e errar o cartório não é retrabalho: o emolumento é do cartório e não estorna. Use GET /v1/cartorios para achar a serventia e copiar os campos do pedido — ela lê só o nosso catálogo medido, sem falar com o cartório.

# Por cidade (uf obrigatório), por CNS, por CNM ou por parte do nome
curl "https://api.oficialdata.com.br/v1/cartorios?uf=RJ&municipio=niteroi" \
  -H "Authorization: Bearer od_SEU_TOKEN"

Resposta:

{
  "code": 200,
  "header": { "billable": false, "price": 0.0, "api_version": "v1" },
  "data": [{
    "medido_em": "2026-10-29",
    "cartorios": [{
      "nome": "2º Registro de Imóveis de Niterói",
      "cns": "062661",
      "params_pedido": {
        "imovel_cartorio": "2",
        "imovel_municipio": "NITERÓI - 2º REGISTRO DE IMÓVEIS DA 1º CIRCUNSCRIÇÃO",
        "imovel_uf": "RJ"
      }
    }, …]
  }]
}
params_pedido

Copie o bloco inteiro no POST da consulta. O imovel_municipio é a grafia exata da opção do portal, e é ela que separa serventias de mesmo número — em Niterói existem dois “2º RI”. Serventia sem número de ordem publicado vem com motivo e sem params_pedido: não há pedido a montar para ela, e nós não inventamos um 1.

Filtros: uf + municipio, uf + termo (parte do nome), cns (busca nacional, ignora uf) ou matricula com um CNM completo — o CNM carrega o CNS do cartório, e um número de matrícula solto não identifica serventia nenhuma. servico aceita matricula ou certidao; a cobertura das duas difere.

O fluxo, passo a passo

Toda consulta paga segue o mesmo desenho: orçar, pedir, acompanhar, baixar. Os passos 1 e 4 não cobram.

01

Orçar — quanto custa, e sai mesmo?

Envie os mesmos dados que pretende consultar. O orçamento informa o preço previsto para a conta e o alvo, explica a cobrança e mostra a situação da cota. Não executa, não cobra e não reserva cota.

curl -X POST https://api.oficialdata.com.br/v1/orcamento/pesquisa-previa-bens \
  -H "Authorization: Bearer od_SEU_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "cpf_cnpj": "19131243000197", "uf": "SP" }'
{
  "code": 200,
  "header": { "billable": false, "price": 0.0 },
  "data": [{
    "disponivel": true,
    "motivo": null,
    "campos_faltando": [],
    "preco": {
      "total": 17.52,
      "moeda": "BRL",
      "estimado": true,
      "desconto_plano_percentual": 0,
      "motivo": "emolumentos_e_servico",
      "justificativa": "O valor inclui os emolumentos do cartório e a cobrança pelo serviço. O plano não possui cota para esta consulta. O orçamento não reserva cota; preço e disponibilidade serão revalidados na execução.",
      "piso_minimo_aplicado": false
    },
    "cota": {
      "status": "plano_sem_cota",
      "eixo": "consultas",
      "limite": 0,
      "restante": 0,
      "unidades_necessarias": 1,
      "unidades_previstas": 0,
      "origem": "plano",
      "reservada": false
    },
    "limites": { "latencia_p50_s": 72, "teto_hora": 50 }
  }]
}

Quando não dá para vender, a resposta continua 200 — disponivel: false, com motivo em português e campos_faltando nomeando o que faltou. O status HTTP fala de transporte; o desfecho do negócio vive no corpo. O exemplo acima ilustra uma conta sem cota e mostra um recorte da resposta.

Como interpretar o preço e a 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.

02

Pedir — aqui o dinheiro sai

Envie seu token e os dados para iniciar uma nova consulta; você não precisa criar nem enviar outra chave. A resposta é 202 com um protocolo: a consulta roda na fila, e segurar a conexão até a origem responder é o que cria pedido órfão pago quando o seu HTTP desiste.

Use os exemplos de backend abaixo: envie os dados, guarde o protocolo recebido e acompanhe por GET.

{
  "code": 202,
  "header": { "billable": true, "price": 17.52 },
  "data": [{
    "protocolo": "4713",
    "estado": "processando",
    "consultar_em": "/v1/consultas/4713",
    "intervalo_consulta_segundos": 72,
    "escada_polling_s": [72, 30, 60, 120]
  }]
}

header.billable já vem true: o saldo caiu na aceitação. Não some o preço de novo quando o resultado chegar.

Parâmetros por API

CampoTipoPréviaMatrículaCertidãoObservação
cpf_cnpjstringobrig.obrig.obrig.Com ou sem máscara
ufstring(2)obrig.——Uma UF por chamada
nomestringopcional——Ajuda a desambiguar
imovel_finalidadeintegeropcional——Padrão 2
imovel_matriculastring—obrig.obrig.Número da matrícula ou CNM
imovel_cartoriointeger—obrig.obrig.1 = 1º RI
imovel_municipiostring—obrig.obrig.Do cartório, não do imóvel
imovel_ufstring(2)—obrig.obrig.Do cartório
imovel_finalidadeinteger—opcional—Padrão 2
finalidade é declaração legal

O campo é declarado ao cartório, em nome de quem pede — não é filtro nem 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 sobre o imóvel.

Diligência sobre imóvel de terceiro não é titularidade. Mandar 3 ali é declaração falsa feita em nome do seu cliente. Na dúvida, omita: o padrão é 2.

03

Acompanhar

Não cobra e não fala com a origem — lê o que o motor já escreveu. Pode consultar à vontade, respeitando o limite de requisições.

curl https://api.oficialdata.com.br/v1/consultas/4713 \
  -H "Authorization: Bearer od_SEU_TOKEN"

Três desfechos possíveis, distinguidos pelo code:

codeSignificaO que fazer
202estado: "processando" — ainda rodandoAguardar intervalo_consulta_segundos segundos e repetir o GET no mesmo protocolo, sem nova cobrança
202estado: "em_emissao" — protocolado no cartório, documento a caminhoIdem. Vem com numero_pedido e previsao_entrega_em
200Terminou, com o resultadoLer os dados; baixar o documento, se houver
6xxTerminou sem entregarVer a tabela de códigos
Não pare no primeiro 202 com estado em_emissao

A certidão de inteiro teor sempre passa por esse estado — o cartório leva cerca de 4 horas úteis (expediente 9h–16h, seg–sex). O 200 com o documento chega depois. Quem trata em_emissao como desfecho final paga a certidão e nunca a recebe.

Guarde numero_pedido do seu lado assim que ele aparecer. É o protocolo no cartório, e para a certidão não existe rota de recuperação: perder o número é perder o documento e o emolumento.

Exemplo de 200 concluído — os campos vêm na raiz de data[0]:

{
  "code": 200,
  "header": { "billable": true, "price": 97.36 },
  "data": [{
    "status_consulta": "SUCESSO",
    "status": "Emitida",
    "identificadores": { "numero_pedido": "CT030158741" },
    "certidao_codigo": "1234-5678-9012",
    "documento_url": "https://api.oficialdata.com.br/v1/consultas/4713/documento",
    "mensagem": "Certidão emitida com fé pública…"
  }],
  "site_receipts": ["https://origem/…"]
}
04

Baixar o documento

Não cobra. Baixar de novo o que já foi pago não é uma segunda consulta.

curl -L https://api.oficialdata.com.br/v1/consultas/4713/documento \
  -H "Authorization: Bearer od_SEU_TOKEN" \
  -o certidao.pdf
Use documento_url, nunca site_receipts

site_receipts[] é a URL na origem, e ela expira em cerca de 7 dias — está ali para auditoria. documento_url aponta para o nosso arquivo, autentica com o mesmo Bearer e não expira. Guardar o link errado transforma todo documento pago em link morto na semana seguinte.

Nova consulta e acompanhamento

Todas as consultas: basta enviar o token e os dados. Cada POST inicia uma nova consulta, mesmo com dados iguais, com protocolo e cobrança próprios. Não há reaproveitamento automático por CPF/CNPJ ou imóvel.

O protocolo identifica o pedido aceito. As travas internas protegem seu processamento. Use GET para acompanhar esse pedido sem iniciar outra consulta.

Repetir custa dinheiro de verdade

Um pedido novo de cartório protocola um ato e debita o emolumento. Não existe estorno do ato já praticado. Outro POST é outro pedido.

Exemplo: o ERP envia um POST, recebe o protocolo e acompanha por GET. Se precisar consultar novamente o mesmo alvo, envia outro POST e recebe outro protocolo.

Guarde o protocolo no seu sistema. O token fica somente no backend; estes exemplos não são para rodar no navegador.

Node.js — token, dados e acompanhamento
// 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;
}
PHP/Laravel — token, dados e acompanhamento
<?php

// Salve como oficialdata.php no backend Laravel. Configure o token no servidor.
// $consultar = require base_path('oficialdata.php');
// $pedido = $consultar(config('services.oficialdata.token'), $dados);
// Guarde $pedido['protocolo']; acompanhe com $consultar($token, null, $protocolo).
// Cada POST inicia uma nova consulta, mesmo com dados iguais.
// Resposta perdida: confira o histórico antes de reenviar; outro POST é outro pedido.
use Illuminate\Support\Facades\Http;

return function (string $token, ?array $dados = null, ?string $protocolo = null): array {
    if ($token === '') {
        throw new RuntimeException('Informe o token de acesso.');
    }
    $http = Http::withToken($token)->acceptJson()->timeout(30);
    if ($protocolo !== null) {
        if (! ctype_digit($protocolo)) {
            throw new RuntimeException('Informe o protocolo recebido.');
        }
        $resposta = $http->get("https://api.oficialdata.com.br".'/v1/consultas/'.rawurlencode($protocolo));
    } else {
        $dados ??= json_decode('{"cpf_cnpj":"12345678000190","uf":"SP","nome":"EMPRESA EXEMPLO LTDA","imovel_finalidade":2}', true, flags: JSON_THROW_ON_ERROR);
        $resposta = $http->post("https://api.oficialdata.com.br/v1/consultas/pesquisa-previa-bens", $dados);
    }
    // Não repita POST automaticamente após timeout: o pedido pode ter sido aceito.
    $resposta->throw();
    $corpo = $resposta->json();
    if ($protocolo === null) {
        $protocolo = $corpo['data'][0]['protocolo'] ?? null;
        if (($corpo['code'] ?? null) !== 202 || ! $protocolo) {
            throw new RuntimeException(json_encode($corpo, JSON_THROW_ON_ERROR));
        }
    }

    // code 202: aguarde intervalo_consulta_segundos e faça GET; code 200/6xx: leia o resultado.
    return ['protocolo' => (string) $protocolo, 'resposta' => $corpo];
};
  • POST → nova consulta, mesmo com dados iguais, sujeita a nova cobrança.
  • GET com protocolo → acompanha o pedido existente, sem nova consulta ou cobrança.
  • Se a resposta do POST se perder, confira o histórico antes de reenviar.
Cuidado com o retry automático da sua biblioteca HTTP

Um timeout de rede do seu lado não significa que o pedido não foi protocolado do nosso — significa apenas que você não viu a resposta. Confira o histórico antes de reenviar.

Preços

Fora da cota, a taxa é fixa por pedido: R$ 9,90 na Pesquisa Prévia, R$ 14,90 na Visualização e R$ 19,90 no Inteiro Teor. Some o emolumento e o custo de execução aplicável. Pedidos de cartório não consomem a cota do plano: com assinatura, paga-se o emolumento mais a taxa do seu plano, sem custo de execução — 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 (pesquisa prévia, visualização e inteiro teor). Não há faixas de volume. Acordos vigentes podem alterar o orçamento da conta. Orçamento e acompanhamento não cobram novamente. O emolumento é fixado por lei estadual, e é por isso que a mesma consulta custa 16× mais no Rio de Janeiro que em São Paulo.

Documentos do imóvel

ConsultaReferênciaVaria com
Visualização de MatrículaR$ 38,46Tabela do cartório
Certidão de Inteiro TeorR$ 97,36Tabela do cartório

Valores medidos no 1º RI de Taquaritinga/SP. Cada serventia tem a sua tabela — sempre orce antes.

Pesquisa Prévia, por estado

SP17,52
ES18,00
RR18,86
DF22,80
RO23,61
RN25,63
PI25,91
MS26,80
SC32,44
SE34,33
MT34,88
AC35,15
TO37,24
CE40,89
PA42,95
AP46,50
GO48,34
PR48,59
PE48,95
BA49,48
AL53,46
MG54,80
AM59,38
RS74,40
PB84,33
RJ132,29
Uma UF por chamada

A origem busca por estado, não nacionalmente. Varredura Brasil inteiro são 26 chamadas e 26 cobranças — de R$ 17,52 a R$ 132,29 cada. Não existe parâmetro que faça isso numa só.

O Maranhão está fora: a origem devolve emolumento R$ 0,00 — preço desconhecido, não gratuito. O orçamento responde disponivel: false nessa UF.

Códigos e dinheiro

O status HTTP fala de transporte. O desfecho do negócio vive em code, no corpo — inclusive quando a resposta HTTP é 200. Assim 404 de rota errada nunca se confunde com "nada consta".

Transporte

HTTPQuandoO que fazer
401Token ausente, inválido, expirado ou revogadoConferir com GET /v1/token
403Token sem o escopo daquela fonteEmitir token com o escopo certo
402Saldo insuficienteRecarregar. Nada foi cobrado
422Payload inválido, ou chave de idempotência reusada com corpo diferenteLer errors[]. Nada foi cobrado
429Limite de requisiçõesEsperar o Retry-After

Resultado da consulta

Chegam com HTTP 200. A coluna que importa para a sua conciliação é a última.

codeClasseSignificaCobrado
200sucessoConsulta concluídaSim
612nada constaProcurou e não achou ocorrênciaSim
611indeterminadoA origem não conseguiu concluir por dados insuficientesSim
608 · 619 · 620erro do alvoA origem respondeu recusando o alvoSim
600 · 605 · 609 · 610 · 613 · 614 · 615 · 618transitórioOrigem instável ou fora do arNão — estornado
601 · 602 · 603 · 604 · 606 · 607 · 617 · 621 · 622fatalFalha conclusivaNão — estornado
612 é resposta, não falha

"Nada consta" é trabalho feito: o cartório foi consultado e respondeu que não há ocorrência. Ele é cobrado, e vem com comprovante — que é justamente a peça que sustenta um laudo de ausência de bens. Não trate 612 como erro na sua integração.

Todo desfecho declara header.billable e header.price, inclusive as falhas. Concilie por esses dois campos, nunca pelo status HTTP.

Webhook — Em breve

O webhook ainda não está disponível. Acompanhe a conclusão pelo protocolo em GET /v1/consultas/{protocolo}, respeitando o intervalo indicado na resposta.

Limites

LimiteValorComportamento
Requisições por token60 / min429 com Retry-After
Requisições por conta (todos os tokens somados)120 / min429 com Retry-After
Consultas em andamento por conta5429 com Retry-After, nada cobrado
Consultas em andamento, total da API15429 com Retry-After, nada cobrado
Pesquisa Prévia, por conta~50 / horaAtendidas em ordem, uma por vez
Tokens vivos por conta20Revogue os que não usa
Validade do token365 diasMáximo por emissão
Sobre os ~50 por hora

É limite físico, não cota comercial: a sessão do portal do registro é única por conta, e dois pedidos simultâneos se atropelariam no meio de um ato pago. Por isso as chamadas passam enfileiradas, uma a uma.

Por isso a API aceita até 5 consultas em andamento por conta. A partir daí responde 429 com Retry-After, sem cobrar e sem criar protocolo: espere uma concluir e repita os mesmos dados — essa recusa não fica gravada como resposta do pedido. Para lotes grandes, envie em ondas de 5. Se o seu volume for maior de forma sustentada, fale conosco antes de contratar: ampliar a capacidade é operacional do nosso lado e não muda uma linha da sua integração.

Armadilhas

Erros de leitura que custam caro, em ordem de quanto já custaram.

Tratar em_emissao como desfecho

É o mais caro da lista. A certidão fecha o pedido em 202 · em_emissao e entrega horas depois. Pare de acompanhar aí e você pagou ~R$ 85 por um documento que não buscou.

Guardar a URL de site_receipts

Expira em ~7 dias. A entrega é documento_url, que não expira.

Ler matricula: null como "não tem imóvel"

Na Pesquisa Prévia, um item de imoveis[] com matricula: null significa que o cartório devolveu "matrícula não informada". O imóvel existe e o documento consta nele — o que falta é o número.

Ler "nada consta" sem olhar a cobertura

A resposta traz um bloco cobertura com quantos cartórios responderam, quantos estavam fora do ar e se a busca fechou. nada_consta só vem true quando a busca fechou sem achado. Com cobertura.retries_pendentes: true ou cobertura.leitura_parcial: true, um "não achamos" não cobre o estado inteiro — e não sustenta laudo.

Confiar em nome_digitado_manualmente como prova de identidade

A origem repete no resultado o nome que foi enviado no pedido, sem conferi-lo contra o documento. A única chave da busca é o CPF/CNPJ. Compare pesquisado_documento programaticamente antes de arquivar: divergência de um dígito invalida a busca inteira.

Esperar registros anteriores a 1976

A busca alcança registros a partir de 01/01/1976. O que é anterior está em livro de transcrição, fora da base indexada, e não aparece por nenhum parâmetro.

Mandar o município do imóvel

imovel_municipio é o do cartório. Um imóvel em Fernando Prestes pode estar registrado em Taquaritinga — e é Taquaritinga que vai no campo. Se você não sabe qual é, a Pesquisa Prévia devolve exatamente esse dado.

Checklist antes de ir para produção

  • GET /v1/token responde 200 com os escopos que você espera.
  • Retry automático desligado nos POST /v1/consultas/*.
  • Em caso de timeout do POST, conferir histórico antes de reenviar; depois do protocolo, acompanhamento por GET.
  • Você orça antes de pedir, e mostra o preço a quem decide.
  • O acompanhamento continua enquanto code for 202 — incluindo em_emissao.
  • numero_pedido gravado do seu lado assim que aparece.
  • Você guarda documento_url, não site_receipts.
  • Conciliação por header.billable e header.price, não por status HTTP.
  • 612 tratado como resposta válida, com comprovante.
  • request_id no seu log, em toda chamada.
  • Alerta interno para 402: saldo acabando interrompe a operação inteira.

OficialData · API v1 · Documento de integração para parceiros. Preços conferidos em 01/11/2026 e sujeitos a alteração das tabelas de emolumento estaduais — o orçamento é sempre a fonte da verdade. Dúvidas: cite o request_id da chamada.