Close a loan
Close a loan only after balances, payments in flight, credits, restrictions, and reconciliation all agree there is nothing left owed.
Normal closure is an outcome of authoritative balances, not an operator preference. When all obligations reach zero and no blocker remains, the loan reads as closed with obligations met. The governed close command exists for explicit finalization of eligible edge cases.
On screen. Close, in the Administrative column of the loan actions menu.
- Obligations reach zerobalances, credits, cash in flightwaits
- Rules checkedblocking condition named on failureautomatic
- Closure postswith its effective dateautomatic
- Reopen on returna new recorded transitionwaits
Closure checklist
| Rule | Required state |
|---|---|
| Principal, interest, fees, penalties | Zero or disposed by explicit preceding actions. |
| Credit balance | Zero or refunded through creditBalanceRefund with its funding settled. |
| Payments and funding in flight | None whose outcome could reopen a balance. |
| Reconciliation | No critical unresolved exception. |
| Schedule | All obligations met or superseded under a valid terminal action. |
| Autopay | Cancelled/no future targets. |
| Restrictions and cases | Closure permitted; required work completed or linked. |
The command never closes optimistically
curl -X POST "$BASE/v1/loans/7204/transactions?command=close" \
-H "Authorization: Bearer $TOKEN" \
-H "LendEasy-Tenant: demo-lender" \
-H "LendEasy-Case: case_HBR_PAYOFF_6" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: hbr-close-2028-02-20" \
-d '{
"transactionDate": "2028-02-20",
"note": "Payoff and credit refund reconciled.",
"dateFormat": "yyyy-MM-dd",
"locale": "en"
}'
{
"officeId": 1,
"clientId": 412,
"loanId": 7204,
"resourceId": 30471,
"changes": {
"transactionDate": "2028-02-20"
}
}
If Harbor still has a $63.20 credit refund processing, the command is rejected with the blocking condition named—check the loan summary’s credit, in-flight payment amount, and open fundings before executing. Every execution writes a governance record.
Rescheduled loans
A rescheduled loan closes against its current authoritative schedule; the history preserves both the original and rescheduled periods.
Other terminal outcomes
Use write-off, charge-off, or contract termination for their specific economic meanings. The close command rejects a nonzero balance even if the note supplies one of those reason words.
Closed is readable, not archived
The closed loan keeps its final schedule and transaction history intact, and read APIs remain available under retention and access policy. Statement and payoff reads reflect the closed state.
Reopen after return or correction
If a covering payment later returns through the provider flow or a financial transaction is reversed, the ledger can reopen the loan under product rules, linked to the triggering event. It does not erase the closure period.
Closure has no undo command
A closure that should not have happened is corrected by posting the governed action that changes the facts underneath it — the return, reversal, or adjustment the case calls for — which is also what reopens the loan. The closure transaction and its governance record stay in history either way.