FHA MIP calculator
On a 300,000 FHA base loan, mortgage insurance comes to 5,250 upfront, 1,650 a year and 137.50 a month at the default rates of 1.75% and 0.55%. Change either rate to match your own loan. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Base loan amount
- 300,000
- Upfront MIP rate (%)
- 1.75
- Annual MIP rate (%)
- 0.55
- Upfront mortgage insurance premium
- 5,250
- Annual mortgage insurance premium
- 1,650
Compute the upfront, annual, and monthly FHA mortgage insurance premiums (MIP) from a base loan amount, using FHA's flat 1.75% upfront and 0.55% annual default rates that you can override.
Two premiums, three figures
An FHA loan carries a mortgage insurance premium, known as MIP, and it is charged in two ways. The upfront premium is a one-time charge, 1.75% of the base loan by default, which FHA typically finances into the loan balance instead of collecting it separately. The annual premium is 0.55% of the base loan by default, and it is not paid in one go: it is divided by twelve and added to each monthly mortgage payment. On a 300,000 base loan that means 5,250 upfront, 1,650 a year and 137.50 a month.
Getting the numbers right
Both premiums are worked out on the base loan you enter, so start from that amount. The default rates are common, not universal: a different loan-to-value tier, term or case-number date can carry a different schedule, so replace them with the rates on your own paperwork. Each figure is rounded from the base loan on its own, rather than from another result, so no rounding error builds up across the three. That makes the figures safe to copy into an affordability sheet or a Loan Estimate review.
What you can do with it
Loan origination and disclosures
Add exact upfront, annual, and monthly MIP figures to affordability sheets and Loan Estimates without hardcoding rates.
FAQ
How is the upfront FHA premium worked out?
Multiply the base loan by the upfront rate, 1.75% by default. It is a one-time charge that FHA typically finances into the loan balance instead of collecting it separately.
How does the annual premium turn into a monthly amount?
The annual premium is the base loan times the annual rate, 0.55% by default, and it is divided by twelve. That monthly figure is then added to each mortgage payment.
When should I change the default rates?
When your loan falls in a different loan-to-value tier or term, or its case number dates from a period with a different schedule. Enter your own upfront and annual percentages and all three figures update.
Which loan amount should I enter?
The base loan amount, because both premiums are calculated on it. Each figure is rounded from that amount on its own, so the three results stay consistent with no rounding drift between them.
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/fha-mip \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"base_loan":300000}'const res = await fetch("https://api.kit.forhosting.com/finance/fha-mip", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"base_loan": 300000
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/finance/fha-mip",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"base_loan": 300000
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/finance/fha-mip", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"base_loan":300000}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"base_loan":300000}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/finance/fha-mip", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"base_loan": 300000
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "finance.fha_mip",
"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
The three MIP figures it derives
The calculator takes your base_loan amount and derives three FHA mortgage insurance premium figures using flat percentage rules. The upfront_mip equals base_loan multiplied by upfront_rate divided by one hundred; with the default upfront_rate of 1.75, a $300,000 base loan yields $5,250 that FHA typically finances into the loan balance. The annual_mip equals base_loan multiplied by annual_rate divided by one hundred; at the default annual_rate of 0.55, the same loan produces $1,650 per year. The monthly_mip is simply annual_mip divided by twelve, giving $137.50 added to each mortgage payment. All three come back in one JSON object alongside the echoed base_loan, upfront_rate, and annual_rate, so you can see exactly which assumptions produced each number and audit the arithmetic yourself.
Inputs, defaults, and rounding
The optional decimals field controls precision and defaults to two. Only base_loan is required and it must be a finite number greater than zero, otherwise the core returns a typed invalid_input error naming base_loan. Both upfront_rate and annual_rate are optional percentages: leave them out to accept FHA's common 1.75 and 0.55, or pass your own to model a different loan-to-value tier, term, or a case-number vintage with a different schedule. Because the annual and upfront figures each round from their own base_loan product rather than from one another, no compounding rounding error creeps in across the three outputs.
Where it fits and what it does not do
Because the module is deterministic and depends on no clock or locale, the same inputs always return the same premiums, which makes it dependable inside loan-origination pipelines, affordability calculators, and disclosure sheets. You can raise decimals to four when reconciling against an amortization engine that carries extra precision. A common workflow overrides annual_rate to compare the 0.55 tier against a higher tier for loans above the county limit, or sets upfront_rate to zero to isolate the recurring cost. Note the tool computes premiums from the base_loan you supply and does not itself derive that base from purchase price, down payment, or LTV, so feed it the amount FHA actually insures.
Integration use cases
Compare rate tiers
Override annual_rate to weigh the 0.55 tier against a higher tier for loans above the FHA county limit.
Portfolio batch quoting
Call the API to compute MIP across many base loan amounts at once for pricing or reporting pipelines.
Technical questions
What does it calculate?
Upfront MIP (base_loan x 1.75%), annual MIP (base_loan x 0.55%), and monthly MIP (annual divided by 12) by default.
Can I change the rates?
Yes. Pass upfront_rate and annual_rate to model a different LTV tier, term, or FHA schedule.
What input is required?
Only base_loan, a finite number above zero; anything else returns an invalid_input error naming the field.
Does it derive the base loan from price and down payment?
No. It computes premiums from the base_loan you supply, so feed it the amount FHA insures.
Is it free?
Yes in the browser widget. The deterministic API is priced from $0.002 and charged only on success.