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

  1. 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"
    }
FieldFixed ScheduleDynamic 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 adjustedDueDate and newInterestRate are 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.

  1. Preview the new schedule

    GET /v1/rescheduleloans/{requestId}?command=previewLoanReschedule

    Returns 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=preview with the desired terms instead.

  2. 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—call POST /v1/loans/{loanId}/transactions?command=close-rescheduled later only if you manually originate a separate replacement loan.
  3. Reject (optional) If the preview is not acceptable, reject using ?command=reject instead 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-rescheduled only 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:

MetricBeforeAfter
Remaining installments6 (Aug–Jan)12 (Aug–Jan + 6 extra)
EMIUSD 1,066.19USD 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=repaymentSchedule after approval—the first recalculated installment shows principal/interest matching this EMI. | Transactions | RESCHEDULE request 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.