API de Consulta de crédito
As mesmas consultas de crédito do painel da CredPro, por CPF ou CNPJ, a preço de atacado: BACEN SCR com score, Serasa/SPC/SCPC, Boa Vista, QUOD, dados cadastrais, protestos (CENPROT), CADIN, cheques sem fundo, processos judiciais, renda presumida, situação do CPF na Receita, risco de empresa e as Análises de Crédito Completas (pessoa física e empresa). Resultado em JSON já organizado e em PDF.
GET/v1/credito/itens
POST/v1/credito
GET/v1/credito/{id}
GET/v1/credito/{id}/pdf
🧾 Catálogo e preços — GET /v1/credito/itens
Lista os itens disponíveis com o preço que será cobrado (atacado). Cada item diz o que aceita em documento (cpf, cnpj ou cpf_ou_cnpj) e se exige algo mais em campos_extras (hoje só cep, na renda presumida). Este endpoint é a fonte da verdade: o catálogo cresce e os preços podem mudar.
GET /v1/credito/itens
Authorization: Bearer SUA_CHAVE_AQUI
{
"itens": [
{"codigo": "ic_bacen", "nome": "Relatório BACEN — SCR e Score", "preco": 6.00, "documento": "cpf", "campos_extras": [], "inclui": null, "descricao": "..."},
{"codigo": "cenprot", "nome": "Protestos Nacionais (CENPROT)", "preco": 0.70, "documento": "cpf_ou_cnpj", "campos_extras": [], "inclui": null, "descricao": "..."},
{"codigo": "renda_presumida", "nome": "Renda presumida", "preco": 1.80, "documento": "cpf", "campos_extras": ["cep"], "inclui": null, "descricao": "..."},
{"codigo": "analise_credito_completa", "nome": "Análise de Crédito Completa", "preco": 30.00, "documento": "cpf", "campos_extras": [],
"inclui": ["cpf_receita", "credcadastral", "boavista", "ic_bacen", "serasa_premium", "quod", "renda_presumida", "cenprot", "cadin", "ccf", "processos"], "descricao": "..."}
],
"saldo_reais": 132.48,
"sandbox": false
}
| Código | O que traz | Aceita | Preço (atacado) |
|---|---|---|---|
cpf_receita | Situação do CPF na Receita Federal, nome, nascimento, filiação, documentos | CPF | R$ 0,30 |
cenprot | Protestos em cartórios de todo o país (CENPROT): quantidade, cartórios, títulos | CPF ou CNPJ | R$ 0,70 |
cadin | Dívidas com órgãos federais (CADIN) | CPF ou CNPJ | R$ 1,10 |
ccf | Cheques sem fundo (CCF BACEN): banco, agência, quantidade, motivo | CPF ou CNPJ | R$ 1,10 |
credcadastral | Dados cadastrais + score + pendências (SCPC Basic) | CPF | R$ 1,80 |
renda_presumida | Renda estimada, poder de compra, patrimônio estimado, classe social | CPF + cep | R$ 1,80 |
processos | Processos judiciais: ativos e arquivados, tribunal, classe, valor, partes | CPF ou CNPJ | R$ 3,60 |
boavista | Boa Vista: score, pendências, protestos, participações em empresas | CPF ou CNPJ | R$ 5,00 |
risco_cnpj | Risco de empresa (Define Risco): score, pendências, protestos, cadastro da empresa, comportamento de pagamento em 12 meses, consultas | CNPJ | R$ 5,00 |
ic_bacen | Relatório BACEN SCR: score, operações por modalidade, vencido/a vencer/prejuízo, alertas | CPF | R$ 6,00 |
quod | Birô QUOD: cadastro, pendências, protestos, alertas, contatos, veículos no nome, consultas recentes | CPF ou CNPJ | R$ 6,00 |
serasa_premium | Serasa + SPC + SCPC (Pefin): score, pendências, protestos, alertas, participações | CPF | R$ 6,50 |
analise_credito_empresa | Bundle: risco_cnpj + cadin + ccf + processos | CNPJ | R$ 14,00 |
analise_credito_completa | Bundle com 11 itens (veja inclui): tudo o que existe para pessoa física num pedido só | CPF | R$ 30,00 |
GET /v1/credito/itens. Consultas são cobradas do mesmo saldo em reais das outras APIs.🚀 Criar consulta — POST /v1/credito
Um documento, um ou mais itens. A soma dos itens é debitada na hora e a consulta entra em processamento (202): os birôs respondem em segundos, alguns em até ~2 minutos. Acompanhe em GET /v1/credito/{id}.
POST /v1/credito
Authorization: Bearer SUA_CHAVE_AQUI
Content-Type: application/json
{
"documento": "123.456.789-01",
"itens": ["serasa_premium", "ic_bacen", "cenprot"]
}
HTTP 202
{
"consulta_id": 2210,
"status": "processando",
"documento": "12345678901",
"itens": ["serasa_premium", "ic_bacen", "cenprot"],
"valor_cobrado": 13.20,
"saldo_reais": 119.28,
"consulte_em": "/v1/credito/2210",
"sandbox": false
}
| Campo | Tipo | Obrigatório | Observação |
|---|---|---|---|
documento | string | sim | CPF (11 dígitos) ou CNPJ (14), com ou sem pontuação. Cada item aceita CPF, CNPJ ou os dois — veja documento no catálogo. |
itens | lista de códigos | sim | Códigos de GET /v1/credito/itens. Repetidos são ignorados. |
cep | string | se o item exigir | 8 dígitos, para renda_presumida. Pode ser omitido quando um birô do mesmo pedido (serasa_premium, credcadastral, quod, boavista ou a Análise Completa) traz o endereço. |
| Situação | HTTP | Cobra? |
|---|---|---|
| Consulta criada e em processamento | 202 | ✅ soma dos itens |
| Item respondeu com erro do birô (fora do ar, documento sem base) | — (aparece em resultados[].erro) | ↩️ estornado no fim do processamento (bundle só se nenhum sub-item respondeu) |
| Documento inválido / item desconhecido / item só CPF com CNPJ (ou vice-versa) / CEP faltando | 422 documento_invalido, item_invalido, documento_incompativel, cep_obrigatorio | ❌ Não |
| Saldo insuficiente | 402 saldo_insuficiente (traz necessario) | ❌ Não |
| Limite por minuto atingido | 429 limite_taxa | ❌ Não |
📬 Consultar resultado — GET /v1/credito/{id}
Faça polling a cada 3–5 s até status virar concluido. Diferente das pesquisas veiculares, aqui dados vem normalizado: os birôs (Serasa, SCPC, QUOD, Boa Vista, Define Risco) usam o mesmo formato entre si, então você escreve um render só. Quando um item não responde, erro vem preenchido e o valor dele já foi estornado.
GET /v1/credito/2210
Authorization: Bearer SUA_CHAVE_AQUI
{
"consulta_id": 2210,
"status": "concluido",
"documento": "12345678901",
"itens": ["serasa_premium", "ic_bacen", "cenprot"],
"valor_cobrado": 13.20,
"criado_em": "2026-09-17 19:02:11",
"resultados": [
{"item": "serasa_premium", "erro": null, "dados": {
"identificacao": {"nome": "FULANO DE TAL", "cpf": "12345678901", "situacao_cpf": "REGULAR", "nascimento": "15/08/1985", "cidade": "SAO PAULO", "uf": "SP", "cep": "01310100", "...": "..."},
"score": {"valor": "310", "classificacao": "E", "probabilidade": "38.5", "texto": "ALTO RISCO", "tipo": "SCORE PF"},
"painel": [{"ocorrencia": "Pendências Financeiras", "total": 2, "valor": "R$ 2.263,30"}, {"ocorrencia": "Protestos", "total": 1, "valor": "R$ 1.250,00"}],
"debitos": {"total": 2, "valor_total": 2263.3, "lista": [{"data": "12/03/2026", "informante": "BANCO X", "valor": 1850.4, "contrato": "0001234567", "origem": "FINANCIAMENTO"}]},
"protestos": {"total": 1, "valor_total": 1250.0, "lista": [{"data": "20/01/2026", "valor": 1250.0, "cartorio": "1º TABELIONATO", "cidade": "SAO PAULO", "uf": "SP"}]},
"empresas": [], "alertas": [], "contatos": {"telefones": [], "enderecos": [], "emails": []}, "veiculos": [], "consultas_recentes": [], "perfil": {},
"fonte_nome": "Serasa + SPC + SCPC (Pefin)"}},
{"item": "ic_bacen", "erro": null, "dados": {"score": {"pontuacao": "280", "faixa": "ALTO RISCO"}, "resumo": {"qtd_operacoes": "2", "qtd_instituicoes": "2", "...": "..."},
"consolidado": {"credito_avencer": "18.200,00", "credito_vencido": "1.900,00", "prejuizo": "0,00", "limite_credito": "3.000,00", "...": "..."},
"operacoes": [{"modalidade": "FINANCIAMENTOS", "sub_modalidade": "AQUISICAO DE BENS - VEICULOS AUTOMOTORES", "total": "7.600,00", "vencimentos": [{"descricao": "VENCIDO DE 31 A 60 DIAS", "valor": "1.900,00", "restritivo": true}]}],
"alertas": {"quantidade": "1", "ocorrencias": [{"TITULO": "OPERACAO VENCIDA"}]}}},
{"item": "cenprot", "erro": null, "dados": {"qtd_titulos": 1, "status": "com_protesto", "titulos": [{"nome": "1º TABELIONATO DE PROTESTO", "cidade": "SAO PAULO", "uf": "SP", "qtdTitulos": 1}]}}
],
"pdf": "/v1/credito/2210/pdf",
"sandbox": false
}
serasa_premium, credcadastral, quod, boavista, risco_cnpj): score.valor (pode vir vazio quando o birô não pontua), painel[] (resumo por tipo de ocorrência), debitos.lista[], protestos.lista[], empresas[]. O risco_cnpj acrescenta empresa, consultas e comportamento.
BACEN: score.pontuacao/faixa, consolidado.credito_vencido e prejuizo, operacoes[].vencimentos[].restritivo.
CENPROT: status (com_protesto | sem_protesto) e qtd_titulos.
CADIN e CCF: quantidade e ocorrencias[].
Processos: ativos, acoes[] (com status, valor, partes[]) e arquivadas[].
CPF na Receita: situacao (REGULAR, SUSPENSA, CANCELADA…).
Renda presumida: renda_estimada, poder_de_compra, classe_social.
Todo item traz fonte_nome com o nome do birô para exibição.
📄 PDF — GET /v1/credito/{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 birô — velocímetro de score, painel de ocorrências, tabelas de pendências e protestos, relatório SCR. 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 birôs. Regra: documento terminado em 9 devolve um consultado "com restrições" (score 310, 2 pendências, protesto, CADIN, cheque sem fundo, processo ativo, operação vencida no BACEN); qualquer outro devolve tudo limpo. Use CNPJ para os itens de empresa. Regras gerais do sandbox →
💻 Exemplos de código
curl -X POST https://cred-pro.com/v1/credito \
-H "Authorization: Bearer SUA_CHAVE_AQUI" \
-H "Content-Type: application/json" \
-d '{"documento": "12345678901", "itens": ["serasa_premium", "ic_bacen", "cenprot"]}'
# depois, até status = concluido:
curl https://cred-pro.com/v1/credito/2210 -H "Authorization: Bearer SUA_CHAVE_AQUI"
# PDF:
curl -o credito.pdf https://cred-pro.com/v1/credito/2210/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/credito", headers=H, timeout=30,
json={"documento": "12345678901", "itens": ["serasa_premium", "ic_bacen", "cenprot"]})
if r.status_code != 202:
raise SystemExit(f"erro {r.status_code}: {r.json()['detail']['erro']}")
cid = r.json()["consulta_id"]
print("cobrado:", r.json()["valor_cobrado"])
while True:
p = requests.get(f"https://cred-pro.com/v1/credito/{cid}", 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 "")
serasa = next(x for x in p["resultados"] if x["item"] == "serasa_premium")["dados"]
print("score:", serasa["score"]["valor"], "| pendências:", serasa["debitos"]["total"], "| protestos:", serasa["protestos"]["total"])
pdf = requests.get(f"https://cred-pro.com/v1/credito/{cid}/pdf", headers=H, timeout=60)
open(f"credito_{cid}.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/credito", {
method: "POST", headers: H,
body: JSON.stringify({ documento: "12345678901", itens: ["serasa_premium", "ic_bacen", "cenprot"] }),
});
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/credito/${criado.consulta_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 serasa = p.resultados.find(x => x.item === "serasa_premium").dados;
console.log("score:", serasa.score.valor, "| pendências:", serasa.debitos.total, "| protestos:", serasa.protestos.total);