Corgi BankDocumentation
OpenAPI

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

statusMeaning
approved, declined, reviewThe underwriting outcome. Nothing is funded yet.
activeFunded and current. Interest accrues.
delinquentAn installment is past its due date. Interest still accrues.
nonaccrualPast due long enough that interest is no longer recognized as income.
charged_offThe balance was written off against the allowance.
paid_offPrincipal, 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 uses actual/365. The engine also supports actual/360 and 30E/360 for fixed-rate commercial term loans.
  • Accrual starts the day after funding. The run for the funding date accrues nothing on a new loan.
  • A nonaccrual loan 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.

WhenWhat the run does
The day after an unpaid installment's due dateThe 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_daysThe 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 productsThe 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 lineThe 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.

to move to open esc to close