This is a small, read-only JSON API for the firmware list on the /services page, meant for outside scripts, apps, or devices that want to check for and download firmware without a browser. Every request needs an API key.
Getting a key
An admin creates keys from Settings → Admin → Services → Firmware API keys in the main app. There's no self-service signup — ask the admin for a key.
Authentication
Send your key on every request, either as a header or a query parameter:
X-API-Key: YOUR_KEY_HERE # or GET /api/public-services/firmware?api_key=YOUR_KEY_HERE
GET/api/public-services/firmware
List all firmware entries.
curl -H "X-API-Key: YOUR_KEY_HERE" \ https://YOUR-HOST/api/public-services/firmware
[
{
"id": "a1b2c3d4e5f6a7b8",
"name": "Main Board Firmware",
"version": "v2.3.1",
"description": "Stable release for X10 relay boards",
"size": 1048576,
"uploadedAt": 1752345600000
}
]
GET/api/public-services/firmware/:id
Get one firmware entry's metadata by id.
curl -H "X-API-Key: YOUR_KEY_HERE" \ https://YOUR-HOST/api/public-services/firmware/a1b2c3d4e5f6a7b8
GET/api/public-services/firmware/:id/download
Download the actual firmware file. The response has the file's real name in Content-Disposition and its exact size in Content-Length.
curl -H "X-API-Key: YOUR_KEY_HERE" \ https://YOUR-HOST/api/public-services/firmware/a1b2c3d4e5f6a7b8/download \ -o firmware.bin
Response fields
| Field | Type | Notes |
|---|---|---|
id | string | Stable identifier, used in the other two endpoints. |
name | string | Display name the admin gave it. |
version | string | Optional, e.g. v2.3.1. |
description | string | Optional notes. |
size | number | File size in bytes. |
uploadedAt | number | Unix ms timestamp. |
Errors
| Status | Meaning |
|---|---|
| 401 | Missing or invalid API key. |
| 404 | No firmware with that id. |