Peukert Battery Capacity Calculator for Lead-Acid Batteries
This Peukert battery capacity calculator estimates how many amp-hours a lead-acid battery can effectively deliver at a specified constant discharge current.
Run — free
Enter the capacity printed for the battery, the hour rate used for that rating, the expected load current, and the battery's Peukert exponent. The result includes the implied rated current, adjusted effective capacity, estimated runtime, and delivered capacity as a percentage of the nameplate rating. It is useful for comparing realistic backup or off-grid performance with a manufacturer's laboratory rating.
Start with the complete battery rating
A lead-acid capacity figure is incomplete unless its rating period is known. A battery marked 100 Ah at the 20-hour rate was characterized at 5 A, because 100 amp-hours divided by 20 hours equals 5 amperes. Enter that nameplate capacity as rated_capacity_ah and the associated period as rated_discharge_hours. Then enter the constant current your equipment is expected to draw. Use amperes, not watts; if the load is specified in watts, first estimate battery-side current while allowing for system voltage and inverter efficiency. Finally, enter a Peukert exponent supplied by the battery maker or obtained from suitable discharge tests. An exponent of 1 represents an ideal battery whose available amp-hours do not change with discharge rate. Real lead-acid batteries normally have an exponent above 1, so high currents reduce usable capacity. Matching the rating period to the quoted capacity is essential. Combining a 20-hour capacity with a 10-hour period silently creates the wrong reference current and therefore the wrong result.
Understand the calculation and its outputs
The calculator first derives the rated current by dividing rated capacity by rated discharge hours. It then applies Peukert's relationship, treating the manufacturer's rated current and time as the reference point. Estimated runtime equals the rated hours multiplied by the ratio of rated current to actual current, raised to the Peukert exponent. Effective capacity is that runtime multiplied by the actual current. The capacity percentage compares this adjusted capacity with the nameplate figure. At a current above the rated current, the estimate normally shows fewer usable amp-hours and a percentage below 100. At a lower current, the mathematical model can show more than the rated capacity because the battery is being discharged more gently than it was during its rating test. This does not create energy; it describes how the empirical lead-acid discharge relationship shifts usable charge with current. Results are rounded only for stable presentation. The underlying calculation uses the supplied decimal values directly and performs no lookup, interpolation, or random adjustment.
Use the estimate within practical limits
Peukert's equation is a planning model, not a complete battery simulator. It assumes a steady discharge current and a representative exponent. Loads that pulse, cycle, or change with inverter behavior should be converted into a defensible current profile, and a single-current estimate should be treated as an approximation. Temperature, battery age, state of charge, cable losses, cutoff voltage, manufacturing variation, and prior cycling can all reduce real runtime. The equation is most useful for comparing load choices on the same battery or checking whether a nameplate rating is being applied at a very different current. For conservative system design, include a reserve and respect the manufacturer's permitted depth of discharge; effective capacity is not the same as recommended usable capacity. Validate critical backup, medical, safety, or remote-power designs with current battery documentation and a controlled load test. The browser calculation is free, while automated API requests use the published $0.002 per request. No network service, battery database, or stored measurement is involved in the calculation.
What you can do with it
Size a backup load
Estimate how long a lead-acid battery can support a known constant current instead of dividing nameplate amp-hours by current alone.
Compare discharge scenarios
See how changing the load current affects effective amp-hour capacity for the same battery and Peukert exponent.
Check a system estimate
Verify whether a runtime calculation properly accounts for the hour rate attached to the manufacturer's battery capacity rating.
FAQ
What does the Peukert exponent mean?
It describes how strongly a lead-acid battery's deliverable capacity falls as discharge current rises. A value of 1 is ideal; larger values indicate more rate-related loss.
Where do I find the rated discharge hours?
Check the battery data sheet near the capacity rating. Labels such as C20, 20-hour rate, or 100 Ah at 20 h identify the required period.
Why can effective capacity exceed the rated capacity?
That can occur when the chosen current is below the manufacturer's rating current. The model predicts more delivered amp-hours under the gentler discharge condition.
Does the result include inverter losses or depth-of-discharge limits?
No. Enter battery-side current after accounting for conversion losses, and separately apply the safe depth-of-discharge limit recommended for the battery.
How much does the API calculation cost?
Each API request uses the published $0.002. The same deterministic calculation can also run free in the browser.
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/elec/peukert-capacity \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"rated_capacity_ah":100,"rated_discharge_hours":20,"discharge_current_a":10,"peukert_exponent":1.2}'const res = await fetch("https://api.kit.forhosting.com/elec/peukert-capacity", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"rated_capacity_ah": 100,
"rated_discharge_hours": 20,
"discharge_current_a": 10,
"peukert_exponent": 1.2
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/elec/peukert-capacity",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"rated_capacity_ah": 100,
"rated_discharge_hours": 20,
"discharge_current_a": 10,
"peukert_exponent": 1.2
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/elec/peukert-capacity", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"rated_capacity_ah":100,"rated_discharge_hours":20,"discharge_current_a":10,"peukert_exponent":1.2}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"rated_capacity_ah":100,"rated_discharge_hours":20,"discharge_current_a":10,"peukert_exponent":1.2}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/elec/peukert-capacity", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"rated_capacity_ah": 100,
"rated_discharge_hours": 20,
"discharge_current_a": 10,
"peukert_exponent": 1.2
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "elec.peukert_capacity",
"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. |