Run locally
Clone the repo, start the API, and replay synthetic yaw-drift telemetry in one terminal session.
make dev-api # terminal 1 make demo-api # terminal 2 — SDK smoke test make replay-telemetry # ingest JSONL scenario
Developer demo
NADIR turns a single vehicle sensor snapshot into a tiered drift score, an audit-grade evidence bundle, and simulation-ready scenario parameters. Below is the exact request/response contract your integration team ships against.
Step 1 · ~15s
IngestPOST telemetry with camera, radar, and lidar residuals normalized to fleet state.
Step 2 · ~20s
ScoreResidual engine returns tier, confidence, and optional evidence ID on CUSUM breach.
Step 3 · ~25s
EvidenceRetrieve signed bundle with chain-of-custody for claims and compliance reviewers.
Step 4 · ~30s
SimulateScenario feed exports visualizer parameters for OEM and safety teams.
POST /v1/telemetry/ingest — establishes baseline and updates live extrinsics.
{
"vehicle_id": "FLEET-204",
"timestamp": "2026-06-03T16:42:00Z",
"sensors": {
"camera_rotation_matrix": [0.98, 0.09, 0.0, -0.09, 0.98, 0.0, 0.0, 0.0, 1.0],
"radar_range_bias_m": 0.0046,
"lidar_registration_error_m": 0.0034,
"lidar_confidence": 0.88
}
}
{
"vehicle_id": "FLEET-204",
"status": "accepted",
"frames_ingested": 1,
"fleet_tier": "CAUTION",
"timestamp": "2026-06-03T16:42:00Z"
}
POST /v1/score/residual — use Idempotency-Key for safe retries.
{
"vehicle_id": "FLEET-204",
"timestamp": "2026-06-03T16:42:12Z",
"sensors": {
"camera_rotation_matrix": [0.97, 0.12, 0.0, -0.12, 0.97, 0.0, 0.0, 0.0, 1.0],
"radar_range_bias_m": 0.0046,
"lidar_registration_error_m": 0.0034
}
}
{
"vehicle_id": "FLEET-204",
"tier": "CRITICAL",
"residual_score": 9.84,
"mahal_distance": 7.8,
"confidence": 0.88,
"evidence_id": "EVB-20260603-B7F2",
"recommended_action": "calibration_required",
"cusum_triggered": true,
"probable_fault_source": "multi_modal"
}
GET /v1/evidence/EVB-20260603-B7F2/bundle
{
"event_id": "EVB-20260603-B7F2",
"vehicle_id": "FLEET-204",
"tier": "CRITICAL",
"measurements": {
"camera_drift_deg": 1.12,
"radar_drift_mm": 4.6,
"health_score": 41.2
},
"chain_of_custody": [
{ "step": "TELEMETRY_RECEIVED", "actor": "NADIR_INGEST_v1" },
{ "step": "TIER_CLASSIFIED", "actor": "NADIR_CLASSIFIER" },
{ "step": "EVIDENCE_SIGNED", "actor": "NADIR_EVIDENCE_SERVICE" }
],
"signature": "sha256:05b06589d224d3149e52af03efcbad0e84911d7b…"
}
Why fleets care: the bundle links before/after tier states, ISO references, and a cryptographic signature so legal and claims teams can defend calibration decisions without re-running inference.
POST /v1/risk/scenario-feed returns visualizer inputs consumed by
/simulation.
{
"scenario_type": "post_collision",
"parameters": {
"initial_drift_state": { "tier": "CRITICAL", "camera_drift_deg": 1.12 },
"visualizer": {
"format": "nadir_web_demo_v1",
"duration_s": 300,
"map_center": [42.33, -83.05],
"highlight_vehicle_id": "FLEET-204"
}
}
}
Clone the repo, start the API, and replay synthetic yaw-drift telemetry in one terminal session.
make dev-api # terminal 1 make demo-api # terminal 2 — SDK smoke test make replay-telemetry # ingest JSONL scenario
SE(3) residuals, bundle adjustment, IMM–JPDA fusion, 99.7% Mahalanobis gating, changepoint stack, identifiability bounds, and shadow regression gates — OEM/investor facing.
Same flow in Python without hand-rolling HTTP.
from nadir_sdk import NadirClient
c = NadirClient(api_key="nadir_dev_local_key")
score = c.residual_score("FLEET-204", sensors={...})
bundle = c.evidence_bundle(score["evidence_id"])
Interactive demos for engineering reviews and buyer walkthroughs.