Fixture unit demand calculator
24 FU on the flush-tank curve give a probable peak demand of 16.615167 gallons per minute, or 62.895248 litres. Enter the FU total from your plumbing code table and pick the home or public-building curve for a first supply-sizing estimate. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Fixture units
- 24
- System
- Flush tank
- Peak demand gpm
- 16.615167
- Peak demand lpm
- 62.895248
- System label
- flush tank (private / residential)
Use it for preliminary supply sizing, training worksheets, and automation that must fail cleanly when the FU load is missing or non-positive instead of inventing a zero-gpm success.
What FU totals mean and how peak flow is estimated
A residential water closet with a flush tank, a lavatory, a shower, and a kitchen sink each carry published FU values; after you sum them for the house or the cold-water branch under study, you still need an estimate of how much water will actually flow at peak coincidence. Hunter curves, long used in IPC and UPC planning practice, map that total FU load to a probable simultaneous demand in gallons per minute.
Two families matter for day-to-day work: the flush-tank curve, which models private dwellings where water closets refill from gravity tanks and diversity is higher, and the flush-valve curve, which models public or institutional buildings where flushometer valves can dump large short bursts and peak demand sits higher at the same FU count. This calculator stores dense tabulated knots for both families and interpolates in log-log space between neighboring points so fractional totals such as twelve point five FU land smoothly between twelve and fourteen.
Below the first knot demand scales toward zero with the first segment; above the last knot a power-law tail continues the final slope so large multi-dwelling loads remain continuous and monotone. Results are also converted to litres per minute with the exact US gallon factor three point seven eight five four one one seven eight four so metric take-offs and imperial service-line charts can share one call.
When a peak water demand estimate helps
Multifamily preliminary design teams compare flush-tank dwelling stacks against flush-valve public restrooms in the same building to see how curve choice moves peak gpm at identical FU counts. Inspectors and plan reviewers need a deterministic oracle that rejects nonsense inputs instead of printing zero gpm on a blank form. Failed validation does not consume balance, which keeps exploratory scripts cheap while operators learn the contract.
Keep FU totals inside the published range, pin rounded peaks in automated tests, and document which code table produced the FU sum so the demand estimate remains auditable years later when the plumbing schedule changes.
FAQ
Does this replace a full plumbing hydraulic design?
No. It estimates peak supply demand from total FU using tabulated Hunter-style curves. Pipe sizing, pressure loss, local amendments, and engineer stamps remain separate design steps.
What is the difference between the flush-tank and flush-valve curves?
The flush-tank curve, the default, models homes where toilets refill from gravity tanks and use is more spread out. The flush-valve curve models public buildings with flushometer valves, which release large short bursts, so peak demand is higher at the same total.
How do I get the FU total for a house?
Look up the published FU value of each item in your plumbing code table, such as a tank toilet, a lavatory, a shower and a kitchen sink, and add them up for the house or the branch you are sizing.
Can I get the peak flow in litres per minute?
Yes. Every result comes in gallons and in litres per minute, converted with the exact US gallon of 3.785411784 litres, so metric take-offs and imperial service-line charts give the same answer.
What FU totals can I enter?
Any total above zero and up to 10,000. Fractional totals fall smoothly between the table points, and a blank or zero load is refused instead of showing a misleading zero flow.
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/home/fixture-unit-demand \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"fixture_units":24}'const res = await fetch("https://api.kit.forhosting.com/home/fixture-unit-demand", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"fixture_units": 24
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/home/fixture-unit-demand",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"fixture_units": 24
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/home/fixture-unit-demand", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"fixture_units":24}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"fixture_units":24}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/home/fixture-unit-demand", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"fixture_units": 24
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "home.fixture_unit_demand",
"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
What fixture units mean and how Hunter demand works
The endpoint does not replace a licensed engineer’s full hydraulic analysis, pressure loss calculation, or local code amendment; it gives a transparent, testable peak-flow estimate from the FU total you already computed.
Input contract, response shape, and validation rules
Aliases fu, total_fu, total_fixture_units, fixture_unit_count, and wsfu are accepted. Optional system selects the Hunter family: flush_tank is the default for homes and other private gravity-tank installations; flush_valve is for public flushometer installations. Aliases such as tank, private, residential, valve, flushometer, public, and commercial map to the same two enums. On success the body echoes fixture_units and system, returns peak_demand_gpm and peak_demand_lpm rounded to six decimal places for stable goldens, and includes method set to hunter_curve_log_linear, a short formula string, a human-readable system_label, and a message summarizing the peak flow. Missing fixture_units, non-finite values, zero or negative loads, values above the published maximum, or an unrecognized system string fail with invalid_input and are not billed.
Integration use cases
Residential remodel supply check
Sum fixture units for an added bath and laundry, then estimate peak gpm on the flush-tank Hunter curve before upsizing the service line or meter.
Public restroom flush-valve planning
Enter the public fixture unit total with system flush_valve to get a higher peak demand appropriate for flushometer installations.
Training, goldens, and home-calc apps
Generate known-good FU→gpm cases and deliberate invalid loads for unit tests, plumbing homework, and isomorphic browser widgets.
Technical questions
How do I estimate peak water demand from fixture units?
Send the total water-supply fixture unit count as fixture_units. Optionally set system to flush_tank (default, residential) or flush_valve (public). The API returns peak_demand_gpm and peak_demand_lpm from the matching Hunter-style curve.
What is the difference between flush_tank and flush_valve?
flush_tank models private gravity-tank water closets with more diversity and lower peak gpm at a given FU. flush_valve models public flushometer fixtures with higher coincidence and higher peak demand at the same FU.
What inputs are rejected?
Missing, non-finite, zero, negative, or out-of-range fixture_units, and unrecognized system strings, fail with invalid_input and are not billed.
What does the fixture unit demand calculator cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.