API de Simulação bancária
Simule financiamento em até 17 bancos com as credenciais do seu cliente e receba aprovação, parcelas e motivo de recusa.
POST/v1/simulacoesGET/v1/simulacoes/{consulta_id}GET/v1/bancos📤 Criar simulação — POST /v1/simulacoes
Antes de tudo, gere sua chave e recarregue o saldo — ver Começando. Inicia uma simulação em um ou mais bancos. A chamada retorna imediatamente com o consulta_id; os bancos são consultados em paralelo em segundo plano.
cpk_test_…) este endpoint responde com resultados fictícios e determinísticos, sem chamar banco e sem cobrar — CPF terminado em 9 aprova em todos, terminado em 0 recusa em todos. Regras do sandbox →
Campos da requisição
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
cpf | string | Sim | CPF do cliente, somente números (11 dígitos). |
celular | string | Sim | Celular do cliente, somente números com DDD (ex: 11999999999). |
placa | string | Sim, ou os dados do veículo | Placa do veículo (com ou sem hífen). Com a placa, buscamos marca, modelo, ano e FIPE no servidor se você não enviar. Sem placa (0 km, veículo ainda sem emplacar), envie veiculo_marca, veiculo_modelo e veiculo_ano. |
possui_cnh | boolean | Não | Se o cliente tem CNH. Padrão true. Alguns bancos recusam ou ajustam a análise quando é false. |
data_nascimento | string | Sim | Data de nascimento do cliente, formato ISO AAAA-MM-DD (ex: 1990-05-15). |
tipo_veiculo | string | Sim | carro, moto ou pesado. |
veiculo_marca | string | Só sem placa | Marca do veículo (ex: Ford). Com placa é opcional: se vier, tem prioridade sobre o que a placa retornar. |
veiculo_modelo | string | Só sem placa | Modelo/versão do veículo (ex: EcoSport 1.6 XLT). |
veiculo_ano | number | Só sem placa | Ano modelo do veículo (ex: 2011). |
veiculo_ano_fabricacao | number | Não | Ano de fabricação, quando diferente do ano modelo. Padrão: igual a veiculo_ano. |
veiculo_combustivel | string | Não | Ex: Flex, Diesel. Com placa, vem da consulta. |
fipe_value | number | Não | Valor FIPE em reais (ex: 45151.70). Se não vier, buscamos pela placa ou pela tabela FIPE (marca + modelo + ano). Se você já tem o valor, envie: é mais rápido e mais preciso. |
valor_desejado | number | Não | Valor de crédito desejado pelo cliente, em reais. |
bancos | objeto | Sim | Um objeto com um ou mais bancos (ver lista de bancos suportados), cada um com usuario e senha — as credenciais que você já usa para logar naquele banco. |
data_nascimento e tipo_veiculo corretos.
Vários bancos (ex: C6) exigem uma data de nascimento válida para avançar a simulação — sem ela, o banco
recusa o formulário internamente e a chamada retorna status: "erro" (não cobra, mas também não simula).
Da mesma forma, alguns bancos recusam automaticamente moto/pesado — enviar o tipo certo evita
resultados incorretos.
veiculo_* e fipe_value;
(2) a consulta da placa no servidor, que completa marca, modelo, ano, combustível e FIPE (e corrige
tipo_veiculo pela categoria real do emplacamento); (3) a tabela FIPE por marca + modelo + ano,
quando ainda falta o valor. O resultado da identificação volta no campo veiculo da consulta,
com a origem de cada informação. A maioria dos bancos identifica o carro pela placa no próprio
site; VW, Daycoval e Bradesco precisam de marca/modelo/ano, e Itaú, Sicoob, C6 e
Porto precisam do valor FIPE — por isso vale enviar o que você já tem.
Chevrolet, modelo Onix LT 1.0):
Santander e Omni localizam a versão pelo nome no próprio site, e um nome fora do padrão volta como
erro ou como recusa "não financia a versão". Com placa esse problema não existe — sempre que tiver a placa, mande a placa.
Testado em 12/09/2026: com placa, 11 bancos responderam sem erro técnico; sem placa, Itaú, C6, Safra, Creditas, Daycoval, BV e VW simulam normalmente.
Exemplo de requisição
POST /v1/simulacoes
Authorization: Bearer SUA_CHAVE_AQUI
Content-Type: application/json
{
"cpf": "12345678900",
"celular": "11999999999",
"placa": "ABC1D23",
"data_nascimento": "1985-03-15",
"tipo_veiculo": "carro",
"veiculo_marca": "Ford",
"veiculo_modelo": "EcoSport",
"veiculo_ano": 2011,
"fipe_value": 45151.70,
"valor_desejado": 45000,
"bancos": {
"PAN": { "usuario": "seu_usuario_pan", "senha": "sua_senha_pan" },
"C6": { "usuario": "seu_usuario_c6", "senha": "sua_senha_c6" }
}
}
Exemplo sem placa (0 km)
{
"cpf": "12345678900",
"celular": "11999999999",
"data_nascimento": "1985-03-15",
"tipo_veiculo": "carro",
"veiculo_marca": "Chevrolet",
"veiculo_modelo": "Onix LT 1.0 Turbo",
"veiculo_ano": 2026,
"fipe_value": 98900.00,
"bancos": {
"PAN": { "usuario": "seu_usuario_pan", "senha": "sua_senha_pan" }
}
}
Resposta (imediata)
{
"consulta_id": 4821,
"status": "processando",
"bancos_solicitados": ["PAN", "C6"],
"preco_por_banco": 0.20,
"custo_maximo": 0.40,
"saldo_reais": 132.60
}
Os nomes dos bancos aceitam variações: itau, Itaú, porto corretor, bradesco_turbo, volkswagen… A resposta sempre devolve o nome oficial.
A cobrança é por banco que responde (preco_por_banco, hoje R$ 0,20), não pela chamada. custo_maximo é o pior caso (todos os bancos respondendo); a chamada exige saldo para esse valor e só desconta o que de fato responder. Ver Preços e saldo.
📥 Consultar resultado — GET /v1/simulacoes/{consulta_id}
Retorna o status atual da simulação e o resultado de cada banco solicitado, conforme cada um vai respondendo. Chame esse endpoint periodicamente (a cada 3-5 segundos é um bom intervalo) até status mudar de processando para concluida.
GET /v1/simulacoes/4821 Authorization: Bearer SUA_CHAVE_AQUI
Exemplo de resposta
{
"consulta_id": 4821,
"status": "concluida",
"placa": "ABC1D23",
"tipo_veiculo": "carro",
"veiculo": {
"marca": "FORD",
"modelo": "ECOSPORT XLT 1.6",
"ano_modelo": 2011,
"ano_fabricacao": 2011,
"combustivel": "Flex",
"fipe_value": 45151.70,
"codigo_fipe": "003296-6",
"origem": "placa"
},
"criado_em": "2026-07-13 14:32:05",
"concluida_em": "2026-07-13 14:32:41",
"bancos_cobrados": 2,
"valor_total_cobrado": 0.40,
"resultados": [
{
"banco": "PAN",
"status": "aprovado",
"billable": true,
"valor_cobrado": 0.20,
"dados": {
"banco": "PAN",
"status": "aprovado",
"valor_veiculo": "45.000,00",
"valor_entrada": "9.000,00",
"valor_solicitado": "36.000,00",
"parcelas": "48x de R$ 1.120,00",
"mensagem_recusa": null
},
"criado_em": "2026-07-13 14:32:10"
},
{
"banco": "C6",
"status": "recusado",
"billable": true,
"dados": {
"banco": "C6",
"status": "recusado",
"valor_veiculo": null,
"valor_entrada": null,
"valor_solicitado": null,
"parcelas": null,
"mensagem_recusa": "Score insuficiente para aprovação automática."
},
"criado_em": "2026-07-13 14:32:41"
}
]
}
Campos da resposta
| Campo | Descrição |
|---|---|
status | processando enquanto algum banco não respondeu, concluida quando todos já responderam. |
veiculo | Veículo efetivamente usado na simulação. origem: informado (veio de você), placa (consulta da placa) ou informado+placa; fipe_origem: "tabela_fipe" quando o valor veio da tabela; placa_nao_encontrada: true quando a placa não retornou dados (a simulação segue com o que houver). |
valor_total_cobrado | Quanto já foi descontado do saldo nessa consulta até agora, em reais. bancos_cobrados é a quantidade de bancos que responderam de forma cobrável (o campo antigo creditos_consumidos segue vindo com o mesmo número, por compatibilidade). |
resultados[].banco | Nome do banco. |
resultados[].status | null enquanto esse banco específico ainda não respondeu; ver tabela de status abaixo. |
resultados[].billable / valor_cobrado | Se esse banco foi cobrado e quanto (R$ 0,20 ou 0.00). |
resultados[].dados | Detalhe completo retornado pelo banco (valores, parcelas, motivo de recusa). |
🏦 Bancos suportados
Use exatamente estes nomes como chave dentro do objeto bancos da requisição. As credenciais são as mesmas que você já usa para logar diretamente no site/sistema de cada banco.
17 bancos, os mesmos do painel. Bradesco e Bradesco Turbo são dois acessos diferentes do mesmo banco (o Turbo é o portal novo, com credencial própria); Porto e Porto (Corretor) idem. Envie só os que você tem credencial.
Disponibilidade agora — GET /v1/bancos
Antes de disparar, dá pra saber quem está atendendo: bancos em manutenção pela CredPro e bancos fora do horário aparecem com disponivel_agora: false e o motivo. Assim você evita pedir simulação que voltaria como manutencao ou indisponivel.
GET /v1/bancos
Authorization: Bearer SUA_CHAVE_AQUI
{
"bancos": [
{ "banco": "PAN", "disponivel_agora": true, "motivo": null, "horario": "24h" },
{ "banco": "Itaú", "disponivel_agora": false, "motivo": "Fora do horário (7h às 22h, horário de Brasília).", "horario": "07:00–22:00" },
...
]
}
status: "indisponivel" e não é cobrado.
💳 Status possíveis e regra de cobrança
Cada banco retorna um dos status abaixo. Você só é cobrado (R$ 0,20) quando o banco chega a processar de verdade — se o erro foi nosso (fora do ar, timeout), você não paga.
| Status | Significado | Cobra? |
|---|---|---|
| aprovado | Crédito pré-aprovado pelo banco, com valores e parcelas. | ✅ Sim |
| recusado | Banco processou e recusou o crédito. | ✅ Sim |
| simulacao | Banco retornou uma simulação (sem decisão de aprovação/recusa). | ✅ Sim |
| credencial_invalida | Usuário/senha informados para esse banco estão incorretos. | ✅ Sim (o trabalho foi feito; o erro é da credencial enviada) |
| credencial_restricao | Credencial correta, mas a conta está com restrição de uso junto ao banco (ex: sem loja vinculada ao perfil). | ✅ Sim (o trabalho foi feito; a restrição é da conta do parceiro no banco) |
| erro | Falha técnica ao processar (timeout, resposta inesperada do banco). | ❌ Não |
| manutencao | Banco temporariamente suspenso pela CredPro. | ❌ Não |
| indisponivel | Fora do horário de funcionamento do banco (ver Bancos suportados). | ❌ Não |
credencial_invalida é cobrado, vale a pena validar o usuário/senha de cada banco no seu lado antes de disparar simulações em lote, para não gastar saldo com credenciais já sabidamente erradas.
💻 Exemplos de código
# 1. Criar a simulação
curl -X POST https://cred-pro.com/v1/simulacoes \
-H "Authorization: Bearer SUA_CHAVE_AQUI" \
-H "Content-Type: application/json" \
-d '{
"cpf": "12345678900",
"celular": "11999999999",
"placa": "ABC1D23",
"data_nascimento": "1985-03-15",
"tipo_veiculo": "carro",
"veiculo_marca": "Ford",
"veiculo_modelo": "EcoSport",
"veiculo_ano": 2011,
"fipe_value": 45151.70,
"valor_desejado": 45000,
"bancos": {
"PAN": {"usuario": "usuario_pan", "senha": "senha_pan"}
}
}'
# 2. Consultar o resultado (repita a cada poucos segundos)
curl https://cred-pro.com/v1/simulacoes/4821 \
-H "Authorization: Bearer SUA_CHAVE_AQUI"
import requests
import time
CHAVE = "SUA_CHAVE_AQUI"
BASE = "https://cred-pro.com/v1"
headers = {"Authorization": f"Bearer {CHAVE}"}
# 1. Criar a simulação
resp = requests.post(f"{BASE}/simulacoes", headers=headers, json={
"cpf": "12345678900",
"celular": "11999999999",
"placa": "ABC1D23",
"data_nascimento": "1985-03-15",
"tipo_veiculo": "carro",
"veiculo_marca": "Ford",
"veiculo_modelo": "EcoSport",
"veiculo_ano": 2011,
"fipe_value": 45151.70,
"valor_desejado": 45000,
"bancos": {
"PAN": {"usuario": "usuario_pan", "senha": "senha_pan"},
},
})
consulta_id = resp.json()["consulta_id"]
# 2. Consultar o resultado até concluir
while True:
r = requests.get(f"{BASE}/simulacoes/{consulta_id}", headers=headers).json()
if r["status"] == "concluida":
print(r["resultados"])
break
time.sleep(3)
const CHAVE = "SUA_CHAVE_AQUI";
const BASE = "https://cred-pro.com/v1";
const headers = { Authorization: `Bearer ${CHAVE}`, "Content-Type": "application/json" };
// 1. Criar a simulação
const criar = await fetch(`${BASE}/simulacoes`, {
method: "POST",
headers,
body: JSON.stringify({
cpf: "12345678900",
celular: "11999999999",
placa: "ABC1D23",
data_nascimento: "1985-03-15",
tipo_veiculo: "carro",
veiculo_marca: "Ford",
veiculo_modelo: "EcoSport",
veiculo_ano: 2011,
fipe_value: 45151.70,
valor_desejado: 45000,
bancos: { PAN: { usuario: "usuario_pan", senha: "senha_pan" } },
}),
});
const { consulta_id } = await criar.json();
// 2. Consultar o resultado até concluir
async function aguardar() {
const r = await (await fetch(`${BASE}/simulacoes/${consulta_id}`, { headers })).json();
if (r.status === "concluida") { console.log(r.resultados); return; }
setTimeout(aguardar, 3000);
}
aguardar();
Referência técnica completa (OpenAPI/Swagger, gerada automaticamente) disponível em /docs.