Servicing Overview

Embarc exposes a consistent set of servicing commands across the two loan engines. Each action below explains what it does, when to use it, and whether it applies to Fixed Schedule or Dynamic Schedule (promotion/BNPL) loans


ActionEndpoint / CommandMoney Moves?DescriptionFixedDynamic
Repayment / Prepay payoffPayments API → POST /v1/loans/{loanId}/payments/initiate✅ borrower → lenderCollects a scheduled or payoff amount. The loan balance updates after settlement because PaymentSettlementLoanTransactionListener posts the repayment.
Foreclosure payoffPOST /v1/loans/{loanId}/transactions?command=foreclosure✅ borrower → lenderCalculates a forced payoff, records the foreclosure transaction, and moves status to Foreclosed after funds arrive.
Record external paymentPayments API → POST /v1/loans/{loanId}/payments/record✅ borrower → lenderMirrors a payment collected outside Embarc (e.g., cash desk, lockbox) and applies the repayment allocation strategy.
Close (zero balance)POST /v1/loans/{loanId}?command=closeMarks a zero-balance loan as Closed after prior refunds or repayments have cleared it.
Undo approvalPOST /v1/loans/{loanId}?command=undoApprovalRolls an Approved loan back to Submitted so terms can be edited before re-approval.
Charge-offPOST /v1/loans/{loanId}/transactions?command=charge-off❌ (GL loss booking only)Sets status to Charged-off, freezes accruals per chargeOffBehaviour, and posts loss entries by component.
Write-offPOST /v1/loans/{loanId}/transactions?command=writeoff❌ (GL write-off only)Clears receivables and moves the loan to Closed – Written-off. Future recoveries use recoverypayment.
Payout reversalPOST /v1/loans/{loanId}/transactions?command=payoutRefund (after Payments API payout)✅ borrower → lenderClaws back lender-funded disbursements (ACH/RTGS). May auto-create an interest refund.
Merchant creditPOST /v1/loans/{loanId}/transactions?command=merchantIssuedRefund (after merchant reimburses)✅ merchant → lenderMerchant-funded credit that reduces the schedule without moving lender cash; eligible for automatic interest refunds.
Excess payment refundPOST /v1/loans/{loanId}/transactions?command=refundByCash (after Payments API refund)✅ lender → borrowerReturns amounts the borrower paid in advance while the loan remains Active (amount ≤ paid-in-advance balance).
Credit balance refundPOST /v1/loans/{loanId}/transactions?command=creditBalanceRefund (after Payments API refund)✅ lender → borrowerSends back surplus payments when the loan is Overpaid and flips status back to Active.
Charge refundPOST /v1/loans/{loanId}/transactions?command=chargeRefund (after Payments API refund)✅ lender → borrowerReturns cash already collected for a fee or penalty; updates the linked charge history.
Goodwill creditPOST /v1/loans/{loanId}/transactions?command=goodwillCredit (after Payments API payout if cash-funded)✅ lender → borrower (when cash-funded)Institution-funded credit that behaves like a repayment so delinquency and allocation follow standard rules.
Interest refundPOST /v1/loans/{loanId}/transactions/{refundId}?command=interest-refund (or auto via refund)✅ lender → borrowerReverses previously accrued interest tied to payout reversals or merchant credits; can be automatic or manual.
Waive interestPOST /v1/loans/{loanId}/transactions?command=waiveinterestRemoves unpaid accrued interest up to the waiver date while leaving principal intact.
Promo interest creditPOST /v1/loans/{loanId}/transactions?command=interestPaymentWaiverDynamic-only synthetic repayment that follows the Promo / Payment Waiver allocation row (interest-first).
Interest pausePOST /v1/loans/{loanId}/interest-pausesAdds a term variation that halts interest accrual for a defined date window (dynamic installment, interest-bearing, IR-enabled loans only).
Re-agePOST /v1/loans/{loanId}/transactions?command=reAgeAppends hardship installments for non-interest Dynamic loans after maturity, redistributing outstanding principal.
Re-amortizePOST /v1/loans/{loanId}/transactions?command=reAmortizeRedistributes remaining principal across future installments on non-interest Dynamic loans before maturity.
Reschedule workflowPOST /v1/rescheduleloans → GET ...?command=previewLoanReschedule → POST ...?command=approveRewrites the loan schedule. Fixed loans can combine grace, extra-term, EMI, or rate changes; Dynamic loans must choose either adjustedDueDate or newInterestRate.
Contract terminationPOST /v1/loans/{loanId}/transactions?command=contractTerminationDynamic BNPL action that accelerates remaining amounts, tags the loan as Contract Termination, and awaits downstream payoff/refund/charge-off.
Buy-down feePayments API → paymentCommand=buyDownFee + POST /v1/loans/{loanId}/transactions?command=buyDownFee✅ merchant → lenderLogs a merchant-funded subsidy and places it in the buy-down amortization pipeline (LoanBuyDownFeeAmortizationProcessingService).
Capitalized incomePOST /v1/loans/{loanId}/transactions?command=capitalizedIncome❌ (cash received earlier)Moves earned-but-deferred revenue into a liability that LoanCapitalizedIncomeAmortizationProcessingService recognizes over time.
Down payment captureAuto via enableDownPayment at disbursement or POST /v1/loans/{loanId}/transactions?command=downPayment✅ borrower → lenderCollects the borrower’s upfront contribution for Dynamic loans; marks the down payment period as paid.
Recovery paymentPOST /v1/loans/{loanId}/transactions?command=recoverypayment✅ borrower / debt buyer → lenderLogs cash collected after charge-off or write-off while keeping the loan closed; credits recovery income accounts.
Charge adjustmentPOST /v1/loans/{loanId}/charges/{chargeId}?command=adjustmentReduces the amount of a posted charge without moving cash; creates a CHARGE_ADJUSTMENT transaction.
ChargebackPOST /v1/loans/{loanId}/transactions/{transactionId}?command=chargeback✅ lender → borrower/processorReinstates part or all of a prior repayment when the processor claws funds back (card/ACH dispute). Reopens principal on
the business date; blocked on Fixed loans that have interest recalculation enabled
⚠️ (only when IR is off)
Promise to PayPOST /v1/loans/{loanId}/promises-to-payCreates and tracks a payment promise with its own schedule and standing; evaluation marks installments due/missed, and plans close as completed/defaulted or cancel with a reason. Does not change the loan’s amortization.
Bankruptcy managementPOST /v1/clients/{clientId}/bankruptciesRecords client bankruptcy cases (chapter, petition, stay, claims/objections); enabling stay cancels autopay and blocks new enrollment; active check gates downstream workflows

How to choose the right action

  • Payments & refunds – Use the Payments API for all money-moving operations (repayments, payoffs, refunds, subsidies).
  • Early payoff / closure – Use prepay, foreclosure, or close for voluntary or forced settlements.
  • Hardship & restructuring – Use interest pause, re-age, re-amortize, or reschedule for delinquency relief (Dynamic-only where marked).
  • Loss recognition – Use charge-off when keeping the account for recoveries; use write-off for final closure.
  • Promos & BNPL – Use contract termination, buy-down fee, and capitalized income for BNPL and merchant-funded programs.
  • Non-cash adjustments – Use goodwill credit, waive interest, or promo interest credits where you need concessions without moving cash.

Servicing tips

  1. Check the engine – Confirm if the loan is Fixed or Dynamic before using Dynamic-only actions.
  2. Enforce permissions – Each action has its own permission + audit trail; ensure roles are correctly scoped.
  3. Use undo carefully – Undo actions are only allowed while the original command is the latest transaction.


Did this page help you?