Refinanciamento

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 v1

Esta 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_date e 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 integrador

Em 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"]
  }
}
CampoTipoDescrição
pathstringCaminho da requisição que gerou o erro
statusintHTTP status code
codestringCódigo da categoria do erro (prefixo do serviço CF)
messagestringDescrição genérica da categoria do erro
meta.details[]stringDetalhes específicos do erro

Categorias de erro:

CódigoHTTPmessage (EN)Descrição (PT)
CF0001422invalid schema or validation errorErro de validação de schema ou campo inválido
CF0002422credit analysis not eligibleAnálise de crédito não elegível para a operação (não aprovada ou aprovada, mas expirada)
CF0003404resource not foundRecurso não encontrado
CF0004422simulation parameters out of approved rangeParâmetros de simulação fora do range aprovado na análise
CF0005422simulation with negative net changeSimulação resultou em troco negativo
CF0006422finance amount exceeds approved maximumValor financiado acima do máximo aprovado na análise
CF0007422finance amount is below approved minimumValor financiado abaixo do mínimo aprovado na análise
CF0008422payment amount exceeds approved maximumValor de parcela acima do máximo aprovado na análise
CF0009422payment amount is below approved minimumValor de parcela abaixo do mínimo aprovado na análise
CF0010422interest rate exceeds approved maximumTaxa de juros acima do máximo aprovado na análise
CF0011422interest rate is below approved minimumTaxa de juros abaixo do mínimo aprovado na análise
CF0012422status transition is not allowedTransição de status não permitida para o estado atual
CF0013422product rule violationViolação de regra configurada no produto
CF0014422product refinancing not allowedViolação de regra específica de refinanciamento (ex: dados ausentes)
CF9997409conflictConflito — recurso já existe
CF9999500internal server errorErro inesperado. Nossa equipe está investigando.

0 · Setup — Configuração Interna (backoffice)

⚠️

Interno — executado pela equipe Celcoin antes de qualquer cliente operar.

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

CampoTipoObrigatórioDescrição
credit_policy_iduuidID da política de crédito que governa esta análise.
idempotency_keyuuidUUID gerado pelo cliente. Re-envios com a mesma chave retornam 409 Conflict — a análise não é duplicada.
borrowerobjectDados básicos do tomador para identificação.
borrower.taxpayer_idstringCPF (11 dígitos) ou CNPJ (14 dígitos), somente números.
borrower.typestringTipo do tomador. Valores: PERSON · BUSINESS
credit_terms_conditions[]objectFaixas de condições permitidas para a simulação. Pelo menos um item.
credit_terms_conditions[].num_payments.minintPrazo mínimo em parcelas.
credit_terms_conditions[].num_payments.maxintPrazo máximo em parcelas.
credit_terms_conditions[].financed_amount.minfloat64Valor mínimo financiado.
credit_terms_conditions[].financed_amount.maxfloat64Valor máximo financiado.
credit_terms_conditions[].payment_amount.minfloat64Valor mínimo de parcela.
credit_terms_conditions[].payment_amount.maxfloat64Valor máximo de parcela.
credit_terms_conditions[].interest_rate.minfloat64Taxa mínima em decimal. Ex: 0.01 = 1%.
credit_terms_conditions[].interest_rate.maxfloat64Taxa máxima em decimal. Ex: 0.03 = 3%.
credit_terms_conditions[].interest_typestringModalidade de juros. Ex: pre_fixed.
credit_terms_conditions[].interest_rate_frequencystringFrequência da taxa. Valores: MONTHLY · ANNUAL
additional_dataobjectDados 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_dataobject✅*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_numberstring✅*Número do contrato a ser refinanciado.

* Obrigatório para operações de refinanciamento.

Response 200 OK

{
  "credit_analysis_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
  "status": "PENDING"
}
CampoTipoDescrição
credit_analysis_iduuidID da análise criada. Usar para polling no passo 2.
statusstringStatus inicial sempre PENDING.

Máquina de Status da Análise

     ┌─────────┐
     │ PENDING │
     └────┬────┘
          │
     ┌────┴────────┐
     ▼             ▼
┌──────────┐  ┌────────┐
│ APPROVED │  │ DENIED │
└──────────┘  └────────┘
StatusDescrição
PENDINGAnálise criada, aguardando processamento.
APPROVEDAnálise aprovada. Retorna credit_terms_conditions e decision_metadata.
DENIEDAnálise negada. status_reason indica o motivo da negativa.

