Log in to your Altimeter Cloud account
Don't have an account? Create one
We'll send a confirmation link to verify your email. Check your spam/junk folder if you don't see it.
Already have an account? Log in
Firmware updatev1.2
Flight log uploadv1.1
Online USB Portalv1.0
Online USB WiFi configuratorv1.1
3D parts toolv1.0
Air hole calculatorv1.0
Altimeter Cloud APIv1.0
Altitude Predictorv1.0
Body Tube Strength Calculatorv1.0
Descent calculatorv1.0
Ejection Charge Calculatorv1.0
ESP web programmerv1.0
Fin Flutter Speed Calculatorv1.0
Firmware updatev1.2
Flight log uploadv1.1
Flight log verificationv1.1
Laser Cut Parts Designerv1.0
Online USB Portalv1.0
Online USB WiFi configuratorv1.1
Rail Exit Velocity Calculatorv1.0
Recovery Drift Calculatorv1.0
Visibility & Tracking Calculatorv1.0This is the programmatic version of the web upload tool. It takes a flight log, verifies it exactly as the CSV verification endpoint does, and if the log is genuine and not already stored it adds the flight to the cloud, generates the chart thumbnails, and returns the new flight.
If the same flight has already been uploaded it is not added again. The existing flight is returned instead, with a duplicate flag set. This matches the behaviour of the web uploader, so re-sending a log is always safe.
csv
None. Uploads are anonymous, exactly like the web upload tool. Cryptographic verification is the gate: only genuine, unedited logs from a real Nano can pass, and duplicates are ignored, so an open endpoint only ever stores legitimate logs. A flight is associated with its device, and the device owner can claim it later by adding that device to their Altimeter Cloud account.
Send the flight log, unedited, as a multipart file field named csv (or flightlog), or as a raw text POST parameter named csv.
curl -X POST https://www.altimetercloud.com/api/upload/ \
-F "csv=@flight_1234.csv"
The API returns JSON. When the flight is newly added, duplicate is false and the thumbnails have just been generated:
{
"success": true,
"verified": true,
"duplicate": false,
"verify_method": "Ed25519",
"flight": {
"id": 1234,
"url": "https://www.altimetercloud.com/flights/1234/",
"firmware": "1.52",
"hardware": "4",
"device_tag": "MY-NANO",
"competitor_tag": "C-07",
"apogee": 246.4,
"apogee_time": 5.21,
"max_velocity": 98.3,
"samples": 3210,
"flight_unique_id": "a1b2c3...",
"thumbnails": {
"meters_small": "https://www.altimetercloud.com/flightdata/4/1234.webp",
"meters_large": "https://www.altimetercloud.com/flightdata/4/1234_l.webp",
"feet_small": "https://www.altimetercloud.com/flightdata/4/1234_ft.webp",
"feet_large": "https://www.altimetercloud.com/flightdata/4/1234_l_ft.webp",
"miles_small": "https://www.altimetercloud.com/flightdata/4/1234_mi.webp",
"miles_large": "https://www.altimetercloud.com/flightdata/4/1234_l_mi.webp",
"km_small": "https://www.altimetercloud.com/flightdata/4/1234_km.webp",
"km_large": "https://www.altimetercloud.com/flightdata/4/1234_l_km.webp"
}
}
}
When the same flight already exists it is returned unchanged, with duplicate set to true and no thumbnails regenerated:
{
"success": true,
"verified": true,
"duplicate": true,
"verify_method": "Ed25519",
"flight": { "id": 1234, "url": "https://www.altimetercloud.com/flights/1234/", "...": "..." }
}
If the log fails verification it is not stored:
{
"success": false,
"verified": false,
"error": { "code": "400", "message": "Flight log failed verification" }
}
A flight counts as already stored when its device and signature hash match an existing uploaded flight. In that case nothing is re-added and no charts are rebuilt; you simply receive the existing flight id with duplicate set to true.
| Field | Type | Description |
|---|---|---|
success | boolean | True if the log was accepted (newly stored or already present) |
verified | boolean | Whether the log passed cryptographic verification |
duplicate | boolean | True if the flight already existed and was not re-added |
verify_method | string | Method used: Ed25519, HMAC-SHA256 or SHA-256 |
flight.id | integer | The cloud flight id (new or existing) |
flight.flight_unique_id | string | The signature hash, usable with the Flight Info endpoint |
flight.thumbnails | object | Chart image URLs in every size |
error.code / error.message | string | Error code and description (on failure) |
| Code | Meaning |
|---|---|
400 (verification) | The log failed cryptographic verification and was not stored |
400 (pressure) | The log failed the secondary pressure cross check and was not stored |
412 | No flight log was supplied in the request |
Because uploads are anonymous, a flight is linked only to the device that recorded it. To take ownership of flights from a device, add that device to your Altimeter Cloud account; its flights, including any uploaded through this API, are then claimed automatically.
Verification here is identical to the CSV verification endpoint, so any log that verifies there will upload here. The only difference is that this endpoint also stores the flight and builds its charts. To check a log without storing it, use the CSV verification endpoint instead. There is no live playground on this page, because each successful call creates a real stored flight.