Loan APR from fees calculator
See what financed fees really cost: borrowing 200,000 at 6.5% for 360 months with 4,000 of fees rolled in gives a true APR of 6.6914%, not 6.5%. Compare offers by the rate you pay on the cash you actually receive. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Loan amount
- 200,000
- Annual rate percent
- 6.5
- Term months
- 360
- Fees
- 4,000
- Face amount
- 204,000
- Monthly payment
- 1,289.4188
- Total of payments
- 464,190.7565
- Total interest
- 260,190.7565
Stated interest rates ignore origination charges that get rolled into the balance. When a borrower needs a fixed cash amount and the lender finances closing fees on top of that amount, monthly payments are calculated on a larger face principal while the money actually available to the borrower is only the net loan proceeds. This loan APR from fees calculator accepts the net amount needed, the stated annual rate, the term in months, and the financed fee total, then returns the amortizing payment on the face amount and the true APR that equates those payments to the net proceeds under the standard level-payment model. Use it to compare offers, explain cost to clients, and power widgets or automation that must show the fee-adjusted rate next to the coupon.
What financed fees do to the true APR
In a conventional fixed-rate amortizing loan the monthly payment is set so that a constant payment retires a face principal over a fixed number of months at a constant monthly interest rate derived from the stated annual rate divided by twelve. When upfront fees are financed into the loan, the face principal becomes the sum of the cash the borrower needs plus those fees. Interest and principal repayment therefore run on the larger face, which raises the payment relative to a no-fee loan of the same net proceeds.
The regulatory-style true APR is not that stated coupon: it is the constant annual rate, expressed as twelve times the monthly actuarial rate, that makes the present value of the payment stream equal to the amount the borrower effectively receives. Because the payment annuity is sized on face amount while the present-value target is only the net proceeds, any positive financed fee pushes the true APR above the stated rate. When fees are zero the true APR collapses to the stated rate (up to rounding).
When the stated rate is zero but fees are positive, payments still equal face divided by term, so the solver still finds a positive true APR that reflects pure fee drag. This capability implements exactly that model: face equals loan amount plus fees, payment from the standard amortization formula, then a deterministic bisection for the monthly rate whose annuity present value matches net proceeds, annualized as twelve times one hundred times that monthly rate.
Where a fee-adjusted loan APR calculator earns its keep
Mortgage and personal-loan comparison sites use a loan APR from fees calculator so shoppers can rank offers by true cost instead of by coupon alone when origination charges are rolled into the balance. Brokers and loan officers need a deterministic number they can recompute live while changing fee line items without opening a desktop amortization workbook. Personal-finance educators and LMS platforms need an oracle for homework that asks why two loans with the same rate and term differ once points or origination fees are financed.
Failed validation does not consume balance.
What you can do with it
Compare loan offers with financed fees
Rank two quotes with different coupons and origination charges by true APR after rolling each fee package into the face principal.
Broker and advisor live scenarios
Recalculate monthly payment and fee-adjusted APR instantly as clients change loan amount, term, rate, or financed closing costs.
FAQ
How is true APR calculated when fees are financed?
The level monthly payment amortizes that face at the stated rate.
Why is the true APR higher than the stated rate?
Because your payments are sized on the larger amount that includes the fees, while the money you actually receive is only the net amount. Paying more for the same cash means a higher effective rate whenever fees are above zero.
What if the lender charges no fees?
Then the amount borrowed equals the amount you receive, and the true APR matches the stated rate apart from rounding. Any financed fee above zero pushes it higher.
Can a 0% loan have a positive APR?
Yes, if fees are financed. The payments still repay the full amount including fees, but you only received the net amount, so the calculation finds a positive true APR that reflects the fees alone.
How much do the fees add to the monthly payment?
The payment is worked out on the total amount, what you need plus the fees, so it is higher than for a no-fee loan of the same net amount. In the example, the payment on 204,000 is 1,289.4188 a month.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/finance/loan-apr-from-fees \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"loan_amount":200000,"annual_rate_percent":6.5,"term_months":360,"fees":4000}'const res = await fetch("https://api.kit.forhosting.com/finance/loan-apr-from-fees", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"loan_amount": 200000,
"annual_rate_percent": 6.5,
"term_months": 360,
"fees": 4000
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/finance/loan-apr-from-fees",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"loan_amount": 200000,
"annual_rate_percent": 6.5,
"term_months": 360,
"fees": 4000
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/finance/loan-apr-from-fees", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"loan_amount":200000,"annual_rate_percent":6.5,"term_months":360,"fees":4000}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"loan_amount":200000,"annual_rate_percent":6.5,"term_months":360,"fees":4000}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/finance/loan-apr-from-fees", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"loan_amount": 200000,
"annual_rate_percent": 6.5,
"term_months": 360,
"fees": 4000
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "finance.loan_apr_from_fees",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical notes
The same pure module powers the free browser path and the prepaid API, so demos and production never disagree on a worked example. Invalid input fails with invalid_input and is not billed.
Input contract, outputs, rounding, and worked examples
An optional decimals integer from zero through twelve (default four) controls half-up rounding applied once to money fields and rate fields in the response. Example: two hundred thousand needed at six point five percent for three hundred sixty months with four thousand of financed fees yields a face of two hundred four thousand, a payment slightly above the no-fee payment, and a true APR a few basis points above six point five. Example: the same loan with zero fees returns a true APR equal to the stated rate after rounding. POST a JSON body with four required fields: loan_amount, a finite number strictly greater than zero for net proceeds; annual_rate_percent, a finite non-negative stated nominal annual rate in percent (six point five means six point five percent); term_months, a positive integer amortization length in months; and fees, a finite non-negative currency amount rolled into the face. Missing fields, empty strings, non-finite values, negative fees or rates, non-positive loan amounts, and non-integer or non-positive terms fail with invalid_input naming the problem, and those failures are not billed. On success the body echoes the inputs, reports face_amount as loan plus fees, monthly_payment from amortization on the face, total_of_payments and total_interest over the full term, net_proceeds equal to loan_amount, true_apr_percent as the fee-adjusted nominal APR, apr_premium_percent as true APR minus the stated rate, and a short formula string. Pair the response with your own disclosure text if local law requires a specific APR day-count or prepaid-finance-charge definition; this endpoint is an educational and comparison estimate under the level-payment financed-fee model, not a substitute for a regulated Truth-in-Lending computation for every jurisdiction.
Where a fee-adjusted loan APR calculator earns its keep
Fintech onboarding flows and CMS widgets embed the same JSON contract so free browser previews match billed API results byte-for-byte for audits and support. Keep loan_amount and fees in the same currency units, pin the rounded true_apr_percent in tests, and you get reproducible fee-adjusted APRs for spreadsheets, n8n flows, and edge workers without standing up a commercial mortgage engine of your own.
Integration use cases
Education and CMS widgets
Power homework oracles and on-page calculators with the same deterministic contract used by the prepaid API path.
Technical questions
What if fees are zero?
Face equals loan_amount, so the actuarial rate matches the stated rate and true_apr_percent equals annual_rate_percent after half-up rounding.
Are rates entered as decimals or percents?
Use percent units for annual_rate_percent (for example 6.5 for 6.5%). Outputs true_apr_percent and apr_premium_percent are also in percent.
Does this match every legal APR disclosure?
It implements a clear level-payment financed-fee estimate. Local rules may define prepaid finance charges, day counts, or odd-period adjustments differently—treat the result as a comparison tool, not sole legal disclosure.
What does the loan APR from fees calculator cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.