Stair headroom calculator
A 2800 mm storey climbed at 32° under a 3600 mm stairwell opening clears the 2032 mm minimum. Enter height, pitch and opening length to check the clearance at the critical edge before you cut the floor. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Floor to floor height
- 2,800
- Stair angle
- 32
- Floor opening length
- 3,600
- Min headroom
- 2,032
- Slab thickness
- 0
- Total run
- 4,480.9366813149
- Rise over opening
- 2,249.5296668736
Straight-flight design fails when the nosing line under the upper-floor soffit leaves less vertical clearance than your building code allows. This stair headroom calculator turns finished floor-to-floor height, stair pitch angle and the horizontal length of the stairwell opening into available headroom at the critical edge, then compares that figure with a code minimum you choose—or with the common two-thousand-thirty-two unit default that matches six feet eight inches when you work in millimetres. Optional slab thickness subtracts structure depth so the clearance is measured to the underside of the floor, not to the finished surface above.
Measure floor-to-floor height, pitch angle and opening length in one unit system
Floor-to-floor height is the finished vertical distance from the lower floor surface to the upper floor surface the flight must reach. Measure after you know floor finishes, or adjust the design height if build-up will change later. Stair angle is the pitch of the flight from horizontal in degrees; residential straight stairs often sit near thirty to thirty-seven degrees, but the calculator accepts any open interval greater than zero and less than ninety so steep service stairs and gentle public stairs both fit.
Floor opening length is the horizontal length of the hole in the upper floor along the direction of the flight—the stairwell well length that the soffit edge defines. Express height, opening length, optional slab thickness and optional minimum headroom in the same linear unit because the engine never converts systems. If drawings mix millimetres with inches, convert first with a unit tool rather than mixing systems in one request.
What you can do with it
Loft conversions and new stairwells
Homeowners and designers enter storey height, proposed pitch and well length to see whether available headroom meets a 6 ft 8 in (or local) minimum before cutting the floor.
Contractor layout and change orders
Estimating tools recompute required opening length when angle or slab thickness changes, so the stairwell cut stays long enough for code clearance.
FAQ
Is the stair headroom calculator free?
The browser tool runs free on your device.
How is the available stair headroom calculated?
The opening length is multiplied by the tangent of the stair angle, which gives the rise of the pitch line below the soffit edge, and any slab thickness is then subtracted. The result is the clear height at the critical edge.
What minimum headroom does the calculator check against?
By default 2032, the common 6 ft 8 in figure expressed in millimetres. If your local code asks for a different clearance, enter that minimum instead, in the same unit as your height and opening length.
How long does my stairwell opening need to be?
The calculator also gives the opening length needed to reach your minimum headroom at the chosen angle. If you change the pitch or the slab thickness, run it again: the required length moves with both.
Why should I enter the slab thickness?
Because headroom is measured to the underside of the upper floor structure, not to its finished surface. Entering the thickness subtracts that depth, so a deep floor does not make the clearance look larger 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/home/stair-headroom \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"floor_to_floor_height":2800,"stair_angle":32,"floor_opening_length":3200}'const res = await fetch("https://api.kit.forhosting.com/home/stair-headroom", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"floor_to_floor_height": 2800,
"stair_angle": 32,
"floor_opening_length": 3200
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/home/stair-headroom",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"floor_to_floor_height": 2800,
"stair_angle": 32,
"floor_opening_length": 3200
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/home/stair-headroom", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"floor_to_floor_height":2800,"stair_angle":32,"floor_opening_length":3200}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"floor_to_floor_height":2800,"stair_angle":32,"floor_opening_length":3200}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/home/stair-headroom", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"floor_to_floor_height": 2800,
"stair_angle": 32,
"floor_opening_length": 3200
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "home.stair_headroom",
"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
Failed validation is not billed; successful item calls use the published $0.002 base price on KIT balance.
Measure floor-to-floor height, pitch angle and opening length in one unit system
Send floor_to_floor_height as a strictly positive finite number; aliases floor_height, storey_height, total_rise and height map to the same field. Send stair_angle with aliases angle, pitch_angle, pitch and slope_deg. Send floor_opening_length with aliases opening_length, opening, well_length and stairwell_length. Zero or negative dimensions raise invalid_input and are not charged. Extremely small or huge values outside the published stability range also fail so floating-point results stay meaningful on a Worker isolate.
How available headroom, total run and the code check are computed
Over the opening length L the pitch line rises by L times tan of theta; that rise is the geometric vertical distance from the pitch line at the lower soffit edge up to the finished upper floor plane. Optional slab thickness T is then subtracted so available headroom equals L times tan of theta minus T, matching clearance to the underside of structure rather than to the finished surface when T is known. Opening_covers_run reports whether the opening is at least as long as the total run. For a straight flight that lands at the far end of the upper-floor opening, the horizontal run needed to climb floor-to-floor height H at angle theta is total_run equals H divided by the tangent of theta. The default code minimum is two thousand thirty-two of your linear unit—the familiar six feet eight inches figure when you work in millimetres—or you override min_headroom with aliases code_minimum, required_headroom and min_clearance. Headroom margin is available minus minimum; meets_code is true when available is at least the minimum. Required opening length is the shortest L that still meets the minimum for the same angle and slab: (min_headroom plus slab) divided by tan of theta. The response echoes inputs, reports total_run, rise_over_opening, available_headroom, required_opening_length, headroom_margin, meets_code and opening_covers_run, and sets method to stair_headroom for stable branching. Identical inputs always produce identical JSON because the path is pure trigonometry and arithmetic with no network, random seed or wall clock. This product does not replace a licensed design review; treat the numbers as a layout check and verify against your jurisdiction before construction.
API usage, pricing, renovation workflows and practical limits
Call the free in-browser stair headroom calculator for quick home estimates, loft conversions and contractor whiteboards without opening a spreadsheet. Remember that nosing projection, bulkheads, door swings under the half-landing and local code measurement points can change the effective critical clearance even when the simple soffit-edge geometry looks fine—adjust inputs to match the section you will actually build. Send a JSON body with required floor_to_floor_height, stair_angle and floor_opening_length, plus optional min_headroom when your code uses a different clearance and optional slab_thickness when the upper floor structure is known. Use the prepaid API when a renovation app, takeoff tool, configurator or property pipeline needs a stable contract under KIT balance at $0.002 per successful item; validation failures never consume balance after the engine rejects the request. Pair this endpoint with a staircase step or rise-and-run calculator when you still need tread counts and exact risers, or with unit converters when drawings mix systems. Authors shipping SDKs can map meets_code and required_opening_length into plan checks while showing available_headroom and headroom_margin as explanatory detail for the homeowner or site supervisor reviewing the stairwell.
Integration use cases
Renovation apps and plan-check helpers
Mobile and web apps flag meets_code false as users shorten the opening or steepen the flight, using the same deterministic API contract for quotes and reviews.
Technical questions
How does the stair headroom calculator work?
It sets total_run = floor_to_floor_height / tan(stair_angle), available_headroom = floor_opening_length × tan(stair_angle) − slab_thickness, and compares available headroom to min_headroom (default 2032). Method is always stair_headroom.
What is the default code minimum headroom?
Default min_headroom is 2032 of your linear unit—the common IRC/IBC 6 ft 8 in figure when you use millimetres. Override min_headroom for another code or when working in inches.
What happens if floor-to-floor height or opening length is zero or negative?
The request fails with invalid_input. Height, angle, opening length and optional positive fields must be strictly positive (slab_thickness may be zero); invalid dimensions are not charged.
What units should I use?
Any consistent linear system. If floor_to_floor_height and floor_opening_length are in millimetres, available_headroom and required_opening_length are in millimetres. Keep stair_angle in degrees.