{"message":"Pipe Backend API","version":"1.0.0","endpoints":{"health":"/health","ready":"/ready","arena":"http://localhost:3837/arena","hasura":"http://localhost:8080","test":{"simple":"/api/test","job":"/api/test/job (POST)","queueStatus":"/api/test/queue-status","arena":"http://localhost:3837/arena","note":"Manage test jobs through Bull Arena interface"},"auth":{"invite":"/api/auth/invite (POST)","forgotPassword":"/api/auth/forgot-password (POST)"},"webhooks":{"hasura":"/api/hasura/webhook (POST)"},"flow":{"reading":"/api/flow/reading (POST) — Hasura webhook for new readings","reset":"/api/flow/reset/:sensorId (POST) — reset sensor state"},"mag":{"reading":"/api/mag/reading (POST) — Hasura webhook for new mag readings"},"admin":{"retrain":"/api/admin/retrain (POST) — retrain HMM fixture models"},"ota":{"upload":"/api/ota/upload (POST) — upload .ino or .bin firmware (raw body, x-sensor-type + x-version + x-filename + x-target-sensors headers)","check":"/api/ota/check/:sensorType (GET) — sensor checks for updates (?current_version=X.Y.Z&sensor_id=N)","download":"/api/ota/download/:sensorType/:version (GET) — download firmware binary","history":"/api/ota/history/:sensorType (GET) — list firmware versions","command":"/api/ota/command (POST) — queue command for sensor (reboot)","commandPoll":"/api/ota/command/:sensorId (GET) — sensor polls for pending commands","patch":"/api/ota/firmware/:id (PATCH) — update target_sensors","delete":"/api/ota/firmware/:id (DELETE) — delete firmware entry"}}}