Skip to main content

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

MethodEndpoint
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.