Disbursement and repayment
This page covers how an approved loan is funded into a deposit account, how interest accrues each day, how payments and payoffs are applied, and what happens when a loan falls behind.
Loan status
status | Meaning |
|---|---|
approved, declined, review | The underwriting outcome. Nothing is funded yet. |
active | Funded and current. Interest accrues. |
delinquent | An installment is past its due date. Interest still accrues. |
nonaccrual | Past due long enough that interest is no longer recognized as income. |
charged_off | The balance was written off against the allowance. |
paid_off | Principal, interest and fees are all paid. |
Disbursing
POST /loans/{id}/disbursements takes no body. The loan must be approved, its closing must be released, and today's business date must equal the closing's funding_date. Otherwise the answer is 409 conflict. One journal debits the loan's new receivable account for the principal, credits the deposit account the principal less the product's origination fee, and credits the fee to income. A mortgage's opening escrow deposit is withheld the same way. The loan comes back active, and lending.loan.disbursed is published. Calling it again on an active loan returns the loan.
The schedule
GET /loans/{id}/schedule returns schedule, one row per monthly installment from the closing's first_payment_date, with due_date, principal_amount, interest_amount, payment_amount, paid_amount and a status of scheduled, paid or late. Each row's interest is the actual accrual for its period. The payment is the smallest whole-cent amount that retires the principal by the last row, and the last row absorbs the rounding.
Daily accrual
POST /loans/accrual-runs with a business_date accrues every loan and facility through that date. Interest is the outstanding principal times the annual rate, times the days, over the convention's denominator. It is kept to eight decimals in accrued_interest, a decimal string in major units. The run then recognizes the whole cents as income, one journal per credit and date, and accrued_posted_amount shows what the ledger carries.
- The convention is the loan's
day_count, fixed by its product version. Every shipped product usesactual/365. The engine also supportsactual/360and30E/360for fixed-rate commercial term loans. - Accrual starts the day after funding. The run for the funding date accrues nothing on a new loan.
- A
nonaccrualloan accrues only a memo figure,contractual_accrued_interest. - The run first applies any contractual rate reset that is due.
Payments and payoff
POST /loans/{id}/payments takes amount and currency_code and answers 201 with payment and loan. The money comes from the loan's disbursement_account_id. It is applied to fees, then accrued interest, then principal, and the payment shows the split as fees_amount, interest_amount and principal_amount. A mortgage's escrow due is taken first. On a nonaccrual loan the order is principal, fees, interest. A payment when nothing is due is 409. Each payment publishes lending.payment.received.
GET /loans/{id}/payoff-quote?as_of= returns outstanding_amount, interest_amount through the date, fees_amount, total_amount and the per_diem. POST /loans/{id}/payoffs takes good_through, which must be the current business date. It accrues through that day, takes the total in one journal and refunds any escrow balance.
Falling behind
POST /loans/delinquency-runs sweeps the book for a business_date.
| When | What the run does |
|---|---|
| The day after an unpaid installment's due date | The loan is delinquent. days_past_due counts from the oldest unpaid due date, and bucket reads current, 1-29, 30-59, 60-89 or 90+. A loan that catches up returns to active. |
After the product's grace_days | The installment is late and the product's late fee is added to fees_due_amount. The grace period holds back the fee only. |
At nonaccrual_days, 90 on most products | The loan is nonaccrual. Interest recognized but not collected is reversed out of income. Event: lending.loan.nonaccrual. |
At charge_off_days, 120 on most products, 180 on the mortgages, the HELOC and the credit card line | The retained principal is written off against the allowance. Event: lending.loan.charged_off. |
POST /loans/{id}/restore-accrual returns a loan that is current again to accrual. The interest still owed is collected under a collection_key or forgiven with a concession_reason. POST /loans/{id}/recoveries applies cash received after a charge-off. POST /loans/allowance-runs measures the allowance once per date and posts the provision.
Events
A loan publishes lending.application.approved, .declined or .review, then lending.loan.disbursed, lending.payment.received, lending.loan.nonaccrual, lending.loan.restored and lending.loan.charged_off. A share sold or bought publishes lending.loan.participated or lending.loan.purchased. Closings publish under lending.closing.* and rate changes under lending.rate.*. See Events and webhooks.