Landing Prediction API
Access & limitsAPI key needed · Landing prediction▾
This API answers with your own account data, so it needs your API key. Send it in an X-API-Key header, or as api_key= in the address. The limits below are the with-key ones.
| 5 minutes | Hour | Day | |
|---|---|---|---|
| Without a key | 0 | 0 | 0 |
| With a key | 10 | 60 | 300 |
Each stage of the rocket counts as one request, so a two-stage prediction is 2.
Log in to create a free key on your profile page.
Every answer carries X-RateLimit-Remaining and X-RateLimit-Reset. Over a limit, the answer is error 429 with retry_after in seconds. Refused requests do not count.
The landing prediction from the Launch Site Survey, as an API. Give the launch pad, the date and time and the rocket's figures, and it flies 10,000 flights per stage through the forecast wind and its ensemble, over the terrain, trees and water round the pad, and answers where each stage comes down: the middle of the landings, how widely they spread, the chance of landing on each hazard and the hazard rating, and, if you give your radio and where you will stand, how much of the landing zone your receiver will hear.
It is the heaviest thing we run, so it needs an API key from a logged-in account, and each stage counts as one request. Make a key on your profile page and send it in an X-API-Key header.
X-API-KeyThe request
A JSON object as the body (Content-Type: application/json). On the page you can load a flight or an OpenRocket file to fill the rocket in; here you give the same figures yourself.
{
"lat": 54.3787, "lon": -2.9968,
"date": "2026-10-04", "time": "14:00",
"stages": [
{ "name": "Sustainer", "apogee_m": 1200, "recovery": "dual",
"drogue_ms": 22, "main_ms": 6, "main_alt_m": 150,
"motors": [{ "designation": "F26", "maker": "AeroTech" }],
"mass_kg": 0.8, "ignition_delay_s": 1.0 },
{ "name": "Booster", "apogee_m": 350, "descent_ms": 18,
"motors": [{ "designation": "G80", "maker": "AeroTech" }], "mass_kg": 0.6 }
],
"rocket": { "diameter_mm": 55, "stability_cal": 1.8 },
"launch": { "guide": "rail", "length_m": 1.5, "exit_speed_ms": 18.4, "tilt_deg": 3 },
"radio": { "freq_mhz": 868, "power_mw": 25, "sf": 9,
"you": { "lat": 54.3784, "lon": -2.9968 } },
"detail": "summary"
}
Where and when
| Field | Meaning |
|---|---|
lat, lon | The launch pad, in decimal degrees. |
date, time | The launch, in the site's own local time (YYYY-MM-DD, HH:MM). The weather is held from 94 days back to 10 days ahead. |
stages
One to three, the top stage first. A booster's apogee_m is the highest point it reaches on its own. Every stage needs its motor, or at the least its burn time. Motor data by ThrustCurve.org.
| Field | Meaning |
|---|---|
apogee_m | Needed. The highest point, in metres above the pad. |
apogee_basis | flown (the default: an apogee from a real flight, or a sim in about that day's wind), still (simulated in still air) or wind (simulated in the wind in apogee_wind_ms). |
recovery | single (the default), dual or none (a fall with nothing out). |
descent_ms | For single and none: the rate it comes down at, m/s at the ground. Or give descent_s, the time from apogee to landing, for single. |
drogue_ms, main_ms, main_alt_m | For dual: the drogue's and the main's rates in m/s at the ground, and the height above the pad the main opens at. |
deploy_delay_s | Optional. Seconds after apogee before the first canopy opens (an altimeter's setting). |
motor_delay_s | Optional, in place of deploy_delay_s: the motor's ejection delay after its burnout. The climb works out when that fires against apogee; the answer's ejection gives it, and marks it early when it fires before apogee (the landing is then worked out with the canopy at apogee). |
name | Optional, given back in the answer. |
motors | The stage's motors: each {"designation": "G80", "maker": "AeroTech"} or {"tid": "..."} (its ThrustCurve.org id), with "count" for a cluster. The climb flies each motor's own thrust curve, so how long it burns and how hard decide how far it turns into the wind. Needed, or burn_s. |
burn_s | If the motor isn't known: at least its burn time, in seconds. |
mass_kg | Optional. The stage's mass with its motors in. Left out, the climb takes its shape from the motors and is scaled to reach the apogee. |
ignition_delay_s | Optional, for a stage above the first: how long after the stage below burns out it lights (0 when left out). |
rocket (optional)
How hard it turns into the wind and how it climbs. Leave it out for the usual run of rockets.
| Field | Meaning |
|---|---|
diameter_mm, stability_cal | The body diameter and the stability margin in calibres off the end of the rail. |
swing_length_m | From a simulation, the rocket's own swing length at sea level, sqrt(2 I / (1.225 A CNα (CP − CG))): its moment of inertia, reference area, normal force slope and CP and CG at the end of the rail. Takes the place of the diameter and stability. |
drag_area_per_mass | From a simulation, Cd × reference area ÷ mass through the coast, m²/kg. |
launch (optional)
| Field | Meaning |
|---|---|
guide | rail (the default) or rod. |
length_m, exit_speed_ms | The rail or rod's length and the speed off it. |
tilt_deg, lean, bearing_deg | The tilt from upright, and which way: wind (into the wind, the default) or bearing (towards bearing_deg). |
wobble_deg | How far it may come off the guide's line, give or take: 2.5 for a rail, 5 for a rod when left out. |
radio (optional)
Give it to have the landing zone's radio coverage worked out from where you will stand.
| Field | Meaning |
|---|---|
you | Needed with radio: where the receiver will be, {"lat": .., "lon": ..}. |
freq_mhz, power_mw, sf, bw_khz | The LoRa link: 868, 25 mW, SF 9 and 125 kHz when left out. |
antenna_tx, antenna_rx | wire, duck, gp, yagi or yagi_big; both duck (a stubby, 2 dBi) when not given. |
height_tx_m, height_rx_m | The antennas' heights above the ground, 0.25 and 2.2 m when left out. |
ground | The ground between: water, wet, grass (the default), crop or scrub. Woodland comes from the map. |
search_km | Optional, up to 15: also look this far for a better place to stand. |
effects and detail (optional)
| Field | Meaning |
|---|---|
effects | What the wind near the ground is worked out with, all true unless set false: thermals, trees, turbines, terrain, ground. |
detail | summary (the default), or full to add all 10,000 landings and the middle flight's path (about 170 KB a stage). |
The answer
{
"success": true,
"site": { "lat": 54.3787, "lon": -2.9968, "ground_m": 0.01 },
"launch": { "date": "2026-10-04", "time": "14:00" },
"stages": [
{
"name": "Sustainer",
"landing": { "middle": [54.378501, -2.992669], "east_m": 268.5, "north_m": -19.6,
"distance_m": 269.2, "bearing_deg": 94.2,
"r50_m": 160.4, "r80_m": 288.0, "r90_m": 356.2, "r95_m": 411.5 },
"edge90": [[54.381320, -2.993850], [54.381402, -2.993571], [54.381461, -2.993270], ... ],
"edge70": [[54.380612, -2.993301], [54.380671, -2.993102], ... ],
"hazards": { "rating": "yellow", "points": 4.6, "red_for": [], "yellow_for": ["railway"],
"any": 0.1259,
"chances": { "water": 0.004, "stream": 0.031, "trees_high": 0.052, "rail": 0.002, ... } },
"radio": { "heard": 0.9461 }
},
{ "name": "Booster", ... }
],
"took_s": 0.9,
"credit": "Landing prediction by AltimeterCloud.com (https://www.altimetercloud.com/)"
}
| Field | Meaning |
|---|---|
landing.middle | The middle of the landings, [lat, lon]; east_m, north_m, distance_m and bearing_deg give it from the pad. |
r50_m, r80_m, r90_m, r95_m | Half, 80%, 90% and 95% of the landings fall within these distances of the middle. These are distances, not the zone's shape: a circle of that size round the middle covers ground either side of a long, narrow zone where nothing lands. For the shape, use edge90 and edge70. |
hazards.chances | The share of landings on each hazard, each landing checked against the map's 10 m cells: open water, streams, drains, trees under and over 5 m, pylon and pole lines, main and minor roads, railways, turbine blades and steep ground. |
hazards.any | The share of landings on any hazard at all. |
hazards.rating | green, yellow or red, as the page rates it: power lines, railways, main roads and turbine blades on their own, everything else by points; red_for and yellow_for say which. |
radio.heard | The share of the landing zone your receiver hears from where you stand, weighted by where it is most likely to come down. |
edge90, edge70 | The 90% and 70% lines, the landing zone's own shape as the page draws it: each a closed outline of 144 [lat, lon] points, one every 2.5° round the middle of the landings, clockwise from just east of north. The last point joins back to the first. |
landings_en | With detail=full: every landing, [east_m, north_m] from the pad. |
flight | With detail=full: the middle flight's apogee and times, its path as [t, east_m, north_m, height_m], and with a deployment delay where and when the canopy opens (deploy_m, deploy_s). The path's descent is moved evenly over its time so that it ends at the middle of the landings; descent_shift gives that move (east_m, north_m, from from_s over over_s seconds), so for the speed the rocket actually drifts at, take east_m / over_s and north_m / over_s off the path's own speed during the descent. |
Errors
An error comes as {"success": false, "error": {"code": "400", "message": "...", "reason": "bad_request"}}, with the same code as the HTTP status.
| Code | Meaning |
|---|---|
400 | Something in the request is missing or out of range; error.message says what |
401 | No key was sent (key_required), or the key is not recognised (invalid_key) |
403 | The key is not allowed from this address or country |
422 | The landing could not be worked out, for example no weather held for that time |
429 | Past a limit; retry_after says how long to wait |
Example
curl -X POST https://www.altimetercloud.com/api/predict/ \
-H "X-API-Key: YOUR_KEY" -H "Content-Type: application/json" \
-d '{"lat":54.3787,"lon":-2.9968,"date":"2026-10-04","time":"14:00",
"stages":[{"apogee_m":300,"descent_ms":5,
"motors":[{"designation":"G80","maker":"AeroTech"}]}]}'
Crediting AltimeterCloud
Free to use. If you use this API, or anything made from the answers, in a commercial product or service, credit AltimeterCloud with a link to www.altimetercloud.com at the point of use: on the screen, page or printout where the data appears, for example “Data from AltimeterCloud.com”. Any credits the data's own sources ask for, listed on this page, apply as well.



















