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.

🏦
Simulação bancáriaCobra quando o banco responde: aprovado, recusado, simulação ou credencial inválida. Erro nosso, manutenção e fora do horário não cobram.
R$ 0,20por banco que responde
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.

🧪 Testando? Com a chave de teste (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

CampoTipoObrigatórioDescrição
cpfstringSimCPF do cliente, somente números (11 dígitos).
celularstringSimCelular do cliente, somente números com DDD (ex: 11999999999).
placastringSim, ou os dados do veículoPlaca 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_cnhbooleanNãoSe o cliente tem CNH. Padrão true. Alguns bancos recusam ou ajustam a análise quando é false.
data_nascimentostringSimData de nascimento do cliente, formato ISO AAAA-MM-DD (ex: 1990-05-15).
tipo_veiculostringSimcarro, moto ou pesado.
veiculo_marcastringSó sem placaMarca do veículo (ex: Ford). Com placa é opcional: se vier, tem prioridade sobre o que a placa retornar.
veiculo_modelostringSó sem placaModelo/versão do veículo (ex: EcoSport 1.6 XLT).
veiculo_anonumberSó sem placaAno modelo do veículo (ex: 2011).
veiculo_ano_fabricacaonumberNãoAno de fabricação, quando diferente do ano modelo. Padrão: igual a veiculo_ano.
veiculo_combustivelstringNãoEx: Flex, Diesel. Com placa, vem da consulta.
fipe_valuenumberNãoValor 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_desejadonumberNãoValor de crédito desejado pelo cliente, em reais.
bancosobjetoSimUm 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.
Sempre envie 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.
Como o veículo é identificado. Ordem de prioridade: (1) o que você enviou em 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.
Sem placa. Funciona para veículo 0 km ou ainda sem emplacar: envie marca, modelo e ano (e a FIPE, se tiver). Use os nomes como aparecem na tabela FIPE (ex.: marca 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

CampoDescrição
statusprocessando enquanto algum banco não respondeu, concluida quando todos já responderam.
veiculoVeí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_cobradoQuanto 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[].bancoNome do banco.
resultados[].statusnull enquanto esse banco específico ainda não respondeu; ver tabela de status abaixo.
resultados[].billable / valor_cobradoSe esse banco foi cobrado e quanto (R$ 0,20 ou 0.00).
resultados[].dadosDetalhe 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.

PAN
C6
Safra
Itaú
Creditas
VW
Santander
Omni
Sicoob
Porto
Porto (Corretor)
BBC
Daycoval
Bradesco
Bradesco Turbo
BV
CrediCarro

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" },
    ...
  ]
}
⏰ Horário de disponibilidade: a maioria dos bancos funciona 24h, mas Itaú, VW, Daycoval e BV ficam indisponíveis entre 22h e 7h, e Bradesco entre 21h e 7h (horário de Brasília). Se você tentar simular fora desse horário, o resultado vem com 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.

StatusSignificadoCobra?
aprovadoCrédito pré-aprovado pelo banco, com valores e parcelas.✅ Sim
recusadoBanco processou e recusou o crédito.✅ Sim
simulacaoBanco retornou uma simulação (sem decisão de aprovação/recusa).✅ Sim
credencial_invalidaUsuário/senha informados para esse banco estão incorretos.✅ Sim (o trabalho foi feito; o erro é da credencial enviada)
credencial_restricaoCredencial 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)
erroFalha técnica ao processar (timeout, resposta inesperada do banco).❌ Não
manutencaoBanco temporariamente suspenso pela CredPro.❌ Não
indisponivelFora do horário de funcionamento do banco (ver Bancos suportados).❌ Não
Dica: como 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

cURL
Python
Node.js
# 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.