Simule parcelas, formalize o empréstimo, assine o contrato e acompanhe até o dinheiro cair na conta.
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.
| Status | Descrição |
|---|---|
available | Oferta pronta para simulação |
awaiting_signatures | Empréstimo criado, aguardando assinaturas do contrato CCB |
processing | Todas as assinaturas coletadas, processando desembolso |
active | Dinheiro na conta, ciclo de pagamento iniciado |
finished | Empréstimo quitado |
cancelled | Empréstimo cancelado |
error | Erro no processamento |
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.`);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_countdepende 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 oinstallmentsretornado na oferta.
Tip: Valores monetários e taxas são números JSON (ex.:
25000.00), tanto nos SDKs quanto via HTTP direto.
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_amountoufirst_due_datenão corresponderem aos valores da simulação, a requisição é rejeitada com errosimulation_mismatch. Sempre use os valores exatos retornados pela simulação.
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;
}Quando sua integração estiver funcionando no sandbox, siga o checklist de Indo para Produção.