Skip to main content

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/me and /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 returns 403 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

MethodEndpointDescription
GET/api/nodesEdge nodes and the apps running on each
GET/api/devicesRegistered devices (PLCs, HMIs, switches, …)
POST/api/devicesRegister a device
PUT/api/devicesUpdate a device (by ?id=)
DELETE/api/devices?id=<id>Remove a device
GET/api/endpoints/cardsEmberNet Endpoint liveness cards

Alerts

MethodEndpointDescription
GET/api/alertsActive and recent alerts (tenant-scoped)
GET/api/alerts/summaryAlert counts by severity
POST/api/alerts/acknowledgeAcknowledge an alert (by ?id=)
POST/api/alerts/resolveResolve an alert (by ?id=)

See Alerts & Notifications for the alert model.

Storage (Cinder)

MethodEndpointDescription
GET/api/storage/dashboardCapacity, volume health, guardrail status
GET/api/storage/longhorn-volumesPer-volume detail
GET/api/storage/backupsBackup inventory

See Storage.

App Store

MethodEndpointDescription
GET/api/store/appsDeployable app catalog
POST/api/store/deployDeploy an app to a node
GET/api/apps/servicesRunning apps (tenant-scoped)

Tenants and users

MethodEndpointDescription
GET/api/tenantsTenants (platform staff)
GET/api/tenants/meThe calling identity's tenant context
GET/api/admin/usersUsers
POST/api/admin/usersInvite a user

Next steps