-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathopenapi-spec.json
More file actions
1 lines (1 loc) · 98.1 KB
/
openapi-spec.json
File metadata and controls
1 lines (1 loc) · 98.1 KB
1
{"openapi":"3.1.0","info":{"title":"CoolerControl Daemon API","summary":"CoolerControl Rest Endpoints","description":"Basic OpenAPI documentation for the CoolerControl Daemon API","contact":{"name":"CoolerControl","url":"https://coolercontrol.org"},"license":{"name":"GPL3+","identifier":"GPL3+"},"version":"4.0.0"},"paths":{"/handshake":{"get":{"tags":["base"],"summary":"Handshake","description":"A simple endpoint to verify the connection"}},"/health":{"get":{"tags":["base"],"summary":"Health Check","description":"Returns a Health Check Status.","responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthCheck"}}}},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]}},"/logs":{"get":{"tags":["base"],"summary":"Daemon Logs","description":"This returns all recent main daemon logs as raw text","responses":{"200":{"description":"plain text","content":{"text/plain; charset=utf-8":{}}}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]}},"/acknowledge":{"post":{"tags":["base"],"summary":"Acknowledge Log Issues","description":"This acknowledges existing log warnings and errors, and sets a timestamp of when this occurred","responses":{"200":{"description":"no content"},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]}},"/shutdown":{"post":{"tags":["base"],"summary":"Shutdown Daemon","description":"Sends a cancellation signal to shut the daemon down. When the daemon is running as a systemd or initrc service, it is automatically restarted.","responses":{"200":{"description":"no content"},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]}]}},"/login":{"post":{"tags":["auth"],"summary":"Login","description":"The endpoint used to create a login session.","responses":{"200":{"description":"no content"},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"BasicAuth":[]}]}},"/verify-session":{"post":{"tags":["auth"],"summary":"Verify Session Auth","description":"Verifies that the current session is still authenticated","responses":{"200":{"description":"no content"},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]}]}},"/set-passwd":{"post":{"tags":["auth"],"summary":"Set Admin Password","description":"Stores a new Admin password.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetPasswdRequest"}}},"required":true},"responses":{"200":{"description":"no content"},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[],"BasicAuth":[]}]}},"/logout":{"post":{"tags":["auth"],"summary":"Logout","description":"Logout and invalidate the current session.","responses":{"200":{"description":"no content"}},"security":[{"CookieAuth":[]}]}},"/tokens":{"get":{"tags":["auth"],"summary":"List Access Tokens","description":"Returns a list of all access tokens (without hashes).","responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenListResponse"}}}},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]}]},"post":{"tags":["auth"],"summary":"Create Access Token","description":"Creates a new access token for external service authentication. The raw token is only returned once.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTokenRequest"}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTokenResponse"}}}},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]}]}},"/tokens/{token_id}":{"delete":{"tags":["auth"],"summary":"Delete Access Token","description":"Deletes the access token with the given ID.","parameters":[{"in":"path","name":"token_id","required":true,"schema":{"type":"string"},"style":"simple"}],"responses":{"200":{"description":"no content"},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]}]}},"/thinkpad-fan-control":{"put":{"tags":["device"],"summary":"ThinkPad Fan Control","description":"Enables/Disabled Fan Control for ThinkPads, if acpi driver is present.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ThinkPadFanControlRequest"}}},"required":true},"responses":{"200":{"description":"no content"},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]}},"/devices":{"get":{"tags":["device"],"summary":"All Devices","description":"Returns a list of all detected devices and their associated information.","responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DevicesResponse"}}}},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]}},"/devices/{device_uid}/settings":{"get":{"tags":["device"],"summary":"All Device Settings","description":"Returns all the currently applied settings for the given device. It returns the Config Settings model, which includes all possibilities for each channel.","parameters":[{"in":"path","name":"device_uid","required":true,"schema":{"type":"string"},"style":"simple"}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SettingsResponse"}}}},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]}},"/devices/{device_uid}/settings/{channel_name}/manual":{"put":{"tags":["device"],"summary":"Device Channel Manual","description":"Applies a fan duty to a specific device channel.","parameters":[{"in":"path","name":"channel_name","required":true,"schema":{"type":"string"},"style":"simple"},{"in":"path","name":"device_uid","required":true,"schema":{"type":"string"},"style":"simple"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SettingManualRequest"}}},"required":true},"responses":{"200":{"description":"no content"},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]}},"/devices/{device_uid}/settings/{channel_name}/profile":{"put":{"tags":["device"],"summary":"Device Channel Profile","description":"Applies a Profile to a specific device channel.","parameters":[{"in":"path","name":"channel_name","required":true,"schema":{"type":"string"},"style":"simple"},{"in":"path","name":"device_uid","required":true,"schema":{"type":"string"},"style":"simple"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SettingProfileUID"}}},"required":true},"responses":{"200":{"description":"no content"},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]}},"/devices/{device_uid}/settings/{channel_name}/lcd":{"put":{"tags":["device"],"summary":"Device Channel LCD","description":"Applies LCD Settings to a specific device channel.","parameters":[{"in":"path","name":"channel_name","required":true,"schema":{"type":"string"},"style":"simple"},{"in":"path","name":"device_uid","required":true,"schema":{"type":"string"},"style":"simple"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LcdSettings"}}},"required":true},"responses":{"200":{"description":"no content"},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]}},"/devices/{device_uid}/settings/{channel_name}/lcd/images":{"get":{"tags":["device"],"summary":"Retrieve Device Channel LCD","description":"Retrieves the currently applied LCD Image file.","parameters":[{"in":"path","name":"channel_name","required":true,"schema":{"type":"string"},"style":"simple"},{"in":"path","name":"device_uid","required":true,"schema":{"type":"string"},"style":"simple"}],"responses":{"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]},"put":{"tags":["device"],"summary":"Update Device Channel LCD Settings","description":"Used to apply LCD settings that contain images.","parameters":[{"in":"path","name":"channel_name","required":true,"schema":{"type":"string"},"style":"simple"},{"in":"path","name":"device_uid","required":true,"schema":{"type":"string"},"style":"simple"},{"in":"query","name":"log","schema":{"type":["boolean","null"],"default":null},"style":"form"}],"responses":{"200":{"description":"no content"},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]},"post":{"tags":["device"],"summary":"Process Device Channel LCD Image","description":"This takes and image file and processes it for optimal use by the specified device channel. This is useful for a UI Preview and is used internally before applying the image to the device.","parameters":[{"in":"path","name":"channel_name","required":true,"schema":{"type":"string"},"style":"simple"},{"in":"path","name":"device_uid","required":true,"schema":{"type":"string"},"style":"simple"}],"responses":{"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]}},"/devices/{device_uid}/settings/{channel_name}/lcd/shutdown-image":{"put":{"tags":["device"],"summary":"Set LCD Shutdown Image","description":"Upload and save an LCD image that will be applied to the device when the daemon shuts down.","parameters":[{"in":"path","name":"channel_name","required":true,"schema":{"type":"string"},"style":"simple"},{"in":"path","name":"device_uid","required":true,"schema":{"type":"string"},"style":"simple"}],"responses":{"200":{"description":"no content"},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]},"delete":{"tags":["device"],"summary":"Clear LCD Shutdown Image","description":"Remove the saved LCD shutdown image for the given device channel.","parameters":[{"in":"path","name":"channel_name","required":true,"schema":{"type":"string"},"style":"simple"},{"in":"path","name":"device_uid","required":true,"schema":{"type":"string"},"style":"simple"}],"responses":{"200":{"description":"no content"},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]}},"/devices/{device_uid}/settings/{channel_name}/lighting":{"put":{"tags":["device"],"summary":"Device Channel Lighting","description":"Applies Lighting Settings (RGB) to a specific device channel.","parameters":[{"in":"path","name":"channel_name","required":true,"schema":{"type":"string"},"style":"simple"},{"in":"path","name":"device_uid","required":true,"schema":{"type":"string"},"style":"simple"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LightingSettings"}}},"required":true},"responses":{"200":{"description":"no content"},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]}},"/devices/{device_uid}/settings/{channel_name}/pwm":{"put":{"tags":["device"],"summary":"DEPRECATED: Device Channel PWM Mode","description":"DEPRECATED: Applies PWM Mode to a specific device channel.","parameters":[{"in":"path","name":"channel_name","required":true,"schema":{"type":"string"},"style":"simple"},{"in":"path","name":"device_uid","required":true,"schema":{"type":"string"},"style":"simple"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SettingPWMMode"}}},"required":true},"responses":{"200":{"description":"no content"},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]}},"/devices/{device_uid}/settings/{channel_name}/reset":{"put":{"tags":["device"],"summary":"Device Channel Reset","description":"Resents the specific device channel settings to not-set/device default.","parameters":[{"in":"path","name":"channel_name","required":true,"schema":{"type":"string"},"style":"simple"},{"in":"path","name":"device_uid","required":true,"schema":{"type":"string"},"style":"simple"}],"responses":{"200":{"description":"no content"},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]}},"/devices/{device_uid}/asetek690":{"patch":{"tags":["device"],"summary":"Device AseTek690","description":"Set the driver type for liquidctl AseTek cooler. This is needed to set Legacy690Lc or Modern690Lc device driver type.","parameters":[{"in":"path","name":"device_uid","required":true,"schema":{"type":"string"},"style":"simple"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AseTek690Request"}}},"required":true},"responses":{"200":{"description":"no content"},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]}},"/status":{"get":{"tags":["status"],"summary":"Retrieve Status","description":"Returns the status of all devices and their channels, returning only the most recent status by default.","parameters":[{"in":"query","name":"all","schema":{"type":["boolean","null"],"default":null},"style":"form"}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]},"post":{"tags":["status"],"summary":"Retrieve Status","description":"Returns the status of all devices and their channels,with the selected filters from the request body. This endpoint has the most options available for retrieving all statuses.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusRequest"}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]}},"/status/{device_uid}":{"get":{"tags":["status"],"summary":"Retrieve Device Status","description":"Returns the status of all channels for a specific device, returning only the most recent status by default.","parameters":[{"in":"path","name":"device_uid","required":true,"schema":{"type":"string"},"style":"simple"},{"in":"query","name":"all","schema":{"type":["boolean","null"],"default":null},"style":"form"}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceStatusDto"}}}},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]}},"/status/{device_uid}/channels/{channel_name}":{"get":{"tags":["status"],"summary":"Retrieve Device Channel Status","description":"Returns the status of a specific channel for a specific device, returning only the most recent status by default.","parameters":[{"in":"path","name":"channel_name","required":true,"schema":{"type":"string"},"style":"simple"},{"in":"path","name":"device_uid","required":true,"schema":{"type":"string"},"style":"simple"},{"in":"query","name":"all","schema":{"type":["boolean","null"],"default":null},"style":"form"}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceChannelStatusDto"}}}},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]}},"/profiles":{"get":{"tags":["profile"],"summary":"Retrieve Profile List","description":"Returns a list of all the persisted Profiles.","responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfilesDto"}}}},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]},"put":{"tags":["profile"],"summary":"Update Profile","description":"Updates the Profile with the given properties. Dependent on the Profile UID.","requestBody":{"description":"Profile Settings","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Profile"}}},"required":true},"responses":{"200":{"description":"no content"},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]},"post":{"tags":["profile"],"summary":"Create Profile","description":"Creates the given Profile","requestBody":{"description":"Profile Settings","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Profile"}}},"required":true},"responses":{"200":{"description":"no content"},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]}},"/profiles/{profile_uid}":{"delete":{"tags":["profile"],"summary":"Delete Profile","description":"Deletes the Profile with the given Profile UID","parameters":[{"in":"path","name":"profile_uid","required":true,"schema":{"type":"string"},"style":"simple"}],"responses":{"200":{"description":"no content"},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]}},"/profiles/order":{"post":{"tags":["profile"],"summary":"Save Profile Order","description":"Saves the order of Profiles as given.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfilesDto"}}},"required":true},"responses":{"200":{"description":"no content"},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]}},"/functions":{"get":{"tags":["function"],"summary":"Retrieve Function List","description":"Returns a list of all the persisted Functions.","responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FunctionsDto"}}}},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]},"put":{"tags":["function"],"summary":"Update Function","description":"Updates the Function with the given properties. Dependent on the Function UID.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Function"}}},"required":true},"responses":{"200":{"description":"no content"},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]},"post":{"tags":["function"],"summary":"Create Function","description":"Creates the given Function","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Function"}}},"required":true},"responses":{"200":{"description":"no content"},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]}},"/functions/{function_uid}":{"delete":{"tags":["function"],"summary":"Delete Function","description":"Deletes the Function with the given Function UID","parameters":[{"in":"path","name":"function_uid","required":true,"schema":{"type":"string"},"style":"simple"}],"responses":{"200":{"description":"no content"},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]}},"/functions/order":{"post":{"tags":["function"],"summary":"Save Function Order","description":"Saves the order of the Functions as given.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FunctionsDto"}}},"required":true},"responses":{"200":{"description":"no content"},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]}},"/custom-sensors":{"get":{"tags":["custom-sensor"],"summary":"Retrieve Custom Sensor List","description":"Returns a list of all the persisted Custom Sensors.","responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomSensorsDto"}}}},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]},"put":{"tags":["custom-sensor"],"summary":"Update Custom Sensor","description":"Updates the Custom Sensor with the given properties. Dependent on the Custom Sensor ID.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomSensor"}}},"required":true},"responses":{"200":{"description":"no content"},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]},"post":{"tags":["custom-sensor"],"summary":"Create Custom Sensor","description":"Creates the given Custom Sensor","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomSensor"}}},"required":true},"responses":{"200":{"description":"no content"},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]}},"/custom-sensors/{custom_sensor_id}":{"get":{"tags":["custom-sensor"],"summary":"Retrieve Custom Sensor","description":"Retrieves the Custom Sensor with the given Custom Sensor ID","parameters":[{"in":"path","name":"custom_sensor_id","required":true,"schema":{"type":"string"},"style":"simple"}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomSensor"}}}},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]},"delete":{"tags":["custom-sensor"],"summary":"Delete Custom Sensor","description":"Deletes the Custom Sensor with the given Custom Sensor UID","parameters":[{"in":"path","name":"custom_sensor_id","required":true,"schema":{"type":"string"},"style":"simple"}],"responses":{"200":{"description":"no content"},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]}},"/custom-sensors/order":{"post":{"tags":["custom-sensor"],"summary":"Save Custom Sensor Order","description":"Saves the order of the Custom Sensors as given.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomSensorsDto"}}},"required":true},"responses":{"200":{"description":"no content"},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]}},"/modes":{"get":{"tags":["mode"],"summary":"Retrieve Mode List","description":"Returns a list of all the persisted Modes.","responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModesDto"}}}},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]},"put":{"tags":["mode"],"summary":"Update Mode","description":"Updates the Mode with the given properties.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateModeDto"}}},"required":true},"responses":{"200":{"description":"no content"},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]},"post":{"tags":["mode"],"summary":"Create Mode","description":"Creates a Mode with the given name, based on the currently applied settings.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateModeDto"}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModeDto"}}}},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]}},"/modes/{mode_uid}":{"get":{"tags":["mode"],"summary":"Retrieve Mode","description":"Retrieves the Mode with the given Mode UID","parameters":[{"in":"path","name":"mode_uid","required":true,"schema":{"type":"string"},"style":"simple"}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModeDto"}}}},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]},"delete":{"tags":["mode"],"summary":"Delete Mode","description":"Deletes the Mode with the given Mode UID","parameters":[{"in":"path","name":"mode_uid","required":true,"schema":{"type":"string"},"style":"simple"}],"responses":{"200":{"description":"no content"},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]}},"/modes/{mode_uid}/duplicate":{"post":{"tags":["mode"],"summary":"Duplicate Mode","description":"Duplicates the Mode and it's settings from the given Mode UID and returns the new Mode.","parameters":[{"in":"path","name":"mode_uid","required":true,"schema":{"type":"string"},"style":"simple"}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModeDto"}}}},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]}},"/modes/{mode_uid}/settings":{"put":{"tags":["mode"],"summary":"Update Mode Device Settings","description":"Updates the Mode with the given Mode UID device settings to what is currently applied, and returns the Mode with it's new settings.","parameters":[{"in":"path","name":"mode_uid","required":true,"schema":{"type":"string"},"style":"simple"}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModeDto"}}}},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]}},"/modes-active":{"get":{"tags":["mode"],"summary":"Retrieve Active Modes","description":"Returns the active and previously active Mode UIDs.","responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActiveModesDto"}}}},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]}},"/modes-active/{mode_uid}":{"post":{"tags":["mode"],"summary":"Activate Mode","description":"Activates the Mode with the given Mode UID. This applies all of this Mode's device settings.","parameters":[{"in":"path","name":"mode_uid","required":true,"schema":{"type":"string"},"style":"simple"}],"responses":{"200":{"description":"no content"},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]}},"/modes/order":{"post":{"tags":["mode"],"summary":"Save Mode Order","description":"Saves the order of the Modes as given.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModeOrderDto"}}},"required":true},"responses":{"200":{"description":"no content"},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]}},"/settings":{"get":{"tags":["setting"],"summary":"CoolerControl Settings","description":"Returns the current CoolerControl settings.","responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoolerControlSettingsDto"}}}},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]},"patch":{"tags":["setting"],"summary":"Update CoolerControl Settings","description":"Applies only the given properties.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoolerControlSettingsDto"}}},"required":true},"responses":{"200":{"description":"no content"},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]}},"/settings/devices":{"get":{"tags":["setting"],"summary":"CoolerControl All Device Settings","description":"Returns the current CoolerControl device settings for all devices.","responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoolerControlAllDeviceSettingsDto"}}}},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]}},"/settings/devices/{device_uid}":{"get":{"tags":["setting"],"summary":"CoolerControl Device Settings","description":"Returns the current CoolerControl device settings for the given device UID.","parameters":[{"in":"path","name":"device_uid","required":true,"schema":{"type":"string"},"style":"simple"}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoolerControlDeviceSettingsDto"}}}},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]},"put":{"tags":["setting"],"summary":"Update CoolerControl Device Settings","description":"Updates the CoolerControl device settings for the given device UID.","parameters":[{"in":"path","name":"device_uid","required":true,"schema":{"type":"string"},"style":"simple"}],"requestBody":{"description":"Device Specific settings that generally apply to how the application deals with the device.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CCDeviceSettings"}}},"required":true},"responses":{"200":{"description":"no content"},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]}},"/settings/ui":{"get":{"tags":["setting"],"summary":"CoolerControl UI Settings","description":"Returns the current CoolerControl UI Settings.","responses":{"200":{"description":"plain text","content":{"text/plain; charset=utf-8":{}}},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]}]},"put":{"tags":["setting"],"summary":"Update CoolerControl UI Settings","description":"Updates and persists the CoolerControl UI settings.","requestBody":{"content":{"text/plain; charset=utf-8":{}},"required":true},"responses":{"200":{"description":"no content"},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]}]}},"/plugins":{"get":{"tags":["plugins"],"summary":"CoolerControl Plugins","description":"Returns the current list of active CoolerControl plugins.","responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PluginsDto"}}}},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]}]}},"/plugins/lib/cc-plugin-lib.js":{"get":{"tags":["plugins"],"summary":"CoolerControl Plugin UI Library","description":"Returns the CoolerControl plugin UI library for plugins to use in their UI code.","responses":{"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}}}},"/plugins/{plugin_id}/config":{"get":{"tags":["plugins"],"summary":"CoolerControl Plugin Config","description":"Returns the current CoolerControl plugin config for the given plugin ID.","parameters":[{"in":"path","name":"plugin_id","required":true,"schema":{"type":"string"},"style":"simple"}],"responses":{"200":{"description":"plain text","content":{"text/plain; charset=utf-8":{}}},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]}]},"put":{"tags":["plugins"],"summary":"Update CoolerControl Plugin Config","description":"Updates the CoolerControl plugin config for the given plugin ID.","parameters":[{"in":"path","name":"plugin_id","required":true,"schema":{"type":"string"},"style":"simple"}],"requestBody":{"content":{"text/plain; charset=utf-8":{}},"required":true},"responses":{"200":{"description":"no content"},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]}]}},"/plugins/{plugin_id}/ui":{"get":{"tags":["plugins"],"summary":"CoolerControl Plugin UI Check","description":"Returns if the CoolerControl plugin has a UI or not.","parameters":[{"in":"path","name":"plugin_id","required":true,"schema":{"type":"string"},"style":"simple"}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HasUiDto"}}}}},"security":[{"CookieAuth":[]}]}},"/plugins/{plugin_id}/ui/{file_name}":{"get":{"tags":["plugins"],"summary":"CoolerControl Plugin UI","description":"Returns the CoolerControl plugin UI file for the given plugin ID.","parameters":[{"in":"path","name":"file_name","required":true,"schema":{"type":"string"},"style":"simple"},{"in":"path","name":"plugin_id","required":true,"schema":{"type":"string"},"style":"simple"}],"responses":{"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]}]}},"/alerts":{"get":{"tags":["alert"],"summary":"Retrieve Alert List","description":"Returns a list of all the persisted Alerts.","responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertsDto"}}}},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]},"put":{"tags":["alert"],"summary":"Update Alert","description":"Updates the Alert with the given properties. Dependent on the Alert UID.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertDto"}}},"required":true},"responses":{"200":{"description":"no content"},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]},"post":{"tags":["alert"],"summary":"Create Alert","description":"Creates the given Alert","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertDto"}}},"required":true},"responses":{"200":{"description":"no content"},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]}},"/alerts/{alert_uid}":{"delete":{"tags":["alert"],"summary":"Delete Alert","description":"Deletes the Alert with the given Alert UID","parameters":[{"in":"path","name":"alert_uid","required":true,"schema":{"type":"string"},"style":"simple"}],"responses":{"200":{"description":"no content"},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]}},"/detect":{"get":{"tags":["detect"],"summary":"Detect Hardware","description":"Run Super-I/O hardware detection and return results without loading modules.","responses":{"200":{"description":"Response for GET/POST /detect","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetectResponse"}}}},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]},"post":{"tags":["detect"],"summary":"Detect Hardware and Load Modules","description":"Run Super-I/O hardware detection and optionally load kernel modules.","requestBody":{"description":"Request body for POST /detect","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetectRequest"}}},"required":true},"responses":{"200":{"description":"Response for GET/POST /detect","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetectResponse"}}}},"400":{"description":"Bad Request. The request is invalid"},"401":{"description":"Unauthorized. Invalid credentials were provided."},"403":{"description":"Forbidden. Insufficient permissions."},"404":{"description":"Whatever you're looking for, it's not here."},"500":{"description":"An internal error has occurred."},"429":{"description":"Too Many Requests. Login attempts have been rate limited."},"502":{"description":"Bad Gateway. An error has occurred with an external library."}},"security":[{"CookieAuth":[]},{"BearerAuth":[]}]}},"/sse/logs":{"get":{"tags":["sse"],"summary":"Log Server Sent Events","description":"Subscribes and returns the Server Sent Events for a Log stream","security":[{"CookieAuth":[]},{"BearerAuth":[]}]}},"/sse/status":{"get":{"tags":["sse"],"summary":"Recent Status Server Sent Events","description":"Subscribes and returns the Server Sent Events for a Status stream","security":[{"CookieAuth":[]},{"BearerAuth":[]}]}},"/sse/modes":{"get":{"tags":["sse"],"summary":"Activated Mode Events","description":"Subscribes and returns the Server Sent Events for a ModeActivated stream","security":[{"CookieAuth":[]},{"BearerAuth":[]}]}},"/sse/alerts":{"get":{"tags":["sse"],"summary":"Alert Events","description":"Subscribes and returns Events for when an Alert State has changed","security":[{"CookieAuth":[]},{"BearerAuth":[]}]}}},"components":{"securitySchemes":{"CookieAuth":{"type":"apiKey","in":"cookie","name":"cc","description":"The private session cookie used for authentication."},"BasicAuth":{"type":"http","scheme":"basic","bearerFormat":"","description":"HTTP Basic authentication, mostly used to generate a secure authentication cookie."},"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"cc_<uuid>","description":"Bearer token authentication for external services."}},"schemas":{"ActiveModesDto":{"type":"object","properties":{"current_mode_uid":{"type":["string","null"]},"previous_mode_uid":{"type":["string","null"]}}},"AlertDto":{"type":"object","properties":{"channel_source":{"$ref":"#/components/schemas/ChannelSource"},"desktop_notify":{"description":"Toggle a desktop notification when this alert enters an `Active` state. (true by default)","type":"boolean","default":true},"desktop_notify_audio":{"description":"Toggle whether the desktop notification attempts to play an audio sound\n when this alert enters an `Active` state.\n Note: only applies when `desktop_notify` is enabled.","type":"boolean","default":false},"desktop_notify_recovery":{"description":"Toggle a desktop notification when this alert enters an `Inactive` state.","type":"boolean","default":true},"max":{"type":"number","format":"double"},"min":{"type":"number","format":"double"},"name":{"type":"string"},"shutdown_on_activation":{"description":"Toggle whether to issue a system shutdown when this Alert enters an `Active` state.\n Duration of the alert before shutdown is determined by `shutdown_active_duration`.","type":"boolean","default":false},"state":{"anyOf":[{"$ref":"#/components/schemas/AlertState"},{"type":"null"}]},"uid":{"type":"string"},"warmup_duration":{"description":"Time in seconds throughout which the alert condition must hold before the alert is activated","type":"number","format":"double"}},"required":["uid","name","channel_source","min","max","warmup_duration"]},"AlertLog":{"type":"object","properties":{"message":{"type":"string"},"name":{"type":"string"},"state":{"$ref":"#/components/schemas/AlertState"},"timestamp":{"type":"string","format":"date-time"},"uid":{"type":"string"}},"required":["uid","name","state","message","timestamp"]},"AlertPath":{"type":"object","properties":{"alert_uid":{"type":"string"}},"required":["alert_uid"]},"AlertState":{"oneOf":[{"type":"string","enum":["Active","Inactive"]},{"description":"Alert condition was satisfied at the stored time\n but the duration threshold has not been reached.","type":"object","properties":{"WarmUp":{"type":"string","format":"date-time"}},"additionalProperties":false,"required":["WarmUp"]},{"description":"Represents an error state. e.g. when one of the components in the alert isn't found.","type":"string","const":"Error"}]},"AlertsDto":{"type":"object","properties":{"alerts":{"type":"array","items":{"$ref":"#/components/schemas/AlertDto"}},"logs":{"type":"array","items":{"$ref":"#/components/schemas/AlertLog"}}},"required":["alerts","logs"]},"AseTek690Request":{"type":"object","properties":{"is_legacy690":{"type":"boolean"}},"required":["is_legacy690"]},"BaseDriver":{"type":"string","enum":["Aquacomputer","Legacy690Lc","Modern690Lc","Hydro690Lc","HydroPro","AsusRyujin","AuraLed","CommanderCore","CommanderPro","Coolit","CorsairHidPsu","Ddr4Temperature","VengeanceRgb","HydroPlatinum","Kraken2","KrakenX3","KrakenZ3","MockKrakenZ3","MpgCooler","EvgaPascal","RogTuring","NzxtEPsu","RgbFusion2","SmartDevice","SmartDevice2","H1V2","MsiAcpiEc","LianLiUni","NotSupported"]},"CCChannelSettings":{"type":"object","properties":{"disabled":{"type":"boolean"},"extension":{"description":"Specialized settings (extensions) that apply to a specific device channel.","anyOf":[{"$ref":"#/components/schemas/ChannelExtensions"},{"type":"null"}]},"label":{"type":["string","null"]}},"required":["disabled"]},"CCDeviceSettings":{"description":"Device Specific settings that generally apply to how the application deals with the device.","type":"object","properties":{"channel_settings":{"description":"A list of channels specific settings, including disable and extension settings.","type":"object","additionalProperties":{"$ref":"#/components/schemas/CCChannelSettings"}},"disable":{"description":"All communication with this device will be avoided if disabled","type":"boolean"},"extensions":{"description":"Specialized settings (extensions) that apply to a specific device.","allOf":[{"$ref":"#/components/schemas/DeviceExtensions"}]},"name":{"description":"The device name for this setting. Helpful after blacklisting(disabling) devices.","type":"string"}},"required":["name","disable","extensions","channel_settings"]},"CSPath":{"type":"object","properties":{"custom_sensor_id":{"type":"string"}},"required":["custom_sensor_id"]},"ChannelExtensionNames":{"description":"Channel extension names that signal which `ChannelExtensions` are applicable\n for a particular device channel.","type":"string","enum":["AutoHWCurve","AmdRdnaGpu"]},"ChannelExtensions":{"description":"Device Channel specific settings\n This is used to store specialized settings (extensions) that apply to a specific device channel.","anyOf":[{"description":"Whether to use the device channel's internal hardware fan curve functionality.","type":"object","properties":{"auto_hw_curve_enabled":{"type":"boolean"}},"required":["auto_hw_curve_enabled"]},{"description":"Whether to use the AMDGPU RDNA3/4 features.\n It allows the device to run at zero RPM when the temperature is below a certain threshold.","type":"object","properties":{"hw_fan_curve_enabled":{"description":"Whether to use the internal HW Curve feature, instead of setting regular\n flat curves. Using this reduces functionality.","type":"boolean"}},"required":["hw_fan_curve_enabled"]}]},"ChannelInfo":{"type":"object","properties":{"label":{"type":["string","null"]},"lcd_info":{"anyOf":[{"$ref":"#/components/schemas/LcdInfo"},{"type":"null"}]},"lcd_modes":{"type":"array","items":{"$ref":"#/components/schemas/LcdMode"}},"lighting_modes":{"type":"array","items":{"$ref":"#/components/schemas/LightingMode"}},"speed_options":{"anyOf":[{"$ref":"#/components/schemas/SpeedOptions"},{"type":"null"}]}},"required":["lighting_modes","lcd_modes"]},"ChannelMetric":{"type":"string","enum":["Temp","Duty","Load","RPM","Freq"]},"ChannelSource":{"description":"A source for displaying sensor data that is related to a particular channel.\n This is like `TempSource` but not limited to temperature sensors. (Load, Duty, etc.)","type":"object","properties":{"channel_metric":{"$ref":"#/components/schemas/ChannelMetric"},"channel_name":{"description":"The internal name for this channel source. NOT the Label.","type":"string"},"device_uid":{"description":"The associated device uid containing current values","type":"string"}},"required":["device_uid","channel_name","channel_metric"]},"ChannelStatus":{"type":"object","properties":{"duty":{"type":["number","null"],"format":"double"},"freq":{"type":["integer","null"],"format":"uint32","minimum":0},"name":{"type":"string"},"pwm_mode":{"type":["integer","null"],"format":"uint8","maximum":255,"minimum":0},"rpm":{"type":["integer","null"],"format":"uint32","minimum":0},"watts":{"type":["number","null"],"format":"double"}},"required":["name"]},"CoolerControlAllDeviceSettingsDto":{"type":"object","properties":{"devices":{"type":"array","items":{"$ref":"#/components/schemas/CoolerControlDeviceSettingsDto"}}},"required":["devices"]},"CoolerControlDeviceSettingsDto":{"type":"object","properties":{"channel_settings":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/CCChannelSettings"}},"disable":{"type":"boolean"},"extensions":{"$ref":"#/components/schemas/DeviceExtensions"},"name":{"type":"string"},"uid":{"type":"string"}},"required":["uid","name","disable","extensions","channel_settings"]},"CoolerControlSettingsDto":{"type":"object","properties":{"allow_unencrypted":{"description":"Allow unencrypted HTTP connections from non-localhost addresses","type":["boolean","null"]},"apply_on_boot":{"type":["boolean","null"]},"compress":{"type":["boolean","null"]},"drivetemp_suspend":{"type":["boolean","null"]},"hide_duplicate_devices":{"type":["boolean","null"]},"liquidctl_integration":{"type":["boolean","null"]},"no_init":{"type":["boolean","null"]},"origins":{"description":"Custom origins to allow in CORS (for reverse proxy setups)","type":["array","null"],"items":{"type":"string"}},"poll_rate":{"type":["number","null"],"format":"double"},"protocol_header":{"description":"Header to check for proxy client protocol (e.g., \"X-Forwarded-Proto\")","type":["string","null"]},"startup_delay":{"type":["integer","null"],"format":"uint16","maximum":65535,"minimum":0},"thinkpad_full_speed":{"type":["boolean","null"]}}},"CreateModeDto":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]},"CreateTokenRequest":{"type":"object","properties":{"expires_at":{"type":["string","null"],"format":"date-time"},"label":{"type":"string"}},"required":["label"]},"CreateTokenResponse":{"type":"object","properties":{"created_at":{"type":"string","format":"date-time"},"expires_at":{"type":["string","null"],"format":"date-time"},"id":{"type":"string"},"label":{"type":"string"},"token":{"type":"string"}},"required":["id","label","token","created_at"]},"CustomSensor":{"type":"object","properties":{"children":{"description":"The Custom Sensor's children, if any.\n\n Each Custom Sensor is either a child, parent, or standalone, not a combination of those.\n Custom Sensors are limited to 1 level of hierarchy. This removes the possibility\n of circular references.\n\n The children and parents vectors are managed and filled internally. For GET endpoints,\n they provide this information for clients. For POST or PUT endpoints,\n any values here are essentially ignored.","type":"array","default":[],"items":{"type":"string"}},"cs_type":{"$ref":"#/components/schemas/CustomSensorType"},"file_path":{"type":["string","null"]},"id":{"description":"ID MUST be unique, as `temp_name` must be unique.","type":"string"},"mix_function":{"$ref":"#/components/schemas/CustomSensorMixFunctionType"},"offset":{"type":["integer","null"],"format":"int8","maximum":127,"minimum":-128},"parents":{"description":"The Custom Sensor's parents, if any. See `children` for more details.","type":"array","default":[],"items":{"type":"string"}},"sources":{"type":"array","items":{"$ref":"#/components/schemas/CustomTempSourceData"}}},"required":["id","cs_type","mix_function","sources"]},"CustomSensorMixFunctionType":{"type":"string","enum":["Min","Max","Delta","Avg","WeightedAvg"]},"CustomSensorType":{"type":"string","enum":["Mix","File","Offset"]},"CustomSensorsDto":{"type":"object","properties":{"custom_sensors":{"type":"array","items":{"$ref":"#/components/schemas/CustomSensor"}}},"required":["custom_sensors"]},"CustomTempSourceData":{"type":"object","properties":{"temp_source":{"$ref":"#/components/schemas/TempSource"},"weight":{"type":"integer","format":"uint8","maximum":255,"minimum":0}},"required":["temp_source","weight"]},"DetectRequest":{"description":"Request body for POST /detect","type":"object","properties":{"load_modules":{"type":"boolean","default":false}}},"DetectResponse":{"description":"Response for GET/POST /detect","type":"object","properties":{"blacklisted":{"type":"array","items":{"type":"string"}},"detected_chips":{"type":"array","items":{"$ref":"#/components/schemas/DetectedChipDto"}},"environment":{"$ref":"#/components/schemas/EnvironmentDto"},"skipped":{"type":"array","items":{"$ref":"#/components/schemas/SkippedDriverDto"}}},"required":["detected_chips","skipped","blacklisted","environment"]},"DetectedChipDto":{"type":"object","properties":{"address":{"type":"string"},"base_address":{"type":"string"},"driver":{"type":"string"},"features":{"type":"array","items":{"type":"string"}},"module_status":{"type":"string"},"name":{"type":"string"}},"required":["name","driver","address","base_address","features","module_status"]},"DeviceChannelPath":{"type":"object","properties":{"channel_name":{"type":"string"},"device_uid":{"type":"string"}},"required":["device_uid","channel_name"]},"DeviceChannelStatusDto":{"type":"object","properties":{"status_history":{"type":"array","items":{"$ref":"#/components/schemas/Status"}}},"required":["status_history"]},"DeviceDto":{"type":"object","properties":{"d_type":{"$ref":"#/components/schemas/DeviceType"},"info":{"$ref":"#/components/schemas/DeviceInfo"},"lc_info":{"anyOf":[{"$ref":"#/components/schemas/LcInfo"},{"type":"null"}]},"name":{"type":"string"},"type_index":{"type":"integer","format":"uint8","maximum":255,"minimum":0},"uid":{"type":"string"}},"required":["name","d_type","type_index","uid","info"]},"DeviceExtensions":{"description":"Device specific extension settings\n This is used to store specialized settings (extensions) that apply to a specific device.\n More than one of these settings can be applied at a time.","type":"object","properties":{"delay_millis":{"description":"The delay in milliseconds to force between applying settings to this device.\n This is to help with communication issues with some devices that may not handle\n multiple settings applied in quick succession. (The driver does not always handle this)","type":"integer","format":"uint16","maximum":65535,"minimum":0},"direct_access":{"description":"Whether to enable Direct Access for the liquidctl driver,\n which will cause liquidctl to ignore the `HWMon` kernel driver","type":"boolean"}},"required":["direct_access","delay_millis"]},"DeviceInfo":{"description":"Needed Device info per device","type":"object","properties":{"channels":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/ChannelInfo"}},"driver_info":{"$ref":"#/components/schemas/DriverInfo"},"lighting_speeds":{"type":"array","items":{"type":"string"}},"model":{"type":["string","null"]},"profile_max_length":{"type":"integer","format":"uint8","maximum":255,"minimum":0},"profile_min_length":{"type":"integer","format":"uint8","maximum":255,"minimum":0},"temp_max":{"description":"The absolute maximum temp to use for Profiles for this device","type":"integer","format":"uint8","maximum":255,"minimum":0},"temp_min":{"description":"The absolute minimum temp to use for Profiles for this device","type":"integer","format":"uint8","maximum":255,"minimum":0},"temps":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/TempInfo"}},"thinkpad_fan_control":{"description":"When present, then this is a `ThinkPad` device. True or False indicates whether Fan control\n is enabled for the kernel module and changing values is possible","type":["boolean","null"]}},"required":["channels","temps","lighting_speeds","temp_min","temp_max","profile_max_length","profile_min_length","driver_info"]},"DevicePath":{"type":"object","properties":{"device_uid":{"type":"string"}},"required":["device_uid"]},"DeviceStatusDto":{"type":"object","properties":{"d_type":{"$ref":"#/components/schemas/DeviceType"},"status_history":{"description":"Status history wrapped in Arc for O(1) cloning for serialization","type":"array","items":{"$ref":"#/components/schemas/Status"}},"type_index":{"type":"integer","format":"uint8","maximum":255,"minimum":0},"uid":{"type":"string"}},"required":["d_type","type_index","uid","status_history"]},"DeviceType":{"type":"string","enum":["CPU","GPU","Liquidctl","Hwmon","CustomSensors","ServicePlugin"]},"DevicesResponse":{"type":"object","properties":{"devices":{"type":"array","items":{"$ref":"#/components/schemas/DeviceDto"}}},"required":["devices"]},"DriverInfo":{"description":"Device Driver Information","type":"object","properties":{"drv_type":{"$ref":"#/components/schemas/DriverType"},"locations":{"description":"If available various paths used to access the device.\n This can include paths like the kernel device path, hwmon path, HID path, or PCI Bus ID","type":"array","items":{"type":"string"}},"name":{"description":"If available the kernel driver name or liquidctl driver class.","type":["string","null"]},"version":{"description":"If available the driver's version.\n For kernel-based drivers this is the current kernel version.\n For liquidctl-based drivers this is the liquidctl version.\n For Nvidia-based drivers this is the version of the installed nvidia proprietary drivers.","type":["string","null"]}},"required":["drv_type","locations"]},"DriverType":{"description":"The Driver Type, or source of the driver actively being used for this device.","type":"string","enum":["Kernel","Liquidctl","NVML","NvidiaCLI","CoolerControl","External"]},"EnvironmentDto":{"type":"object","properties":{"has_dev_port":{"type":"boolean"},"is_container":{"type":"boolean"}},"required":["is_container","has_dev_port"]},"Function":{"type":"object","properties":{"deviance":{"description":"The temperature deviance threshold in degrees","type":["number","null"],"format":"double"},"duty_maximum":{"description":"The maximum duty change (step size) to apply\n A duty maximum of `0` indicates a fixed step size. Use `duty_minimum` to set the step size.\n Previously `duty_maximum`.","type":"integer","format":"uint8","maximum":255,"minimum":0},"duty_minimum":{"description":"The minimum duty change (step size) to apply\n Previously `duty_minimum`.","type":"integer","format":"uint8","maximum":255,"minimum":0},"f_type":{"description":"The type of this function","allOf":[{"$ref":"#/components/schemas/FunctionType"}]},"name":{"description":"The user given name for this function","type":"string"},"only_downward":{"description":"Whether to apply settings only on the way down","type":["boolean","null"]},"response_delay":{"description":"The response delay in seconds","type":["integer","null"],"format":"uint8","maximum":255,"minimum":0},"sample_window":{"description":"The sample window this function should use, particularly applicable to moving averages","type":["integer","null"],"format":"uint8","maximum":255,"minimum":0},"step_size_max_decreasing":{"description":"The maximum step size to apply when decreasing.\n A value of `0` indicates a fixed step size. Use `step_size_minimum_decreasing` to set the step size.","type":"integer","format":"uint8","maximum":255,"minimum":0},"step_size_min_decreasing":{"description":"The minimum step size to apply when decreasing.\n A value of `0` indicates a symmetric step size. Use `duty_minimum` to set the step size.","type":"integer","format":"uint8","maximum":255,"minimum":0},"threshold_hopping":{"description":"Whether to temporarily bypass thresholds when fan speed remains unchanged for 30+ seconds to meet curve target.","type":"boolean"},"uid":{"description":"The Unique identifier for this function","type":"string"}},"required":["uid","name","f_type","duty_minimum","duty_maximum","step_size_min_decreasing","step_size_max_decreasing","threshold_hopping"]},"FunctionPath":{"type":"object","properties":{"function_uid":{"type":"string"}},"required":["function_uid"]},"FunctionType":{"type":"string","enum":["Identity","Standard","ExponentialMovingAvg"]},"FunctionsDto":{"type":"object","properties":{"functions":{"type":"array","items":{"$ref":"#/components/schemas/Function"}}},"required":["functions"]},"HasUiDto":{"type":"object","properties":{"has_ui":{"type":"boolean"}},"required":["has_ui"]},"HealthCheck":{"type":"object","properties":{"description":{"type":"string"},"current_timestamp":{"type":"string","format":"date-time"},"details":{"$ref":"#/components/schemas/HealthDetails"},"links":{"type":"object","additionalProperties":{"type":"string"}},"status":{"type":"string"},"system":{"$ref":"#/components/schemas/SystemDetails"}},"required":["status","description","current_timestamp","details","system","links"]},"HealthDetails":{"type":"object","properties":{"errors":{"type":"integer","format":"uint","minimum":0},"liquidctl_connected":{"type":"boolean"},"memory_mb":{"type":"number","format":"double"},"pid":{"type":"integer","format":"uint32","minimum":0},"uptime":{"type":"string"},"version":{"type":"string"},"warnings":{"type":"integer","format":"uint","minimum":0}},"required":["uptime","version","pid","memory_mb","warnings","errors","liquidctl_connected"]},"LcInfo":{"description":"Specific Liquidctl device information","type":"object","properties":{"driver_type":{"description":"An Enum representation of the various Liquidctl driver classes","allOf":[{"$ref":"#/components/schemas/BaseDriver"}]},"firmware_version":{"description":"The detected firmware version at initialization","type":["string","null"]},"unknown_asetek":{"description":"An indicator for needed user input to determine actual asetek690lc device","type":"boolean"}},"required":["driver_type","unknown_asetek"]},"LcdCarouselSettings":{"description":"Settings for the LCD Carousel.\n\n This can be used to have a carousel of images (static or gif), of sensor data,\n or a combination of both.","type":"object","properties":{"images_path":{"description":"The absolute path directory location for images for the carousel. All applicable images\n present are processed when the setting is applied.","type":["string","null"]},"interval":{"description":"The interval in seconds (2-900) in which to change images in the carousel.","type":"integer","format":"uint64","minimum":0}},"required":["interval"]},"LcdImageUpdateQuery":{"type":"object","properties":{"log":{"type":["boolean","null"],"default":null}}},"LcdInfo":{"description":"Specific LCD Screen info","type":"object","properties":{"max_image_size_bytes":{"type":"integer","format":"uint32","minimum":0},"screen_height":{"type":"integer","format":"uint32","minimum":0},"screen_width":{"type":"integer","format":"uint32","minimum":0}},"required":["screen_width","screen_height","max_image_size_bytes"]},"LcdMode":{"type":"object","properties":{"brightness":{"type":"boolean"},"colors_max":{"type":"integer","format":"uint8","maximum":255,"minimum":0},"colors_min":{"type":"integer","format":"uint8","maximum":255,"minimum":0},"frontend_name":{"type":"string"},"image":{"type":"boolean"},"name":{"type":"string"},"orientation":{"type":"boolean"},"type_":{"$ref":"#/components/schemas/LcdModeType"}},"required":["name","frontend_name","brightness","orientation","image","colors_min","colors_max","type_"]},"LcdModeName":{"type":"string","enum":["none","liquid","image","temp","carousel"]},"LcdModeType":{"type":"string","enum":["None","Liquidctl","Custom"]},"LcdSettings":{"type":"object","properties":{"brightness":{"description":"The LCD brightness (0-100%)","type":["integer","null"],"format":"uint8","maximum":255,"minimum":0},"carousel":{"anyOf":[{"$ref":"#/components/schemas/LcdCarouselSettings"},{"type":"null"}]},"colors":{"description":"a list of RGB tuple values, eg [(20,20,120), (0,0,255)]","type":"array","items":{"type":"array","items":[{"type":"integer","format":"uint8","maximum":255,"minimum":0},{"type":"integer","format":"uint8","maximum":255,"minimum":0},{"type":"integer","format":"uint8","maximum":255,"minimum":0}],"maxItems":3,"minItems":3}},"image_file_processed":{"description":"The LCD Image processed file path location, where the preprocessed image is located.","type":["string","null"]},"mode":{"description":"The Lcd mode name","allOf":[{"$ref":"#/components/schemas/LcdModeName"}]},"orientation":{"description":"The LCD Image orientation (0,90,180,270)","type":["integer","null"],"format":"uint16","maximum":65535,"minimum":0},"temp_source":{"description":"A temp source for displaying a temperature.","anyOf":[{"$ref":"#/components/schemas/TempSource"},{"type":"null"}]}},"required":["mode","colors"]},"LightingMode":{"type":"object","properties":{"backward_enabled":{"type":"boolean"},"frontend_name":{"type":"string"},"max_colors":{"type":"integer","format":"uint8","maximum":255,"minimum":0},"min_colors":{"type":"integer","format":"uint8","maximum":255,"minimum":0},"name":{"type":"string"},"speed_enabled":{"type":"boolean"},"type_":{"$ref":"#/components/schemas/LightingModeType"}},"required":["name","frontend_name","min_colors","max_colors","speed_enabled","backward_enabled","type_"]},"LightingModeType":{"type":"string","enum":["None","Liquidctl","Custom"]},"LightingSettings":{"type":"object","properties":{"backward":{"description":"run backwards or not","type":["boolean","null"]},"colors":{"description":"a list of RGB tuple values, eg [(20,20,120), (0,0,255)]","type":"array","items":{"type":"array","items":[{"type":"integer","format":"uint8","maximum":255,"minimum":0},{"type":"integer","format":"uint8","maximum":255,"minimum":0},{"type":"integer","format":"uint8","maximum":255,"minimum":0}],"maxItems":3,"minItems":3}},"mode":{"description":"The lighting mode name","type":"string"},"speed":{"description":"The speed to set","type":["string","null"]}},"required":["mode","colors"]},"ModeDto":{"type":"object","properties":{"device_settings":{"type":"array","items":{"type":"array","items":[{"type":"string"},{"type":"array","items":{"$ref":"#/components/schemas/Setting"}}],"maxItems":2,"minItems":2}},"name":{"type":"string"},"uid":{"type":"string"}},"required":["uid","name","device_settings"]},"ModeOrderDto":{"type":"object","properties":{"mode_uids":{"type":"array","items":{"type":"string"}}},"required":["mode_uids"]},"ModePath":{"type":"object","properties":{"mode_uid":{"type":"string"}},"required":["mode_uid"]},"ModesDto":{"type":"object","properties":{"modes":{"type":"array","items":{"$ref":"#/components/schemas/ModeDto"}}},"required":["modes"]},"PluginDto":{"type":"object","properties":{"description":{"type":["string","null"]},"address":{"type":"string"},"id":{"type":"string"},"path":{"type":"string"},"privileged":{"type":"boolean"},"service_type":{"type":"string"},"url":{"type":["string","null"]},"version":{"type":["string","null"]}},"required":["id","service_type","address","privileged","path"]},"PluginPath":{"type":"object","properties":{"plugin_id":{"type":"string"}},"required":["plugin_id"]},"PluginUiPath":{"type":"object","properties":{"file_name":{"type":"string"},"plugin_id":{"type":"string"}},"required":["plugin_id","file_name"]},"PluginsDto":{"type":"object","properties":{"plugins":{"type":"array","items":{"$ref":"#/components/schemas/PluginDto"}}},"required":["plugins"]},"Profile":{"description":"Profile Settings","type":"object","properties":{"function_uid":{"description":"The function uid to apply to this profile","type":"string"},"member_profile_uids":{"description":"The profiles that make up the mix profile","type":"array","items":{"type":"string"}},"mix_function_type":{"description":"The function to mix the members with if this is a Mix Profile","anyOf":[{"$ref":"#/components/schemas/ProfileMixFunctionType"},{"type":"null"}]},"name":{"description":"The User given name for this Profile","type":"string"},"offset_profile":{"description":"The graph offset to apply to the associated member profile\n This can also be used as a static offset when there is only one duty/offset pair.","type":["array","null"],"items":{"type":"array","items":[{"type":"integer","format":"uint8","maximum":255,"minimum":0},{"type":"integer","format":"int8","maximum":127,"minimum":-128}],"maxItems":2,"minItems":2}},"p_type":{"description":"The profile type","allOf":[{"$ref":"#/components/schemas/ProfileType"}]},"speed_fixed":{"description":"The fixed duty speed to set. eg: 20 (%)","type":["integer","null"],"format":"uint8","maximum":255,"minimum":0},"speed_profile":{"description":"The profile temp/duty speeds to set. eg: [(20.0, 50), (25.7, 80)]","type":["array","null"],"items":{"type":"array","items":[{"type":"number","format":"double"},{"type":"integer","format":"uint8","maximum":255,"minimum":0}],"maxItems":2,"minItems":2}},"temp_max":{"description":"The maximum temp for this profile","type":["number","null"],"format":"double"},"temp_min":{"description":"The minimum temp for this profile","type":["number","null"],"format":"double"},"temp_source":{"description":"The associated temperature source","anyOf":[{"$ref":"#/components/schemas/TempSource"},{"type":"null"}]},"uid":{"description":"The Unique Identifier for this Profile","type":"string"}},"required":["uid","p_type","name","function_uid","member_profile_uids"]},"ProfileMixFunctionType":{"type":"string","enum":["Min","Max","Avg","Diff","Sum"]},"ProfilePath":{"type":"object","properties":{"profile_uid":{"type":"string"}},"required":["profile_uid"]},"ProfileType":{"type":"string","enum":["Default","Fixed","Graph","Mix","Overlay"]},"ProfilesDto":{"type":"object","properties":{"profiles":{"type":"array","items":{"$ref":"#/components/schemas/Profile"}}},"required":["profiles"]},"SetPasswdRequest":{"type":"object","properties":{"current_password":{"type":"string"}},"required":["current_password"]},"Setting":{"description":"Setting is used to store applied Settings to a device channel.\n These are the general core settings that apply to a wide range of device and channel types.\n Specialized settings are stored in `DeviceExtensions` and `ChannelExtensions`.\n Only one specific lighting or speed setting is applied to a specific channel at a time.","type":"object","properties":{"channel_name":{"type":"string"},"lcd":{"description":"Settings for LCD screens","anyOf":[{"$ref":"#/components/schemas/LcdSettings"},{"type":"null"}]},"lighting":{"description":"Settings for lighting","anyOf":[{"$ref":"#/components/schemas/LightingSettings"},{"type":"null"}]},"profile_uid":{"description":"The Profile UID that applies to this device channel","type":["string","null"]},"reset_to_default":{"description":"Used to set hwmon & nvidia channels back to their default 'automatic' values.","type":["boolean","null"]},"speed_fixed":{"description":"The fixed duty speed to set. eg: 20 (%)","type":["integer","null"],"format":"uint8","maximum":255,"minimum":0}},"required":["channel_name"]},"SettingManualRequest":{"type":"object","properties":{"speed_fixed":{"type":"integer","format":"uint8","maximum":255,"minimum":0}},"required":["speed_fixed"]},"SettingPWMMode":{"type":"object","properties":{"pwm_mode":{"type":"integer","format":"uint8","maximum":255,"minimum":0}},"required":["pwm_mode"]},"SettingProfileUID":{"type":"object","properties":{"profile_uid":{"type":"string"}},"required":["profile_uid"]},"SettingsResponse":{"type":"object","properties":{"settings":{"type":"array","items":{"$ref":"#/components/schemas/Setting"}}},"required":["settings"]},"SkippedDriverDto":{"type":"object","properties":{"driver":{"type":"string"},"preferred":{"type":"string"},"reason":{"type":"string"}},"required":["driver","reason","preferred"]},"SpeedOptions":{"type":"object","properties":{"extension":{"description":"If present, then this channel has special settings that are applicable.","anyOf":[{"$ref":"#/components/schemas/ChannelExtensionNames"},{"type":"null"}]},"fixed_enabled":{"description":"True if manual fan speed control is supported; if false, speeds are read-only (monitoring only).","type":"boolean"},"max_duty":{"description":"The maximum fan duty for this speed channel","type":"integer","format":"uint8","maximum":255,"minimum":0},"min_duty":{"description":"The minimum fan duty for this speed channel","type":"integer","format":"uint8","maximum":255,"minimum":0}},"required":["min_duty","max_duty","fixed_enabled"]},"Status":{"description":"A Model which contains various applicable device statuses","type":"object","properties":{"channels":{"type":"array","items":{"$ref":"#/components/schemas/ChannelStatus"}},"temps":{"type":"array","items":{"$ref":"#/components/schemas/TempStatus"}},"timestamp":{"type":"string","format":"date-time"}},"required":["timestamp","temps","channels"]},"StatusQuery":{"type":"object","properties":{"all":{"type":["boolean","null"],"default":null}}},"StatusRequest":{"type":"object","properties":{"all":{"type":["boolean","null"]},"since":{"type":["string","null"],"format":"date-time"}}},"StatusResponse":{"type":"object","properties":{"devices":{"type":"array","items":{"$ref":"#/components/schemas/DeviceStatusDto"}}},"required":["devices"]},"SystemDetails":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]},"TempInfo":{"type":"object","properties":{"label":{"type":"string"},"number":{"type":"integer","format":"uint8","maximum":255,"minimum":0}},"required":["label","number"]},"TempSource":{"type":"object","properties":{"device_uid":{"description":"The associated device uid containing current temp values","type":"string"},"temp_name":{"description":"The internal name for this Temperature Source. NOT the `TempInfo` Label.","type":"string"}},"required":["temp_name","device_uid"]},"TempStatus":{"type":"object","properties":{"name":{"type":"string"},"temp":{"type":"number","format":"double"}},"required":["name","temp"]},"ThinkPadFanControlRequest":{"type":"object","properties":{"enable":{"type":"boolean"}},"required":["enable"]},"TokenInfo":{"type":"object","properties":{"created_at":{"type":"string","format":"date-time"},"expires_at":{"type":["string","null"],"format":"date-time"},"id":{"type":"string"},"label":{"type":"string"},"last_used":{"type":["string","null"],"format":"date-time"}},"required":["id","label","created_at"]},"TokenListResponse":{"type":"object","properties":{"tokens":{"type":"array","items":{"$ref":"#/components/schemas/TokenInfo"}}},"required":["tokens"]},"TokenPath":{"type":"object","properties":{"token_id":{"type":"string"}},"required":["token_id"]},"UpdateModeDto":{"type":"object","properties":{"name":{"type":"string"},"uid":{"type":"string"}},"required":["uid","name"]}}},"tags":[{"name":"base","description":"Foundational endpoints for this API"},{"name":"auth","description":"Authentication"},{"name":"device","description":"Device Interaction"},{"name":"status","description":"Device Status"},{"name":"profile","description":"Profiles"},{"name":"function","description":"Functions"},{"name":"custom-sensor","description":"Custom Sensors"},{"name":"mode","description":"Modes"},{"name":"setting","description":"Settings"},{"name":"alert","description":"Alerts"},{"name":"sse","description":"Server Side Events"},{"name":"plugins","description":"Plugins"}]}