CD early withdrawal penalty
Breaking a 10,000 CD at 4% APY with a 180-day interest penalty costs 197.26, leaving 9,802.74 if you withdraw now. Enter the principal, the APY and the penalty days to see what an early exit costs. 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 APY %
- 4
- Penalty days
- 180
- Decimal places
- 2
- Penalty
- 197.26
- Net if withdrawn now
- 9,802.74
Estimate CD early-withdrawal penalty as days of simple interest. Search intent: cd early withdrawal penalty. No network calls, random seeds, or server state are required. Failed jobs are not
How the penalty is worked out
This calculator treats an early-withdrawal penalty as a number of days of simple interest. It takes the interest your principal would earn in a full year at the APY and scales it to the penalty days by dividing by 365. On a 10,000 certificate at 4% APY, 180 days of interest come to 197.26. It then subtracts that penalty from the principal to show what would be left if you withdrew today: 9,802.74 in this case. Nothing is compounded within the penalty period, because the penalty is defined as simple interest.
Getting the inputs right
Take the penalty days from the terms of your certificate and enter them as days, converting first if the terms speak of months. Enter the APY as a percentage, not as a decimal fraction. Keep the principal in one currency; the result comes back in the same unit. You can choose how many decimals to show, and rounding is applied only once, so small amounts are not distorted by repeated rounding. The figure is an estimate under this definition: compare it with the exact wording of your agreement before deciding whether to break the deposit.
FAQ
Other languages?
EN-only delivery; Nitro hydrates the other seven locales.
How is a CD early withdrawal penalty calculated?
As days of simple interest: the principal times the APY, times the penalty days, divided by 365. In other words, one year of interest is scaled down to the number of days your terms set as the penalty.
What number of penalty days should I enter?
The days of interest that your CD's terms set for an early withdrawal, such as 180. If the terms state the penalty in months, convert it to days first; the calculator applies exactly the number you give.
What does the amount if withdrawn now show?
It is the principal minus the penalty, so you can see what an early exit leaves you. In the 10,000 example with a 197.26 penalty, that is 9,802.74.
Do I enter the APY as 4 or as a decimal?
Enter it as a percentage: type 4 for a 4% APY. Writing the rate as a decimal fraction would make the penalty a hundred times smaller than it really is.
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/cd-early-penalty \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"principal":10000,"apy_percent":4,"penalty_days":180}'const res = await fetch("https://api.kit.forhosting.com/finance/cd-early-penalty", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"principal": 10000,
"apy_percent": 4,
"penalty_days": 180
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/finance/cd-early-penalty",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"principal": 10000,
"apy_percent": 4,
"penalty_days": 180
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/finance/cd-early-penalty", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"principal":10000,"apy_percent":4,"penalty_days":180}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"principal":10000,"apy_percent":4,"penalty_days":180}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/finance/cd-early-penalty", 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,
"apy_percent": 4,
"penalty_days": 180
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "finance.cd_early_penalty",
"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 calculator is free in the browser, deterministic, and identical on the API path. Inputs are validated before arithmetic so invalid payloads fail with invalid_input. Half-up rounding is applied once from raw IEEE values when decimals are requested. Use the same JSON contract from spreadsheets, CMS hooks, automation, or teaching demos.
How it works
Estimate CD early-withdrawal penalty as days of simple interest. penalty = principal × APY × days/365. No network calls, random seeds, or server state are required. Failed jobs are not billed. Search intent is matched with precise English keywords. Optional fields document defaults. No The calculator is free in the browser, deterministic, and identical on the API path. Inputs are validated before arithmetic so invalid payloads fail with invalid_input. Half-up rounding is applied once from raw IEEE values when decimals are requested. Use the same JSON contract from spreadsheets, CMS hooks, automation, or teaching demos. The calculator is free in the browser, deterministic, and identical on the API path. Inputs are validated before arithmetic so invalid payloads fail with invalid_input. Half-up rounding is applied once from raw IEEE values when decimals are requested.
Inputs, limits and rounding
Optional decimals use half-up once. Outputs echo key inputs for logging and automation. No network calls, random seeds, or server state are required. Failed jobs are not billed. Search intent is matched with precise English keywords. Optional fields document defaults. Half-up rounding is Provide required JSON fields as documented in params. Invalid types or ranges raise invalid_input. The calculator is free in the browser, deterministic, and identical on the API path. Inputs are validated before arithmetic so invalid payloads fail with invalid_input. Half-up rounding is applied once from raw IEEE values when decimals are requested. Use the same JSON contract from spreadsheets, CMS hooks, automation, or teaching demos. The calculator is free in the browser, deterministic, and identical on the API path. Inputs are validated before arithmetic so invalid payloads fail with invalid_input.
When to use it
Use when the search intent matches this calculator. Estimate CD early-withdrawal penalty as days of simple interest. No network calls, random seeds, or server state are required. Failed jobs are not billed. Search intent is matched with precise English keywords. Optional fields document defaults. Half-up The calculator is free in the browser, deterministic, and identical on the API path. Inputs are validated before arithmetic so invalid payloads fail with invalid_input. Half-up rounding is applied once from raw IEEE values when decimals are requested. Use the same JSON contract from spreadsheets, CMS hooks, automation, or teaching demos. The calculator is free in the browser, deterministic, and identical on the API path. Inputs are validated before arithmetic so invalid payloads fail with invalid_input.
Integration use cases
Quick check
Verify a formula in the free browser widget.
Automation
Call the API with the same JSON fields from scripts.
Teaching
Show pinned golden examples without proprietary tools.
Technical questions
Is the browser widget free?
Yes. Tier A runs client-side with the same core as the API.
Does it call the network?
No. Computation is local and deterministic.
What happens on bad input?
The handler throws invalid_input; failed jobs are not billed.
Can I use the API?
Yes. Send the same JSON documented in params.