HTTP API
HTTP API for interacting with the TR-100E device. All request paths begin with /api/. The GET and POST methods are supported.
General Principles
Section titled “General Principles”- The API accepts and returns JSON (
Content-Type: application/json), except for binary OTA chunks and export responses. - OTA chunks are sent with
Content-Type: application/octet-stream. - CSV export endpoints return
Content-Type: text/csv. - Plain-text export endpoints return
Content-Type: text/plain. - Successful responses use status
200 OK. - Errors return the appropriate HTTP status and JSON:
{ "error": "ERROR_CODE", "message": "Human readable text" }. - HTTP keep-alive is supported.
- Maximum HTTP header size:
1380bytes. - Maximum HTTP body size:
4096bytes. - Maximum total HTTP request size:
5476bytes.
Access Levels
Section titled “Access Levels”| Level | Description |
|---|---|
🟩 guest | Unauthenticated client |
🟨 user | Standard user |
🟥 powerUser | Advanced user |
guesthas access only toGET /api/auth/status/,GET /api/auth/salt/,GET /api/version/, andPOST /api/auth/login/.userhas access to standard endpoints and also toservice/time/sync.powerUserhas full access to all endpoints.
All POST /api/debug/* requests except /api/debug/display/start/ and /api/debug/display/stop/ additionally require diagnostic mode, activated at startup by pressing Up + Down. In normal mode, these requests return 403 Forbidden. This restriction does not apply to GET /api/debug/* requests.
Authorization
Section titled “Authorization”- Retrieve the
salt—GET /api/auth/salt/. - Log in —
POST /api/auth/login/, by sendingSHA256(username + password + salt). - All subsequent requests include the
Authorization: Bearer <token>header. - Log out —
POST /api/auth/logout/.
Web authorization uses two independent passwords: one for the user level and one for the powerUser level. Retrieving and modifying access settings is described in settings-get.md and settings-set.md.
- Absolute timestamps are transmitted only in UTC+0, using ISO 8601 format:
2026-04-16T12:34:56Z. - Intervals and delays are integers expressed in seconds or minutes.
Partial Settings Updates
Section titled “Partial Settings Updates”POST /api/settings/set/ uses merge semantics:
- only supplied fields are saved;
- an omitted field means “do not change”;
- arrays are replaced in full;
- unknown keys →
400 ERROR_INVALID_VALUE.
GET Requests
Section titled “GET Requests”| Path | Purpose | Access |
|---|---|---|
/api/version/ | Device identification and firmware version | 🟩 guest |
/api/auth/status/ | Current access level for the request | 🟩 guest |
/api/auth/salt/ | Retrieve the salt for password hashing | 🟩 guest |
/api/state/get/?... | Runtime-state snapshot by group (device, network, relays, leds, protection, recorder, channels, log, ntp, httpd, modbus, wireguard) | 🟨 user |
/api/settings/get/?... | Retrieve settings by group | 🟨 user |
/api/reference/sensor-types/ | List of supported sensor types | 🟨 user |
/api/history/temperature/info/ | Live-history window metadata | 🟨 user |
/api/history/temperature/samples/?... | Temperature live history for all channels | 🟨 user |
/api/recorder/info/ | Recorder metadata | 🟨 user |
/api/recorder/records/?... | Archived recorder entries | 🟨 user |
/api/recorder/export.csv/ | Export recorder data as CSV | 🟨 user |
/api/log/info/ | Event log summary | 🟨 user |
/api/log/events/?... | Log events | 🟨 user |
/api/log/export.log/ | Export the log in text format | 🟨 user |
/api/debug/tasks/ | RTOS task snapshot | 🟥 powerUser |
/api/debug/heap/ | FreeRTOS/lwIP heap state | 🟥 powerUser |
/api/debug/system/ | System diagnostics | 🟥 powerUser |
/api/debug/settings/ | Persistent-settings bank state | 🟥 powerUser |
/api/debug/adc/ | Raw ADC and measurement data | 🟥 powerUser |
/api/debug/external-storage/ | External storage information | 🟥 powerUser |
/api/debug/external-storage/dump/ | Full external-storage dump | 🟥 powerUser + diagnostic mode |
/api/debug/network/ | Network-stack diagnostics | 🟥 powerUser |
/api/debug/lwip-stats/ | lwIP counters (proto + memp pools) | 🟥 powerUser |
/api/debug/menu/ | UI menu state | 🟥 powerUser |
/api/debug/keyget/ | Physical button state | 🟥 powerUser |
/api/service/firmware/upload/status/ | OTA upload-session status | 🟥 powerUser |
/api/service/identity/get/ | Current identity state and hardware-lock status | 🟥 powerUser |
/api/service/challenge/status/ | Overvis physical-access verification status | WireGuard + 🟨 user |
/api/service/calibration/report/ | Most recently saved calibration report; no dongle required | 🟥 powerUser |
/api/service/calibration/status/ | Active calibration-session status and heartbeat | 🟥 powerUser + dongle |
POST Requests
Section titled “POST Requests”| Path | Purpose | Access |
|---|---|---|
/api/auth/login/ | Authenticate the user | 🟩 guest |
/api/auth/logout/ | End the session | 🟨 user |
/api/settings/set/ | Partially update settings | 🟥 powerUser |
/api/log/acknowledge/ | Acknowledge viewed events | 🟨 user |
/api/recorder/clear/ | Clear the recorder | 🟥 powerUser |
/api/log/clear/ | Clear the log | 🟥 powerUser |
/api/service/settings/reset/ | Reset settings to factory defaults | 🟥 powerUser |
/api/service/reboot/ | Schedule a reboot | 🟥 powerUser |
/api/service/time/set/ | Set the system time | 🟥 powerUser |
/api/service/time/sync/ | Force SNTP synchronization | 🟨 user |
/api/service/identity/set/ | Update and save identity fields | 🟥 powerUser |
/api/service/challenge/set/ | Set, replace, or reset the Overvis challenge | WireGuard + 🟨 user |
/api/service/calibration/begin/ | Start a calibration session | 🟥 powerUser + dongle |
/api/service/calibration/range/ | Select a range and point | 🟥 powerUser + dongle |
/api/service/calibration/capture/ | Capture four raw ADC values and start verification | 🟥 powerUser + dongle |
/api/service/calibration/commit/ | Save the points and four quality snapshots | 🟥 powerUser + dongle |
/api/service/calibration/finish/ | End the session and release the measurement path | 🟥 powerUser + dongle |
/api/service/firmware/upload/begin/ | Start uploading an OTA image | 🟥 powerUser |
/api/service/firmware/upload/chunk/?offset= | Write an OTA-image chunk | 🟥 powerUser |
/api/service/firmware/upload/finish/ | Finish the upload and validation | 🟥 powerUser |
/api/service/firmware/upload/discard/ | Delete the uploaded OTA image and reset the upload session | 🟥 powerUser |
/api/service/firmware/apply/ | Apply the OTA update | 🟥 powerUser |
/api/debug/relay/start/ | Relay test — start | 🟥 powerUser |
/api/debug/relay/stop/ | Relay test — stop | 🟥 powerUser |
/api/debug/led/start/ | LED test — start | 🟥 powerUser |
/api/debug/led/stop/ | LED test — stop | 🟥 powerUser |
/api/debug/display/start/ | Display test — enable override | 🟥 powerUser |
/api/debug/display/stop/ | Display test — disable override | 🟥 powerUser |
/api/debug/keypress/ | Simulate a button press | 🟥 powerUser |
Errors and Status Codes
Section titled “Errors and Status Codes”| HTTP | error | Purpose |
|---|---|---|
400 | ERROR_INVALID_ARGUMENT, ERROR_INVALID_VALUE, ERROR_API_PARSING | Invalid request |
401 | ERROR_UNAUTHORIZED | No valid authorization |
403 | ERROR_NO_ACCESS, ERROR_WRITE_PROTECT | Insufficient permissions |
404 | ERROR_NOT_FOUND | Resource not found |
408 | ERROR_TIMEOUT | Operation timed out |
429 | ERROR_LOCKED | Lockout after failed login attempts |
500 | ERROR, ERROR_IO | Internal error |
503 | ERROR_NOT_READY | Subsystem not ready |
507 | ERROR_NO_MEMORY | Insufficient memory |
Documentation updated: 2026-07-30