This document provides a comprehensive REST endpoint reference for Solaris Control API v1, including state query endpoints, Granular Security masking rules (ApiPermissionsFilter), per-monitor resolution via Friendly Slugs, and complete documentation for all 28 Action Control System commands (POST /api/v1/control).
GET /api/v1/health (Unrestricted Liveness Probe)GET /api/v1/status (Full State Snapshot & Masking)GET /api/v1/presets (Partial Presets Masking)GET /api/v1/solarGET /api/v1/sleep/sessionsGET /api/v1/docs (Interactive RapiDoc Playground)GET /api/v1/openapi.json (Dynamic OpenAPI 3.0.3 Spec)GET /api/v1/monitorsGET /api/v1/monitors/:slugPOST /api/v1/monitors/:slug/brightnessPOST /api/v1/monitors/:slug/temperature/api/v1/app-overrides)
GET /api/v1/app-overridesGET /api/v1/app-overrides/activePOST /api/v1/app-overridesDELETE /api/v1/app-overrides/:exePOST /api/v1/app-overrides/reset-builtinPOST /api/v1/control)
/api/v1/webhooks*GET /api/v1/webhooks/events/api/v1/sleep/* & /api/sleep/*GET /api/v1/healthLightweight health check endpoint. Useful for liveness probes, load balancers, and status pinging.
isReadOnly = true, requireLocalToken = true, or all read flags are disabled.{
"status": "ok",
"version": "1.5.2+1",
"uptime_seconds": 14250,
"timestamp": "2026-07-25T14:30:00.000Z",
"subsystems": {
"solaris_control": true,
"sleep_integration": true
}
}
subsystems):
solaris_control: Indicates whether Solaris Control API endpoints (/api/v1/control, /api/v1/monitors, etc.) are currently enabled.sleep_integration: Indicates whether Sleep Integration API endpoints (/api/sleep/*, /api/v1/sleep/*) are currently enabled.HTTP 503 Service Unavailable (RFC 7807), while /api/v1/health remains healthy (200 OK).GET /api/v1/statusReturns the complete application state graph: connected monitors, hardware brightness/temperature readings, active presets, solar elevation/azimuth, weather adjustments, sleep tracking engine status, smart circadian state, and LAN API server configuration.
X-API-Key or Authorization: Bearer).ApiPermissionsFilter):
allowReadMonitors = false: Root section monitors is omitted.allowReadSolar = false: Root section solar is omitted.allowReadWeather = false: Root section weather is omitted. All weather_* adjustment fields inside automation are stripped.allowReadSleep = false: Root section sleep is omitted.allowReadCircadian = false: Root section smart_circadian is omitted. All circadian_* fields inside automation are stripped.smart_circadian: When allowReadCircadian = true but allowReadSleep = false, the smart_circadian block remains present with day phases, but sensitive sleep metrics (sleep_pressure, sleep_debt) are stripped.system is disabled in allowedCategories: Root section server is omitted.{
"version": "1.5.2+1",
"uptime_seconds": 14250,
"timestamp": "2026-07-25T14:30:00.000Z",
"solar": {
"elevation": 42.5,
"azimuth": 185.3,
"zenith": 47.5,
"progress": 0.65,
"current_phase": "day",
"next_event": {
"type": "sunset",
"in_seconds": 18400
},
"uv_index": 4.2,
"spectral_intensity": 0.88
},
"weather": {
"available": true,
"cloud_cover": 20,
"temperature_celsius": 24.5,
"weather_code": 0,
"uv_index": 4.2,
"provider": "auto"
},
"monitors": [
{
"id": "\\\\.\\DISPLAY1",
"name": "LG UltraGear 27GP850",
"friendly_name": "LG UltraGear A1F9",
"slug": "display-1",
"device_id_hash": "a1f9",
"is_primary": true,
"brightness": {
"current": 80,
"target": 80.0,
"offset": 0.0,
"mode": "auto",
"active_preset": "bright",
"active_user_preset": null
},
"temperature": {
"enabled": true,
"current": 5500,
"target": 5500,
"mode": "auto",
"active_preset": "cool",
"active_user_preset": null
}
}
],
"automation": {
"auto_brightness": true,
"auto_temperature": true,
"color_temperature_hardware_enabled": true,
"weather_brightness_adjustment": true,
"weather_temperature_adjustment": true,
"weather_adjustment_intensity": 0.45,
"smart_circadian": true,
"game_mode": {
"enabled": true,
"active": false,
"brightness_override": 80.0,
"temperature_enabled": true,
"temperature_override": 6500.0,
"whitelist_count": 5,
"blacklist_count": 0
},
"multi_monitor_offset": false,
"map_animations": {
"rain": true,
"snow": true,
"thunder": true,
"cloud": true
}
},
"smart_circadian": {
"master_enabled": true,
"submodules": {
"wind_down_master": true,
"time_shift_master": true,
"sleep_pressure_master": true,
"sleep_debt_master": true
},
"wind_down": { "active": false, "impact_brightness": 0.0, "impact_temperature": 0 },
"sleep_pressure": { "active": false, "impact_brightness": 0.0, "impact_temperature": 0 },
"sleep_debt": { "active": false, "impact_brightness": 0.0, "impact_temperature": 0 },
"time_shift": { "active": false, "offset_minutes": 0 }
},
"sleep": {
"is_sleeping": false,
"sessions_count": 12,
"last_session_end": "2026-07-24T06:30:00.000Z"
},
"server": {
"port": 45321,
"bind_address": "127.0.0.1",
"lan_access": false,
"rate_limit_per_minute": 120
}
}
GET /api/v1/presetsReturns all built-in brightness presets, color temperature presets, active preset selections, and custom user-defined presets.
allowReadMonitors = false: Section brightness is omitted.allowReadCircadian = false: Section temperature is omitted.allowReadMonitors = false AND allowReadCircadian = false: Returns HTTP 403 Forbidden.{
"brightness": {
"system": ["brightest", "bright", "dim", "dimmest"],
"user": [
{ "id": "preset_172180000", "name": "Work Mode", "active": false }
],
"active": {
"type": "system",
"name": "bright"
}
},
"temperature": {
"system": ["coolest", "cool", "warm", "warmest"],
"user": [],
"active": {
"type": "system",
"name": "cool"
}
}
}
GET /api/v1/solarReturns real-time solar tracking parameters, elevation, azimuth, zenith angle, day phase, upcoming solar events, and trends.
HTTP 403 Forbidden if allowReadSolar = false.{
"elevation": 42.5,
"azimuth": 185.3,
"zenith": 47.5,
"progress": 0.65,
"current_phase": "day",
"next_event": {
"type": "sunset",
"in_seconds": 18400
},
"uv_index": 4.2,
"spectral_intensity": 0.88,
"trends": {
"elevation": 0.05,
"azimuth": 0.12,
"zenith": -0.05
}
}
GET /api/v1/sleep/sessionsReturns paginated sleep tracking sessions stored in memory/database.
limit (optional, default 50, range 1..200): Number of sessions to return.offset (optional, default 0): Pagination offset.from (optional, ISO-8601 DateTime): Filter sessions starting from date.to (optional, ISO-8601 DateTime): Filter sessions starting before date.HTTP 403 Forbidden if allowReadSleep = false.GET /api/v1/sleep/sessions?limit=5&offset=0{
"total": 44,
"limit": 5,
"offset": 0,
"sessions": [
{
"id": "session_1721800000",
"start_time": "2026-07-23T22:30:00.000Z",
"end_time": "2026-07-24T06:30:00.000Z",
"duration_minutes": 480,
"source": "auto"
}
]
}
GET /api/v1/docsHosts the embedded interactive RapiDoc HTML playground (<rapi-doc>).
script-src 'self' 'unsafe-inline' 'unsafe-eval' https://unpkg.com).GET /api/v1/openapi.jsonGenerates a dynamic OpenAPI 3.0.3 Specification JSON document.
Solaris Control API features a Friendly Slug Resolver (MonitorSlugResolver) allowing monitors to be targeted by easy-to-read identifiers instead of long Windows device paths (\\\\.\\DISPLAY1).
display-1, display-2, display-3 (Recommended)dell-u2720q, lg-ultragear (Automatically resolved when monitor model is unique across connected displays)lg-ultragear-a1f9, dell-u2720q-e34bprimary, main (Resolves to primary display), all (Targets all displays).GET /api/v1/monitorsReturns a list of all currently connected physical monitors.
HTTP 403 Forbidden if allowReadMonitors = false.{
"count": 1,
"monitors": [
{
"id": "\\\\.\\DISPLAY1",
"name": "LG UltraGear 27GP850",
"friendly_name": "LG UltraGear A1F9",
"slug": "display-1",
"hardware_slug": "lg-ultragear-a1f9",
"is_primary": true,
"brightness": {
"current": 80,
"target": 80.0,
"offset": 0.0,
"mode": "auto",
"active_preset": "bright",
"active_user_preset": null
},
"temperature": {
"enabled": true,
"current": 5500,
"target": 5500,
"mode": "auto",
"active_preset": "cool"
},
"game_mode": {
"enabled": true,
"active": false
}
}
],
"timestamp": "2026-07-25T14:30:00.000Z"
}
GET /api/v1/monitors/:slugReturns status summary for a single monitor identified by :slug.
HTTP 403 Forbidden if allowReadMonitors = false.{
"id": "\\\\.\\DISPLAY1",
"name": "LG UltraGear 27GP850",
"friendly_name": "LG UltraGear A1F9",
"is_primary": true,
"real_brightness": 80,
"real_temperature": 5500,
"brightness_offset": 0.0,
"smart_circadian_enabled": true,
"weather_adjustment_enabled": true,
"game_mode": {
"enabled": true,
"active": false
},
"timestamp": "2026-07-25T14:30:00.000Z"
}
POST /api/v1/monitors/:slug/brightness: Body {"value": 75.0} (double, 0.0..100.0, or -100.0..100.0 when Extra Dark Dimming is enabled)POST /api/v1/monitors/:slug/temperature: Body {"value": 5000} (integer Kelvin, 1000..6500). Applied instantly via GPU Gamma Ramp LUT. Returns 404 Not Found (RFC 7807) if the monitor slug/ID is unknown or disconnected.POST /api/v1/monitors/:slug/game-mode: Body {"enabled": true} (boolean)HTTP 403 Forbidden if isReadOnly = true or category monitors / gaming is disabled.POST /api/v1/monitors/display-1/brightness HTTP/1.1
Content-Type: application/json
X-API-Key: sol_sec_ae1302d9e99a8b6aad30264417a64cec8ac1b17c20f5abc5cea38b5dea368eae01234567
{
"value": 70.0
}
{
"status": "accepted",
"action": "set_monitor_brightness",
"slug": "display-1",
"target_monitor": "\\\\.\\DISPLAY1",
"queued": {
"value": 70.0
},
"timestamp": "2026-07-25T14:30:00.000Z"
}
POST /api/v1/monitors/display-2/game-mode HTTP/1.1
Content-Type: application/json
X-API-Key: sol_sec_ae1302d9e99a8b6aad30264417a64cec8ac1b17c20f5abc5cea38b5dea368eae01234567
{
"enabled": false
}
{
"status": "ok",
"action": "set_monitor_game_mode",
"slug": "display-2",
"target_monitor": "\\\\.\\DISPLAY2",
"game_mode": {
"enabled": false
},
"timestamp": "2026-07-25T14:30:00.000Z"
}
/api/v1/app-overrides)GET /api/v1/app-overridesReturns all configured per-application override rules and hold interval.
GET /api/v1/app-overrides/activeQueries the current foreground Win32 process, window title, game status, applied profile rule, and evaluated brightness/temperature state.
{
"active_process": "photoshop.exe",
"window_title": "Adobe Photoshop 2026",
"is_gaming": false,
"applied_override": {
"exeName": "photoshop.exe",
"appDisplayName": "Adobe Photoshop",
"isEnabled": true,
"isBuiltIn": true,
"brightnessMode": "global",
"temperatureMode": "fixed",
"fixedTemperature": 6500.0
},
"evaluated_brightness": 80.0,
"evaluated_temperature": 6500.0
}
POST /api/v1/app-overridesCreates or updates a per-application override rule (AppOverrideRule).
ApiAppOverridesHandler):
exeName MUST be a valid executable filename matching regex ^[a-z0-9_\-\.]+\.exe$ (e.g. photoshop.exe, game_client.exe).exeName containing path traversal sequences (/, \, ..) is rejected immediately with HTTP 400 Bad Request.DELETE /api/v1/app-overrides/:exeRemoves a custom per-application override rule by executable name. Enforces the same Path Traversal and filename regex validation.
POST /api/v1/app-overrides/reset-builtinRestores factory built-in app override rules to their default settings.
POST /api/v1/control)The Action Control System provides a unified mutation gateway supporting 28 canonical action types and 17 convenience aliases.
actions (array of action objects): List of actions to execute sequentially.mode (string, optional: "fail_fast" or "continue", default "fail_fast").{
"mode": "fail_fast",
"actions": [
{ "action": "set_brightness", "value": 75.0 },
{ "action": "set_temperature", "value": 5000 }
]
}
Below is the complete reference of all 28 canonical action commands supported by POST /api/v1/control, grouped into 7 permission categories.
monitors (3 Actions)set_brightness (Alias: set_monitor_brightness)
{"action": "set_brightness", "value": 80.0, "monitor_id": "display-1"}value (double, 0.0..100.0, or -100.0..100.0 when Extra Dark Dimming is enabled in settings), monitor_id / slug (optional string target display).set_temperature (Alias: set_monitor_temperature)
{"action": "set_temperature", "value": 2400, "monitor_id": "display-1"}value (integer Kelvin, 1000..6500), monitor_id / slug (optional string target display or "all").set_monitor_offset
{"action": "set_monitor_offset", "offset": -10.0, "monitor_id": "display-2"}offset (double, -50.0..+50.0), monitor_id / slug (required).presets (7 Actions)set_brightness_preset (Aliases: brightest, bright, dim, dimmest)
{"action": "set_brightness_preset", "preset": "bright"}preset (string: "brightest", "bright", "dim", "dimmest").set_temperature_preset (Aliases: coolest, cool, warm, warmest)
{"action": "set_temperature_preset", "preset": "cool"}preset (string: "coolest", "cool", "warm", "warmest").set_user_preset
{"action": "set_user_preset", "id": "preset_172180000"}id (string).cycle_preset
{"action": "cycle_preset", "direction": "next"}Parameters: direction ("next" |
"previous"). Note: The type key is ignored by the backend engine; it always cycles brightness presets. |
get_app_overrides
GET /api/v1/app-overrides.manage_app_overrides
POST /api/v1/app-overrides or DELETE /api/v1/app-overrides/:exe.reset_builtin_app_overrides
POST /api/v1/app-overrides/reset-builtin.circadian (4 Actions)set_auto_brightness (Alias: toggle_auto_brightness)
{"action": "set_auto_brightness", "enabled": true}enabled (boolean).set_auto_temperature (Aliases: toggle_auto_temperature, set_color_temperature_enabled)
{"action": "set_auto_temperature", "enabled": true}enabled (boolean).set_smart_circadian
{"action": "set_smart_circadian", "enabled": true}enabled (boolean).set_smart_circadian_submodules
{"action": "set_smart_circadian_submodules", "wind_down": true, "time_shift": true, "sleep_pressure": true, "sleep_debt": true}gaming (3 Actions)set_game_mode
{"action": "set_game_mode", "enabled": true, "monitor": "display-1"}enabled (boolean, required), monitor / monitor_id (string, optional - "all", "primary", "display-1", etc.).set_game_mode_brightness
{"action": "set_game_mode_brightness", "value": 85.0}value (double, 0.0..100.0).manage_game_mode_whitelist
{"action": "manage_game_mode_whitelist", "op": "add", "app": "cyberpunk2077.exe"}op ("add" or "remove"), app (string executable filename).environment (6 Actions)set_weather_adjustment
{"action": "set_weather_adjustment", "brightness": true, "temperature": true}brightness (boolean), temperature (boolean).set_weather_temperature_adjustment
{"action": "set_weather_temperature_adjustment", "enabled": true}enabled (boolean).set_weather_intensity
{"action": "set_weather_intensity", "value": 0.5}value (double, 0.0..1.0).set_manual_location
{"action": "set_manual_location", "latitude": 50.4501, "longitude": 30.5234, "city": "Kyiv"}latitude (double), longitude (double), city (string).set_weather_provider (Aliases: openmeteo, weatherapi, auto)
{"action": "set_weather_provider", "provider": "auto"}provider (string: "auto", "openmeteo", "weatherapi").trigger_sun_sync
{"action": "trigger_sun_sync"}sleep (1 Action)push_sleep_status
{"action": "push_sleep_status", "is_sleeping": true}is_sleeping (boolean).system (4 Actions)manage_webhooks (Alias: clear_failed_webhooks)
{"action": "manage_webhooks", "sub_action": "clear_failed", "webhook_id": "wh_123"}sub_action / webhook_id.set_map_animations
{"action": "set_map_animations", "rain": true, "snow": true, "thunder": true, "cloud": true}on_system_resume
on_hardware_error
/api/v1/webhooks*)GET /api/v1/webhooks, GET /api/v1/webhooks/dlqGET /api/v1/webhooks/events: Returns all available event type identifiers.POST /api/v1/webhooks: Creates webhook.DELETE /api/v1/webhooks/:id, POST /api/v1/webhooks/:id/test, POST /api/v1/webhooks/dlq/retry./api/v1/sleep/* & /api/sleep/*)Solaris exposes canonical /api/v1/sleep/* endpoints while maintaining legacy /api/sleep/* aliases for 100% backward compatibility with external integrations (Sleep as Android, Tasker, automation scripts):
[!NOTE] Decoupled Subsystem Lifecycle: Sleep endpoints (
/api/v1/sleep/*and legacy/api/sleep/*) are governed independently via the Sleep Integration API switch on the “Sleep” screen. If disabled, they return RFC 7807503 Service Unavailable(Sleep Integration API Disabled). Disabling the general Solaris Control API in Settings does NOT deactivate or interfere with Sleep API endpoints.
GET /api/v1/sleep/status (Alias: GET /api/sleep/status): Returns current sleep tracking state.
allowReadSleep = true.{
"status": "success",
"is_sleeping": false,
"sessions_count": 12,
"last_fetch": "2026-07-24T06:30:00.000Z"
}
POST /api/v1/sleep/status (Alias: POST /api/sleep/status): Updates sleep tracking state.
sleep and action push_sleep_status.{"is_sleeping": true}{"status": "success"}POST /api/v1/sleep/sessions (Alias: POST /api/sleep/sessions): Pushes external sleep sessions array.
sleep and action push_sleep_status.[{"id": "session_123", "start_time": "...", "end_time": "...", "duration_minutes": 480}]{"status": "success"}GET /api/v1/sleep/sessions (Alias: GET /api/sleep/sessions): Returns paginated sleep history (see State Query Endpoints).