Erros Comuns

🚧

Em elaboração — esta seção será complementada em versão futura.


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).

⚠️

Apenas polling disponível — notificação via webhook será disponibilizada em versão futura.

Estratégia de polling recomendada: intervalo inicial de 3s, back-off exponencial até 30s, timeout máximo de 10 minutos.

Response 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

{
  "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

CampoTipoDescrição
iduuidID da análise de crédito.
credit_policy_iduuidID da política usada.
statusstringStatus atual. Ver máquina de status.
status_reasonstring | nullMotivo da negativa, quando status DENIED.
expire_atdatetime | nullData/hora de expiração quando APPROVED. Após este momento a análise não pode mais ser usada para simulação.
borrower.taxpayer_idstringCPF/CNPJ do tomador.
borrower.typestringTipo do tomador.
credit_terms_conditions[]objectCondições aprovadas para simulação. Populado apenas em APPROVED. Campos: num_payments, financed_amount, payment_amount, interest_rate, interest_type, interest_rate_frequency.
decision_metadataobjectDados coletados na análise de crédito para tomada de decisão.
decision_metadata.refinancing_resultobjectResultado de elegibilidade dos contratos refinanciados.
decision_metadata.refinancing_result.contracts[]objectElegibilidade por contrato.
decision_metadata.refinancing_result.contracts[].contract_numberstringNúmero do contrato.
decision_metadata.refinancing_result.contracts[].statusstringELIGIBLE · INELIGIBLE
events[]objectHistórico imutável de transições de status.

Motivos de Negação (status_reason)

ValorDescrição
NO_ACTIVE_CONTRACTSNenhum contrato ativo elegível encontrado para o tomador.

Erros Comuns

CódigoHTTPmessagemeta.detailsCausa
CF0001422invalid schema or validation errorid must be a valid UUIDPath param id não é um UUID válido.
CF0003404resource not foundResource 'credit_analisys' with identifier '{id}' not foundAnálise não encontrada para o ID informado.
CF9999500internal 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

CampoTipoObrigatórioDescrição
credit_analysis_iduuidID da análise de crédito com status APPROVED.
request_simulations[]objectLista de simulações a calcular. Mínimo: 1 item.
request_simulations[].num_paymentsintNúmero de parcelas. Deve estar dentro do intervalo aprovado.
request_simulations[].interest_ratefloat64Taxa 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_amountfloat64✅*Valor solicitado pelo cliente para o financiamento.
request_simulations[].payment_amountfloat64✅*Valor fixo de parcela desejado.
request_simulations[].tac_amountfloat64Valor fixo da Tarifa de Abertura de Crédito.
request_simulations[].tac_ratefloat64Taxa percentual da TAC (alternativa a tac_amount).
request_simulations[].finance_feefloat64Taxa financeira adicional sobre o principal.
request_simulations[].insurance_amountfloat64Valor do prêmio de seguro a incluir nas parcelas.
request_simulations[].insurance_ratefloat64Taxa de seguro sobre saldo devedor (alternativa a insurance_amount).
request_simulations[].disbursement_options[]objectOpções de data de desembolso. Mínimo conforme disbursement_options_min_quantity da config do produto.
disbursement_options[].disbursement_datestringData 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_numberstring✅*Número do contrato a ser liquidado.
settlement_contract[].outstanding_balancefloat64✅*Saldo devedor do contrato na data de liquidação. Deve ser positivo.
settlement_contract[].settlement_datestring✅*Data em que o contrato será liquidado. Formato: YYYY-MM-DD.

requested_amount ou payment_amount deve ser informado (não ambos, não nenhum).
settlement_contract é obrigatório para operações de refinanciamento.

Response 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

CampoTipoDescrição
simulation_iduuidID do lote de simulação. Usado no passo de aprovação.
created_atdatetimeTimestamp de criação.
expire_atdatetimeAs propostas expiram neste momento.
simulations[]objectUma entrada por request_simulation enviado.
simulations[].proposal_simulation_iduuidID desta proposta específica. Usado no passo 4.
simulations[].proposal_details[]objectUma entrada por data de desembolso simulada.
proposal_details[].disbursement_datestringData de desembolso desta opção.
proposal_details[].num_paymentsintNúmero total de parcelas.
proposal_details[].disbursement_amountfloat64Valor 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_amountfloat64Principal + encargos financiados.
proposal_details[].requested_amountfloat64Valor solicitado pelo cliente para o financiamento.
proposal_details[].total_amount_owedfloat64Soma de todos as parcelas a valor futuro.
proposal_details[].payment_amountfloat64Valor fixo de cada parcela.
proposal_details[].net_changefloat64Valor do troco ao tomador. Valor que o tomador efetivamente recebe no bolso.
proposal_details[].interest_ratefloat64Taxa nominal mensal (decimal).
proposal_details[].annual_interest_ratefloat64Taxa nominal anual (decimal).
proposal_details[].monthly_effective_interest_ratefloat64CET mensal (decimal).
proposal_details[].annual_effective_interest_ratefloat64CET anual (decimal).
proposal_details[].iof_amountfloat64Valor total do IOF.
proposal_details[].iof_base_ratefloat64Alíquota base IOF (fixo). Ex: 0.0038.
proposal_details[].iof_daily_ratefloat64Alíquota diária IOF. Ex: 0.000082.
proposal_details[].schedule_typestringPeriodicidade do cronograma: MONTHLY · WEEKLY · BIWEEKLY
proposal_details[].first_payment_datestringData do primeiro vencimento.
proposal_details[].last_payment_datestringData do último vencimento (maturidade).
proposal_details[].schedule[]objectCronograma completo de amortização.
schedule[].periodintNúmero da parcela (começa em 1).
schedule[].payment_datestringData de vencimento.
schedule[].paymentfloat64Total da parcela.
schedule[].principalfloat64Amortização do principal.
schedule[].interestfloat64Juros do período.
schedule[].ioffloat64IOF diário acumulado até este vencimento.
schedule[].balancefloat64Saldo devedor após pagamento. Zero na última.
schedule[].running_dayintDias corridos desde o desembolso até este vencimento.
proposal_details[].settlement_contracts_data[]objectDados de liquidação dos contratos refinanciados. Presente apenas em operações de refinanciamento.
settlement_contracts_data[].contract_numberstringNúmero do contrato liquidado.
settlement_contracts_data[].outstanding_balancefloat64Saldo devedor na data de liquidação.
settlement_contracts_data[].settlement_datestringData de liquidação do contrato. Formato: YYYY-MM-DD.

Erros Comuns

CódigoHTTPDescrição genéricaDetalhe (meta.details)Causa
CF0002422credit analysis not eligibleanalysis not approvedAnálise ainda não está APPROVED.
CF0002422credit analysis not eligibleanalysis expiredAnálise expirou.
CF0001422invalid schema or validation errorinterest rate is requiredTaxa de juros ausente.
CF0001422invalid schema or validation errorinvalid number of paymentsNúmero de parcelas fora do intervalo aprovado.
CF0001422invalid schema or validation errorinvalid disbursement dateData de desembolso inválida.
CF0001422invalid schema or validation errordisbursement dates must be in consecutive orderDatas de desembolso devem ser consecutivas.
CF0001422invalid schema or validation errorinvalid outstanding balanceSaldo devedor zerado ou negativo.
CF0006422finance amount exceeds approved maximumFinance amount {v} exceeds approved maximum {max} for date {date}Valor financiado acima do range aprovado.
CF0007422finance amount is below approved minimumFinance amount {v} is below approved minimum {min} for date {date}Valor financiado abaixo do range aprovado.
CF0008422payment amount exceeds approved maximumPayment amount {v} exceeds approved maximum {max} for date {date}Valor de parcela acima do range aprovado.
CF0009422payment amount is below approved minimumPayment amount {v} is below approved minimum {min} for date {date}Valor de parcela abaixo do range aprovado.
CF0010422interest rate exceeds approved maximumInterest rate {v} exceeds approved maximum {max} for date {date}Taxa acima do range aprovado na análise.
CF0011422interest rate is below approved minimumInterest rate {v} is below approved minimum {min} for date {date}Taxa abaixo do range aprovado na análise.
CF0013422product rule violationCET variation {v} exceeds the maximum allowed {max} for product type {type}Variação da CET acima do max_cet_rate da config.
CF0013422product rule violationinterest rate above the maximum allowedTaxa acima do interest_rate_max da config.
CF0013422product rule violationnumber of installments above the maximum allowedParcelas acima do max_installments da config.
CF0001422invalid schema or validation errordisbursement options quantity below the minimum requiredMenos datas que o disbursement_options_min_quantity.
CF0005422simulation with negative net changeSimulation with negative net changenet_change resultou negativo.
CF0003404resource not foundsimulation not found or is expiredSimulaçã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âmetroTipoDescrição
simulation_iduuidID do lote de simulação (campo simulation_id da response do passo 3).
proposal_simulation_iduuidID 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 pix por external_account. Não é possível informar ambos.

Campos do Request

Raiz:

CampoTipoObrigatórioDescrição
funding_iduuidID do fundo que financiará a operação.
signature.collect_methodstringCanal de entrega da assinatura ao tomador. Valores: LINK · EMAIL · WHATSAPP · NONE
signature.providerstringProvedor de assinatura eletrônica. Valores: UNICO · (outros por contrato)
signature.authentication_optionsobjectConfiguração de autenticação.
signature.authentication_options.modestringModo de autenticação. Valores: DOC_SIGN · FACIAL
borrowerobjectDados completos do tomador.

Borrower — Identificação:

CampoTipoObrigatórioDescrição
borrower.taxpayer_idstringCPF (11 dígitos) ou CNPJ (14 dígitos).
borrower.full_namestringNome completo conforme documento.
borrower.nationalitystringNacionalidade.
borrower.birth_datestringData de nascimento. Formato: YYYY-MM-DD.
borrower.email_addressstringE-mail para comunicações e link de assinatura.
borrower.occupationstringProfissão atual.
borrower.pepboolPessoa Exposta Politicamente.
borrower.sexstringValores: MALE · FEMALE · OTHER
borrower.marital_statusstringValores: SINGLE · MARRIED · DIVORCED · WIDOWED · SEPARATED
borrower.marital_property_systemstringObrigatório se marital_status = MARRIED. Valores: PARTIAL_COMMUNION · UNIVERSAL_COMMUNION · TOTAL_SEPARATION · FINAL_PARTICIPATION
borrower.mothers_namestringNome completo da mãe.
borrower.monthly_incomefloat64Renda mensal bruta.
borrower.education_levelstringNível de escolaridade.

Borrower — Contato (phone):

CampoTipoObrigatórioDescrição
borrower.phoneobjectDados de contato telefônico.
borrower.phone.country_codestringDDI. Ex: "55".
borrower.phone.area_codestringDDD sem zero. Ex: "11".
borrower.phone.numberstringNúmero sem DDD.

Borrower — Documento (id_document):

CampoTipoObrigatórioDescrição
borrower.id_documentobjectDocumento de identificação.
borrower.id_document.numberstring✅*Número do documento.
borrower.id_document.issuerstring✅*Órgão emissor. Ex: "SSP/SP".
borrower.id_document.issue_datestring✅*Data de emissão. Formato: YYYY-MM-DD.
borrower.id_document.typestring✅*Tipo. Valores: NATIONAL_ID · PROOF_OF_INCOME · SRC_AUTHORIZATION · OTHER

Borrower — Endereço (address):

CampoTipoObrigatórioDescrição
borrower.addressobjectEndereço residencial.
borrower.address.street_namestring✅*Logradouro.
borrower.address.street_numberint✅*Número.
borrower.address.postal_codestring✅*CEP, somente dígitos.
borrower.address.districtstring✅*Bairro.
borrower.address.citystring✅*Cidade.
borrower.address.state_codestring✅*UF com 2 letras. Ex: "SP".
borrower.address.country_codestring✅*País (ISO 3166-1 alpha-3). Ex: "BRA".
borrower.address.extra_infostringComplemento.

Borrower — Desembolso via Pix:

CampoTipoObrigatórioDescrição
borrower.pixobject✅†Chave Pix para receber o desembolso.
borrower.pix.keystring✅*Chave Pix.
borrower.pix.key_typestring✅*Tipo. Valores: TAXPAYER_ID · EMAIL · PHONE_NUMBER · ALEATORY_KEY

Borrower — Desembolso via Conta Bancária (alternativa ao Pix):

CampoTipoObrigatórioDescrição
borrower.external_accountobject✅†Conta bancária para receber o desembolso.
borrower.external_account.bank_codestring✅*Código COMPE do banco (3 dígitos).
borrower.external_account.bank_branchstring✅*Agência sem dígito.
borrower.external_account.bank_accountstring✅*Conta sem dígito.
borrower.external_account.bank_account_digitstring✅*Dígito verificador.
borrower.external_account.bank_account_typestring✅*Tipo. Valores: CHECKING · SAVINGS
borrower.external_account.bank_ispb_codestring✅*Código ISPB (8 dígitos).
borrower.external_account.bank_taxpayer_idstring✅*CNPJ do banco.
borrower.external_account.namestring✅*Nome do titular da conta.

† Exatamente um entre pix e external_account deve ser informado.
* Obrigatório quando o objeto pai está presente.

Response 201 Created

{
  "credit_operation_id": "b1c2d3e4-f5a6-7890-bcde-f01234567890",
  "status": "PENDING"
}
CampoTipoDescrição
credit_operation_iduuidID da operação de crédito criada. Usar para polling no passo 5.
statusstringStatus inicial sempre PENDING.

Erros Comuns

🚧

Em elaboração — esta seção será complementada em versão futura.


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âmetroTipoDescrição
credit_operation_iduuidID retornado no passo 4.

Response 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

CampoTipoDescrição
iduuidID da operação de crédito.
proposal_simulation_iduuidID da proposta aprovada.
statusstringStatus atual. Ver máquina de status.
contract_numberstring | nullNúmero do contrato. Disponível após PENDING_SIGNATURE.
created_atdatetimeData de criação da operação.
updated_atdatetime | nullÚltima atualização.
detailsobject | nullDetalhes financeiros e de desembolso. Disponível após PENDING_SIGNATURE.
details.loan_detailsobjectValores financeiros da CCB gerada.
details.fundingobjectDados do fundo financiador.
details.disbursement_attempts[]objectHistórico de tentativas de desembolso.
disbursement_attempts[].payment_orders[]objectOrdens de pagamento por beneficiário.
payment_orders[].typestringTipo de pagamento: PIX · TED · (outros)
payment_orders[].statusstringStatus da ordem de pagamento.
details.disbursementobjectDados 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
StatusDescriçãoÉ final?
PENDINGOperação criada, aguardando início do workflow.Não
PENDING_SIGNATUREAguardando assinatura da CCB pelo tomador.Não
PENDING_QUALIFICATIONCCB assinada, aguardando qualificação (se aplicável)Não
AWAITING_DISBURSEMENTOperação pronta para iniciar o desembolso.Não
DISBURSINGDesembolso em processamento.Não
DISBURSEMENT_ATTEMPT_FAILEDFalha 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
ISSUEDDesembolso efetuado com sucesso.Sim
CANCELEDOperação cancelada. Pode ocorrer em qualquer etapa do fluxo.Sim

Erros Comuns

🚧

Em elaboração — esta seção será complementada em versão futura.


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

⚠️

Pré-requisito: a operação deve estar no status PENDING_SIGNATURE.


6.1 Request

Path Parameters

CampoTipoObrigatórioDescrição
credit_operation_iduuidID da operação de crédito.
signature_typestringTipo de assinatura. Valores: PHYSICAL

Form Data

CampoTipoObrigatórioDescrição
filefileArquivo da CCB assinada pelo tomador.

6.2 Response — 200 OK

{
  "status": "SUCCESS"
}
CampoTipoDescrição
statusstringConfirmação do registro. Valor fixo: SUCCESS

Erros Comuns

🚧

Em elaboração — esta seção será complementada em versão futura.


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

⚠️

Pré-requisito: a operação deve estar no status PENDING_QUALIFICATION.


7.1 Request

Path Parameters

CampoTipoObrigatórioDescrição
credit_operation_iduuidID da operação de crédito.

Body

{
  "status": "QUALIFIED"
}

Campos do Body

CampoTipoObrigatórioDescrição
statusstringResultado 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

CampoTipoDescrição
status_qualifystringStatus da qualificação registrado: QUALIFIED · DENIED
credit_operation_iduuidID da operação de crédito qualificada.

Erros Comuns

🚧

Em elaboração — esta seção será complementada em versão futura.


Catálogo Completo de Erros

🚧

Em elaboração — esta seção será complementada em versão futura.