2,179 prompts from top AI collections
← Back to Market
[tronbyt/server] Tronbyt Server API v0 Reference
Universal API Leak/Open
7,564 characters
# Tronbyt Server API v0 Reference Base URL: `http://<server>:8000` ## Authentication All API endpoints require authentication via Bearer token: ``` Authorization: Bearer <api-key> ``` API keys are generated per-device in the web UI. Each key is scoped to a single device. --- ## Devices ### List Devices ``` GET /v0/devices ``` Returns all devices accessible to the authenticated API key. **Response:** ```json { "devices": [ { "id": "gen1", "type": "gen1", "displayName": "My Tronbyt", "notes": "", "intervalSec": 30, "brightness": 100, "nightMode": { "enabled": false, "app": "", "startTime": "", "endTime": "", "brightness": 0 }, "dimMode": { "startTime": null, "brightness": null }, "pinnedApp": null, "interstitial": { "enabled": false, "app": null }, "lastSeen": "2024-01-01T00:00:00Z", "info": { "firmwareVersion": "1.0.0", "firmwareType": "gen1", "protocolVersion": 1, "macAddress": "aa:bb:cc:dd:ee:ff" }, "autoDim": false } ] } ``` ### Get Device ``` GET /v0/devices/{id} ``` Returns details for a specific device. ### Update Device ``` PATCH /v0/devices/{id} Content-Type: application/json ``` Update device settings. All fields are optional. **Request:** ```json { "brightness": 80, "intervalSec": 60, "nightModeEnabled": true, "nightModeApp": "clock", "nightModeBrightness": 10, "nightModeStartTime": "22:00", "nightModeEndTime": "07:00", "dimModeStartTime": "20:00", "dimModeBrightness": 30, "pinnedApp": "weather" } ``` **Response:** Updated device payload (same shape as GET). ### Reboot Device ``` POST /v0/devices/{id}/reboot ``` Sends a reboot command to the device via WebSocket. Returns immediately; the device reboots asynchronously. **Response:** `200 OK` — `"Reboot command sent."` ### Update Firmware Settings ``` POST /v0/devices/{id}/update_firmware_settings Content-Type: application/json ``` Update low-level firmware settings. All fields are optional. **Request:** ```json { "skipDisplayVersion": true, "skipBootAnimation": true, "preferIPv6": false, "apMode": false, "swapColors": false, "wifiPowerSave": 0, "imageUrl": "http://example.com/image.webp", "hostname": "tronbyt.local", "sntpServer": "pool.ntp.org", "syslogAddr": "192.168.1.100:514" } ``` **Response:** `200 OK` — `"Firmware settings updated."` --- ## Installations (Apps) ### List Installations ``` GET /v0/devices/{id}/installations ``` Returns all app installations on a device. **Response:** ```json { "installations": [ { "id": 1, "iname": "my-clock", "name": "Clock", "app_id": "clock", "enabled": true, "display_time": 30, "u_interval": 0, "last_render": "2024-01-01T00:00:00Z", "config": { "timezone": "America/New_York" }, "pinned": false } ] } ``` ### Get Installation ``` GET /v0/devices/{id}/installations/{iname} ``` Returns details for a specific app installation. ### Update Installation ``` PATCH /v0/devices/{id}/installations/{iname} Content-Type: application/json ``` Update installation settings. All fields are optional. **Request:** ```json { "enabled": true, "pinned": false, "renderIntervalMin": 5, "displayTimeSec": 30 } ``` **Response:** Updated installation object. ### Delete Installation ``` DELETE /v0/devices/{id}/installations/{iname} ``` Removes an app installation and its associated WebP files. **Response:** `200 OK` — `"App deleted."` --- ## Push (Render & Display) ### Push App ``` POST /v0/devices/{id}/push_app Content-Type: application/json ``` Renders an app and pushes it to the device. If `background` is `false`, the device immediately interrupts its current display and shows the pushed image. **Request:** ```json { "app_id": "clock", "installationID": "my-clock", "config": { "timezone": "America/New_York" }, "background": false } ``` | Field | Required | Description | |-------|----------|-------------| | `app_id` | No* | The app identifier (e.g. `"clock"`, `"weather"`). Required only if `installationID` is not provided or references a non-existent installation. | | `installationID` | No | Installation name. If provided and valid, the app path is inferred from the existing installation, and its saved config is used if `config` is omitted. | | `config` | No | App configuration. If omitted and `installationID` is provided, uses saved config from that installation. | | `background` | No | If `true`, saves the image without interrupting the device (default: `false`) | **Response:** `200 OK` — `"App pushed."` **Examples:** Push with explicit app_id (required when not using installationID): ```bash curl -X POST \ -H "Authorization: Bearer <key>" \ -H "Content-Type: application/json" \ -d '{"app_id": "clock", "config": {"timezone": "America/New_York"}, "background": false}' \ http://localhost:8000/v0/devices/gen1/push_app ``` Activate an existing installation (app_id inferred from installation): ```bash curl -X POST \ -H "Authorization: Bearer <key>" \ -H "Content-Type: application/json" \ -d '{"installationID": "851", "background": false}' \ http://localhost:8000/v0/devices/gen1/push_app ``` ### Push Raw Image ``` POST /v0/devices/{id}/push Content-Type: application/json ``` Pushes a base64-encoded WebP image directly to the device. **Request:** ```json { "installationID": "my-image", "image": "<base64-encoded-webp>", "background": false } ``` | Field | Required | Description | |-------|----------|-------------| | `installationID` | No | Identifier for the pushed image | | `image` | Yes | Base64-encoded WebP image bytes | | `background` | No | If `true`, saves without interrupting (default: `false`) | **Response:** `200 OK` — `"WebP received."` **Example:** ```bash curl -X POST \ -H "Authorization: Bearer <key>" \ -H "Content-Type: application/json" \ -d '{ "installationID": "custom", "image": "'$(base64 -w0 image.webp)'", "background": false }' \ http://localhost:8000/v0/devices/gen1/push ``` --- ## Common Patterns ### Activate an existing app immediately 1. Push using the installationID — app path and config are inferred from the installation: ```bash curl -X POST \ -H "Authorization: Bearer <key>" \ -H "Content-Type: application/json" \ -d '{"installationID": "851", "background": false}' \ http://localhost:8000/v0/devices/gen1/push_app ``` ### Enable/disable an app ```bash curl -X PATCH \ -H "Authorization: Bearer <key>" \ -H "Content-Type: application/json" \ -d '{"enabled": false}' \ http://localhost:8000/v0/devices/gen1/installations/851 ``` ### Pin an app (always show it) ```bash curl -X PATCH \ -H "Authorization: Bearer <key>" \ -H "Content-Type: application/json" \ -d '{"pinned": true}' \ http://localhost:8000/v0/devices/gen1/installations/851 ``` ### Set device brightness ```bash curl -X PATCH \ -H "Authorization: Bearer <key>" \ -H "Content-Type: application/json" \ -d '{"brightness": 50}' \ http://localhost:8000/v0/devices/gen1 ``` --- ## Error Responses | Status | Meaning | |--------|---------| | `400` | Invalid JSON, missing fields, or bad values | | `401` | Missing or invalid API key | | `404` | Device or installation not found | | `500` | Internal server error | Error responses are plain text with a brief message.
Download .txt