Car lease calculator
A 35,000 car with a 20,000 residual, a 0.00125 money factor and a 36-month term costs 485.42 a month: 416.67 of depreciation plus 68.75 of rent charge. See both parts of the payment before you sign. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Negotiated price
- 35,000
- Residual value
- 20,000
- Money factor
- 0.00125
- Lease term
- 36
- Depreciation
- 416.67
- Finance fee
- 68.75
- Monthly payment
- 485.42
- Total of payments
- 17,475.12
A car lease is priced on the monthly payment, not the window sticker: shoppers comparing a sedan or SUV almost always ask what they will pay each month at a given negotiated selling price, residual value, money factor, and term in months. Captive finance companies quote that figure as depreciation plus a rent charge, not as a loan amortization of the full vehicle price, so a spreadsheet that divides the sticker by thirty-six overstates the cash due and ignores the residual the lessor still owns. This car lease calculator accepts the negotiated price, the residual value at term end, the dealer money factor, and the lease term as a whole number of months, applies the standard two-part lease identity, and returns the monthly payment together with the depreciation and finance-fee components.
What a car lease payment is and how the two-part formula works
The monthly car lease payment is the sum of two closed-form charges that every United States captive-finance worksheet uses. Depreciation is the portion of the vehicle the lessee uses up: negotiated price minus residual value, divided by the term in months. The residual is the contract residual at lease end, usually a percentage of manufacturer suggested retail price written into the lease, not a guess of private-party resale on the open market.
The finance fee, also called the rent charge, is the interest-like charge on the money tied up in the car: negotiated price plus residual value, multiplied by the money factor. Adding those two numbers is the pretax monthly payment. The money factor is not an annual percentage rate; it is the small decimal dealers publish, often around 0.00125, and the equivalent APR is approximately the money factor times twenty-four hundred.
When the money factor is zero the finance fee vanishes and the payment collapses to straight-line depreciation, which is how genuine zero-drive-off promotional leases are billed aside from taxes. Money fields round to two decimal places so they match currency.
What you can do with it
Dealer and marketplace listings
Let shoppers enter negotiated price, residual, money factor, and term to see the pretax monthly car lease payment next to each vehicle listing.
Personal lease budget
Turn a planned down payment and capitalized remainder into monthly payment, depreciation, finance fee, and total of payments before signing.
FAQ
What happens if the lease term is not a positive integer?
Fractions, zero, negatives, and non-numeric values are rejected and not billed.
What is a money factor and how does it differ from APR?
The money factor is the small decimal dealers quote (often 0.00125), not an annual percentage rate. Do not send 3 for 3% APR; send 0.00125 instead.
Are taxes, acquisition fees, and down payments included?
Add capitalized acquisition or documentation fees to that price if they go into the cap cost. Sales tax is not applied.
Do I enter the residual as a percentage or as an amount?
As an amount. The lease usually states the residual as a percentage of the manufacturer's suggested retail price, so multiply that percentage by the suggested price and enter the resulting figure, not the percentage itself.
How much of a lease payment is depreciation and how much is rent charge?
The calculator shows both. Depreciation is the negotiated price minus the residual, divided by the months; the rent charge is the price plus the residual, times the money factor. In the example they are 416.67 and 68.75.
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/car-lease \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"negotiated_price":35000,"residual_value":20000,"money_factor":0.00125,"lease_term":36}'const res = await fetch("https://api.kit.forhosting.com/fin/car-lease", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"negotiated_price": 35000,
"residual_value": 20000,
"money_factor": 0.00125,
"lease_term": 36
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/fin/car-lease",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"negotiated_price": 35000,
"residual_value": 20000,
"money_factor": 0.00125,
"lease_term": 36
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/fin/car-lease", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"negotiated_price":35000,"residual_value":20000,"money_factor":0.00125,"lease_term":36}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"negotiated_price":35000,"residual_value":20000,"money_factor":0.00125,"lease_term":36}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/fin/car-lease", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"negotiated_price": 35000,
"residual_value": 20000,
"money_factor": 0.00125,
"lease_term": 36
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "fin.car_lease",
"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
A lease term that is not a positive integer fails with invalid_input instead of being truncated.
What a car lease payment is and how the two-part formula works
The response also reports depreciation and finance_fee separately so a shopper can see how much of the payment is using up the car versus paying for the use of money, and it reports total_of_payments as the monthly figure times the term. Acquisition fees, documentation charges, and sales tax are not invented: add them to negotiated_price if they are capitalized into the lease, otherwise leave them out of this pretax identity.
Input contract, response shape, and error behaviour
Lease term is the field the product contract singles out: it must be a whole number of months, never a year count silently multiplied, never a rounded decimal. POST a JSON body with four required fields: negotiated_price, the capitalized selling price as a finite number at least zero (aliases price, cap_cost, capitalized_cost, and selling_price); residual_value, the contract residual in currency as a finite number at least zero, not a percent of sticker (aliases residual and residual_amount); money_factor, the dealer money factor as a finite number from zero through one, for example 0.00125 rather than three for three percent APR (aliases mf and factor); and lease_term, the term as a positive integer number of months from one through one hundred twenty (aliases term, months, and term_months). Each numeric field may arrive as a JSON number or as a numeric string. Missing fields, empty strings, non-finite values, a negative price or residual, a money factor above one, and any lease_term that is not a positive integer—zero, a fraction such as thirty-six point five, a boolean, or a non-numeric string—fail with invalid_input naming the field and are not billed. On success the body echoes negotiated_price, residual_value, money_factor, and lease_term, and adds depreciation, finance_fee, monthly_payment, total_of_payments, and a formula string restating the two-part identity. Example: negotiated_price thirty-five thousand, residual_value twenty thousand, money_factor 0.00125, lease_term thirty-six yields depreciation of the fifteen-thousand gap over thirty-six months plus a rent charge of fifty-five thousand times the factor, rounded to two decimals. Pair the figure with your own tax table if the jurisdiction taxes the payment; this endpoint computes pretax lease math only.
Where a car lease calculator earns its keep
Failed validation does not consume balance. Quote tools and comparison pages can call the same pure module from the browser for free previews and from the API when storing a scenario, guaranteeing that the payment a visitor saw on a landing page matches the payment stored after they save a quote. Personal-finance apps and household budgets already know a down payment or trade-in; subtracting those credits from the selling price and posting negotiated_price, residual_value, money_factor, and lease_term fills a card with monthly payment, depreciation, finance fee, and total of payments so a driver can see whether thirty-six months is cheaper in cash than twenty-four at a higher monthly hit. Educators teaching lease versus loan math can seed classroom examples that fail loudly when lease_term is not a positive integer, instead of silently truncating 36.7 months into thirty-six. Content teams can illustrate zero-factor promotions with money_factor zero, where the payment collapses to depreciation without a hidden rent charge. Keep lease_term a whole number of months, pin the rounded money fields in tests, and you get reproducible car lease payments for widgets, LMS modules, and edge workers without a lending stack of your own.
Integration use cases
Quote and comparison tools
Store negotiated_price, residual_value, money_factor, and lease_term in a quote pipeline whose API payment matches the free browser preview byte for byte.
Technical questions
How is a car lease monthly payment calculated?
Send negotiated_price (≥0), residual_value (≥0), money_factor from 0 through 1 (e.g. 0.00125), and lease_term as a positive integer of months. Monthly payment is (negotiated_price − residual_value) / lease_term plus (negotiated_price + residual_value) × money_factor.
What does the car lease calculator cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.