Pular para o conteúdo
Última atualização

Simulação e Contratação

Simule parcelas, formalize o empréstimo, assine o contrato e acompanhe até o dinheiro cair na conta.

Visão Geral do Fluxo

A partir do momento em que o cliente tem uma oferta de crédito disponível, o fluxo passa por três etapas na sua plataforma (simular, criar, assinar) enquanto a Dinie processa cada fase e notifica via webhooks.

Ciclo de vida do crédito

StatusDescrição
availableOferta pronta para simulação
awaiting_signaturesEmpréstimo criado, aguardando assinaturas do contrato CCB
processingTodas as assinaturas coletadas, processando desembolso
activeDinheiro na conta, ciclo de pagamento iniciado
finishedEmpréstimo quitado
cancelledEmpréstimo cancelado
errorErro no processamento

Listar Ofertas

Quando o cliente abre o app para contratar, recupere as ofertas disponíveis:

const offers = await client.customers.listCreditOffers(
  "cust_550e8400...",
  { status: "available" }
);

const offer = offers.data[0];
console.log(`R$ ${offer.approvedAmount} a ${offer.interestRate}% a.m.`);

Simular Condições

Simule um cenário de empréstimo informando o valor desejado e o número de parcelas. Cada chamada retorna uma simulação com os termos calculados. O cliente pode simular quantas vezes quiser — apenas a última simulação é válida para contratação.

const simulation = await client.creditOffers.simulate(offer.id, {
  requestedAmount: 25000.00,
  installmentCount: 4,
});

console.log(`${simulation.installmentCount}x de R$ ${simulation.installmentAmount}`);
console.log(`Total: R$ ${simulation.totalAmount} | CET: ${simulation.cetRate}% a.a.`);
console.log(`Primeiro vencimento: ${simulation.firstDueDate}`);

A simulação retorna installment_amount, total_amount, requested_amount (valor solicitado), principal_amount, iof_amount, fee_amount, interest_rate e cet_rate (Custo Efetivo Total anualizado).

Info: O campo installment_count depende da oferta. Algumas ofertas permitem que o cliente escolha entre diferentes prazos — nesse caso, você pode simular com valores diferentes. Se a oferta define um prazo fixo, use o installments retornado na oferta.

Tip: Valores monetários e taxas são números JSON (ex.: 25000.00), tanto nos SDKs quanto via HTTP direto.

Criar Empréstimo

Quando o cliente escolhe a simulação desejada, formalize o empréstimo. Os campos installment_count, installment_amount e first_due_date devem corresponder exatamente à simulação referenciada.

const loan = await client.loans.create({
  creditOfferId: offer.id,
  simulationId: simulation.id,
  installmentCount: simulation.installmentCount,
  installmentAmount: simulation.installmentAmount,
  firstDueDate: simulation.firstDueDate,
});

console.log(loan.id);     // "ln_550e8400..."
console.log(loan.status); // "awaiting_signatures"

Warning: Se installment_count, installment_amount ou first_due_date não corresponderem aos valores da simulação, a requisição é rejeitada com erro simulation_mismatch. Sempre use os valores exatos retornados pela simulação.

Assinar o Contrato

Ao criar o empréstimo, a signing_url já está disponível na resposta. Apresente-a ao cliente:

// Após criar o empréstimo, a signing_url está disponível imediatamente:
const loan = await client.loans.create({ /* ... */ });

if (loan.signingUrl) {
  // Abra loan.signingUrl no navegador do cliente
  // O cliente assina o contrato CCB diretamente nesta página
}

Após todas as assinaturas serem coletadas, o empréstimo avança automaticamente: awaiting_signatures -> processing -> active. Você recebe webhooks em cada etapa.

switch (event.type) {
  case "loan.processing":
    notifyCustomer(event.data.id,
      "Todas as assinaturas coletadas! Estamos processando a transferência.");
    break;

  case "loan.active":
    notifyCustomer(event.data.id,
      `R$ ${event.data.requested_amount} foi depositado na sua conta!`);
    break;
}

Próximo Passo

Quando sua integração estiver funcionando no sandbox, siga o checklist de Indo para Produção.