Prepay Loan


Operational Use Cases

  • Voluntary payoff: Borrower wants to close the loan early. Supported on both Fixed and Dynamic repayment schedule engines.
  • Refinance payoff: Lender executes a payoff because the borrower is refinancing elsewhere.
  • Asset sale / collateral release: Payoff triggered when the underlying asset is sold and the lien must be lifted.

Interest recalculation (if enabled on the loan) ensures payoff quotes include projected interest up to the requested payoff date.

Lifecycle Snapshot

flowchart LR
    A[Fetch payoff template] --> B[Confirm payoff with borrower]
    B --> C[Collect payoff via Payments API]
    C --> D{Outstanding balance remains?}
    D -->|No| E[Loan auto-closes or use close command]
    D -->|Yes| F[Address shortfall with waiver or repayment]

API Playbook

  1. Quote the payoff (Fixed & Dynamic engines)

    GET /v1/loans/{loanId}/transactions/template?command=prepayLoan&transactionDate=2025-07-15&locale=en&dateFormat=yyyy-MM-dd

    Response provides amount, and bucket breakdowns. For IR-enabled accounts, request the exact payoff date you intend to use.

  2. Collect the payoff via the Payments API (recommended for SaaS tenants)

    • Call your standard Payments endpoint (initiate/log) so Embarc can orchestrate the gateway transfer. Once the payment succeeds, Embarc automatically posts the underlying loan transaction with the provided metadata. Example payload:
      POST /v1/payments
      {
        "loanId": 512,
        "mode": "INITIATE",
        "paymentCommand": "repayment",
      "valueDate": "15 Jul 2025",
      "amount": 12650.42,
      "note": "Early payoff per borrower request",
      "externalReference": "PAYOFF-2025-07-15"
      }
    • Once the payment succeeds, Embarc automatically records the repayment and updates outstanding balances for either repayment engine.
  3. Close the loan (optional)

    • If the payoff zeroes out the balance, Embarc will close the loan automatically. If a manual close is preferred (e.g., to align with a batch process), issue:
      POST /v1/loans/{loanId}/transactions?command=close
      {
        "locale": "en",
        "dateFormat": "dd MMM yyyy",
        "transactionDate": "15 Jul 2025",
        "note": "Closed after payoff"
      }

Tips for Operations Teams

  • Always refresh the payoff template on the actual payoff day—interest accrual or fees may change overnight.
  • Confirm that any linked collateral, autopay enrollments, or post-dated checks are cleared after the payoff posts.

Baseline Example (Fixed Loan A)

Assume the borrower wants to prepay Baseline A on 15 Jul 2026 after making the first six installments. As of that date:

MetricValue
Outstanding principalUSD 6,179.05
Accrued interest (installment #7 partial)USD 61.79
Total payoff quoteUSD 6,240.84

Transactions created

DateTypeTotal AmountAllocation (Interest / Principal)Notes
15 Jul 2026REPAYMENT (via Payments API)6,240.8461.79 / 6,179.05Payments API posts the repayment; loan balance drops to zero.
15 Jul 2026CLOSE (optional)Only needed if you want to stamp a manual close.

Loan summary delta

MetricBefore payoffAfter payoff
Principal outstandingUSD 6,179.05USD 0.00
Interest outstandingUSD 61.79USD 0.00
StatusActiveClosed – Obligations Met (auto)

Accounting snapshot

EntryDebitCreditAmount
Receive repaymentCash / Bank (101100)Loans Receivable (112601)USD 6,179.05
Recognise interestCash / Bank (101100)Interest Income (404000)USD 61.79

Verification checklist

  1. Call GET /v1/loans/{id}?associations=repaymentSchedule,transactions,loanSummary before/after:
    • Confirm the new repayment transaction covers both interest and principal.
    • Verify remaining installments are marked as paid and loanSummary.status transitions to Closed/Active depending on close command usage.
  2. Use the note/externalReference fields to tie the payoff back to customer approvals or refinance cases.

Sandbox request template

POST /v1/payments
{
  "loanId": {{baselineFixedLoanId}},
  "mode": "INITIATE",
  "paymentCommand": "repayment",
  "valueDate": "15 Jul 2026",
  "amount": 6240.84,
  "note": "Baseline A payoff",
  "externalReference": "PAYOFF-BL-A-0001"
}

Follow with POST /v1/loans/{{id}}/transactions?command=close only if you need a manual close entry.