Reschedule
Operational Use Cases
- Formal restructuring: Change interest rate, term, or installment structure without booking a brand-new loan.
- Product migration: Reconfigure an existing contract so it mirrors the target product (e.g., BNPL plan → longer tenor) while keeping the same loan ID.
- Regulatory relief programs: Apply grace periods, interest changes, or extra terms in bulk after disasters or government directives.
Supported on both Fixed and Dynamic repayment schedule engines. Approval applies loan-term variations to the existing loan; interest recalculation continues to follow the product’s settings.
Lifecycle Snapshot
sequenceDiagram
participant Ops
participant Platform
Ops->>Platform: Submit reschedule request
Platform-->>Ops: Request ID returned with status Pending
Ops->>Platform: Request schedule preview
Platform-->>Ops: Previewed schedule shared
Ops->>Platform: Approve reschedule request
Platform-->>Ops: Loan schedule updated in place
API Playbook
- Create the reschedule request
POST /v1/rescheduleloans { "loanId": 512, "locale": "en", "dateFormat": "dd MMM yyyy", "submittedOnDate": "01 Oct 2025", "graceOnPrincipal": 1, "graceOnInterest": 1, "numberOfRepayments": 12, "newInterestRate": 16.5, "interestCalculationMethod": "declining-balance", "rescheduleReasonId": 2, "note": "Restructure after hardship" }
| Field | Fixed Schedule | Dynamic Schedule |
|---|---|---|
graceOnPrincipal, graceOnInterest, extraTerms, emi | ✅ Allowed (translates into grace/term-variation records). | ❌ Rejected—Dynamic loans cannot change grace/extra terms through this workflow. |
adjustedDueDate, rescheduleFromDate, newInterestRate, recalculateInterest, note, rescheduleReason* | ✅ | ✅ (but only one of adjustedDueDate or newInterestRate may be supplied per request) |
Dynamic guardrail: requests that include both
adjustedDueDateandnewInterestRateare rejected. Submit separate requests if you need to change the rate and move a due date. You are still working with the same loan; the payload simply tells Embarc how to alter its schedule within the constraints above.
-
Preview the new schedule
GET /v1/rescheduleloans/{requestId}?command=previewLoanRescheduleReturns the recalculated installment table for the existing loan (Fixed or Dynamic). If you only need a quote (without persisting a request), call
POST /v1/rescheduleloans?command=previewwith the desired terms instead. -
Approve
POST /v1/rescheduleloans/{requestId}?command=approve { "locale": "en", "dateFormat": "dd MMM yyyy", "approvedOnDate": "05 Oct 2025" }Approval automatically:
- Applies the requested term variations to the current loan record.
- Archives the prior schedule, regenerates the new one, reprocesses transactions/accruals, and keeps the loan Active.
- Leaves status changes (e.g.,
close-rescheduled) entirely up to you—callPOST /v1/loans/{loanId}/transactions?command=close-rescheduledlater only if you manually originate a separate replacement loan.
-
Reject (optional) If the preview is not acceptable, reject using
?command=rejectinstead of approving.
Tips for Operations Teams
- Always preview to confirm the borrower’s new payment plan before approving.
- If you need to add extra terms or grace periods, use Fixed Schedule products. Dynamic loans are limited to due-date and interest changes; attempting to pass grace/extra-term fields will raise
rescheduleSelectedOperationNotSupported. - Because the same loan ID stays active, update downstream systems (statements, autopay) only if rates, dates, or EMI amounts change.
- Use
close-rescheduledonly when your business process spins up a separate successor loan outside this workflow; reschedule approval itself does not create one. - For Dynamic loans, ensure Advanced Payment Allocation rules are configured correctly in the product used for restructuring so future payments allocate as expected.
Baseline Examples
Fixed Loan A – Extend tenor + new rate
Request:
{
"loanId": {{baselineFixedLoanId}},
"locale": "en",
"dateFormat": "dd MMM yyyy",
"submittedOnDate": "13 Jul 2026",
"rescheduleFromDate": "13 Aug 2026",
"rescheduleReasonId": 1,
"extraTerms": 6,
"newInterestRate": 10.0,
"recalculateInterest": true
}Effect:
| Metric | Before | After |
|---|---|---|
| Remaining installments | 6 (Aug–Jan) | 12 (Aug–Jan + 6 extra) |
| EMI | USD 1,066.19 | USD 580.20 |
EMI was recomputed using the standard annuity formula with the remaining principal (USD 6,179.05), new rate (10% annual = 0.8333% monthly), and new term (12 months). You can confirm by calling
GET /v1/loans/{id}?associations=repaymentScheduleafter approval—the first recalculated installment shows principal/interest matching this EMI. | Transactions |RESCHEDULErequest ID + approval | No new loan created; schedule rewritten |
Dynamic Loan B – Move due date
Request:
{
"loanId": {{baselineDynamicLoanId}},
"locale": "en",
"dateFormat": "dd MMM yyyy",
"submittedOnDate": "01 Feb 2026",
"rescheduleFromDate": "21 Feb 2026",
"rescheduleReasonId": 2,
"adjustedDueDate": "07 Mar 2026",
"note": "Delay due to shipping"
}Result: installment #4 due date shifts to 07 Mar 2026; installments #5–#6 cascade accordingly. No extra terms are permitted.
Dynamic Loan B – Change promo rate (separate request)
Request:
{
"loanId": {{baselineDynamicLoanId}},
"locale": "en",
"dateFormat": "dd MMM yyyy",
"submittedOnDate": "15 Feb 2026",
"rescheduleFromDate": "21 Feb 2026",
"rescheduleReasonId": 3,
"newInterestRate": 18.0,
"note": "Merchant-funded APR change"
}Result: installments #4–#6 are regenerated with the new nominal rate while the due dates stay intact. Because adjustedDueDate was omitted, the validator accepts the request.
Updated about 1 month ago
