Examples — Extraordinary Amortization
This page presents two creation scenarios. The integrator's interaction is fire-and-forget: it only makes the creation call and QI Tech orchestrates settlement, finalization and cancellation internally. There is no tenant-facing webhook dedicated to the status transitions of the extraordinary event_conciliation; confirmation of the operation's effect is observed through the reports and webhooks that already exist for the underlying operation (e.g. commercial_paper.operation_status_change).
Scenario 1: partial early payoff of an instalment (early_amortization)
Covers a single future instalment, with partial payment allowed.
POST /event_conciliation/extraordinary_event
{
"security_key": "971380d4-469e-48f6-a64b-3afb8a88109e",
"investment_key": "<investment_key>",
"amortization_type": "early_amortization",
"amount": 1500.00,
"reference_date": "2026-04-24",
"due_date": "2026-04-24",
"installment_list": [3]
}
Response: 201 Created
{
"extraordinary_event_conciliation_key": "11111111-1111-4111-8111-111111111111",
"security_key": "971380d4-469e-48f6-a64b-3afb8a88109e",
"amortization_type": "early_amortization",
"total_expected_amount": 1500.00,
"total_discount_amount": 0,
"status": "pending_conciliation",
"reference_date": "2026-04-24",
"due_date": "2026-04-24",
"event_conciliation_list": [
{
"event_conciliation_key": "22222222-2222-4222-8222-222222222222",
"installment_key": "33333333-3333-4333-8333-333333333333",
"expected_amount": 1500.00,
"discount_amount": 0,
"due_date": "2026-04-24",
"status": "pending_conciliation",
"event_conciliation_type": "extraordinary"
}
]
}
From this 201 onward the integration is complete on the integrator's side. When the payment of R$ 1,500.00 reaches the corresponding settlement account, QI Tech (account-liquidation-api) settles the instalment conciliation event internally and updates the paid_amount; when the sum covers total_expected_amount - tolerance_amount, the parent transitions to paid. If the payment does not come in, the event is cancelled or finalized by the security-service daily settlement routine.
Scenario 2: full payoff with discount (present_amount with 2 installments)
Creates an amortization with a consolidated discount covering two instalments.
POST /event_conciliation/extraordinary_event
{
"security_key": "971380d4-469e-48f6-a64b-3afb8a88109e",
"investment_key": "<investment_key>",
"amortization_type": "present_amount",
"amount": 5000.00,
"reference_date": "2026-04-24",
"due_date": "2026-04-24",
"installment_list": [1, 2],
"total_discount": 100.00
}
Response 201 Created — two instalment conciliation events are generated with the amounts distributed according to the present_amount engine (interest → penalty → principal). See Create Extraordinary Amortization for the complete response shape.
From the 201 onward the integrator's interaction is the same as in Scenario 1: QI Tech settles each instalment conciliation event when the corresponding payments come in, and finalizes or cancels the event internally if the amounts do not arrive within the settlement window.
Scenario 3: settling future instalments at nominal value (nominal_amount)
The issuer wants to settle instalments 3 and 4 before maturity by paying the nominal value of each (principal + interest at maturity), with no Present Value discount. The reference_date precedes both due dates.
{
"security_key": "971380d4-469e-48f6-a64b-3afb8a88109e",
"investment_key": "<investment_key>",
"amortization_type": "nominal_amount",
"amount": 18670.00,
"reference_date": "2026-02-08",
"due_date": "2026-06-06",
"installment_list": [3, 4]
}
Response 201 Created — one instalment conciliation event per instalment, with expected_amount equal to the nominal value of each (9360.00 and 9310.00 in this example). If the amount were lower than the sum, instalment 3 would be covered first and instalment 4 would receive the remainder. Overdue instalments return EVC100030; an amount above the sum of the nominal values returns EVC100031. Settlement accepts partial payment, as in early_amortization.
Scenario 4: full settlement for a negotiated amount (full_amortization)
Issuer and investor agree to settle instalments 1 and 2 for R$ 10,000.00, although their Present Values on the reference_date are R$ 9,460.00 and R$ 9,410.00. The amount is split proportionally to Present Value and each instalment is settled in full at liquidation.
{
"security_key": "971380d4-469e-48f6-a64b-3afb8a88109e",
"investment_key": "<investment_key>",
"amortization_type": "full_amortization",
"amount": 10000.00,
"reference_date": "2026-02-08",
"due_date": "2026-02-08",
"installment_list": [1, 2]
}
Response 201 Created — two instalment conciliation events with expected_amount 5013.25 and 4986.75 (the sum equals the amount) and discount_amount 4446.75 and 4423.25. An amount above the sum of the Present Values returns EVC100035; an amount too small to give every instalment a positive share returns EVC100034.
Troubleshooting
The most common error codes when calling creation. For the complete list, refer to the Error catalog.
EVC100015(400, EarlyAmortizationRequiresSingleInstallment) —early_amortizationaccepts exactly one instalment ininstallment_list. Reduce it to 1.EVC000007(404, InstallmentNumberNotFound) — someinstallment_numbersent ininstallment_listdoes not exist in the targetsecurity. Check the numbers returned byGET /security/security/{security_key}before calling.QIT000001(400) — schema rejected. Typical cause: sending the legacyinstallment_key_listfield (removed) or non-integer items ininstallment_list.EVC100016(400, EarlyAmortizationInstallmentOverdue) — the target instalment ofearly_amortizationis overdue and is not eligible. Select a future instalment.EVC100017(400, EarlyAmortizationAmountExceedsPresentValue) — inearly_amortization, theamountexceeded the Present Value of the instalment. Confirm the PV before calling.EVC100030(400, InstallmentNotEligibleForNominalAmortization) — innominal_amount, some instalment ininstallment_listis already overdue on thereference_date. Select only future instalments.EVC100031(400, NominalAmountExceedsInstallmentsNominalValue) — innominal_amount, theamountexceeded the sum of the nominal values (principal + interest) of the selected instalments. Lower theamount.EVC100033(400, DistributionDoesNotMatchAmount) — the sum of the distributedexpected_amountdiffers from the declaredamountby more than R$ 0.01. Forpresent_amount, send anamountequal to the sum of the Present Values minustotal_discount.EVC100034(400, DistributionWithZeroInstallment) — a selected instalment would end with anexpected_amountof zero (for example,total_discountequal to the Present Value, or anamountexhausted before the last instalment). Select only instalments theamountcovers.EVC100035(400, AmountExceedsInstallmentsPresentValue) — theamountexceeds the sum of the selected instalments' Present Values. Lower theamount.EVC100013(424, SecurityApiUnavailable) — Security API temporarily unavailable when fetching the Present Value; this is transient. Wait and repeat the call.SEC000031(400, PostFixedSecurityNotSupported) — post-fixed assets (CDI, IPCA, IGPM) are not supported in V1. Usepre_priceorpre_sacassets.