API Reference
The EmberNet dashboard exposes a REST API under /api. The dashboard's own web
interface is built on it, and the same endpoints are available to integrations.
Base URL
The API is served by the dashboard itself. There is no separate API host.
https://dashboard.embernet.ai/api # cloud-hosted
https://<your-embernet-host>/api # on-premises
Paths are versionless (/api/nodes, /api/alerts, …). There is no /v1
prefix.
Authentication
The dashboard sits behind single sign-on (OAuth2 Proxy in front of your identity provider, see SSO Integration). Every request carries your authenticated session; the dashboard reads your identity from the proxy and resolves your role and tenants from it. In practice:
- From a browser: you are already authenticated by the SSO session. API calls made by the dashboard UI inherit it automatically.
- From an EmberNet Endpoint or a service: the daemon authenticates with an
Azure AD bearer token (
Authorization: Bearer <token>) on the endpoints that accept it, such as/api/tenants/meand/api/endpoints/cards.
There is no static API-key scheme. Access to every endpoint is governed by your role and, for tenant-scoped data, by the tenants you are a member of. A request for another tenant's data is refused, not filtered silently.
Rate limiting
- API requests: 20 requests/second per client IP (short bursts allowed).
- Application proxy (
/api/proxy, used to open an app's GUI): 60 requests/minute per user, 120 for platform staff.
Exceeding a limit returns 429 Too Many Requests; retry after a short pause.
Tenant scope
Endpoints that return per-tenant data accept an optional ?tenant=<id>
parameter:
- Platform staff may pass any tenant, or omit it for a platform-wide view.
- Tenant users are always scoped to the tenants they belong to; omitting
?tenant=selects your primary tenant, and requesting a tenant you cannot access returns403 Forbidden.
Common endpoints
Responses are plain JSON: an array for list endpoints, an object for a single
resource. There is no {status, data} envelope.
Nodes and devices
| Method | Endpoint | Description |
|---|---|---|
GET | /api/nodes | Edge nodes and the apps running on each |
GET | /api/devices | Registered devices (PLCs, HMIs, switches, …) |
POST | /api/devices | Register a device |
PUT | /api/devices | Update a device (by ?id=) |
DELETE | /api/devices?id=<id> | Remove a device |
GET | /api/endpoints/cards | EmberNet Endpoint liveness cards |
Alerts
| Method | Endpoint | Description |
|---|---|---|
GET | /api/alerts | Active and recent alerts (tenant-scoped) |
GET | /api/alerts/summary | Alert counts by severity |
POST | /api/alerts/acknowledge | Acknowledge an alert (by ?id=) |
POST | /api/alerts/resolve | Resolve an alert (by ?id=) |
See Alerts & Notifications for the alert model.
Storage (Cinder)
| Method | Endpoint | Description |
|---|---|---|
GET | /api/storage/dashboard | Capacity, volume health, guardrail status |
GET | /api/storage/longhorn-volumes | Per-volume detail |
GET | /api/storage/backups | Backup inventory |
See Storage.
App Store
| Method | Endpoint | Description |
|---|---|---|
GET | /api/store/apps | Deployable app catalog |
POST | /api/store/deploy | Deploy an app to a node |
GET | /api/apps/services | Running apps (tenant-scoped) |
Tenants and users
| Method | Endpoint | Description |
|---|---|---|
GET | /api/tenants | Tenants (platform staff) |
GET | /api/tenants/me | The calling identity's tenant context |
GET | /api/admin/users | Users |
POST | /api/admin/users | Invite a user |