Finance charge calculator
Borrow 20,000, repay 23,947.2 in total, and the finance charge is 3,947.2: every amount you pay above what was advanced. Check the figure on a loan disclosure or compare offers in plain money. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Principal amount
- 20,000
- Total payments
- 23,947.2
- Finance charge
- 3,947.2
A finance charge is the dollar cost of borrowing: every amount the borrower pays above the principal that was advanced. Closed-end auto loans, personal installment notes, and Truth in Lending disclosures all reduce to the same identity — subtract the amount financed from the sum of scheduled payments. This finance charge calculator accepts those two figures, returns the charge amount rounded to cents, and rejects a negative principal or a negative total of payments so a spreadsheet sign error cannot look like a fee.
What a finance charge is and how the dollar cost of credit is computed
A finance charge is the cost of consumer credit expressed as a dollar amount, not as a rate. A worked auto-loan example: twenty thousand borrowed with a total of payments of twenty-three thousand nine hundred forty-seven dollars and twenty cents produces a finance charge of three thousand nine hundred forty-seven dollars and twenty cents.
A worked interest-free example: fifteen thousand borrowed with a total of payments of fifteen thousand produces a finance charge of zero, which is a valid result when a promotional zero-interest plan or an employer loan truly adds nothing above principal. Zero principal is allowed and yields a charge equal to the total of payments, covering the rare case of a fee-only amount financed of zero.
When either input is negative the product would describe a loan that paid the borrower or a schedule that collected a negative sum, which is not a well-posed finance charge, so the capability fails instead of returning a hollow figure.
Where a finance charge calculator earns its keep
Personal-loan comparison pages already store two competing offers as a principal and a total of payments each; posting both pairs fills a card that shows which note costs more in dollars, which is the figure many shoppers understand before they look at APR. Compliance and TILA-review checklists can recompute the finance charge box from the two totals printed on a closed-end disclosure and flag a mismatch when the printed charge does not equal total of payments minus amount financed.
Educators teaching the difference between a finance charge and an annual percentage rate can show that the same dollar charge on a short term is a high APR and on a long term is a lower APR, while the charge itself stays the simple subtract. Failed validation does not consume balance.
Keep both inputs non-negative, keep the total of payments at least the principal, pin the rounded money fields in tests, and you get a reproducible finance charge for widgets, CMS embeds, and edge workers without standing up a loan-origination stack of your own.
What you can do with it
Closed-end loan disclosure checks
Recompute the finance-charge box on a Truth in Lending disclosure from the printed amount financed and total of payments, and flag a mismatch before the file is signed.
Auto and personal loan offer comparison
Convert two competing notes into dollar cost of credit from each offer’s principal and sum of scheduled payments, so a shopper can see which contract costs more.
Zero-interest and promotional worksheets
Confirm that a promotional zero-interest plan truly adds nothing above principal by returning a finance charge of zero when total payments equal the amount borrowed.
FAQ
What happens if I enter a negative principal or a negative total of payments?
A finance charge is defined for a non-negative amount borrowed and a non-negative sum of scheduled payments; those failures are not billed.
Is the finance charge the same as APR?
No. The finance charge is a dollar amount — the extra paid above principal. APR is a yearly rate that also reflects term and timing. This calculator returns the dollar charge only.
Can the finance charge be zero?
A total of payments smaller than principal is rejected because the cost of credit cannot be negative.
What does the finance charge include?
Interest plus any fees the contract treats as part of the cost of credit. It is a money amount, not a rate, so it is neither the APR nor a monthly payment nor the balance still owed.
Which principal should I enter from a loan disclosure?
The amount financed: the cash actually advanced, after any finance charges paid up front have been taken out of the face amount. The total of payments is the sum of every scheduled installment through maturity.
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/fin/finance-charge \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"principal":20000,"total_payments":23947.2}'const res = await fetch("https://api.kit.forhosting.com/fin/finance-charge", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"principal": 20000,
"total_payments": 23947.2
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/fin/finance-charge",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"principal": 20000,
"total_payments": 23947.2
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/fin/finance-charge", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"principal":20000,"total_payments":23947.2}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"principal":20000,"total_payments":23947.2}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/fin/finance-charge", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"principal": 20000,
"total_payments": 23947.2
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "fin.finance_charge",
"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
Failed validation is not billed; a successful call costs $0.002.
What a finance charge is and how the dollar cost of credit is computed
On a closed-end loan the identity is exact: finance_charge equals total_payments minus principal, where principal is the amount financed (the cash advanced, after prepaid finance charges have already been pulled out of the face if you are working from a disclosure worksheet) and total_payments is the sum of every scheduled installment the contract requires the borrower to make through maturity. That difference is interest plus any fees the contract treats as part of the cost of credit; it is not APR, not a monthly payment, and not a remaining balance. Money results round to two decimal places so widgets, spreadsheets, and API clients agree on the last cent. This endpoint does not amortize a rate, does not count months, and does not guess prepaid fees from a note rate; it applies one deterministic subtract to the two dollar totals you already have.
Input contract, response shape, and error behaviour
Pair the result with your own APR or payment calculator if you need a rate or an installment; start here when the product question is the transparent two-input dollar cost of credit for a disclosure, a worksheet, or a batch of offers you already stored. POST a JSON body with two required finite numbers: principal (the amount borrowed, also called the amount financed, greater than or equal to zero; aliases amount, loan_amount, amount_financed) and total_payments (the sum of all scheduled payments in the same currency unit, greater than or equal to zero and at least as large as principal; aliases total_of_payments, sum_of_payments, payments_total). Each field may arrive as a JSON number or as a numeric string. Missing fields, empty strings, booleans, and non-finite values fail with invalid_input naming the field and are not billed. On success the body echoes principal and total_payments rounded to two decimals, returns finance_charge as money rounded to two decimals, and includes a short formula string restating the identity. Example: principal twenty thousand and total_payments twenty-three thousand nine hundred forty-seven point two yields finance_charge three thousand nine hundred forty-seven point two.
Technical questions
How is the finance charge calculated from total payments and principal?
Send finite non-negative numbers for principal (the amount borrowed) and total_payments (the sum of scheduled payments). The API returns finance_charge = total_payments − principal, rounded to two decimal places.
What does the finance charge calculator cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.