Atlas Knowledge Base
Dashboard
SBN Services API Usage

SBN Services API Usage


The SBN Services Dashboard exposes its actions as an HTTP API, so you can automate them from your own scripts and tools -- checking service state, starting and stopping services, reading and downloading logs, editing settings, creating instances, and more. You authenticate with an API token you create on the API Tokens tab, and each request is allowed only if the token holds the matching feature for the target service.

The API is served by the Dashboard itself, over HTTPS, on the Dashboard's own address and port (for example https://your-server:port). All paths below are relative to that address.

Authenticating with a token

Send your token as a Bearer token in the Authorization header on every request:

Authorization: Bearer <your-token>

That is the only credential the API needs. Notes:

  • Use HTTPS -- never send a token over plain HTTP.
  • If the token is missing, malformed, expired, or disabled, the request is rejected. A bearer token is used exactly as presented; the API does not fall back to any other credential.
  • If you restricted the token to specific source addresses, the request must come from one of them.
  • A token can only reach the action API. It can never reach token management or the administrator-only Dashboard actions, whatever features it holds.

How access is checked

Every action maps to a feature (a capability) and, for per-service actions, a target service. A request succeeds only when the token holds that feature and the target service is included in the token's scope. If the feature or the service is out of scope, the request is refused. Requests that return a list of services return only the services the token is allowed to see.

The feature required for each action is listed in the reference below. Feature names and what they grant are described on the API Tokens page.

Endpoint reference

{id} in a path is a service identifier as returned by the catalog. Paths beginning /api/service/{id}/... act on one service; the token must include that service.

Catalog and status

MethodPathFeatureWhat it returns
GET/versioncatalog.readThe Dashboard version tag.
GET/api/catalogcatalog.readThe category > service > instance tree with current state, limited to services you may see.
GET/api/statuscatalog.readA flat map of service id > state, for polling.
GET/api/versionscatalog.readThe installed file version of each service.
GET/api/names/{id}catalog.readA service's custom display name.
GET/api/settings/dashboard-namecatalog.readThe Dashboard's display name.
GET/api/visibilityvisibility.readWhich services and categories are hidden.
GET/api/visibility/exportvisibility.readThe visibility configuration as JSON.

Service control

MethodPathFeatureAction
POST/api/service/{id}/installservice.installInstall the service.
POST/api/service/{id}/uninstallservice.uninstallUninstall the service.
POST/api/service/{id}/startservice.startStart the service.
POST/api/service/{id}/stopservice.stopStop the service.
POST/api/instance/createservice.installCreate a numbered instance (optionally install it).
DELETE/api/instance/{id}service.uninstallRemove a created instance's files (must not be installed).
GET/api/instance/creatableservice.installThe services that support new instances and the free instance numbers.

Logs

MethodPathFeatureAction
GET/api/service/{id}/loglogs.readRead the current log (chunked tail).
GET/api/service/{id}/log/infologs.readCurrent log file size and metadata.
GET/api/service/{id}/log/fileslogs.readList historical log files, newest first.
GET/api/service/{id}/log/filelogs.readRead one named historical log file.
GET/api/logs/statuslogs.readWhether live log streaming is available.
GET/api/logs/streamlogs.readLive log stream (Server-Sent Events) for one or more services via ?services=<id,id>. Add &levels=<info,warn,err> to receive only those levels; omitted, all levels are sent.
GET/api/service/{id}/log/downloadlogs.downloadDownload a log file (current, or ?file= a historical one).
POST/api/service/{id}/log/clearlogs.clearDelete the service's log content.

Files

MethodPathFeatureAction
GET/api/service/{id}/browse/rootsfiles.readThe service's browsable output folders.
GET/api/service/{id}/browse/listfiles.readList one folder.
GET/api/service/{id}/browse/filefiles.downloadDownload one file.

Settings

MethodPathFeatureAction
GET/api/service/{id}/settingssettings.readRead the service's settings (passwords masked).
GET/api/service/{id}/settings/pluginssettings.readList plugin settings files (where applicable).
PUT/api/service/{id}/settingssettings.writeUpdate the settings (merge by default; ?replace=true to replace).
POST/api/service/{id}/settings/test-connectionsettings.testTest a data-server connection with the supplied values (no save).
POST/api/service/{id}/settings/test-emailsettings.testSend a test e-mail with the supplied settings (no save).
POST/api/service/{id}/settings/discover-crystalsettings.writeLocate the installed report runtime (Windows Report service).

Display name

MethodPathFeatureAction
PUT/api/names/{id}names.writeSet a service's custom display name.
DELETE/api/names/{id}names.writeClear a service's custom display name.

Examples

The examples use curl; any HTTP client works the same way. Replace the host, port, and token.

Read the state of every service

curl -s https://your-server:port/api/status \
  -H "Authorization: Bearer <your-token>"

Response:

{
  "algen-0": "Running",
  "algen-1": "Running",
  "frontend-1": "Stopped",
  "watchdog": "Running"
}

Start a service

curl -s -X POST https://your-server:port/api/service/frontend-1/start \
  -H "Authorization: Bearer <your-token>"

Response:

{
  "id": "frontend-1",
  "issued": true
}

The start is issued immediately; poll /api/status to confirm the service reaches Running. The token must include the service.start feature and the frontend-1 service must be in its scope.

Stream live logs

curl -N "https://your-server:port/api/logs/stream?services=SBNWatchdog,SBNReport&levels=warn,err" \
  -H "Authorization: Bearer <your-token>"

The response is a Server-Sent Events stream that stays open. The first event reports the stream state, then one log event arrives per log line:

event: status
data: {
  "enabled": true,
  "available": true,
  "services": ["SBNWatchdog", "SBNReport"],
  "levels": ["warn", "err"]
}
event: log
data: {
  "ts": "2026-08-03T19:42:15.180+00:00",
  "level": "warn",
  "service": "SBNReport",
  "instance": "SBNReport",
  "host": "your-server",
  "message": "..."
}

levels accepts any combination of info, warn and err; without it every level is sent. Lines starting with a colon (: keepalive) are comments emitted while the stream is idle and can be ignored. The token must include the logs.read feature for every requested service.

Errors

The API uses standard HTTP status codes:

  • 200 -- the request succeeded.
  • 401 -- no valid token was supplied (missing, malformed, expired, or disabled).
  • 403 -- the token is valid but does not hold the required feature for the target service, or the action is administrator-only and never available to a token.
  • 404 -- the service or resource in the path does not exist.

A refused request returns a short JSON body describing the reason; surface that message rather than a generic failure.



Was this helpful?