Debt payoff calculator
Enter what you owe, the annual rate and a fixed monthly payment to see when one debt is gone: 5000 at 18% paid at 200 a month is cleared in 32 months, with 1313.97 of interest and a smaller last payment. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Principal amount
- 5,000
- Annual rate
- 18
- Monthly payment
- 200
- Max months
- 600
- Monthly rate
- 0.015
- First month interest
- 75
- Months
- 32
A debt payoff calculator turns a remaining balance, an annual interest rate, and a fixed monthly payment into a concrete timeline: how many months until the balance is gone, and how much interest you will have paid along the way. Borrowers, coaches, and spreadsheet owners all meet the same three numbers on a statement or a loan agreement, then need a deterministic amortization that never invents a payoff when the payment cannot even cover that month's interest. This tool applies a reducing-balance schedule: each month interest accrues at the annual rate divided by twelve, the payment is applied first to interest and then to principal, and the last installment is trimmed so you never overpay.
How a fixed payment amortizes a single debt
Consumer debt with a quoted annual rate is almost never simple interest on the original principal for the whole term. Lenders and card issuers compute a monthly periodic rate by dividing the annual rate, expressed as a percent, by one hundred and then by twelve. That monthly rate is applied to the remaining principal each period, producing that month's interest.
A payment you actually send is applied first to that interest; anything left over reduces principal, which is why a larger payment shortens the schedule more than linearly. If your monthly payment is less than or equal to that figure, principal does not decline at all: the balance stays the same or grows, and there is no finite payoff. When the payment does exceed interest, the engine walks the schedule month by month with half-up rounding to cents so successive ledgers stay stable across runtimes.
Each period records interest, the payment actually applied (capped at remaining balance plus interest), the principal reduction, and the new remaining balance. The loop stops when the remaining balance is cleared. The last month is typically a smaller installment: you pay only what is still owed plus that month's interest, not the contractual payment in full.
Zero annual rate is allowed and yields total interest of zero, with months equal to the ceiling of principal divided by the payment. This is a single-debt, fixed-payment projector: it is not a snowball or avalanche ranking of several accounts, not a credit-card minimum-percent simulator, and not a payment-from-term EMI quote. Those searches belong to other tools.
Here the question is only: given this principal, this rate, and this payment, when is the debt gone and what did interest cost.
Where a debt payoff calculator earns its keep
Households reach for a debt payoff calculator after a raise, a bonus, or a hard month, when the question is not what the lender's original term was but what this payment they can actually send will do to the remaining balance. Nonprofit counselors and independent coaches put the same three numbers on a screen during a session so a client can see months and total interest change as the payment slider moves, without building a spreadsheet from scratch.
Content teams can embed a worked example—five thousand at eighteen percent with a two-hundred payment—and show months, last payment, and total interest next to the form. Personal-finance courses use the never-pays-off error as a teaching moment: a high rate paired with a token payment is not a slow payoff, it is no payoff. Failed validation does not consume balance.
Use it when the search intent is a single balance, a known rate, and a chosen payment, and leave multi-debt ordering and issuer minimum-percent rules to the tools built for those queries.
What you can do with it
See when a card or loan actually clears
Enter the remaining principal, the APR as a percent, and the fixed amount you can send each month to get months to payoff, the smaller last installment, and total interest before you raise or cut the payment.
Catch a payment that never beats interest
If a proposed monthly amount is at or below the first month's interest, the calculator rejects the input instead of inventing an infinite schedule, which is the warning coaches need on a high-APR balance.
FAQ
What happens if my payment is below the monthly interest?
When the payment does not exceed the first month's interest, principal never declines and there is no finite payoff, so the calculator does not invent a timeline.
Is this the same as a debt snowball or avalanche calculator?
No. This tool projects one debt with a fixed monthly payment. Snowball and avalanche tools rank several accounts and split a budget across them; a credit-card minimum-percent projector is a different search as well.
What if the annual rate is zero?
Zero interest is allowed. Months is the ceiling of principal divided by the payment, the last installment may be smaller than the regular payment, and total interest is zero.
Why does a bigger payment shorten the payoff so much?
Each payment covers that month's interest first, and only the rest reduces the balance. Every extra amount goes straight to principal, which also lowers next month's interest, so the schedule shrinks faster than the payment grows.
Does the calculator give me a payoff date?
No calendar date is given; the answer is in months, plus years as months divided by twelve. Paying 200 a month on 5000 at 18% takes 32 months, about 2.67 years.
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/debt-payoff \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"principal":5000,"annual_rate":18,"monthly_payment":200}'const res = await fetch("https://api.kit.forhosting.com/fin/debt-payoff", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"principal": 5000,
"annual_rate": 18,
"monthly_payment": 200
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/fin/debt-payoff",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"principal": 5000,
"annual_rate": 18,
"monthly_payment": 200
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/fin/debt-payoff", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"principal":5000,"annual_rate":18,"monthly_payment":200}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"principal":5000,"annual_rate":18,"monthly_payment":200}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/fin/debt-payoff", 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": 5000,
"annual_rate": 18,
"monthly_payment": 200
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "fin.debt_payoff",
"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
If the payment is at or below the first month's interest, the task fails with invalid_input because the debt would never shrink.
How a fixed payment amortizes a single debt
Written out, the first month's interest is principal times annual_rate over one hundred over twelve. This calculator treats that case as invalid_input rather than returning a fake infinity, matching the honest answer a counselor would give. The response reports months to payoff, years as months divided by twelve, last_payment, total_paid, and total_interest equal to total_paid minus the original principal.
Input contract, rounding, errors, and response shape
Money fields use half-up rounding to two decimal places. Years use two decimal places. The monthly rate keeps twelve decimal places so clients can show the periodic rate without re-deriving it. There is no payoff calendar date because the path uses no clock: months is the unit of time. POST a JSON body with three required finite numbers. principal is the outstanding balance in one currency unit and must be strictly greater than zero; aliases amount, balance, and loan_amount are accepted so spreadsheets can reuse column names. annual_rate is the nominal annual interest as a percent, for example 18 for eighteen percent, not the decimal 0.18; aliases rate, interest_rate, and apr are accepted. monthly_payment is the fixed amount you will send every month and must be strictly greater than zero; aliases payment and monthly are accepted. Optional max_months is an integer from one to twelve hundred and defaults to six hundred, about fifty years: it is a safety cap so a payment that only barely beats interest cannot loop forever. Missing fields, empty strings, non-finite values, booleans, negatives where a positive is required, and an out-of-range max_months fail with invalid_input naming the field, and those failures are not billed. After cents rounding, if monthly_payment is at or below the first month's interest, the task also fails with invalid_input and a message that the payment is below the monthly interest; that is the documented never-pays-off guard this calculator exists to enforce. On success the body echoes principal, annual_rate, monthly_payment, and the resolved max_months; reports monthly_rate as a decimal and first_month_interest in currency units; and returns months, years, last_payment, total_paid, and total_interest.
Where a debt payoff calculator earns its keep
Developers wire the endpoint into debt dashboards, onboarding quizzes, or email drips that warn when a proposed payment is below monthly interest and would never clear the balance. Pair the numeric result with your own advice copy if you need coaching language—the API returns the schedule metrics, not legal, tax, or credit-counseling guidance.
Integration use cases
Pin deterministic payoff math in apps and worksheets
Call the same pure solve from a dashboard, a CMS widget, or a test suite so months and total interest stay identical across the free browser path and the API at $0.002 per successful item.
Technical questions
How does the debt payoff calculator compute months and total interest?
It amortizes the balance month by month: interest equals remaining principal times annual_rate/12/100, the payment is applied first to interest then to principal, and the last installment is trimmed to what is still owed. The response reports months, last_payment, total_paid, and total_interest.
What does the debt payoff calculator cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.