Blended rate calculator
A 200,000 mortgage at 4.25%, a 15,000 car loan at 6.9% and a 5,000 personal loan at 11.5% blend to a single rate below 5%, because the mortgage is most of what you owe. List your loans with balances and rates to get yours. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
A blended interest rate is the single figure that represents several loans at once: each loan's annual rate is weighted by its outstanding balance, so a large cheap mortgage pulls the average down and a small expensive card pulls it up only in proportion to what you still owe. Borrowers look up this number when they refinance, when a lender asks for the average cost of debt, or when they compare a new consolidation offer against the mix they already hold. This blended rate calculator accepts a list of loans with balances and annual percentage rates, returns the weighted average, and rejects a zero total balance instead of dividing by nothing. Use it when you need a deterministic cost-of-debt snapshot, not a full amortization table.
What a blended rate is and how the weights work
The blended interest rate of a loan portfolio is the balance-weighted mean of the individual annual rates. Write each outstanding principal as a weight and each contractual rate as a percent, then divide the sum of balance times rate by the sum of balances.
Because the weights are dollars still owed, a two-hundred-thousand mortgage at four percent dominates a four-thousand credit card at twenty percent: the card is expensive, but it is a small slice of the stack, so the blended figure sits much closer to the mortgage than a simple unweighted average of four and twenty would suggest. That distinction is the whole reason people search for a blended rate instead of adding rates and dividing by the count of accounts.
The formula is the same identity used for a portfolio yield or a weighted average coupon: the rate that, applied to the combined principal, produces the same interest-rate mass as the separate loans. When two loans share a rate the blend equals that rate regardless of how the principal is split. When balances differ, the heavier principal owns more of the result, which is exactly what a refinance worksheet or a cost-of-debt memo needs before anyone talks about cash-flow savings.
What you can do with it
Refinance and consolidation landing pages
Let visitors paste mortgage, auto, and card balances with APRs and show one blended rate next to a new offer so they can see whether rolling debts together actually cheapens the mix.
Broker and counselling intake
Turn a client's account list into a stable cost-of-debt figure for session notes, refinance worksheets, and plan templates without reimplementing weighted-average arithmetic.
Budgeting apps and spreadsheet add-ons
Post stored balances and rates once to fill a blended-rate field and a weight breakdown, then chart how much of the stack sits in cheap versus expensive debt.
FAQ
How is the blended interest rate calculated?
Rates are percents (6.5 means 6.5% APR). A larger outstanding balance pulls the average more than a smaller one.
What happens if the total balance is zero?
A blended rate is undefined when the outstanding balances sum to zero, because that sum is the denominator of the weighted mean. Empty or all-zero lists are never returned as a success.
Do I enter rates as percents or decimals?
As percents, matching other loan calculators here. Send 6.5 for 6.5% APR, not 0.065. Each loan also needs a non-negative outstanding balance; name is optional.
Does this estimate monthly payments or total interest?
No. It only returns the single blended rate of the mix, plus each loan's weight and contribution. Use a separate amortization tool if you need payment schedules or dollar interest.
Why isn't my blended rate just the average of my loan rates?
Because each rate counts in proportion to the balance behind it. A large cheap mortgage pulls the figure down, while a small expensive card raises it only as much as its small balance allows. A plain average treats every account as equal, which it is not.
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/blended-rate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"loans":[{"name":"Mortgage","balance":200000,"rate":4.25},{"name":"Auto loan","balance":15000,"rate":6.9},{"name":"Personal loan","balance":5000,"rate":11.5}]}'const res = await fetch("https://api.kit.forhosting.com/fin/blended-rate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"loans": [
{
"name": "Mortgage",
"balance": 200000,
"rate": 4.25
},
{
"name": "Auto loan",
"balance": 15000,
"rate": 6.9
},
{
"name": "Personal loan",
"balance": 5000,
"rate": 11.5
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/fin/blended-rate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"loans": [
{
"name": "Mortgage",
"balance": 200000,
"rate": 4.25
},
{
"name": "Auto loan",
"balance": 15000,
"rate": 6.9
},
{
"name": "Personal loan",
"balance": 5000,
"rate": 11.5
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/fin/blended-rate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"loans":[{"name":"Mortgage","balance":200000,"rate":4.25},{"name":"Auto loan","balance":15000,"rate":6.9},{"name":"Personal loan","balance":5000,"rate":11.5}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"loans":[{"name":"Mortgage","balance":200000,"rate":4.25},{"name":"Auto loan","balance":15000,"rate":6.9},{"name":"Personal loan","balance":5000,"rate":11.5}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/fin/blended-rate", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"loans": [
{
"name": "Mortgage",
"balance": 200000,
"rate": 4.25
},
{
"name": "Auto loan",
"balance": 15000,
"rate": 6.9
},
{
"name": "Personal loan",
"balance": 5000,
"rate": 11.5
}
]
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "fin.blended_rate",
"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.
Limits
max_items | 100 |
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
What a blended rate is and how the weights work
Algebraically that is blended_rate equals Σ(balance_i × rate_i) divided by Σ(balance_i). This endpoint does not convert percents into monthly payments, does not compound, and does not guess remaining term. It answers one question honestly: if these balances and these APRs are the mix, what single rate describes the stack.
Input contract, response shape, and error behaviour
Each object must include balance (finite number greater than or equal to zero, currency units) and rate (finite number greater than or equal to zero, annual interest as a percent such as 6.5 for 6.5 percent APR). The distinctive failure is a zero total balance: if every outstanding amount is zero, or the rounded balances sum to zero, the denominator of the weighted mean is zero and the task fails rather than returning Infinity or a fabricated rate. Balances are rounded to two decimal places and individual rates to six for stable cross-runtime goldens. POST a JSON body with a single required field loans: a non-empty array of objects. Aliases list, items, and accounts are accepted for the array. At most one hundred loans are allowed per call. An empty array, a missing loans field, a non-array value, a loan object lacking balance or rate, a negative balance, or a negative rate fails with invalid_input and is not billed. On success the body includes loan_count; total_balance as the sum of balances rounded to two decimals; blended_rate as the weighted mean rounded to eight decimals; weighted_sum as the numerator Σ(balance × rate); a loans array of records each carrying name, balance, rate, weight_percent (that loan's share of total_balance), and contribution (balance times rate); and a formula string restating the identity. Pair the blended_rate with your own payment engine if you need dollar interest estimates; start here when the product question is simply the single rate of the mix.
Where a blended rate calculator earns its keep
Consolidation-offer pages can show the mix rate next to the new product rate so a reader can see whether rolling debts together actually cheapens the stack. Failed validation does not consume balance. Mortgage brokers and credit-counselling intake forms can call the same pure module from the browser for free previews and from the API for stored files, guaranteeing that the figure a client saw on the landing page matches the figure stored after signup. Spreadsheet add-ons and budgeting apps often already store card, auto, and mortgage rows; posting that list once yields the blended rate plus each loan's weight_percent for a stacked chart. Keep the list under one hundred loans, pin blended_rate in tests, and you get a reproducible cost-of-debt number for widgets, LMS modules, and edge workers without standing up a full financial-planning stack of your own. The capability never invents remaining terms or monthly payments; those belong to separate amortization tools that can take this blended_rate as an input when a single-rate approximation is enough.
Technical questions
What does the blended rate calculator cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.