Skip to main content

API reference

Base URL https://api.noxdren.com · auth header X-API-Key · all endpoints under /v1. The full machine-readable schema is always live at /openapi.json.


Health

GET /v1/health

Liveness. Public (no key). → { "ok": true, "server_version", "engine_version" }

GET /v1/version

{ "server_version", "engine_version" }


Drones (engine: rangeiq_plus)

GET /v1/drones

List the drone catalog. → { "ok": true, "drones": [ … ], "request_id" }

Each drone: key, cruise_speed_mps, baseline_flight_time_min, battery_reserve_frac, max_payload_g, hover_drain_pct_per_min, … .

GET /v1/drones/{key}

One drone by catalog key. 404 NOT_FOUND if unknown. → { "ok", "drone", "request_id" }


RangeIQ — range rings (engine: rangeiq)

POST /v1/rangeiq/analyze

Battery-aware range rings around a launch point.

Request (JSON) — key fields:

fieldtypedefaultnotes
user_lat, user_lonnumberrequired; launch point
selected_drone_keystring""catalog key
unit_modestringmetricmetric or imperial
wind_speed, gust_speednumber0m/s (or mph if imperial)
wind_directionnumber0degrees
temperaturenumber20°C (metric) / °F (imperial)
humiditynumber50%
altitudenumber120AGL m
initial_batterynumber85%
hover_time_minnumber0minutes
use_payload, payload_weightbool / numberfalse / 0grams

Response{ "ok", "engine_version", "result": { "center", "rings": [ { "battery_threshold_pct", "label", "color", "polygon": [{lat,lon}…] } ], "oneway_ring", "physics": {…} }, "request_id" }.


RangeIQ+ — mission analysis (engine: rangeiq_plus)

POST /v1/missions/analyze-geometry (JSON)

Analyze a mission given inline waypoints — no file needed.

Request (JSON):

{
"mission": {
"waypoints": [
{ "lat": 37.5, "lon": -122.3, "altitude_m": 80, "hover_time_s": 0 }
],
"source_format": "geometry"
},
"home": { "lat": 37.5, "lon": -122.3 },
"drone": { "key": "dji_mavic_3" },
"battery": { "initial_pct": 100, "rth_threshold_pct": 25, "cycles": 0 },
"weather": { "wind_speed_mps": 6, "wind_dir_deg": 270, "temp_c": 20, "humidity_pct": 50 }
}

POST /v1/missions/analyze (multipart/form-data)

Same analysis from a flight-plan file (.kmz, .kml, .gpx, .csv, .wpml, .json). Send mission_file (the file) + request (a JSON string with home, drone, battery, weather, options).

Response (both) → { "ok", "engine_version", "result": { "mission_verdict": "complete|marginal|cannot_complete", "legs": [ { "leg_index", "distance_m", "battery_start_pct", "battery_end_pct", "can_complete", "status", … } ], "total_distance_m", "final_battery_pct", "warnings": [], "path_polyline": [[lat,lon]…] }, "request_id" }.


See Errors & rate limits for the error envelope, status codes, and rate-limit/quota headers — and /openapi.json for every field and bound.