Contract Termination
Operational Use Cases
- Merchant cancellation: For Dynamic repayment schedule engine contracts (BNPL or promotional plans) where the merchant cancels fulfillment and no further interest should accrue.
- Customer withdrawal before fulfillment: Borrower backs out before goods/services are delivered; lender needs to freeze the plan while funds are reconciled.
- Dispute management: Temporarily halt a Dynamic loan when a dispute escalates and the lender wants all amounts due immediately without classifying it as charge-off.
Only supported on the Dynamic repayment schedule engine. When you post the command, Embarc immediately records the outstanding principal/interest/fees as a CONTRACT_TERMINATION transaction dated on the current business day, sets the loan sub-status to CONTRACT_TERMINATION, and rewrites the schedule so the entire amount is due immediately. No cash or GL entries are posted—the balance stays on receivables until you follow up with a payoff, refund, charge-off, write-off, etc.
Lifecycle Snapshot
flowchart LR
A[Confirm termination trigger] --> B[Submit contract termination command]
B --> C[Loan tagged as Contract Termination]
C --> D[Future principal and fees accelerated]
D --> E{Resume plan later?}
E -->|No| F[Move to charge-off or closure]
E -->|Yes| G[Submit undoContractTermination]
API Playbook
-
Apply termination
POST /v1/loans/{loanId}/transactions?command=contractTermination { "locale": "en", "dateFormat": "dd MMM yyyy", "note": "Merchant cancelled order XYZ", "externalId": "CT-XYZ-2025-08-02" }Validations:
- Loan must be Active, Dynamic engine, not charged-off, and not already terminated.
- The transaction date is always the current business date (payload dates are ignored).
-
Undo (if needed)
POST /v1/loans/{loanId}/transactions?command=undoContractTermination { "note": "Dispute resolved", "reversalExternalId": "CT-XYZ-UNDO-2025-08-05" }Loan must still be in contract-termination sub-status and the termination transaction has to be the latest user transaction.
-
Next steps
- After termination, decide whether to charge off, close, or resume the loan depending on policy.
Tips for Operations Teams
- Use the
noteto capture merchant case IDs so future reviewers know why the plan was frozen. - Because the transaction is non-cash and posts no GL entries, plan any payoff/refund/charge-off flows after termination to cleanse the receivable.
- Auto- or scheduled repayments remain allowed, but they will now apply against the single accelerated installment.
Baseline Example (Dynamic Loan B)
Baseline B has three remaining installments (principal USD 300, interest USD 5.54) after the promo period. Posting contractTermination on 18 Feb 2026 (just before installment #4 falls due) produces:
| Before termination | Due date | Interest | Principal | Total |
|---|---|---|---|---|
| Installment #4 | 2026-02-21 | 2.77 | 100.00 | 102.77 |
| Installment #5 | 2026-03-07 | 1.85 | 100.00 | 101.85 |
| Installment #6 | 2026-03-21 | 0.92 | 100.00 | 100.92 |
| After termination (dated 2026-02-18) | Interest | Principal | Total |
|---|---|---|---|
| Accelerated payoff | 5.54 | 300.00 | 305.54 |
Embarc sums the outstanding principal/interest/fees and records them as a single accelerated installment dated on the contract-termination day. The loan remains Active but now carries the CONTRACT_TERMINATION sub-status, so downstream systems can treat the balance as immediately due even though no cash has moved yet.
Transactions created
| Date | Type | Total Amount | Allocation (Interest / Principal) | Notes |
|---|---|---|---|---|
| 18 Feb 2026 | CONTRACT_TERMINATION | 305.54 | 5.54 / 300.00 | Accelerates installments #4–#6 for Baseline B (all components rolled up). |
Loan summary delta
| Metric | Before | After | Impact |
|---|---|---|---|
| Principal outstanding | USD 300.00 | USD 300.00 | Balance unchanged until collections or refunds occur. |
| Interest outstanding | USD 5.54 | USD 5.54 | Interest recognised immediately. |
| Next due date | 21 Feb 2026 | 18 Feb 2026 | Accelerated to termination date. |
| Sub-status | Active | Contract Termination | Downstream dashboards can now filter by this sub-status. |
Accounting snapshot
No GL entries are posted when the contract termination command runs. The CONTRACT_TERMINATION transaction exists solely to collapse the repayment schedule and tag the loan; principal and interest balances remain on receivables until a later servicing action (repayment, refund, charge-off, write-off) resolves them.
Verification checklist
GET /v1/loans/{loanId}?associations=allbefore/after:- Confirm
loanSummary.statusshows the sub-status change. - Verify
repaymentSchedule.periodsnow contains a single accelerated entry dated 18 Feb 2026.
- Confirm
- Review
transactions[]for theCONTRACT_TERMINATIONrecord (amount 305.54 on the business date). - If you run separate dashboards, filter on the
CONTRACT_TERMINATIONsub-status to surface these loans.
Sandbox request template
POST /v1/loans/{{baselineDynamicLoanId}}/transactions?command=contractTermination
{
"locale": "en",
"dateFormat": "dd MMM yyyy",
"note": "Merchant cancelled order XYZ",
"externalId": "CT-BL-B-0001"
}Run immediately after cloning Baseline B (before installment #4 is processed) and follow the verification checklist.
Updated about 1 month ago
