Developer demo

From telemetry frame to signed evidence in 90 seconds.

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

Ingest

POST telemetry with camera, radar, and lidar residuals normalized to fleet state.

Step 2 · ~20s

Score

Residual engine returns tier, confidence, and optional evidence ID on CUSUM breach.

Step 3 · ~25s

Evidence

Retrieve signed bundle with chain-of-custody for claims and compliance reviewers.

Step 4 · ~30s

Simulate

Scenario feed exports visualizer parameters for OEM and safety teams.

1. Ingest telemetry

POST /v1/telemetry/ingest — establishes baseline and updates live extrinsics.

Request
{
  "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
  }
}
Response 200
{
  "vehicle_id": "FLEET-204",
  "status": "accepted",
  "frames_ingested": 1,
  "fleet_tier": "CAUTION",
  "timestamp": "2026-06-03T16:42:00Z"
}

2. Score residual drift

POST /v1/score/residual — use Idempotency-Key for safe retries.

Request
{
  "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
  }
}
Response 200 — CRITICAL
{
  "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"
}

3. Evidence bundle

GET /v1/evidence/EVB-20260603-B7F2/bundle

Response excerpt
{
  "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.

4. Feed simulation

POST /v1/risk/scenario-feed returns visualizer inputs consumed by /simulation.

scenario-feed parameters.visualizer
{
  "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"
    }
  }
}

Run locally

Clone the repo, start the API, and replay synthetic yaw-drift telemetry in one terminal session.

terminal
make dev-api          # terminal 1
make demo-api         # terminal 2 — SDK smoke test
make replay-telemetry # ingest JSONL scenario

Perception math appendix

SE(3) residuals, bundle adjustment, IMM–JPDA fusion, 99.7% Mahalanobis gating, changepoint stack, identifiability bounds, and shadow regression gates — OEM/investor facing.

SDK one-liner

Same flow in Python without hand-rolling HTTP.

python
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"])

See it live

Interactive demos for engineering reviews and buyer walkthroughs.