CD calculator
Lock 10,000 in a 2-year CD at 5% compounded quarterly and it matures at 11,044.86, which is 1,044.86 of interest. Choose annual, monthly, daily or continuous compounding and see what each schedule really pays. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Principal amount
- 10,000
- Annual rate
- 5
- Term
- 2
- Compounding
- Quarterly
- Maturity value
- 11,044.86
- Interest earned
- 1,044.86
- Apy percent
- 5.0945336914
- Compounds per year
- 4
A certificate of deposit locks a lump-sum deposit at a published annual rate for a stated term and returns that principal plus interest on the maturity date.
How certificate of deposit future value is compounded
When compounding is discrete with n periods per year, each period earns r divided by n, and there are n times t such periods, so the closed form is future value equals P times one plus r over n, raised to n times t.
That is the same compound-interest identity textbooks write as FV equals P times (1 plus r over n) to the n t, and it is how a bank turns a 5 percent two-year quarterly CD into a maturity check that is larger than simple interest of P times r times t. The seven accepted schedules map to n as follows: annual is one, semiannual is two, quarterly is four, monthly is twelve, weekly is fifty-two, and daily is three hundred sixty-five.
Continuous compounding is the limit as n grows without bound and uses the exponential form future value equals P times e to the r t. When the annual rate is exactly zero the exponential and the power both collapse to the honest special case future value equals P, so a promotional zero-rate placeholder does not divide by zero or invent interest. Money fields round to two decimal places so they match currency.
Interest earned is maturity value minus principal. The response also reports the annual percentage yield implied by the schedule, APY equals (1 plus r over n) to the n minus one (or e to the r minus one when continuous), because two CDs with the same headline rate and different compounding are not worth the same at maturity.
What you can do with it
Bank and credit-union rate pages
Turn a quoted annual rate, compounding schedule, and term into the CD maturity value and interest a saver will receive if they hold to the end.
Compare CDs with different compounding
Line up daily, monthly, and quarterly offers on the same principal and term and rank them by maturity value and APY, not by the headline rate alone.
CD ladder and household planning
Price each rung of a ladder—or a single six-month lock-up at term 0.5—and store the same cents the free browser preview already showed.
FAQ
How is CD maturity value calculated from principal, rate, term, and compounding?
Continuous uses FV = P·e^(r·t). Interest earned is FV minus principal.
What happens if the CD principal is zero, negative, or missing?
Principal must be a finite number greater than zero. Zero, negatives, booleans, empty strings, and non-numeric values are rejected and not billed.
How do I enter a 6-month or 3-month certificate of deposit?
Term is measured in years. A 6-month CD is term 0.5 and a 3-month CD is term 0.25. An 18-month CD is term 1.5. Pair that term with the issuer's compounding frequency.
Does this include an early-withdrawal penalty?
No. This calculator assumes the CD is held to maturity and returns only the compounded future value and interest earned. Early-withdrawal haircuts are a different search and a different tool.
Why do two CDs with the same rate pay different amounts?
Because interest that is credited more often starts earning interest sooner. A daily CD beats a quarterly one at the same headline rate, so the calculator also shows the annual percentage yield each schedule implies, which lets you rank offers fairly.
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/cd \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"principal":10000,"annual_rate":5,"term":2,"compounding":"quarterly"}'const res = await fetch("https://api.kit.forhosting.com/fin/cd", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"principal": 10000,
"annual_rate": 5,
"term": 2,
"compounding": "quarterly"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/fin/cd",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"principal": 10000,
"annual_rate": 5,
"term": 2,
"compounding": "quarterly"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/fin/cd", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"principal":10000,"annual_rate":5,"term":2,"compounding":"quarterly"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"principal":10000,"annual_rate":5,"term":2,"compounding":"quarterly"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/fin/cd", 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": 10000,
"annual_rate": 5,
"term": 2,
"compounding": "quarterly"
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "fin.cd",
"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 cash you actually receive is not the headline rate times years: it depends on how often the issuer compounds—annually, semiannually, quarterly, monthly, weekly, daily, or continuously. This CD calculator takes principal, annual rate as a percent, term in years, and compounding frequency, applies the closed-form future-value identity, and returns the maturity value together with the interest earned. Principal that is not a positive number fails with invalid_input and is not billed.
How certificate of deposit future value is compounded
A certificate of deposit is a time deposit: you hand the issuer a principal P, they quote an annual nominal rate i percent, they lock the funds for a term t measured in years, and they credit interest on a published compounding schedule. Convert the percent to a decimal rate r equal to annual_rate divided by one hundred.
Input contract, response shape, and error behaviour
Principal is the field the product contract singles out: zero, a negative deposit, or a non-numeric stand-in is never treated as a free gift or as a silent zero-coupon. POST a JSON body with four required fields. principal is the opening deposit as a finite number greater than zero (aliases amount and deposit). annual_rate is the annual nominal interest as a percent such as five for five percent per year, finite, at least zero, and at most one thousand (aliases rate and interest_rate). term is the lock-up in years as a finite number greater than zero and at most one hundred; a six-month CD is term 0.5 and a three-month CD is term 0.25 (aliases years and term_years). compounding is one of the closed set annual, semiannual, quarterly, monthly, weekly, daily, or continuous (aliases frequency and compounds). Each numeric field may arrive as a JSON number or as a numeric string. Missing fields, empty strings, booleans, non-finite values, a non-positive principal, a negative annual_rate, a non-positive term, and any compounding value outside the enum fail with invalid_input naming the field and are not billed. On success the body echoes principal, annual_rate, term, and compounding, and adds compounds_per_year when the schedule is discrete, maturity_value, interest_earned, apy_percent, and a formula string restating the discrete identity, the continuous special case, and the zero-rate collapse. Example: principal ten thousand, annual_rate five, term two, compounding quarterly yields n equals four and a maturity value equal to ten thousand times 1.0125 to the eighth, rounded to cents, with interest earned equal to that maturity minus the principal. This endpoint does not model early-withdrawal penalties, teaser rates that change mid-term, or federal deposit-insurance limits; it computes hold-to-maturity compound interest only.
Where a CD maturity calculator earns its keep
Educators teaching discrete versus continuous compounding can seed classroom examples that fail loudly when principal is not a positive number, instead of plotting a nonsense curve through a zero or negative deposit. Failed validation does not consume balance. Keep principal positive, term in years, and compounding inside the enum, pin the rounded money fields in tests, and you get reproducible CD maturities for widgets, LMS modules, and edge workers without a deposit-origination stack of your own. Comparison tables that line up a six-month daily CD against a one-year quarterly CD can call the same pure module from the browser for free previews and from the API when storing a scenario, guaranteeing that the maturity a visitor saw matches the maturity stored after they save a quote. Household planners who already know the cash they can lock can post principal, annual_rate, term, and compounding to fill a card with maturity value, interest earned, and APY, then decide whether stretching from twelve months to twenty-four months is worth the extra lock-up. Product teams building a CD ladder can request several terms with the same principal and rate and read interest_earned on each rung without writing their own power function.
Technical questions
What does a CD maturity calculation cost on the API?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.