Charge Refund


When to use it

  • Dispute resolution: Borrower proves a fee/penalty was applied in error after paying it.
  • Merchant-funded concessions: Merchant agrees to reimburse part of a late fee already collected from the borrower.
  • Operational reversals: Payment processor double-collected a fee and you need to refund the duplicate amount.

Use charge refunds when cash has already moved and you need to send it back. For bookkeeping-only corrections, use charge adjustments; for unpaid charges, use waivers.

Workflow

flowchart TD
    A[Charge assessed] --> B[Borrower pays charge]
    B --> C[Dispute or exception raised]
    C --> D[Submit charge refund command]
    D --> E[GL debits fee income, credits cash]
    D --> F[Charge history updated with refund entry]

Key characteristics:

  • The schedule/loan summary show the refunded amount immediately; installment-linked charges reduce the specific installment’s balance.
  • The transaction behaves like a negative repayment, so it supports adjustments and chargebacks.
  • GL postings depend on whether the charge was a fee or penalty, ensuring the correct income account is debited.

API recap

POST /v1/loans/{loanId}/transactions?command=chargeRefund
{
  "loanChargeId": 912,
  "installmentNumber": 4,
  "transactionAmount": 15.00,
  "paymentTypeId": 1,
  "note": "Promo goodwill",
  "externalId": "CHGREF-912-2026-02-18",
  "locale": "en",
  "dateFormat": "dd MMM yyyy"
}

See the API doc for optional fields (dueDate alternative, payment metadata). Embarc always stamps the refund with the current business date, regardless of the payload.

Baseline Example (Baseline A)

  1. Baseline A assesses a USD 40 late fee on installment #4.
  2. Borrower pays the fee via command=chargePayment.
  3. Later, servicing refunds USD 15 because the borrower provided proof of bank error.

After posting the refund:

MetricBefore refundAfter refund
Charge outstandingUSD 0.00USD 0.00 (still considered paid, but refund logged)
loanSummary.totalFeeChargesCharged40.0040.00 (unchanged)
loanSummary.totalFeeChargesWaived0.000.00
loanSummary.totalFeeChargesPaid40.0040.00
loanSummary.totalFeeChargesRefunded0.0015.00
Loan statusActiveActive

Accounting entry (example mapping):

EntryDebitCreditAmount
Refund fee incomeFee Income (405000)Cash / Clearing (101100)USD 15.00

If the refund creates a borrower credit balance (e.g., fee was refunded after loan payoff), follow up with a creditBalanceRefund to return any surplus.

Tips for operations

  1. Identify the charge precisely: For installment fees, include the installment number or due date; otherwise the API rejects the request.
  2. Partial vs. full refunds: Omitting transactionAmount refunds the entire remaining refundable amount—use carefully.
  3. Audit trail: Use externalId to tie refunds to dispute case IDs and include a descriptive note.
  4. Chargebacks: If a processor chargebacks the refund itself, run the chargeback command referencing the CHARGE_REFUND transaction.
  5. Reports: Reporting teams can pull transactions.type = CHARGE_REFUND or use loanSummary.totalFeeChargesRefunded / totalPenaltyChargesRefunded for aggregate views.

Following this flow ensures charge refunds are transparent, auditable, and balanced across GL, statements, and regulatory reports.