APR & disclosures
Reproduce a closed-end consumer APR from dated cash flows, classified charges, pinned conventions, and an immutable disclosure finalized at approval.
APR is a cash-flow result, not the contract’s nominal interest rate with a different label. For covered closed-end consumer credit, LendEasy applies the actuarial method described in Regulation Z, Appendix J, stores every input used, and fails closed when a fee or convention is unresolved.
The Harbor example
Harbor Personal Loan
Fixed-rate installment loan
A regular monthly loan used to explain schedules, payments, payoff, APR, statements, and delinquency servicing.
- Contract principal
- $8,400.00
- Nominal rate
- 13.25% fixed
- Term
- 18 monthly payments
- Prepaid origination fee
- $252.00
- Payment
- $517.14
- Disclosed APR
- 17.291%
The fee is withheld from proceeds and classified as a finance charge, so the amount financed is $8,148.00 even though the contract principal is $8,400.00.
Harbor has a 13.25% nominal rate and a $252 origination fee withheld from proceeds. Its payment schedule amortizes $8,400, but the borrower receives $8,148. That difference is why the disclosed APR is higher than 13.25%.
Step 1: classify every charge
Classification lives on the charge definition itself. Every definition at /v1/charges carries an lmsConfig with a financeChargeFlag and a legalBasis citation, and the flag is immutable once set.
| Axis | Values | Question answered |
|---|---|---|
| Finance-charge flag | FINANCE_CHARGE, NOT_FINANCE_CHARGE, EXCLUDED |
Does the item enter the Regulation Z finance charge? |
| Cash-flow placement | Prepaid, financed, or periodic—a fact of the contract | Where does the item appear in this loan’s actual cash flows? |
The placement is not configuration; it follows from what actually happened at funding and in the schedule. For Harbor, the origination fee is a finance charge collected prepaid: it is withheld from proceeds and reduces amount financed. A periodic fee classified outside the finance charge is removed from the disclosure payment stream before the APR solve. A financed finance charge remains in the contractual balance and payment stream but is subtracted from amount financed.
configurationStatus: "MISSING" and can never be attached to a product or loan, so the calculation cannot encounter an unclassified fee. If the disclosure still cannot be produced—facts that do not reconcile, no valid rate root—the disclosure is FAILED and the loan cannot be approved. An unknown fee is never treated as excluded.Step 2: derive the disclosure totals
Amount financed
contract balance at consummation $8,400.00
− prepaid finance charges $252.00
− financed finance charges $0.00
─────────
amount financed $8,148.00Cash proceeds happen to equal amount financed in Harbor, but they are not universal synonyms. Non-finance-charge amounts paid to a third party on the consumer’s behalf may remain in amount financed even when the borrower does not receive that cash.
Total of payments and finance charge
total of payments = 18 × $517.14 = $9,308.52
finance charge = $9,308.52 − $8,148.00
= $1,160.52
cross-check = $908.52 scheduled interest
+ $252.00 prepaid origination fee
= $1,160.52The two finance-charge derivations must reconcile within the pinned monetary tolerance. If they do not, the disclosure fails rather than publishing totals that disagree.
Step 3: solve the actuarial equation
Harbor is a single-advance transaction with 18 equal monthly payments at equal intervals. Let i be the monthly unit-period rate. LendEasy solves:
Discounted cash-flow solve
18
$8,148.00 = Σ $517.14 / (1 + i)ᵏ
k=1
i = 0.0144092090279689 per month
APR = i × 12
= 0.172910508335627
= 17.2910508335627%The high-precision result is preserved in the disclosure record; the disclosed figure follows the product’s aprRounding policy—NEAREST_0_01_PERCENT_HALF_UP discloses Harbor at 17.29. A document renderer displays that approved format; the stored computation is not rerun from the rendered string.
For odd first periods, irregular payments, or multiple advances, the same principle applies to dated cash flows. Unit periods and fractional periods follow the pinned Appendix J conventions; LendEasy does not force them into a regular monthly approximation.
Why APR differs from common rates
| Measure | Harbor result | What it represents |
|---|---|---|
| Nominal contract rate | 13.25% | Rate used by the loan’s interest calculation. |
| Exact disclosure APR | 17.2910508…% | Annualized unit-period rate that equates disclosed advances and payments. |
| Effective annual yield | 18.7293795…% | (1 + monthly rate)¹² − 1; not Harbor’s disclosed APR. |
| Purchased-amount multiple | Not applicable | A merchant-advance ratio, not an APR substitute. |
Confusing the exact APR with effective annual yield would overstate Harbor’s disclosed figure. Confusing it with the nominal rate would omit the prepaid finance charge.
Finalized at approval, revalidated at disbursement
There are no disclosure endpoints to call. The disclosure is part of the loan lifecycle:
- At approval, the disclosure is computed from the approved terms, schedule, and charge placements, then finalized automatically. If it cannot be produced, the approval itself fails—an APR-enabled product cannot approve a loan without a compliant disclosure.
- At disbursement, the finalized disclosure is revalidated against the actual funding facts. If the facts changed—amount, date, or charge placement—the prior disclosure is marked
SUPERSEDEDand a new one is finalized in its place. The superseded record is retained. - Before approval, reading the summary computes a
PREVIEWdisclosure from the proposed terms. A preview is never persisted and never satisfies the approval gate.
Read the current disclosure in the loan summary’s aprDisclosure block:
curl "$BASE/v1/loans/7204/summary" \
-H "Authorization: Bearer $TOKEN" \
-H "LendEasy-Tenant: demo-lender"
{
"aprDisclosure": {
"status": "FINALIZED",
"method": "REG_Z_ACTUARIAL_APPENDIX_J",
"apr": "17.29",
"financeCharge": "1160.52",
"amountFinanced": "8148.00",
"totalOfPayments": "9308.52",
"currency": "USD",
"toleranceApplied": "REGULAR",
"finalizedAt": "2026-08-11T18:00:05Z"
}
}
| Status | Meaning | Safe handling |
|---|---|---|
FINALIZED |
The stored, authoritative disclosure for the loan as approved or disbursed. | Render and reference it. |
PREVIEW |
Computed on read before approval; not persisted. | Never present as the final disclosure. |
FAILED |
The inputs cannot produce a compliant disclosure. | Approval is blocked; correct the terms or charge facts. |
NOT_APPLICABLE |
The product is not APR-enabled or not covered consumer credit. | No disclosure is expected. |
UNAVAILABLE |
The disclosure could not be computed or read at this moment. | Treat as unknown; retry rather than rendering a blank. |
What the finalized disclosure retains
The finalized record is self-contained and reproducible:
- every advance and disclosure payment, with amount, date, and source fact;
- each charge’s classification, legal basis, and actual placement;
- amount-financed and finance-charge component calculations;
- unit period, day-count and fractional-period conventions;
- transaction regularity and the applicable accuracy tolerance; and
- the monetary and rate rounding policies in force.
A later fee-policy change never rewrites a finalized disclosure. Only the disbursement-time revalidation supersedes one, and both records remain.
Accuracy classification is not rounding
§ 1026.22(a) describes a general accuracy tolerance of one-eighth of one percentage point for regular transactions and one-quarter point for qualifying irregular transactions. The product’s aprTolerancePolicy records the applicable class, and the summary echoes it as toleranceApplied. LendEasy tests the computed result against that tolerance but does not use it as permission to choose a convenient rate: it first solves the cash flows to the configured numerical convergence threshold.
An irregular first period or first/final payment alone does not automatically make the transaction irregular for this purpose. Multiple advances, irregular payment periods, or irregular payment amounts require a fact-specific classification under the rule and your policy.
Independent verification checklist
- Confirm the schedule payments and dates match the approved contract.
- Trace every charge to its immutable finance-charge flag and actual placement.
- Recalculate amount financed and total of payments from the disclosed components.
- Discount the payments at the exact unit-period rate and compare the present value with amount financed.
- Apply the annualization convention and the product’s
aprRoundingpolicy. - Confirm the summary’s
finalizedAtand status match the approval and disbursement history.
This lets an auditor reproduce Harbor’s APR without access to live configuration or mutable loan state.