Confira o preço antes de iniciar a pesquisa. Envie POST /v1/orcamento/car-imovel com os dados que deseja pesquisar. O orçamento informa o valor e a disponibilidade, sem cobrar.
Sistema Nacional de Cadastro Ambiental Rural (SICAR)
CAR — dados e polígono do imóvel
Situação, condição, área, município e o polígono do imóvel no Cadastro Ambiental Rural, pelo número do CAR.
Site oficial da fonte ↗/v1/consultas/car-imovel
v1
Tempo típico
não medido
Preço
R$ 2,99
por consulta
Visão geral
Responde "este CAR existe, em que situação está e onde fica o imóvel": situação do cadastro (ativo, pendente, suspenso, cancelado), condição da análise, área em hectares, módulos fiscais, município e UF.
Devolve também o polígono do imóvel em GeoJSON (SIRGAS 2000), pronto para mapa ou cruzamento geográfico.
Leitura direta da base pública 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
A base pública do SICAR não tem titular, CPF nem 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 1
Situação do cadastro não é regularidade ambiental
"Ativo" diz que o cadastro existe e está vigente. Reserva Legal, APP e passivo ambiental estão no demonstrativo do CAR, que é outra consulta.
Contexto 1
Não é certidão
O SICAR não emite documento por esta via. O que volta é a leitura estruturada da base pública, com a data em que foi feita, e um comprovante nosso da consulta.
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: a base pública não tem titular.
car
string
obrigatório
Número de inscrição do imóvel no CAR, como no recibo do SICAR (UF-código do município-código do imóvel). 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.
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-imovel", 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.
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
SUCESSO ou NAO_ENCONTRADO (número que não existe no SICAR).
Polígono GeoJSON (MultiPolygon, SIRGAS 2000 / EPSG:4674). Ausente em imóvel com mais de 5.000 vértices.
Frase pronta para tela e laudo.
Quando consultamos a origem, em ISO-8601.
identificadores
object
Número do CAR como o SICAR o guarda, sem pontos.
dados
object
Situação do cadastro: Ativo, Pendente, Suspenso ou Cancelado. É do CADASTRO, não regularidade ambiental do titular.
Fase da análise pelo órgão estadual (ex.: "Aguardando análise").
Área declarada, em hectares.
Área em módulos fiscais do município.
Imóvel Rural, Assentamento de Reforma Agrária ou Território de Povos e Comunidades Tradicionais.
Município do imóvel.
UF do imóvel.
Data de criação do registro no SICAR (dd/mm/aaaa).
Data da última atualização no SICAR (dd/mm/aaaa).
Quantidade de vértices do polígono.
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-imovel
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.