Renegociação com IOF Spread e Desconto Somente Juros - BNPL
Resumo
Esta página documenta o fluxo de renegociação em lote para operações BNPL em que a operação de crédito foi criada com iof_charge_method: "spread". Nesse modelo, o IOF não é financiado nas parcelas — ele é calculado normalmente, mas adicionado ao assignment_amount (valor de cessão), e não às prestações do tomador.
Além disso, é possível utilizar o campo discount_validation: "only_interest_discount" em cada operação do array operations[] para restringir os descontos aplicados somente à parcela de juros. Se o desconto exceder os juros e atingir o principal ou a multa, a API retornará o erro InvalidDiscountAmountOnlyInterestDiscount.
O fluxo utiliza os endpoints de lote: simulação (POST /renegotiation/batch_proposal_simulation) seguida da proposta (POST /renegotiation/batch_proposal). O campo discount_validation é definido por operação no array operations[], e não no nível raiz do payload.
O campo iof_charge_method é definido no momento da criação da operação de crédito (credit-operation-api), e não durante a renegociação. Quando iof_charge_method: "spread":
- O IOF é calculado normalmente (IOF base + IOF adicional), mas não é deduzido das parcelas do tomador
- O IOF é adicionado ao
assignment_amount— ou seja, o custo do IOF é refletido no valor de cessão - As parcelas do tomador são "limpas" de IOF
Os três valores possíveis são:
"financed"(padrão) — IOF é financiado nas parcelas (deduzido do valor creditado ao tomador)"spread"— IOF é adicionado ao valor de cessão (assignment_amount), não às parcelas"free"— Sem IOF (total_iof = 0)
Quando discount_validation: "only_interest_discount" é definido em uma operação, o sistema valida que o desconto aplicado em cada parcela não inclui amortização de principal (discount_principal_amortization_amount) nem multa (discount_fine_amount). Somente os juros (juros prefixados) podem ser descontados.
Se qualquer parcela tiver um desconto que atinja o principal ou a multa, a API retorna o erro InvalidDiscountAmountOnlyInterestDiscount e a requisição inteira falha.
Passo 1: Simulação em Lote
Os campos discount_amount e discount_percentage NÃO podem ser enviados juntos no mesmo payload (nível raiz).
Request Body
{
"amortization_type": "installment_payment",
"reference_date": "2026-04-20",
"discount_percentage": 0.0,
"operations": [
{
"debt_key": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"discount_validation": "only_interest_discount",
"installments": [
{
"installment_key": "f9e8d7c6-b5a4-3210-fedc-ba9876543210"
}
]
}
]
}
Body Params
| Campo | Tipo | Descrição | Caracteres |
|---|---|---|---|
amortization_type* | string | Tipo de amortização | Enumeradores Amortization Type |
reference_date* | string | Data de referência para cálculo do valor presente (precisa ser D+1) | 10 |
discount_percentage | float | Percentual de desconto sobre o valor presente ((1 - percentual) × Valor Presente) | 10 |
discount_amount | float | Valor de desconto aplicado sobre o valor presente | 10 |
operations* | array | Lista de operações a serem renegociadas | Objeto Operations |