Confira o preço antes de iniciar a pesquisa. Envie POST /v1/orcamento/car-demonstrativo com os dados que deseja pesquisar. O orçamento informa o valor e a disponibilidade, sem cobrar.

Documentação

Sistema Nacional de Cadastro Ambiental Rural (SICAR)

CAR — demonstrativo (Reserva Legal e APP)

Reserva Legal, APP, uso restrito, cobertura do solo e passivo ambiental declarados no CAR, pelo número do CAR.

Site oficial da fonte ↗
Beta
POST /v1/consultas/car-demonstrativo v1

Tempo típico

não medido

Preço

R$ 2,99

por consulta

Visão geral

Responde "a Reserva Legal deste imóvel está regular e quanto há de APP": a pergunta que trava compra de fazenda, crédito rural e due diligence ambiental.

Traz situação e condição do cadastro, áreas de Reserva Legal (declarada, proposta, averbada), APP, uso restrito, cobertura do solo e o passivo ou excedente de Reserva Legal.

Leitura do demonstrativo público do SICAR. O preço cobre a operação e o arquivamento.

Antes de começar

Cobrança, idempotência e leitura do resultado. Leia antes da primeira chamada.

Custa dinheiro se você ignorar 1

A busca é pelo número do CAR, nunca pelo CPF/CNPJ

Sem o número do CAR (recibo de inscrição) não há como localizar o imóvel; a consulta sem car não é executada nem cobrada.

Vale saber antes de integrar 2

Tempo: a origem exige reCAPTCHA

Cada consulta resolve um reCAPTCHA no site do SICAR antes de ler o demonstrativo. Na medição de 20/10/2026 o desafio levou 95 s; o PDF oficial pede um segundo desafio e ~20 s de geração. Conte com 1 a 3 minutos. A chamada é assíncrona: acompanhe pelo protocolo ou pelo webhook.

Números declarados, não laudo

As áreas são as que o SICAR publica para o cadastro, sem soma ou derivação nossa. Enquanto a condição for "Aguardando análise", são declaração do proprietário, não aprovação do órgão.

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 ou CNPJ a quem a consulta fica associada no seu cadastro (o titular ou o interessado). Não é enviado ao SICAR.

car string obrigatório

Número de inscrição do imóvel no CAR, como no recibo do SICAR. Com ou sem os pontos.

finalidade string opcional

Obrigatória (mínimo 10 caracteres) quando cpf_cnpj é um CPF que ainda não está no seu cadastro.

Nova consulta e acompanhamento

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","car":"MG-3103405-4266.D811.310B.4471.B6F1.8330.051D.1255"}) {
  const corpo = await enviar(token, "https://api.oficialdata.com.br/v1/consultas/car-demonstrativo", 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[]: 15 campos em 3 blocos.

15

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
4 campos
status_consulta string

SUCESSO ou NAO_ENCONTRADO.

mensagem string

Frase descritiva, nunca veredito de regularidade.

documento_url string

PDF oficial do SICAR ("Demonstrativo da Situação das Informações Declaradas no CAR"). Se a origem não o gerar, é o comprovante da OficialData (comprovante_sintetico: true).

consultado_em datetime

Quando consultamos a origem, em ISO-8601.

identificadores object
1 campos
identificadores.car string

Número do CAR consultado.

dados object
10 campos
dados.situacao string

Situação do cadastro (Ativo, Pendente, Suspenso, Cancelado).

dados.condicao_cadastro string

Fase da análise pelo órgão estadual.

dados.area number

Área do imóvel, em hectares.

APP, em hectares.

dados.area_uso_restrito number

Área de uso restrito, em hectares.

Área sobreposta a terra indígena, em hectares. Também sobreposicao_unidade_conservacao, sobreposicao_assentamento e sobreposicao_outros_imoveis.

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

Preço único por consulta pelo canal API. Confira o orçamento em POST /v1/orcamento/car-demonstrativo antes de disparar em lote.

R$ 2,99

por consulta

Este é o preço da sua conta pelo canal API. Acordos vigentes prevalecem.

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

não medido

p95

não medido

Teto por hora

—

Timeout máximo

—

De onde vem o tempo: cerca de 85% dos ~s 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.

Falar com a gente →