Loan monthly payment calculator
Find the fixed monthly installment for any loan: 25,000 at 6.5% over 60 months costs 489.15 a month and 4,349.22 in total interest. Works for car, personal and student loans, including 0% offers. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Principal amount
- 25,000
- Annual rate
- 6.5
- Months
- 60
- Monthly rate
- 0.00541667
- Monthly payment
- 489.15
- Total paid
- 29,349.22
- Total interest
- 4,349.22
A loan monthly payment calculator answers the question every borrower and originator asks first: if I take this principal at this annual rate for this many monthly payments, what is the fixed installment I will actually pay? Auto loans, personal loans, student loans, furniture financing, and other closed-end installment credit all share the same amortizing annuity math. This tool takes the three numbers people already have on a quote sheet—the amount borrowed, the nominal annual interest rate as a percent, and the number of monthly payments—then returns the level payment, the total amount repaid, and the total interest paid if the schedule runs to maturity. Zero-percent promotional financing is handled as a clean principal split, not a divide-by-zero.
How the fixed monthly loan payment is calculated
A fully amortizing loan charges interest on the remaining principal and applies one level installment each month so the balance reaches zero on the last scheduled payment. There is no hidden year-to-month conversion: thirty-six months means thirty-six periods, three hundred sixty months means three hundred sixty periods. When r is positive, the payment M equals principal times r times (1 plus r) to the n, all divided by ((1 plus r) to the n minus one).
That identity is the ordinary annuity formula used by auto lenders, personal-loan originators, and student-loan servicers for closed-end installment credit. When the annual rate is exactly zero, the formula would divide by zero, so the engine falls back to principal divided by n: a promotional 0 percent plan really is a pure principal split and total interest is zero. Total paid is M times n, and total interest is total paid minus principal.
Because n is already in months, a sixty-month car loan and a three-hundred-sixty-month first mortgage use the same three fields without a term-in-years wrapper.
Who checks loan payments
Shoppers comparing auto, personal, and student-loan offers need a reproducible installment from the three numbers on each quote, not a teaser that hides the term in years or assumes a thirty-year mortgage. Dealership desks and marketplace sites embed the same PMT in payment estimators so a sixty-month car loan and a forty-eight-month alternative sit side by side without spreadsheet drift. Failed validation does not consume balance.
Keep requests small, pin rounded currency fields in tests, and you get stable amortizing-payment math for widgets, quote checkers, and edge workers without standing up a full loan-origination system of your own.
What you can do with it
Auto and personal-loan quote checks
Enter principal, annual rate, and the advertised month count from a car or personal-loan offer and verify the fixed monthly payment and lifetime interest before you sign.
Marketplace and dealer payment estimators
Show shoppers side-by-side installments for 36-, 48-, 60-, and 72-month terms on the same principal and rate without maintaining a private amortization sheet.
FAQ
How do I calculate a loan monthly payment from principal, rate, and months?
6.5), and months as a whole payment count (e.g.
Why is the term in months instead of years?
Auto, personal, and many student loans are quoted as 36, 48, 60, or 72 monthly payments. Supplying months directly avoids a hidden years-times-twelve conversion and matches the quote sheet.
What if the advertised interest rate is zero?
The engine does not divide by a zero rate.
What is not included in the monthly payment?
Only principal and interest are in it. Origination fees, points, insurance, taxes, balloon payments and extra prepayments are left out, so a lender's quote that bundles them will show a higher figure.
How do I compare a 48-month and a 60-month car loan?
Run the same amount and rate twice, once with 48 months and once with 60. The longer term lowers the monthly payment but raises the total interest, which the result shows next to the payment.
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-monthly-payment \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"principal":25000,"annual_rate":6.5,"months":60}'const res = await fetch("https://api.kit.forhosting.com/finance/loan-monthly-payment", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"principal": 25000,
"annual_rate": 6.5,
"months": 60
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/finance/loan-monthly-payment",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"principal": 25000,
"annual_rate": 6.5,
"months": 60
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/finance/loan-monthly-payment", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"principal":25000,"annual_rate":6.5,"months":60}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"principal":25000,"annual_rate":6.5,"months":60}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/finance/loan-monthly-payment", 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": 25000,
"annual_rate": 6.5,
"months": 60
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "finance.loan_monthly_payment",
"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
How the fixed monthly loan payment is calculated
Convert the quoted annual rate into a monthly rate r equal to annual_rate divided by one hundred divided by twelve, and let n be the number of monthly payments you supply directly.
Input contract, response shape, and validation
The calculator does not model origination fees, points, insurance, taxes, balloon residuals, or extra principal prepayments; those belong in dedicated tools. Pair this result with your own debt-to-income or residual-value checks when underwriting. POST a JSON body with three required fields. principal is the amount borrowed in currency units and must be a finite number greater than zero. annual_rate is the nominal APR as a percent—use 6.5 for six and a half percent, not 0.065—and must be a finite number greater than or equal to zero. months is the payment count as a positive whole number between 1 and 720 (typical auto terms are 36, 48, 60, or 72; unsecured personal loans often run 12 to 60; many first mortgages are 180 or 360). Missing fields, non-finite values, non-positive principal, a non-integer or out-of-range months value, and a negative rate fail with invalid_input naming the problem and are not billed. On success the body echoes principal, annual_rate, and months; returns monthly_rate as the decimal per-period rate; monthly_payment as the fully amortizing installment; total_paid as the sum of all installments; total_interest as total_paid minus principal; and a short formula string you can show next to the numbers.
Where a loan monthly payment API earns its keep
Underwriting scripts and LMS-style finance lessons batch many principals, rates, and month counts through the JSON API when they need an oracle rather than a spreadsheet cell.
Integration use cases
Batch underwriting and finance lessons
Call the JSON API with many principal, rate, and months triples when scripts or classrooms need a deterministic PMT oracle instead of a spreadsheet cell.
Technical questions
Is annual_rate a percent or a decimal fraction?
A percent. Use 6.5 for 6.5% APR, not 0.065. The engine divides by 100 and then by 12 to obtain the monthly rate.
What does the loan monthly payment calculator cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.