Java SDK
Maven:
<dependency>
<groupId>com.noxdren</groupId>
<artifactId>noxdren</artifactId>
<version>0.1.0</version>
</dependency>
Gradle:
implementation 'com.noxdren:noxdren:0.1.0'
Requires JDK 17+.
Quickstart
import com.noxdren.*;
NoxdrenClient client = NoxdrenClient.builder().apiKey("ndx_...").build();
// Range rings
NoxdrenObject r = client.rangeiq().analyze(
RangeIqRequest.builder()
.userLat(37.5).userLon(-122.3)
.selectedDroneKey("dji_mavic_3")
.windSpeed(6.0).windDirection(270)
.build());
for (NoxdrenObject ring : r.obj("result").list("rings")) {
System.out.println(ring.str("label") + " @ " + ring.num("battery_threshold_pct") + "%");
}
// Multi-leg mission
NoxdrenObject m = client.missions().analyzeGeometry(
MissionRequest.builder()
.home(37.5, -122.3)
.drone("dji_mavic_3")
.waypoint(Waypoint.builder().lat(37.50).lon(-122.30).altitudeM(80).build())
.waypoint(Waypoint.builder().lat(37.52).lon(-122.31).altitudeM(100).build())
.weather(6.0, 270, 0, 20, 50)
.build());
System.out.println(m.obj("result").str("mission_verdict"));
Read responses with typed navigation: r.obj("result").list("rings").get(0).str("label"),
or r.raw() for the underlying map.
Error handling
try {
client.rangeiq().analyze(req);
} catch (AuthenticationException e) { // 401
...
} catch (ValidationException e) { // 400/422
System.out.println(e.code() + " " + e.getMessage());
} catch (RateLimitException e) { // 429
System.out.println("retry after " + e.retryAfter() + "s");
} catch (NoxdrenException e) { // catch-all
System.out.println(e.code() + " " + e.requestId());
}
Transient errors retry automatically (backoff honoring Retry-After); tune with
.maxRetries(0).
Configuration
NoxdrenClient.builder()
.apiKey("ndx_...")
.baseUrl("https://api.noxdren.com")
.timeoutSeconds(30)
.maxRetries(2)
.build();
Coverage
| Method | Endpoint |
|---|---|
client.drones().list() / .get(key) | GET /v1/drones, /v1/drones/{key} |
client.rangeiq().analyze(...) | POST /v1/rangeiq/analyze |
client.missions().analyzeGeometry(...) | POST /v1/missions/analyze-geometry |
client.health() / .version() | GET /v1/health, /v1/version |
See the API reference for every field.