As operações de refinanciamento consistem na repactuação de um ou mais contratos de empréstimos existentes, resultando na formalização de um novo contrato. Esta operação é uma ferramenta para obter melhores condições financeiras, seja por prazos ampliados, menores taxas de juros ou acesso a novos recursos financeiros (troco).
API de Refinanciamento — credit-flow-engine
Produto em desenvolvimento — não disponível para uso.
Esta API está em fase de desenvolvimento e ainda não foi liberada para integração.
Versão: v1
Base URL (Sandbox):https://platform.sbx.credit.celcoin.com.br/credit-flow-engine/v1
Base URL (Produção):https://platform.prod.credit.celcoin.com.br/credit-flow-engine/v1
Autenticação: Bearer Token (Authorization: Bearer <token>), seguindo o padrão de autenticação cel-credit — ver Autenticação
Formato: JSON (Content-Type: application/json)
Escopo da v1Esta primeira versão da API de Refinanciamento cobre o fluxo essencial de ponta a ponta. Alguns pontos ficaram fora do escopo desta entrega e já estão mapeados para versões futuras:
- Refinanciamento 1:1 — cada operação refinancia um único contrato original. A consolidação de múltiplos contratos em uma única operação (N:1) será liberada em versão futura.
- Saldo devedor informado pelo integrador — o cliente deve enviar o saldo devedor dos contratos a serem quitados no momento da simulação (ver seção 3). O cálculo automático desse saldo não faz parte desta versão.
- Desistência do refinanciamento — hoje tratada por fluxo manual (backoffice). A automatização do cancelamento dentro do prazo de arrependimento será endereçada em versão futura.
- Refinanciamento com garantias — ainda não suportado, pendente de liberação por parte do Dataprev. Previsto para versão futura.
Como funciona o refinanciamento
- O tomador tem até 7 dias corridos de direito de arrependimento. Os contratos originais só são quitados e baixados após essa janela.
- Por isso, o saldo devedor informado na simulação deve considerar a data de liquidação como
disbursement_date + 8 dias(ver seção 3).- Os dados financeiros da operação são travados na data de averbação — uma vez averbada,
disbursement_datee os valores financeiros não são mais alterados.- A CCB pode ser desembolsada até a data máxima de desembolso definida na simulação.
O que muda para o integradorEm relação à versão anterior, a nova API abstrai boa parte da complexidade do fluxo de refinanciamento: menos rotas e menos etapas ficam sob responsabilidade do originador, que passa a interagir com um fluxo mais simples de ponta a ponta.
Visão Geral do Fluxo
┌─────────────────────────────────────────────────────────────────────┐
│ SETUP (interno) │
│ Política → Template CCB │
└───────────────────────────────┬─────────────────────────────────────┘
│ feito uma vez por produto
▼
┌─────────────────────────────────────────────────────────────────────┐
│ 1. POST /credit-analysis │
│ Cliente envia CPF do tomador + contratos a refinanciar │
│ → Resposta imediata com credit_analysis_id (status: PENDING) │
└───────────────────────────────┬─────────────────────────────────────┘
│ análise assíncrona
▼
┌─────────────────────────────────────────────────────────────────────┐
│ 2. GET /credit-analysis/{id} [polling] │
│ Cliente consulta até status APPROVED ou DENIED │
│ → Retorna condições aprovadas (prazo, taxa, valores) │
└───────────────────────────────┬─────────────────────────────────────┘
│ apenas se APPROVED
▼
┌─────────────────────────────────────────────────────────────────────┐
│ 3. POST /credit-simulation │
│ Cliente simula com os parâmetros dentro das condições │
│ → Resposta síncrona com cronograma, IOF, CET (múltiplas datas) │
└───────────────────────────────┬─────────────────────────────────────┘
│ cliente escolhe 1 proposta
▼
┌─────────────────────────────────────────────────────────────────────┐
│ 4. POST /credit-simulation/{sim_id}/proposal/{prop_id}/approval │
│ Cliente envia dados do tomador + método de assinatura │
│ → Dispara workflow de aprovação (Temporal) │
└───────────────────────────────┬─────────────────────────────────────┘
│ processamento assíncrono
▼
┌─────────────────────────────────────────────────────────────────────┐
│ 5. GET /credit_operation/{id} [polling] │
│ Cliente aguarda status PENDING_SIGNATURE │
│ → Retorna detalhes da credit_operation │
└───────────────────────────────┬─────────────────────────────────────┘
│ status PENDING_SIGNATURE
▼
┌─────────────────────────────────────────────────────────────────────┐
│ 6. POST /credit_operation/{id}/signature/{signature_type} │
│ Parceiro envia o arquivo da CCB assinada pelo tomador │
│ → Avança para PENDING_QUALIFICATION │
└───────────────────────────────┬─────────────────────────────────────┘
│ processamento assíncrono
▼
┌─────────────────────────────────────────────────────────────────────┐
│ 7. POST /credit_operation/{id}/qualify │
│ Parceiro registra a qualificação (QUALIFIED / DENIED) │
│ → QUALIFIED: AWAITING_DISBURSEMENT · DENIED: CANCELED │
└─────────────────────────────────────────────────────────────────────┘
Formato de Erro
Todos os erros seguem o mesmo envelope:
{
"path": "/credit-flow-engine/v1/credit-analysis",
"status": 422,
"code": "CF0002",
"message": "credit analysis not eligible",
"meta": {
"details": ["analysis not approved"]
}
}| Campo | Tipo | Descrição |
|---|---|---|
path | string | Caminho da requisição que gerou o erro |
status | int | HTTP status code |
code | string | Código da categoria do erro (prefixo do serviço CF) |
message | string | Descrição genérica da categoria do erro |
meta.details | []string | Detalhes específicos do erro |
Categorias de erro:
| Código | HTTP | message (EN) | Descrição (PT) |
|---|---|---|---|
CF0001 | 422 | invalid schema or validation error | Erro de validação de schema ou campo inválido |
CF0002 | 422 | credit analysis not eligible | Análise de crédito não elegível para a operação (não aprovada ou aprovada, mas expirada) |
CF0003 | 404 | resource not found | Recurso não encontrado |
CF0004 | 422 | simulation parameters out of approved range | Parâmetros de simulação fora do range aprovado na análise |
CF0005 | 422 | simulation with negative net change | Simulação resultou em troco negativo |
CF0006 | 422 | finance amount exceeds approved maximum | Valor financiado acima do máximo aprovado na análise |
CF0007 | 422 | finance amount is below approved minimum | Valor financiado abaixo do mínimo aprovado na análise |
CF0008 | 422 | payment amount exceeds approved maximum | Valor de parcela acima do máximo aprovado na análise |
CF0009 | 422 | payment amount is below approved minimum | Valor de parcela abaixo do mínimo aprovado na análise |
CF0010 | 422 | interest rate exceeds approved maximum | Taxa de juros acima do máximo aprovado na análise |
CF0011 | 422 | interest rate is below approved minimum | Taxa de juros abaixo do mínimo aprovado na análise |
CF0012 | 422 | status transition is not allowed | Transição de status não permitida para o estado atual |
CF0013 | 422 | product rule violation | Violação de regra configurada no produto |
CF0014 | 422 | product refinancing not allowed | Violação de regra específica de refinanciamento (ex: dados ausentes) |
CF9997 | 409 | conflict | Conflito — recurso já existe |
CF9999 | 500 | internal server error | Erro inesperado. Nossa equipe está investigando. |
0 · Setup — Configuração Interna (backoffice)
O setup define os parâmetros do produto de crédito e a política que governa as operações, em duas etapas: cadastro da política de crédito e configuração do template de CCB.
0.1 Criar Política de Crédito
A política associa tipo de produto, provedor analítico e detalhes específicos como tempo de expiração e os workflows pertinentes ao fluxo de crédito.
0.2 Template CCB — Múltiplas Datas de Desembolso
Pré-requisito: o produto de refinanciamento deve ter um template de CCB configurado para aceitar múltiplas opções de desembolso e os detalhes específicos da operação de refinanciamento.
1 · Criar Análise de Crédito
POST /credit-flow-engine/v1/credit-analysis
Auth: Bearer Token
O cliente inicia a análise enviando o CPF do tomador e os contratos que deseja refinanciar. O processamento é assíncrono — a resposta retorna imediatamente com PENDING e o id da análise.
Request
{
"credit_policy_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"idempotency_key": "7b4e1234-dc90-11ed-afa1-0242ac120002",
"borrower": {
"taxpayer_id": "12345678900",
"type": "PERSON"
},
"credit_terms_conditions": [
{
"num_payments": { "min": 12, "max": 96 },
"financed_amount": { "min": 500.00, "max": 50000.00 },
"payment_amount": { "min": 50.00, "max": 2000.00 },
"interest_rate": { "min": 0.005, "max": 0.03 },
"interest_type": "pre_fixed",
"interest_rate_frequency": "MONTHLY"
}
],
"additional_data": {
"refinancing_data": {
"contracts": [
{ "contract_number": "32423423" }
]
}
}
}Campos do Request
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
credit_policy_id | uuid | ✅ | ID da política de crédito que governa esta análise. |
idempotency_key | uuid | ✅ | UUID gerado pelo cliente. Re-envios com a mesma chave retornam 409 Conflict — a análise não é duplicada. |
borrower | object | ✅ | Dados básicos do tomador para identificação. |
borrower.taxpayer_id | string | ✅ | CPF (11 dígitos) ou CNPJ (14 dígitos), somente números. |
borrower.type | string | ✅ | Tipo do tomador. Valores: PERSON · BUSINESS |
credit_terms_conditions | []object | ✅ | Faixas de condições permitidas para a simulação. Pelo menos um item. |
credit_terms_conditions[].num_payments.min | int | ✅ | Prazo mínimo em parcelas. |
credit_terms_conditions[].num_payments.max | int | ✅ | Prazo máximo em parcelas. |
credit_terms_conditions[].financed_amount.min | float64 | ✅ | Valor mínimo financiado. |
credit_terms_conditions[].financed_amount.max | float64 | ✅ | Valor máximo financiado. |
credit_terms_conditions[].payment_amount.min | float64 | ✅ | Valor mínimo de parcela. |
credit_terms_conditions[].payment_amount.max | float64 | ✅ | Valor máximo de parcela. |
credit_terms_conditions[].interest_rate.min | float64 | ⬜ | Taxa mínima em decimal. Ex: 0.01 = 1%. |
credit_terms_conditions[].interest_rate.max | float64 | ⬜ | Taxa máxima em decimal. Ex: 0.03 = 3%. |
credit_terms_conditions[].interest_type | string | ✅ | Modalidade de juros. Ex: pre_fixed. |
credit_terms_conditions[].interest_rate_frequency | string | ✅ | Frequência da taxa. Valores: MONTHLY · ANNUAL |
additional_data | object | ⬜ | Dados adicionais para necessários para executar a análise de crédito. Ex: Para operações de REFIN, contém os contratos a serem refinanciados. |
additional_data.refinancing_data | object | ✅* | Objeto de refinanciamento com a lista de contratos a verificar. |
additional_data.refinancing_data.contracts | []object | ✅* | Lista de contratos para verificação de elegibilidade. |
additional_data.refinancing_data.contracts[].contract_number | string | ✅* | Número do contrato a ser refinanciado. |
* Obrigatório para operações de refinanciamento.
Response 200 OK
200 OK{
"credit_analysis_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"status": "PENDING"
}| Campo | Tipo | Descrição |
|---|---|---|
credit_analysis_id | uuid | ID da análise criada. Usar para polling no passo 2. |
status | string | Status inicial sempre PENDING. |
Máquina de Status da Análise
┌─────────┐
│ PENDING │
└────┬────┘
│
┌────┴────────┐
▼ ▼
┌──────────┐ ┌────────┐
│ APPROVED │ │ DENIED │
└──────────┘ └────────┘
| Status | Descrição |
|---|---|
PENDING | Análise criada, aguardando processamento. |
APPROVED | Análise aprovada. Retorna credit_terms_conditions e decision_metadata. |
DENIED | Análise negada. status_reason indica o motivo da negativa. |
Erros Comuns
2 · Consultar Análise de Crédito (Polling)
GET /credit-flow-engine/v1/credit-analysis/{id}
Auth: Bearer Token
O cliente consulta periodicamente até obter um status final (APPROVED, DENIED).
Estratégia de polling recomendada: intervalo inicial de 3s, back-off exponencial até 30s, timeout máximo de 10 minutos.
Response 200 OK — APPROVED
200 OK — APPROVED{
"id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"credit_policy_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"status": "APPROVED",
"status_reason": null,
"expire_at": "2025-10-17T14:30:00Z",
"borrower": {
"taxpayer_id": "12345678900",
"type": "PERSON"
},
"credit_terms_conditions": [
{
"num_payments": { "min": 12, "max": 96 },
"financed_amount": { "min": 500.00, "max": 50000.00 },
"payment_amount": { "min": 50.00, "max": 2000.00 },
"interest_rate": { "min": 0.005, "max": 0.025 },
"interest_type": "pre_fixed",
"interest_rate_frequency": "MONTHLY"
}
],
"additional_data": {
"refinancing_data": {
"contracts": [
{ "contract_number": "32423423" }
]
}
},
"decision_metadata": {
"refinancing_result": {
"contracts": [
{ "contract_number": "32423423", "status": "ELIGIBLE" }
]
}
},
"events": [
{
"status": "PENDING",
"reason": null,
"created_at": "2025-10-10T10:00:00Z"
},
{
"status": "APPROVED",
"reason": null,
"created_at": "2025-10-10T10:00:15Z"
}
]
}Response 200 OK — DENIED
200 OK — DENIED{
"id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"credit_policy_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"status": "DENIED",
"status_reason": "NO_ACTIVE_CONTRACTS",
"expire_at": "2025-10-17T14:30:00Z",
"borrower": {
"taxpayer_id": "12345678900",
"type": "PERSON"
},
"credit_terms_conditions": [],
"additional_data": {
"refinancing_data": {
"contracts": [
{ "contract_number": "32423423" }
]
}
},
"decision_metadata": {
"refinancing_result": {
"contracts": [
{ "contract_number": "32423423", "status": "INELIGIBLE" }
]
}
},
"events": [
{
"status": "PENDING",
"reason": null,
"created_at": "2025-10-10T10:00:00Z"
},
{
"status": "DENIED",
"reason": "NO_ACTIVE_CONTRACTS",
"created_at": "2025-10-10T10:00:15Z"
}
]
}Campos da Response
| Campo | Tipo | Descrição |
|---|---|---|
id | uuid | ID da análise de crédito. |
credit_policy_id | uuid | ID da política usada. |
status | string | Status atual. Ver máquina de status. |
status_reason | string | null | Motivo da negativa, quando status DENIED. |
expire_at | datetime | null | Data/hora de expiração quando APPROVED. Após este momento a análise não pode mais ser usada para simulação. |
borrower.taxpayer_id | string | CPF/CNPJ do tomador. |
borrower.type | string | Tipo do tomador. |
credit_terms_conditions | []object | Condições aprovadas para simulação. Populado apenas em APPROVED. Campos: num_payments, financed_amount, payment_amount, interest_rate, interest_type, interest_rate_frequency. |
decision_metadata | object | Dados coletados na análise de crédito para tomada de decisão. |
decision_metadata.refinancing_result | object | Resultado de elegibilidade dos contratos refinanciados. |
decision_metadata.refinancing_result.contracts | []object | Elegibilidade por contrato. |
decision_metadata.refinancing_result.contracts[].contract_number | string | Número do contrato. |
decision_metadata.refinancing_result.contracts[].status | string | ELIGIBLE · INELIGIBLE |
events | []object | Histórico imutável de transições de status. |
Motivos de Negação (status_reason)
status_reason)| Valor | Descrição |
|---|---|
NO_ACTIVE_CONTRACTS | Nenhum contrato ativo elegível encontrado para o tomador. |
Erros Comuns
| Código | HTTP | message | meta.details | Causa |
|---|---|---|---|---|
CF0001 | 422 | invalid schema or validation error | id must be a valid UUID | Path param id não é um UUID válido. |
CF0003 | 404 | resource not found | Resource 'credit_analisys' with identifier '{id}' not found | Análise não encontrada para o ID informado. |
CF9999 | 500 | internal server error | - | Erro inesperado. Nossa equipe está investigando. |
3 · Criar Simulação
POST /credit-flow-engine/v1/credit-simulation
Auth: Bearer Token
Com a análise APPROVED, o cliente solicita simulações com diferentes combinações de parâmetros. A resposta é síncrona e retorna o cronograma completo para cada opção de desembolso.
Para operações de refinanciamento, é obrigatório informar o saldo devedor de cada contrato para cada opção de desembolso. O contrato refinanciado é liquidado no 8º dia após a averbação, respeitando os 7 dias corridos de prazo de desistência da operação. Portanto, o saldo devedor informado para cada contrato deve corresponder à data de desembolso acrescida de 8 dias.
Exemplo: desembolso em 14/06 → saldo devedor calculado para 22/06.
A simulação pode ser solicitada de duas formas mutuamente exclusivas — exatamente um dos campos abaixo deve ser informado:
requested_amount— o cliente informa o valor desejado de desembolso; o sistema calcula o valor da parcela.payment_amount— o cliente informa o valor fixo de parcela desejado; o sistema calcula o valor de desembolso.
O exemplo abaixo utiliza simulação por valor requisitado (
requested_amount).
Request
{
"credit_analysis_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"request_simulations": [
{
"num_payments": 24,
"interest_rate": 0.018,
"requested_amount": 5000.00,
"tac_amount": 0,
"tac_rate": 0,
"finance_fee": 0,
"insurance_amount": 0,
"insurance_rate": 0,
"disbursement_options": [
{
"disbursement_date": "2025-10-10",
"settlement_contract": [
{
"contract_number": "32423423",
"outstanding_balance": 1400.00,
"settlement_date": "2025-10-18"
}
]
},
{
"disbursement_date": "2025-10-11",
"settlement_contract": [
{
"contract_number": "32423423",
"outstanding_balance": 1395.00,
"settlement_date": "2025-10-19"
}
]
}
]
}
]
}Campos do Request
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
credit_analysis_id | uuid | ✅ | ID da análise de crédito com status APPROVED. |
request_simulations | []object | ✅ | Lista de simulações a calcular. Mínimo: 1 item. |
request_simulations[].num_payments | int | ✅ | Número de parcelas. Deve estar dentro do intervalo aprovado. |
request_simulations[].interest_rate | float64 | ✅ | Taxa de juros mensal (decimal). Validada contra o range interest_rate.min / interest_rate.max das credit_terms_conditions aprovadas. Erros: CF0010 (acima do máximo) · CF0011 (abaixo do mínimo). |
request_simulations[].requested_amount | float64 | ✅* | Valor solicitado pelo cliente para o financiamento. |
request_simulations[].payment_amount | float64 | ✅* | Valor fixo de parcela desejado. |
request_simulations[].tac_amount | float64 | ⬜ | Valor fixo da Tarifa de Abertura de Crédito. |
request_simulations[].tac_rate | float64 | ⬜ | Taxa percentual da TAC (alternativa a tac_amount). |
request_simulations[].finance_fee | float64 | ⬜ | Taxa financeira adicional sobre o principal. |
request_simulations[].insurance_amount | float64 | ⬜ | Valor do prêmio de seguro a incluir nas parcelas. |
request_simulations[].insurance_rate | float64 | ⬜ | Taxa de seguro sobre saldo devedor (alternativa a insurance_amount). |
request_simulations[].disbursement_options | []object | ✅ | Opções de data de desembolso. Mínimo conforme disbursement_options_min_quantity da config do produto. |
disbursement_options[].disbursement_date | string | ✅ | Data de desembolso desta opção. Formato: YYYY-MM-DD. Datas devem estar em ordem cronológica crescente. |
disbursement_options[].settlement_contract | []object | ✅* | Contratos a liquidar nesta data de desembolso. |
settlement_contract[].contract_number | string | ✅* | Número do contrato a ser liquidado. |
settlement_contract[].outstanding_balance | float64 | ✅* | Saldo devedor do contrato na data de liquidação. Deve ser positivo. |
settlement_contract[].settlement_date | string | ✅* | Data em que o contrato será liquidado. Formato: YYYY-MM-DD. |
requested_amountoupayment_amountdeve ser informado (não ambos, não nenhum).
settlement_contracté obrigatório para operações de refinanciamento.
Response 201 Created
201 Created{
"simulation_id": "c3d4e5f6-a7b8-9012-cdef-34567890abcd",
"created_at": "2025-10-10T10:05:00Z",
"expire_at": "2025-10-10T10:35:00Z",
"simulations": [
{
"proposal_simulation_id": "d4e5f6a7-b8c9-0123-def0-456789abcde0",
"proposal_details": [
{
"disbursement_date": "2025-10-10",
"num_payments": 24,
"disbursement_amount": 5000.00,
"financed_amount": 5089.26,
"requested_amount": 5000.00,
"total_amount_owed": 7418.40,
"payment_amount": 309.10,
"net_change": 2750.00,
"interest_rate": 0.018,
"annual_interest_rate": 0.23869,
"monthly_effective_interest_rate": 0.019624,
"annual_effective_interest_rate": 0.264821,
"iof_amount": 89.26,
"iof_base_rate": 0.0038,
"iof_daily_rate": 0.000082,
"schedule_type": "MONTHLY",
"first_payment_date": "2025-11-10",
"last_payment_date": "2027-10-10",
"schedule": [
{
"period": 1,
"payment_date": "2025-11-10",
"payment": 309.10,
"principal": 218.30,
"interest": 90.80,
"iof": 0.00,
"balance": 4870.96,
"running_day": 31
}
],
"settlement_contracts_data": [
{
"contract_number": "32423423",
"outstanding_balance": 1400.00,
"settlement_date": "2025-10-10"
}
]
}
]
}
]
}Campos da Response
| Campo | Tipo | Descrição |
|---|---|---|
simulation_id | uuid | ID do lote de simulação. Usado no passo de aprovação. |
created_at | datetime | Timestamp de criação. |
expire_at | datetime | As propostas expiram neste momento. |
simulations | []object | Uma entrada por request_simulation enviado. |
simulations[].proposal_simulation_id | uuid | ID desta proposta específica. Usado no passo 4. |
simulations[].proposal_details | []object | Uma entrada por data de desembolso simulada. |
proposal_details[].disbursement_date | string | Data de desembolso desta opção. |
proposal_details[].num_payments | int | Número total de parcelas. |
proposal_details[].disbursement_amount | float64 | Valor líquido da operação. Para operações de refinanciamento, é a soma do valor de quitação do contrato e troco ao tomador. |
proposal_details[].financed_amount | float64 | Principal + encargos financiados. |
proposal_details[].requested_amount | float64 | Valor solicitado pelo cliente para o financiamento. |
proposal_details[].total_amount_owed | float64 | Soma de todos as parcelas a valor futuro. |
proposal_details[].payment_amount | float64 | Valor fixo de cada parcela. |
proposal_details[].net_change | float64 | Valor do troco ao tomador. Valor que o tomador efetivamente recebe no bolso. |
proposal_details[].interest_rate | float64 | Taxa nominal mensal (decimal). |
proposal_details[].annual_interest_rate | float64 | Taxa nominal anual (decimal). |
proposal_details[].monthly_effective_interest_rate | float64 | CET mensal (decimal). |
proposal_details[].annual_effective_interest_rate | float64 | CET anual (decimal). |
proposal_details[].iof_amount | float64 | Valor total do IOF. |
proposal_details[].iof_base_rate | float64 | Alíquota base IOF (fixo). Ex: 0.0038. |
proposal_details[].iof_daily_rate | float64 | Alíquota diária IOF. Ex: 0.000082. |
proposal_details[].schedule_type | string | Periodicidade do cronograma: MONTHLY · WEEKLY · BIWEEKLY |
proposal_details[].first_payment_date | string | Data do primeiro vencimento. |
proposal_details[].last_payment_date | string | Data do último vencimento (maturidade). |
proposal_details[].schedule | []object | Cronograma completo de amortização. |
schedule[].period | int | Número da parcela (começa em 1). |
schedule[].payment_date | string | Data de vencimento. |
schedule[].payment | float64 | Total da parcela. |
schedule[].principal | float64 | Amortização do principal. |
schedule[].interest | float64 | Juros do período. |
schedule[].iof | float64 | IOF diário acumulado até este vencimento. |
schedule[].balance | float64 | Saldo devedor após pagamento. Zero na última. |
schedule[].running_day | int | Dias corridos desde o desembolso até este vencimento. |
proposal_details[].settlement_contracts_data | []object | Dados de liquidação dos contratos refinanciados. Presente apenas em operações de refinanciamento. |
settlement_contracts_data[].contract_number | string | Número do contrato liquidado. |
settlement_contracts_data[].outstanding_balance | float64 | Saldo devedor na data de liquidação. |
settlement_contracts_data[].settlement_date | string | Data de liquidação do contrato. Formato: YYYY-MM-DD. |
Erros Comuns
| Código | HTTP | Descrição genérica | Detalhe (meta.details) | Causa |
|---|---|---|---|---|
CF0002 | 422 | credit analysis not eligible | analysis not approved | Análise ainda não está APPROVED. |
CF0002 | 422 | credit analysis not eligible | analysis expired | Análise expirou. |
CF0001 | 422 | invalid schema or validation error | interest rate is required | Taxa de juros ausente. |
CF0001 | 422 | invalid schema or validation error | invalid number of payments | Número de parcelas fora do intervalo aprovado. |
CF0001 | 422 | invalid schema or validation error | invalid disbursement date | Data de desembolso inválida. |
CF0001 | 422 | invalid schema or validation error | disbursement dates must be in consecutive order | Datas de desembolso devem ser consecutivas. |
CF0001 | 422 | invalid schema or validation error | invalid outstanding balance | Saldo devedor zerado ou negativo. |
CF0006 | 422 | finance amount exceeds approved maximum | Finance amount {v} exceeds approved maximum {max} for date {date} | Valor financiado acima do range aprovado. |
CF0007 | 422 | finance amount is below approved minimum | Finance amount {v} is below approved minimum {min} for date {date} | Valor financiado abaixo do range aprovado. |
CF0008 | 422 | payment amount exceeds approved maximum | Payment amount {v} exceeds approved maximum {max} for date {date} | Valor de parcela acima do range aprovado. |
CF0009 | 422 | payment amount is below approved minimum | Payment amount {v} is below approved minimum {min} for date {date} | Valor de parcela abaixo do range aprovado. |
CF0010 | 422 | interest rate exceeds approved maximum | Interest rate {v} exceeds approved maximum {max} for date {date} | Taxa acima do range aprovado na análise. |
CF0011 | 422 | interest rate is below approved minimum | Interest rate {v} is below approved minimum {min} for date {date} | Taxa abaixo do range aprovado na análise. |
CF0013 | 422 | product rule violation | CET variation {v} exceeds the maximum allowed {max} for product type {type} | Variação da CET acima do max_cet_rate da config. |
CF0013 | 422 | product rule violation | interest rate above the maximum allowed | Taxa acima do interest_rate_max da config. |
CF0013 | 422 | product rule violation | number of installments above the maximum allowed | Parcelas acima do max_installments da config. |
CF0001 | 422 | invalid schema or validation error | disbursement options quantity below the minimum required | Menos datas que o disbursement_options_min_quantity. |
CF0005 | 422 | simulation with negative net change | Simulation with negative net change | net_change resultou negativo. |
CF0003 | 404 | resource not found | simulation not found or is expired | Simulação não encontrada ou expirada. |
4 · Aprovar Proposta — Criar CCB
POST /credit-flow-engine/v1/credit-simulation/{simulation_id}/proposal/{proposal_simulation_id}/approval
Auth: Bearer Token
O cliente escolhe uma proposta específica (combinação simulation_id + proposal_simulation_id) e envia os dados completos do tomador, método de assinatura e custom_variables (se aplicável).
Path Parameters
| Parâmetro | Tipo | Descrição |
|---|---|---|
simulation_id | uuid | ID do lote de simulação (campo simulation_id da response do passo 3). |
proposal_simulation_id | uuid | ID da proposta específica escolhida (campo proposal_simulation_id da response do passo 3). |
Request
{
"funding_id": "e746ba58-8cfe-48e0-872a-a4109baba935",
"signature": {
"authentication_options": {
"mode": "DOC_SIGN"
},
"collect_method": "LINK",
"provider": "UNICO"
},
"borrower": {
"taxpayer_id": "12345678900",
"full_name": "João Silva Santos",
"nationality": "Brasileira",
"birth_date": "1985-03-15",
"pep": false,
"sex": "MALE",
"marital_status": "MARRIED",
"marital_property_system": "PARTIAL_COMMUNION",
"mothers_name": "Maria Santos",
"email_address": "[email protected]",
"occupation": "Analista de Sistemas",
"monthly_income": 8500.00,
"education_level": "HIGHER_EDUCATION",
"phone": {
"country_code": "55",
"area_code": "11",
"number": "912345678"
},
"id_document": {
"number": "12345678",
"issuer": "SSP/SP",
"issue_date": "2010-05-20",
"type": "NATIONAL_ID"
},
"address": {
"street_name": "Rua das Flores",
"street_number": 123,
"postal_code": "01310100",
"district": "Jardins",
"city": "São Paulo",
"state_code": "SP",
"country_code": "BRA",
"extra_info": "Apto 42"
},
"pix": {
"key": "[email protected]",
"key_type": "EMAIL"
}
}
}Nota: Para desembolso via conta bancária em vez de Pix, substituir
pixporexternal_account. Não é possível informar ambos.
Campos do Request
Raiz:
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
funding_id | uuid | ✅ | ID do fundo que financiará a operação. |
signature.collect_method | string | ✅ | Canal de entrega da assinatura ao tomador. Valores: LINK · EMAIL · WHATSAPP · NONE |
signature.provider | string | ✅ | Provedor de assinatura eletrônica. Valores: UNICO · (outros por contrato) |
signature.authentication_options | object | ✅ | Configuração de autenticação. |
signature.authentication_options.mode | string | ✅ | Modo de autenticação. Valores: DOC_SIGN · FACIAL |
borrower | object | ✅ | Dados completos do tomador. |
Borrower — Identificação:
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
borrower.taxpayer_id | string | ✅ | CPF (11 dígitos) ou CNPJ (14 dígitos). |
borrower.full_name | string | ✅ | Nome completo conforme documento. |
borrower.nationality | string | ✅ | Nacionalidade. |
borrower.birth_date | string | ✅ | Data de nascimento. Formato: YYYY-MM-DD. |
borrower.email_address | string | ✅ | E-mail para comunicações e link de assinatura. |
borrower.occupation | string | ✅ | Profissão atual. |
borrower.pep | bool | ⬜ | Pessoa Exposta Politicamente. |
borrower.sex | string | ⬜ | Valores: MALE · FEMALE · OTHER |
borrower.marital_status | string | ⬜ | Valores: SINGLE · MARRIED · DIVORCED · WIDOWED · SEPARATED |
borrower.marital_property_system | string | ⬜ | Obrigatório se marital_status = MARRIED. Valores: PARTIAL_COMMUNION · UNIVERSAL_COMMUNION · TOTAL_SEPARATION · FINAL_PARTICIPATION |
borrower.mothers_name | string | ⬜ | Nome completo da mãe. |
borrower.monthly_income | float64 | ⬜ | Renda mensal bruta. |
borrower.education_level | string | ⬜ | Nível de escolaridade. |
Borrower — Contato (phone):
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
borrower.phone | object | ✅ | Dados de contato telefônico. |
borrower.phone.country_code | string | ✅ | DDI. Ex: "55". |
borrower.phone.area_code | string | ✅ | DDD sem zero. Ex: "11". |
borrower.phone.number | string | ✅ | Número sem DDD. |
Borrower — Documento (id_document):
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
borrower.id_document | object | ⬜ | Documento de identificação. |
borrower.id_document.number | string | ✅* | Número do documento. |
borrower.id_document.issuer | string | ✅* | Órgão emissor. Ex: "SSP/SP". |
borrower.id_document.issue_date | string | ✅* | Data de emissão. Formato: YYYY-MM-DD. |
borrower.id_document.type | string | ✅* | Tipo. Valores: NATIONAL_ID · PROOF_OF_INCOME · SRC_AUTHORIZATION · OTHER |
Borrower — Endereço (address):
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
borrower.address | object | ⬜ | Endereço residencial. |
borrower.address.street_name | string | ✅* | Logradouro. |
borrower.address.street_number | int | ✅* | Número. |
borrower.address.postal_code | string | ✅* | CEP, somente dígitos. |
borrower.address.district | string | ✅* | Bairro. |
borrower.address.city | string | ✅* | Cidade. |
borrower.address.state_code | string | ✅* | UF com 2 letras. Ex: "SP". |
borrower.address.country_code | string | ✅* | País (ISO 3166-1 alpha-3). Ex: "BRA". |
borrower.address.extra_info | string | ⬜ | Complemento. |
Borrower — Desembolso via Pix:
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
borrower.pix | object | ✅† | Chave Pix para receber o desembolso. |
borrower.pix.key | string | ✅* | Chave Pix. |
borrower.pix.key_type | string | ✅* | Tipo. Valores: TAXPAYER_ID · EMAIL · PHONE_NUMBER · ALEATORY_KEY |
Borrower — Desembolso via Conta Bancária (alternativa ao Pix):
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
borrower.external_account | object | ✅† | Conta bancária para receber o desembolso. |
borrower.external_account.bank_code | string | ✅* | Código COMPE do banco (3 dígitos). |
borrower.external_account.bank_branch | string | ✅* | Agência sem dígito. |
borrower.external_account.bank_account | string | ✅* | Conta sem dígito. |
borrower.external_account.bank_account_digit | string | ✅* | Dígito verificador. |
borrower.external_account.bank_account_type | string | ✅* | Tipo. Valores: CHECKING · SAVINGS |
borrower.external_account.bank_ispb_code | string | ✅* | Código ISPB (8 dígitos). |
borrower.external_account.bank_taxpayer_id | string | ✅* | CNPJ do banco. |
borrower.external_account.name | string | ✅* | Nome do titular da conta. |
† Exatamente um entre
pixeexternal_accountdeve ser informado.
* Obrigatório quando o objeto pai está presente.
Response 201 Created
201 Created{
"credit_operation_id": "b1c2d3e4-f5a6-7890-bcde-f01234567890",
"status": "PENDING"
}| Campo | Tipo | Descrição |
|---|---|---|
credit_operation_id | uuid | ID da operação de crédito criada. Usar para polling no passo 5. |
status | string | Status inicial sempre PENDING. |
Erros Comuns
5 · Consultar Operação de Crédito (Polling)
GET /credit-flow-engine/v1/credit_operation/{credit_operation_id}
Auth: Bearer Token
Após a aprovação, a operação de crédito é processada de forma assíncrona. O cliente consulta periodicamente até o status final.
Path Parameters
| Parâmetro | Tipo | Descrição |
|---|---|---|
credit_operation_id | uuid | ID retornado no passo 4. |
Response 200 OK
200 OK{
"id": "b1c2d3e4-f5a6-7890-bcde-f01234567890",
"proposal_simulation_id": "d4e5f6a7-b8c9-0123-def0-456789abcde0",
"status": "ISSUED",
"contract_number": "123456",
"created_at": "2025-10-10T10:10:00Z",
"updated_at": "2025-10-10T10:10:45Z",
"details": {
"loan_details": {
"total_processing_cost": 89.26,
"annual_interest_rate": 0.23869,
"interest_rate": 0.018,
"annual_effective_interest_rate": 0.264821,
"monthly_effective_interest_rate": 0.019624,
"total_amount_owed": 7418.40,
"disbursement_amount": 5000.00,
"financed_amount": 5089.26,
"iof_daily_rate": 0.000082,
"iof_amount": 89.26,
"iof_base_rate": 0.0038,
"payment_amount": 309.10,
"issue_date": "2025-10-10",
"last_payment_date": "2027-10-10",
"interest_pre_type": "BASE_360",
"interest_rate_frequency": "MONTHLY",
"amortization_type": "PRICE",
"insurance_amount": 0.00
},
"funding": {
"id": "e746ba58-8cfe-48e0-872a-a4109baba935",
"legal_name": "Fundo de Investimento ABC",
"alias": "FI-ABC"
},
"disbursement_attempts": [
{
"id": "a1b2c3d4",
"status": "SUCCESS",
"status_description": "",
"requested_at": "2025-10-10T10:11:00Z",
"processed_at": "2025-10-10T10:11:30Z",
"payment_orders": [
{
"id": "",
"amount": 2750.00,
"type": "PIX",
"status": "PAID",
"description": "Desembolso ao tomador"
},
{
"id": "",
"amount": 1400.00,
"type": "PIX",
"status": "PAID",
"description": ""
}
]
}
],
"disbursement": {
"requested_at": "2025-10-10T10:11:00Z",
"processed_at": "2025-10-10T10:11:30Z",
"receipt": "E00038166202510101211AbCdEf123456"
}
}
}Campos da Response
| Campo | Tipo | Descrição |
|---|---|---|
id | uuid | ID da operação de crédito. |
proposal_simulation_id | uuid | ID da proposta aprovada. |
status | string | Status atual. Ver máquina de status. |
contract_number | string | null | Número do contrato. Disponível após PENDING_SIGNATURE. |
created_at | datetime | Data de criação da operação. |
updated_at | datetime | null | Última atualização. |
details | object | null | Detalhes financeiros e de desembolso. Disponível após PENDING_SIGNATURE. |
details.loan_details | object | Valores financeiros da CCB gerada. |
details.funding | object | Dados do fundo financiador. |
details.disbursement_attempts | []object | Histórico de tentativas de desembolso. |
disbursement_attempts[].payment_orders | []object | Ordens de pagamento por beneficiário. |
payment_orders[].type | string | Tipo de pagamento: PIX · TED · (outros) |
payment_orders[].status | string | Status da ordem de pagamento. |
details.disbursement | object | Dados do desembolso efetivado (receipt). |
Máquina de Status da Operação de Crédito
┌─────────┐
│ PENDING │
└────┬────┘
▼
┌───────────────────┐
│ PENDING_SIGNATURE │
└────────┬──────────┘
▼
┌───────────────────────┐
│ PENDING_QUALIFICATION │
└───────────┬───────────┘
▼
┌───────────────────────┐
│ AWAITING_DISBURSEMENT │
└─────┬─────────────────┘
▼
┌────────────┐◄──────────────────────────┐
│ DISBURSING │ │
└──────┬─────┘ │
┌────┴──────────────────────────┐ │
▼ ▼ │
┌────────┐ ┌─────────────────────────────┐ │
│ ISSUED │ │ DISBURSEMENT_ATTEMPT_FAILED ├─┘
└────────┘ └─────────────────────────────┘
Em qualquer etapa: ──► CANCELED
| Status | Descrição | É final? |
|---|---|---|
PENDING | Operação criada, aguardando início do workflow. | Não |
PENDING_SIGNATURE | Aguardando assinatura da CCB pelo tomador. | Não |
PENDING_QUALIFICATION | CCB assinada, aguardando qualificação (se aplicável) | Não |
AWAITING_DISBURSEMENT | Operação pronta para iniciar o desembolso. | Não |
DISBURSING | Desembolso em processamento. | Não |
DISBURSEMENT_ATTEMPT_FAILED | Falha na tentativa de desembolso. Após correção da causa raiz — por exemplo, dados bancários incorretos do tomador — a operação retorna a DISBURSING para nova tentativa. | Não |
ISSUED | Desembolso efetuado com sucesso. | Sim |
CANCELED | Operação cancelada. Pode ocorrer em qualquer etapa do fluxo. | Sim |
Erros Comuns
6 · Registrar Assinatura
Após a CCB ser gerada, a operação entra no status PENDING_SIGNATURE. Este endpoint notifica o sistema de que a assinatura do tomador foi coletada diretamente pelo parceiro, avançando a operação para PENDING_QUALIFICATION.
Método: POST
Path: /credit-flow-engine/v1/credit_operation/{credit_operation_id}/signature/{signature_type}
Content-Type: multipart/form-data
6.1 Request
Path Parameters
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
credit_operation_id | uuid | ✅ | ID da operação de crédito. |
signature_type | string | ✅ | Tipo de assinatura. Valores: PHYSICAL |
Form Data
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
file | file | ✅ | Arquivo da CCB assinada pelo tomador. |
6.2 Response — 200 OK
{
"status": "SUCCESS"
}| Campo | Tipo | Descrição |
|---|---|---|
status | string | Confirmação do registro. Valor fixo: SUCCESS |
Erros Comuns
7 · Qualificar Operação de Crédito
Após a assinatura da CCB, a operação entra no status PENDING_QUALIFICATION. Este endpoint permite que o parceiro registre o resultado da qualificação — aprovando ou negando a operação.
Método: POST
Path: /credit-flow-engine/v1/credit_operation/{credit_operation_id}/qualify
7.1 Request
Path Parameters
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
credit_operation_id | uuid | ✅ | ID da operação de crédito. |
Body
{
"status": "QUALIFIED"
}Campos do Body
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
status | string | ✅ | Resultado da qualificação. QUALIFIED avança a operação para o próximo step. DENIED move a operação para CANCELED. |
7.2 Response — 200 OK
{
"status_qualify": "QUALIFIED",
"credit_operation_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}Campos da Response
| Campo | Tipo | Descrição |
|---|---|---|
status_qualify | string | Status da qualificação registrado: QUALIFIED · DENIED |
credit_operation_id | uuid | ID da operação de crédito qualificada. |