Descent Gradient and Top of Descent Calculator
This descent gradient and top of descent calculator turns a starting altitude, a lower target altitude, and a chosen descent angle into an exact geometric planning result.
Run — free
It reports the altitude to lose, the descent gradient as a percentage, the horizontal-to-vertical ratio, and the horizontal distance from the target where descent begins. Select feet or metres for altitude and nautical miles, kilometres, or statute miles for distance. The calculation is deterministic and intended for planning and cross-checking, not as a substitute for operational procedures, clearances, aircraft performance data, or current flight conditions.
Define the descent before calculating its starting point
A top of descent calculation starts with three geometric facts: the altitude at which descent begins, the altitude that should be reached at the end, and the flight-path angle below level flight. Enter both altitudes in the same selected unit. The starting altitude must be higher than the target because this capability models a descent, not a climb or level segment. The target may represent an altitude at a waypoint, an approach constraint, or another planned crossing level. The angle must be positive and less than ninety degrees; a typical shallow aircraft descent is only a few degrees. The calculator first subtracts the target altitude from the starting altitude to obtain the vertical height to lose. It then uses the tangent of the selected angle to relate that vertical change to horizontal travel. Use pressure, indicated, or geometric altitudes consistently. Mixing altitude references can produce a mathematically correct number that does not describe the intended flight segment. Always confirm which altitude datum and operational constraint your source uses before relying on the result.
Understand gradient, ratio, and top of descent distance
The descent gradient is the vertical change divided by horizontal distance, expressed as a percentage. For a chosen angle, it equals the tangent of that angle multiplied by one hundred. The horizontal-to-vertical ratio is the reciprocal of the tangent and shows how many units of horizontal travel correspond to one unit of altitude loss. Because a ratio is dimensionless, it is identical whether the underlying lengths are measured in feet, metres, or another consistent unit. Top of descent distance is the horizontal leg required to lose the specified altitude at that constant geometric angle. The result is not the slant distance flown along the inclined path. This distinction matters when comparing the answer with navigation displays or mental rules of thumb. A steeper angle produces a larger gradient and a shorter horizontal distance; a shallower angle produces the opposite. The calculator retains full precision internally and rounds reported numeric results to six decimal places, providing stable values for software tests, planning worksheets, and repeatable API integrations.
Apply the result with operational margins and constraints
Real descents rarely hold one perfect angle from cruise to the target. Wind changes groundspeed, air traffic control may impose level segments, speed reductions alter the preferred vertical profile, and aircraft configuration or anti-ice use can affect performance. Treat the computed top of descent as the geometric baseline for a constant-angle, still-air planning model. If a workflow needs extra distance for deceleration, track miles, vectoring, or a level restriction, add that allowance separately and document it rather than hiding it inside a different angle. The endpoint is also only as reliable as the altitudes entered: crossing restrictions and terrain or procedure requirements must come from current approved sources. For automation, send numeric altitude values, a positive descent angle in degrees, and explicit units when the defaults are not appropriate. The API returns both the inputs and derived values, making the record easy to audit. The browser calculation is free, while an API request costs $0.002. In every operational setting, compare the result with approved aircraft guidance and current instructions before use.
What you can do with it
Estimate a cruise top of descent
Find the horizontal distance needed to descend from cruise altitude to a lower planned crossing altitude at a selected constant angle.
Cross-check an arrival profile
Compare a planned altitude loss and track distance with the gradient implied by a standard or custom descent angle.
Build repeatable planning worksheets
Use deterministic API output to populate training, dispatch, simulation, or engineering calculations with explicit units.
FAQ
How is top of descent distance calculated?
The altitude loss is divided by the tangent of the descent angle. That horizontal length is then converted to the selected distance unit.
Is the result horizontal distance or slant distance?
It is horizontal distance. The longer distance along the inclined flight path is not reported.
What does descent gradient percent mean?
It is vertical change divided by horizontal distance, multiplied by one hundred. It equals tan(angle) × 100 for this constant-angle model.
Can I mix feet and metres between the two altitudes?
No. Both altitude values use the single altitude_unit selection. Convert them to the same unit before submitting the calculation.
Does the calculator account for wind or speed changes?
No. It computes pure geometry. Wind, groundspeed, deceleration, level segments, aircraft performance, and operational margins must be handled separately.
What does it cost?
The calculator is free in the browser. Each API request costs $0.002.
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/geo/descent-gradient \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"starting_altitude":35000,"target_altitude":3000,"descent_angle_degrees":3}'const res = await fetch("https://api.kit.forhosting.com/geo/descent-gradient", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"starting_altitude": 35000,
"target_altitude": 3000,
"descent_angle_degrees": 3
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/geo/descent-gradient",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"starting_altitude": 35000,
"target_altitude": 3000,
"descent_angle_degrees": 3
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/geo/descent-gradient", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"starting_altitude":35000,"target_altitude":3000,"descent_angle_degrees":3}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"starting_altitude":35000,"target_altitude":3000,"descent_angle_degrees":3}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/geo/descent-gradient", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"starting_altitude": 35000,
"target_altitude": 3000,
"descent_angle_degrees": 3
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "geo.descent_gradient",
"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. |