Skip to main content

Web Controller API

The Web Controller provides a complete REST API and WebSocket interface for remote control of your Mixlar device from web browsers or mobile apps.

Base URL

Port: Configurable in plugin settings (default: 5000)

Authentication

The Web Controller supports optional password protection.

Session-Based Authentication

When authentication is enabled:
  1. Login Required: All endpoints require valid session
  2. Login Endpoint: POST /api/auth/login
  3. Session Cookie: mixlar_session (HttpOnly)
  4. Session Timeout: Configurable (default: 24 hours)

Login Flow

API Endpoints

Authentication

Check Auth Status

Authentication: Not required Response: 200 OK

Login

Request Body:
Response: 200 OK
Error Response: 401 Unauthorized

Logout

Response: 200 OK

System Status

Get Overall Status

Authentication: Required Response: 200 OK

Sliders

Get All Sliders

Response: 200 OK

Set Slider Value

Path Parameters:
  • index (integer): Slider index (1-4)
Request Body:
Constraints:
  • value: 0-100 (integer)
Response: 200 OK

Get Slider Assignment

Response: 200 OK
Assignment Types:
  • system_default_output - System output volume
  • system_default_input - Microphone volume
  • app - Specific application(s)
  • unassigned - No assignment

Set Slider Assignment

Request Body:
For System Assignments:
Response: 200 OK

Get Available Audio Sessions

Response: 200 OK

Mute Controls

Get All Mute States

Response: 200 OK

Toggle Individual Mute

Path Parameters:
  • index (integer): Mute button index (1-4)
Response: 200 OK

Toggle Master Mute

Response: 200 OK

Master Volume

Get Master Volume

Response: 200 OK

Set Master Volume

Request Body:
Constraints:
  • value: 0-100 (integer)
Response: 200 OK

Macros

Get All Macros

Response: 200 OK

Get Macro Page Info

Response: 200 OK

Change Macro Page

Note: This endpoint returns 403 Forbidden. Use the desktop app or hardware to switch pages. Response: 403 Forbidden

Trigger Macro

Request Body:
Parameters:
  • index (integer): Macro index (0-8)
  • page (integer, optional): Page index (0-3), defaults to current page
Response: 200 OK

Smart Home

Get All Devices

Response: 200 OK

Toggle Device

Request Body:
Response: 200 OK

Set Light Brightness

Request Body:
Constraints:
  • value: 0-100 (integer)
Response: 200 OK

OBS Studio

Get Scenes

Response: 200 OK
Error Response: 400 Bad Request

Switch Scene

Request Body:
Response: 200 OK

Get Sources

Response: 200 OK

Toggle Source Visibility

Request Body:
Response: 200 OK

Audio Profiles

Get All Profiles

Response: 200 OK

Get Current Profile

Response: 200 OK

Load Profile

Request Body:
Response: 200 OK
Error Response: 404 Not Found

WebSocket API

Real-time bidirectional communication for live updates.

Connection

Events (Server → Client)

initial_state

Sent when client connects or requests state.

slider_change

Emitted when any slider value changes.

assignment_change

Emitted when slider assignment changes.

mute_change

Emitted when mute state changes.

volume_change

Emitted when master volume changes.

profile_change

Emitted when audio profile changes.

device_status

Emitted when device connection status changes.

Events (Client → Server)

get_state

Request full state update.

Complete Example

React Application

Vue.js Application

Mobile App (Flutter)


Security

HTTPS Setup

For secure remote access, enable HTTPS with Tailscale certificates:
  1. Install Tailscale
  2. Get certificates: tailscale cert yourhostname.tailnet.ts.net
  3. Place in: main/certs/ folder
  4. Restart plugin
Access via: https://yourhostname.tailnet.ts.net:5000

Authentication

Enable password protection in Web Controller settings:

CORS

CORS is enabled by default for all origins (*). To restrict: Edit web_server.py:

Documentation Version: 1.0 Last Updated: 2025-12-10 Default Port: 5000