API de Pesquisas veiculares
As mesmas pesquisas do painel da CredPro, por placa, a preço de atacado: gravame, roubo e furto, leilão com score e fotos, sinistro, Renajud e multas, recall, base estadual e nacional, check list, histórico de proprietários e a Pesquisa Completa. Resultado em JSON e em PDF.
GET/v1/pesquisas/itens
POST/v1/pesquisas
GET/v1/pesquisas/{id}
GET/v1/pesquisas/{id}/pdf
🧾 Catálogo e preços — GET /v1/pesquisas/itens
Lista os itens disponíveis com o preço que será cobrado (atacado). Consulte antes de montar o pedido: o catálogo cresce e os preços podem mudar — este endpoint é a fonte da verdade. Cada item diz se exige placa ou um campo extra (renavam, documento).
GET /v1/pesquisas/itens
Authorization: Bearer SUA_CHAVE_AQUI
{
"itens": [
{"codigo": "gravame", "nome": "Gravame", "preco": 3.00, "campos_extras": [], "placa_obrigatoria": true, "inclui": null,
"descricao": "Verifica se o veículo possui financiamento ativo ou alienação fiduciária"},
{"codigo": "leilao_completo", "nome": "Leilão Completo + Score + Sinistro", "preco": 11.00, "campos_extras": [], "placa_obrigatoria": true, "inclui": null, "descricao": "..."},
{"codigo": "veiculos_cpf", "nome": "Veículos por CPF/CNPJ", "preco": 5.80, "campos_extras": ["documento"], "placa_obrigatoria": false, "inclui": null, "descricao": "..."},
{"codigo": "pesquisa_completa", "nome": "Pesquisa Completa", "preco": 40.00, "campos_extras": [], "placa_obrigatoria": true,
"inclui": ["bin_estadual", "bin_nacional", "gravame", "roubo_furto", "leilao_completo", "foto_leilao", "sinistro", "renajud", "recall", "check_list", "historico_proprietarios"],
"descricao": "Tudo numa consulta: ..."}
],
"saldo_reais": 132.48,
"sandbox": false
}
| Código | O que traz | Exige | Preço (atacado) |
|---|---|---|---|
placa_basica | Marca, modelo, ano, cor, combustível, chassi, motor, RENAVAM | placa | R$ 2,50 |
gravame | Financiamento ativo / alienação fiduciária: financeira, contrato, datas | placa | R$ 3,00 |
roubo_furto | Histórico de roubo e furto com ocorrências | placa | R$ 5,00 |
bin_nacional | Base nacional: cadastro, situação, restrições, faturado, proprietário | placa | R$ 2,00 |
bin_estadual | Base estadual: débitos de IPVA/multas/licenciamento/DPVAT, financiamento, restrições, proprietário | placa | R$ 2,00 |
leilao | Passagem por leilão com lote, data, leiloeiro, comitente e score de dano | placa | R$ 5,50 |
leilao_completo | Leilão completo + score + aceitação de seguro + indício de sinistro | placa | R$ 11,00 |
foto_leilao | Fotos do veículo registradas no leilão (base64) | placa | R$ 14,40 |
sinistro | Indício de sinistro (perda parcial ou total) em base de seguradoras | placa | R$ 3,30 |
renajud | Restrições judiciais + base nacional + multas Renainf + CSV numa resposta só | placa | R$ 4,10 |
renainf | Todas as infrações do RENAINF: auto, data, órgão, descrição, valor | placa | R$ 4,15 |
recall | Campanhas de recall pendentes | placa | R$ 0,90 |
certificado | Certificado de segurança veicular: BIN + Renajud + proprietário + CSV + Renainf | placa | R$ 5,50 |
check_list | 19 verificações: ex-táxi, locadora, frota, viatura, acidentes, salvados, indenização integral, chassi adulterado, uso em crimes… | placa | R$ 3,30 |
proprietario_atual | Nome e CPF/CNPJ do proprietário atual + dados do veículo | placa | R$ 0,90 |
historico_proprietarios | Todas as transferências: data, nome, documento (CPF mascarado pela fonte, CNPJ completo), município/UF | placa | R$ 6,00 |
veiculos_cpf | Frota vinculada a um CPF ou CNPJ: placa, marca, modelo, RENAVAM | documento (a placa é opcional) | R$ 5,80 |
atpv_e | 2ª via da ATPV-e em PDF (dentro de dados.aux, base64) | placa + renavam | R$ 2,65 |
pesquisa_completa | Bundle com 11 itens (veja inclui); as fotos do leilão só são consultadas quando o leilão apontou passagem | placa | R$ 40,00 |
GET /v1/pesquisas/itens. Pesquisas são cobradas do mesmo saldo em reais das outras APIs.🚀 Criar pesquisa — POST /v1/pesquisas
Uma placa, um ou mais itens. A soma dos itens é debitada na hora e a pesquisa entra em processamento (202): os fornecedores respondem em segundos, alguns em até ~2 minutos. Acompanhe em GET /v1/pesquisas/{id}.
POST /v1/pesquisas
Authorization: Bearer SUA_CHAVE_AQUI
Content-Type: application/json
{
"placa": "ABC1D23",
"itens": ["gravame", "roubo_furto", "leilao_completo"]
}
HTTP 202
{
"pesquisa_id": 1842,
"status": "processando",
"placa": "ABC1D23",
"itens": ["gravame", "roubo_furto", "leilao_completo"],
"valor_cobrado": 19.00,
"saldo_reais": 113.48,
"consulte_em": "/v1/pesquisas/1842",
"sandbox": false
}
| Campo | Tipo | Obrigatório | Observação |
|---|---|---|---|
placa | string | sim* | ABC1234 ou ABC1D23. *Dispensada só quando todos os itens são por documento (veiculos_cpf). |
itens | lista de códigos | sim | Códigos de GET /v1/pesquisas/itens. Repetidos são ignorados. |
renavam | string | se o item exigir | 9 a 11 dígitos (atpv_e). |
documento | string | se o item exigir | CPF (11) ou CNPJ (14), com ou sem pontuação (veiculos_cpf). |
| Situação | HTTP | Cobra? |
|---|---|---|
| Pesquisa criada e em processamento | 202 | ✅ soma dos itens |
| Item respondeu com erro do fornecedor (fora do ar, placa sem base) | — (aparece em resultados[].erro) | ↩️ estornado no fim do processamento |
| Item desconhecido / campo extra faltando / placa fora do padrão | 422 item_invalido, renavam_obrigatorio, documento_obrigatorio, placa_obrigatoria, placa_invalida | ❌ Não |
| Saldo insuficiente | 402 saldo_insuficiente (traz necessario) | ❌ Não |
| Limite por minuto atingido | 429 limite_taxa | ❌ Não |
📬 Consultar resultado — GET /v1/pesquisas/{id}
Faça polling a cada 3–5 s até status virar concluido. Cada entrada de resultados traz o item e o JSON bruto do fornecedor — exatamente o que o painel da CredPro renderiza — para você mostrar o que quiser. Quando um item não responde, erro vem preenchido e o valor dele já foi estornado.
GET /v1/pesquisas/1842
Authorization: Bearer SUA_CHAVE_AQUI
{
"pesquisa_id": 1842,
"status": "concluido",
"placa": "ABC1D23",
"itens": ["gravame", "roubo_furto", "leilao_completo"],
"valor_cobrado": 19.00,
"criado_em": "2026-09-16 18:40:12",
"resultados": [
{"item": "placa_basica", "erro": null, "dados": {"status": "sucesso", "dados": {"identificacao": {"placa": "ABC1D23", "chassi": "9BW..."}, "marca": {...}, "modelo": {...}}}},
{"item": "gravame", "erro": null, "dados": {"status": "sucesso", "dados": {"VEICULAR": {"GRAVAME": {"OCORRENCIAS": []}}}}},
{"item": "roubo_furto", "erro": null, "dados": {"status": "sucesso", "dados": {"VEICULAR": {"HISTORICO_ROUBO_FURTO": {"INDICADOR": {"HOUVE_DECLARACAO_DE_ROUBO_FURTO": "0"}, "OCORRENCIAS": []}}}}},
{"item": "leilao_completo", "erro": null, "dados": {"VEICULAR": {"LEILAO_CONJUGADO": {"QUANTIDADE_OCORRENCIAS": "1", "OCORRENCIAS": [{"SCORE": {"PONTUACAO": "D", "ACEITACAO": "55"}, "OCORRENCIAS": [{"DATA_LEILAO": "28/11/2014", "LOTE": "168"}]}]}, "INDICIO_SINISTRO": {"EXISTE_OCORRENCIA": "1"}}}}
],
"pdf": "/v1/pesquisas/1842/pdf",
"sandbox": false
}
dados.dados.VEICULAR.GRAVAME.OCORRENCIAS (vazio = sem gravame).
Roubo/furto: …HISTORICO_ROUBO_FURTO.INDICADOR.HOUVE_DECLARACAO_DE_ROUBO_FURTO ("1" = ocorrência).
Leilão / leilão completo: dados.VEICULAR.LEILAO_CONJUGADO.QUANTIDADE_OCORRENCIAS e OCORRENCIAS[0].SCORE; sinistro no leilão completo em VEICULAR.INDICIO_SINISTRO.EXISTE_OCORRENCIA.
Sinistro: VEICULAR.INDICIO_SINISTRO_CONJUGADO.OCORRENCIAS[].EXISTE_OCORRENCIA.
Renajud: dados.dados.VEICULAR.RENAJUD.QUANTIDADE_OCORRENCIAS (+ RENAINF e BIN_NACIONAL na mesma resposta).
Base estadual: VEICULAR.BIN_ESTADUAL.RESTRICOES.{IPVA,MULTAS,LICENCIAMENTO}.EXISTE_PENDENCIA.
Check list: VEICULAR.CHECK_LIST_VEICULAR.<CATEGORIA>.QUANTIDADE_OCORRENCIAS.
Recall: dados.msg quando não há campanha; lista quando há.
Histórico de proprietários: dados.registros[]. Um item do bundle que aparece com placa_basica é o complemento gratuito usado pelo gravame.
📄 PDF — GET /v1/pesquisas/{id}/pdf
Depois de concluido, devolve o mesmo relatório em PDF que o lojista baixa no painel: cabeçalho, quadro de avisos (uma linha por item, verde/vermelho) e uma seção por item — com velocímetro de score no leilão e as fotos embutidas. Sem cobrança extra. Resposta é o arquivo (application/pdf).
🧪 Sandbox
Com a chave de teste (cpk_test_…) os mesmos endpoints devolvem resultados fictícios no mesmo formato, sem cobrar e sem chegar nos fornecedores. Regra: placa terminada em 9 devolve um veículo "com histórico" (gravame ativo, passagem por leilão com score D, indício de sinistro, IPVA em aberto, 1 multa, recall pendente); qualquer outra placa devolve tudo "nada consta". Regras gerais do sandbox →
💻 Exemplos de código
curl -X POST https://cred-pro.com/v1/pesquisas \
-H "Authorization: Bearer SUA_CHAVE_AQUI" \
-H "Content-Type: application/json" \
-d '{"placa": "ABC1D23", "itens": ["gravame", "leilao_completo"]}'
# depois, até status = concluido:
curl https://cred-pro.com/v1/pesquisas/1842 -H "Authorization: Bearer SUA_CHAVE_AQUI"
# PDF:
curl -o pesquisa.pdf https://cred-pro.com/v1/pesquisas/1842/pdf -H "Authorization: Bearer SUA_CHAVE_AQUI"
import requests, time
CHAVE = "SUA_CHAVE_AQUI"
H = {"Authorization": f"Bearer {CHAVE}"}
r = requests.post("https://cred-pro.com/v1/pesquisas", headers=H, timeout=30,
json={"placa": "ABC1D23", "itens": ["gravame", "leilao_completo"]})
if r.status_code != 202:
raise SystemExit(f"erro {r.status_code}: {r.json()['detail']['erro']}")
pid = r.json()["pesquisa_id"]
print("cobrado:", r.json()["valor_cobrado"])
while True:
p = requests.get(f"https://cred-pro.com/v1/pesquisas/{pid}", headers=H, timeout=30).json()
if p["status"] in ("concluido", "erro"):
break
time.sleep(4)
for res in p["resultados"]:
print(res["item"], "erro:" if res["erro"] else "ok", res["erro"] or "")
gravame = next(x for x in p["resultados"] if x["item"] == "gravame")["dados"]
print("gravame ativo?", bool(gravame["dados"]["VEICULAR"]["GRAVAME"]["OCORRENCIAS"]))
pdf = requests.get(f"https://cred-pro.com/v1/pesquisas/{pid}/pdf", headers=H, timeout=60)
open(f"pesquisa_{pid}.pdf", "wb").write(pdf.content)
const CHAVE = "SUA_CHAVE_AQUI";
const H = { Authorization: `Bearer ${CHAVE}`, "Content-Type": "application/json" };
const r = await fetch("https://cred-pro.com/v1/pesquisas", {
method: "POST", headers: H,
body: JSON.stringify({ placa: "ABC1D23", itens: ["gravame", "leilao_completo"] }),
});
const criado = await r.json();
if (r.status !== 202) throw new Error(JSON.stringify(criado.detail.erro));
let p;
do {
await new Promise(s => setTimeout(s, 4000));
p = await (await fetch(`https://cred-pro.com/v1/pesquisas/${criado.pesquisa_id}`, { headers: H })).json();
} while (!["concluido", "erro"].includes(p.status));
for (const res of p.resultados) console.log(res.item, res.erro ? `erro: ${res.erro}` : "ok");
const gravame = p.resultados.find(x => x.item === "gravame").dados;
console.log("gravame ativo?", gravame.dados.VEICULAR.GRAVAME.OCORRENCIAS.length > 0);