View Categories

Miri V410 API V1.0

Contents

Overview & Authentication

Authentication Flow

1. User Login / Obtain AuthToken

2. Request Header Specification

3. Session Expiration & Re-authentication

1. Video & Audio Encoding Module

1.1 Select Video Source

1.2 Get Video Source Status & Information

1.3 WebRTC Encoding Preview

1.4 Get Audio Volume Levels (dB)

1.5 Get Video Encoding Status

1.6 Get Audio & Video Encoding Parameters

1.7 Set Video Encoding Parameters

1.8 Get Supported Video Encoding Resolutions

1.9 Set Audio Encoding Parameters

1.10 Upload OSD Image

1.11 Delete OSD Image

1.12 Get OSD Image List

1.13 Add OSD Overlay

1.14 Delete OSD Overlay

1.15 Modify OSD Overlay

1.16 Set Master OSD Overlay Switch

1.17 Toggle Individual OSD Overlay

1.18 Get OSD Overlay List

1.19 Upload No-Signal Background Image

1.20 Delete No-Signal Background Image

1.21 Get No-Signal Background Image List

1.22 Set Active No-Signal Background Image

1.23 Set Video Cropping

1.24 Get Video Cropping Settings

1.25 Set Rotation, Mirroring, and Flipping

1.26 Get Rotation, Mirroring, and Flipping

2. Streaming Service Module

2.1 Add Streaming Service

2.1.1 SRT Service

2.1.2 NDI®|HX2 Service

2.1.3 NDI®|HX3 Service

2.1.4 RTSP Server Service

2.1.5 HLS Server Service

2.1.6 TS over UDP Service

2.1.7 RTMP Server / Push Service

2.1.8 NDI High Bandwidth (NDI HB) Service

2.1.9 OMT Service

2.2 Delete Streaming Service

2.3 Modify Streaming Service

2.4 Start / Stop Streaming Service

2.5 Get Streaming Service List

3. Decoding Module

3.1 Add Decode Source

3.2 Delete Decode Source

3.3 Modify Decode Source

3.4 Get Decode Source List

3.5 Select Decode Output Source

3.6 Remove / Close Decode Output Source

3.7 Get Real-Time Decoding Status

3.8 Get Output Interface Configuration

3.9 Set Output Interface Configuration

3.10 Get Supported Output Interface Options & Ranges

3.11 Get Output Audio Volume Levels (dB)

3.12 WebRTC Decoding Preview

3.13 Get NDI Network Discovery List

3.14 Get OMT Network Discovery List

4. Recording Module

4.1 Get Recording Configuration

4.2 Get External Storage Device Information

4.3 Set Recording Configuration

4.4 Get Recording Status

4.5 Start Recording

4.6 Stop Recording

4.7 Get Recorded File List from Device

4.8 Eject Storage Device

5. System Module

5.1 Get Advanced System Settings

5.2 Configure ZeroTier VPN

5.3 Configure SNMP Service

5.4 Configure SSDP Service

5.5 Set USB Type-C Operating Mode

5.6 Get Analog Audio Output Routing

5.7 Set Analog Audio Output Routing

5.8 Configure NDI Discovery Server

5.9 Get NDI Discovery Server Configuration

5.10 Reboot Device

5.11 Restore Factory Defaults

5.12 Get LED Status & Configuration

5.13 Set LED Status & Configuration

5.14 Get Real-Time System Performance Status

5.15 Get System Hardware & Firmware Information

6. Network Module

6.1 Get Network Link Configuration

6.2 Configure Network Connection

6.3 Get USB Network Interface Information

6.4 Set USB Network IP Address

6.5 Get Wi-Fi Status

6.6 Enable / Disable Wi-Fi

6.7 Get Scanned Wi-Fi Networks List

6.8 Connect to Wi-Fi Network

6.9 Connect to Hidden Wi-Fi Network

6.10 Disconnect / Forget Wi-Fi Network

7. Scheduled Tasks Module

7.1 Get Scheduled Tasks

7.2 Create Scheduled Task

7.3 Update Scheduled Task

7.4 Enable / Disable Scheduled Task

7.5 Delete Scheduled Task

8. User Management Module

8.1 User Login

8.2 Toggle Two-Factor Authentication (2FA)

8.3 Activate Two-Factor Authentication (2FA)

8.4 Get User Status

Appendix: Error Codes & Status Reference

Overview & Authentication

Authentication Flow

Before executing any API commands, callers must complete the authentication handshake to obtain an AuthToken. All subsequent requests require this AuthToken to be passed in the HTTP request headers.

Token Expiration Policy:

• The AuthToken automatically expires after 30 minutes of inactivity or immediately upon device reboot.

• When expired, requests return an authentication failure, requiring the client to re-login and obtain a fresh token.

1. User Login / Obtain AuthToken

Authenticates administrative credentials and returns an active session AuthToken.

Endpoint: `/system/user/login.json`

Method: `POST`

Request Payload

{

  “username”: “admin”, // Administrator username

  “password”: “admin”  // Administrator password

}

Response Payload

{

  “result”: “ok”,

  “data”: {

    “username”: “admin”,

    “alias”: “admin”,

    “AuthToken”: “71e92e318c23f2c30ca8feb4c207a5d6”

  }

}

2. Request Header Specification

Every authenticated API request must include the app header carrying the username and AuthToken formatted as a serialized JSON string:

app: {“username”:”admin”,”AuthToken”:”71e92e318c23f2c30ca8feb4c207a5d6″}

Ensure this header is present in all subsequent HTTP calls to ensure successful access authorization.

3. Session Expiration & Re-authentication

If the AuthToken is expired, absent, or invalid, the server responds with:

{

  “result”: “auth-failed”,

  “error”: “Not exists token infomation.”

}

1. Video & Audio Encoding Module

The Encoding Module governs video capture source selection, encoding configurations (H.264, H.265), real-time WebRTC preview generation, audio channel routing, OSD text/clock/image overlays, video cropping, and rotation/mirror controls.

1.1 Select Video Source

Assigns an input video source to the specified encoder channel or disables encoding.

Endpoint: `/codec/encode/select_source.json`

Method: `POST`

Request Payload

{

  “encode_id”: 2,

  “source”: “”,

  “url”: “192.168.0.91:5961”,

  “name”: “DESKTOP-85GQQJV (VLC)”

}

Parameter Description

ParameterTypeRequiredDescription
encode_idIntegerYesTarget encoder channel ID: 1 or 2.
sourceStringYesVideo input source type: ndi, omt, usb, hdmi, sdi. An empty string “” disables encoding.
urlStringNoNDI source connection address (host:port). Required when source=”ndi”. (See Section 3.1).
nameStringNoSource stream identifier. Required when source=”ndi” or source=”omt”.

Response Payload

{

  “result”: “ok”

}

1.2 Get Video Source Status & Information

Queries hardware signal status, input resolution, refresh rate, and audio properties for a specific encoder channel.

Endpoint: `/codec/encode/get_source_status.json`

Method: `POST`

Request Payload

{

  “encode_id”: 1

}

Parameter Description

ParameterTypeRequiredDescription
encode_idIntegerYesEncoder channel ID: 1 or 2.

Response Payload

{

  “data”: {

    “name”: “A1-557E (GAME_NDI HX2)”,

    “fps”: 59.94,

    “source”: “ndi”,

    “height”: 1080,

    “url”: “192.168.0.177:5961”,

    “width”: 1920,

    “signal”: 1,

    “sample_rate”: 48000,

    “ip”: “192.168.0.177”,

    “interlaced”: false,

    “resolution”: “1920x1080P 59.94Hz”

  },

  “result”: “ok”

}

Field Description

FieldTypeDescription
sourceStringActive input source: hdmi, sdi, usb, ndi, omt.
sample_rateIntegerSource audio sampling frequency in Hz (e.g., 48000).
widthIntegerInput video frame width in pixels.
heightIntegerInput video frame height in pixels.
fpsFloatInput video frame rate.
signalIntegerSignal lock status: 0: No Signal, 1: Signal Locked, 2: Connecting, 3: Reconnecting, 4: Unsupported Resolution.
interlacedBooleanScan format flag: true for interlaced (e.g., 1080i), false for progressive (1080p).
resolutionStringFormatted signal string (e.g., “1920x1080P 59.94Hz”).
nameStringSource stream name (only present when source is ndi or omt).
ipStringSource IP address (NDI source).
urlStringFull connection URL / address string.

1.3 WebRTC Encoding Preview

Establishes a low-latency WebRTC live preview stream or single frame snapshot for real-time monitoring on a web interface.

Endpoint: `/codec/webrtc/add_webrtc.json`

Method: `POST` / `GET`

Request Payload

{

  “mode”: 0,             // 0: Video stream mode, 1: Snapshot image mode

  “ip”: “192.168.1.1”,   // Client IP address requesting preview

  “encode_id”: 1

}

Parameter Description

ParameterTypeRequiredDescription
modeIntegerYesStream mode: 0: Real-time video preview, 1: Snapshot image mode.
ipStringYesIP address of the client browser / consumer.
encode_idIntegerYesEncoder channel ID: 1 or 2.

Response Payload

{

  “result”: “ok”,

  “data”: {

    “port”: 51545,

    “sdp”: “v=0\r\no=- 1495799811084970 2 IN IP4 192.168.0.176\r\ns=-\r\nt=0 0\r\na=group:BUNDLE video\r\na=ice-lite \r\nm=video 9 UDP/TLS/RTP/SAVPF 126\r\nc=IN IP4 0.0.0.0\r\na=ice-ufrag:uoxv\r\na=ice-pwd:93urglck0zhkz1q4a87clihx\r\na=ice-options:trickle\r\na=fingerprint:sha-256 21:39:6D:25:62:F6:14:A5:28:95:39:DF:7D:F9:DC:D3:13:FA:93:B9:57:54:19:60:62:F9:CF:51:D6:69:DC:D5\r\na=setup:actpass\r\na=mid:video\r\na=sendonly\r\na=rtcp-mux\r\na=rtpmap:126 H264/90000\r\na=fmtp:126 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\r\na=candidate:1 1 udp 12345678 192.168.0.176 51545 typ host\r\na=end-of-candidate\r\n”

  }

}

1.4 Get Audio Volume Levels (dB)

Returns real-time audio volume levels (in decibels) for the active encoder channel.

Endpoint: `/codec/encode/get_encode_real_db.json`

Method: `POST` / `GET`

Request Payload

{

  “encode_id”: 1

}

Response Payload

{

  “result”: “ok”,

  “data”: [

    -50.905269, // Left channel volume in dB

    -50.891619  // Right channel volume in dB

  ]

}

1.5 Get Video Encoding Status

Queries current runtime video and audio encoding telemetry.

Endpoint: `/codec/encode/get_encode_status.json`

Method: `POST` / `GET`

Request Payload

{

  “encode_id”: 1

}

Response Payload

{

  “data”: {

    “fps”: 60,

    “bitrate”: 4307,

    “channels”: 2,

    “source”: “hdmi”,

    “sample_rate”: 48000,

    “codec”: “H.264”,

    “height”: 1080,

    “width”: 1920

  },

  “result”: “ok”

}

Field Description

FieldTypeDescription
widthIntegerEncoding output frame width (pixels).
heightIntegerEncoding output frame height (pixels).
fpsIntegerEncoding output frame rate (fps).
sourceStringSource input interface name (hdmi, sdi, etc.).
sample_rateIntegerAudio sampling frequency in Hz.
channelsIntegerActive encoded audio channels count.
codecStringVideo codec standard: H.264, H.265, SHQ2.
bitrateIntegerReal-time encoding bitrate in Kbps.

1.6 Get Audio & Video Encoding Parameters

Retrieves the complete configuration profiles for video encoding and multi-channel audio processing.

Endpoint: `/codec/encode/get_encode_info.json`

Method: `POST` / `GET`

Request Payload

{

  “encode_id”: 1

}

Response Payload

{

  “data”: {

    “video_setting”: {

      “codec”: “H264”,

      “maxBitrate”: 4096,

      “fps”: 60,

      “width”: 1920,

      “height”: 1080,

      “enable_omt”: 0,

      “enable_ndi_hx3”: 0,

      “profile”: “High”,

      “rc”: “CBR”,

      “gop”: 60,

      “bitrate”: 4096,

      “same_vin”: false

    },

    “audio_setting”: {

      “bitrate”: 128000,

      “channels”: 2,

      “sample_rate”: 48000,

      “source_list”: [

        {

          “channels_map”: [1, 2, 3, 4, 5, 6, 7, 8],

          “enable”: true,

          “channels”: 8,

          “source”: “Encoder Source”,

          “gain”: 0

        },

        {

          “channels_map”: [1, 2, 0, 0, 0, 0, 0, 0],

          “enable”: false,

          “channels”: 2,

          “source”: “Line In”,

          “gain”: 0

        }

      ],

      “use_lfe”: false

    }

  },

  “result”: “ok”

}

Parameter Breakdown

ParameterTypeDescription
video_setting.codecStringVideo compression standard: H265 or H264.
video_setting.widthIntegerFrame width in pixels.
video_setting.heightIntegerFrame height in pixels.
video_setting.fpsIntegerTarget frame rate (fps).
video_setting.profileStringCodec profile: BaseLine, Main, High (H.264 profile is restricted to Main in certain configs).
video_setting.gopIntegerGroup of Pictures (GOP) / Keyframe interval (in frames).
video_setting.same_vinBooleanVideo passthrough: true to match input video dimensions/fps automatically.
video_setting.rcStringRate control algorithm: CBR (Constant Bitrate) or VBR (Variable Bitrate).
video_setting.bitrateIntegerTarget encoding bitrate in Kbps. Allowed range: [1024, 40960].
video_setting.maxBitrateIntegerPeak bitrate limit under VBR mode in Kbps. Allowed range: [1024, 40960].
video_setting.enable_ndi_hx3IntegerNDI®|HX3 mode flag: 1: Enabled, 2: Disabled. (Note: When enabled, bitrate and GOP cannot be modified).
video_setting.enable_omtIntegerNDI HB / OMT mode flag: 1: Enabled, 2: Disabled. (Note: When enabled, only resolution can be modified).
audio_setting.bitrateIntegerAudio bitrate in bps: 32000, 48000, 64000, 96000, 128000, 192000, 256000.
audio_setting.channelsIntegerEncoded audio channel count: [1, 8].
audio_setting.sample_rateIntegerAudio sample rate: 32000, 44100, or 48000 Hz.
audio_setting.use_lfeBooleanLow-Frequency Effects (LFE / subwoofer) enable flag.
audio_setting.source_listArrayAvailable audio source devices list.
source_list[i].sourceStringAudio input source name (e.g., “Encoder Source” for embedded audio, “Line In” for 3.5mm analog audio).
source_list[i].enableBooleanSource activation flag.
source_list[i].channelsIntegerTotal usable channels available on this source.
source_list[i].gainIntegerVolume gain adjustment in dB: [-40, 20].
source_list[i].channels_mapArray8-channel routing matrix. Array index 0..7 denotes the output channel, and the integer value denotes the source channel mapped to it (e.g., channels_map[0]=2 routes source channel 2 into output channel 1).

1.7 Set Video Encoding Parameters

Configures video encoding parameters including resolution, frame rate, rate control, and GOP.

Endpoint: `/codec/encode/video_setting.json`

Method: `POST` / `GET`

Request Payload

{

  “encode_id”: 1,

  “same_vin”: false,

  “width”: 1920,        // Resolution must match one of the presets from Section 1.8

  “height”: 1080,

  “fps”: 30,

  “rc”: “CBR”,

  “profile”: “High”,

  “bitrate”: 2048,      // Unit: kbps

  “maxBitrate”: 10000,  // Unit: kbps (effective when rc=”VBR”)

  “gop”: 60,

  “codec”: “H264”

}

Response Payload

{

  “result”: “ok”

}

1.8 Get Supported Video Encoding Resolutions

Retrieves the list of valid video encoding resolution presets supported by the encoder hardware.

Endpoint: `/codec/encode/get_config_list.json`

Method: `POST` / `GET`

Request Payload

{

  “encode_id”: 1

}

Response Payload

{

  “data”: {

    “resolution”: [

      { “name”: “encode.same_vin” },

      { “fps”: 60, “name”: “3840x2160P 60Hz”, “width”: 3840, “height”: 2160 },

      { “fps”: 50, “name”: “3840x2160P 50Hz”, “width”: 3840, “height”: 2160 },

      { “fps”: 30, “name”: “3840x2160P 30Hz”, “width”: 3840, “height”: 2160 },

      { “fps”: 60, “name”: “2560x1440P 60Hz”, “width”: 2560, “height”: 1440 },

      { “fps”: 50, “name”: “2560x1440P 50Hz”, “width”: 2560, “height”: 1440 },

      { “fps”: 30, “name”: “2560x1440P 30Hz”, “width”: 2560, “height”: 1440 },

      { “fps”: 60, “name”: “1920x1080P 60Hz”, “width”: 1920, “height”: 1080 },

      { “fps”: 50, “name”: “1920x1080P 50Hz”, “width”: 1920, “height”: 1080 },

      { “fps”: 30, “name”: “1920x1080P 30Hz”, “width”: 1920, “height”: 1080 },

      { “fps”: 25, “name”: “1920x1080P 25Hz”, “width”: 1920, “height”: 1080 },

      { “fps”: 24, “name”: “1920x1080P 24Hz”, “width”: 1920, “height”: 1080 },

      { “fps”: 60, “name”: “1280x720P 60Hz”,  “width”: 1280, “height”: 720 },

      { “fps”: 50, “name”: “1280x720P 50Hz”,  “width”: 1280, “height”: 720 },

      { “fps”: 30, “name”: “1280x720P 30Hz”,  “width”: 1280, “height”: 720 }

    ]

  },

  “result”: “ok”

}

Note: The resolution specified in Section 1.7 MUST be chosen strictly from this supported preset list.

1.9 Set Audio Encoding Parameters

Configures audio sample rate, bitrate, channel count, and channel mapping for the encoder.

Endpoint: `/codec/encode/audio_setting.json`

Method: `POST` / `GET`

Request Payload

{

  “encode_id”: 1,

  “bitrate”: 128000,

  “channels”: 4,

  “sample_rate”: 48000,

  “use_lfe”: false,

  “source_list”: [

    {

      “enable”: true,

      “gain”: 0,

      “channels_map”: [1, 2, 3, 4, 5, 6, 7, 8]

    },

    {

      “enable”: false,

      “gain”: 0,

      “channels_map”: [1, 2, 0, 0, 0, 0, 0, 0]

    }

  ]

}

Response Payload

{

  “result”: “ok”

}

1.10 Upload OSD Image

Uploads a custom image file (PNG/JPEG) to device storage for On-Screen Display overlay.

Endpoint: `/codec/img/add_image.json`

Method: `POST` (Multipart / Form-data)

Response Payload

{

  “result”: “ok”

}

1.11 Delete OSD Image

Removes an uploaded OSD image from the device storage.

Endpoint: `/codec/img/del_image.json`

Method: `POST` / `GET`

Request Payload

{

  “id”: 1 // Image ID to delete

}

Response Payload

{

  “result”: “ok”

}

Warning: Deleting an image currently bound to an active OSD layer will automatically remove that OSD overlay layer.

1.12 Get OSD Image List

Lists all uploaded OSD images stored on the device.

Endpoint: `/codec/img/get_images.json`

Method: `POST` / `GET`

Response Payload

{

  “data”: [

    {

      “id”: 1,

      “img_type”: “jpeg”,

      “width”: 132,

      “height”: 132,

      “file_size”: 5011,

      “path”: “/images/osd/1.jpeg”

    },

    {

      “id”: 2,

      “img_type”: “png”,

      “width”: 100,

      “height”: 100,

      “file_size”: 13985,

      “path”: “/images/osd/2.png”

    },

    {

      “id”: 3,

      “img_type”: “png”,

      “width”: 1920,

      “height”: 1080,

      “file_size”: 310784,

      “path”: “/images/osd/3.png”

    }

  ],

  “result”: “ok”

}

1.13 Add OSD Overlay

Creates a new On-Screen Display (OSD) overlay on an encoder channel. Supports timestamps, custom text, and graphic watermarks.

Endpoint: `/codec/encode/add_surface.json`

Method: `POST` / `GET`

Request Payload

{

  “encode_id”: 1,

  “class”: 1,          // 1: Timestamp / Clock, 2: Text, 3: Image

  “position”: 1,       // 0: Custom, 1: Top-Left, 2: Top-Center, 3: Top-Right, 4: Middle-Left, 5: Center, 6: Middle-Right, 7: Bottom-Left, 8: Bottom-Center, 9: Bottom-Right

  “x_offset”: 0,       // X coordinate offset in pixels (valid when position=0)

  “y_offset”: 0,       // Y coordinate offset in pixels (valid when position=0)

  “format”: 0,         // Date/Time format (valid when class=1)

  “text”: “”,          // Custom text string (valid when class=2)

  “font_size”: 20,     // Font size: [12, 72]

  “font_color”: 16711680, // Decimal RGB color (e.g., 0xFF0000 = 16711680 for Red)

  “image_id”: 1        // Image ID from Section 1.12 (valid when class=3)

}

Parameter Description

ParameterTypeRequiredDescription
encode_idIntegerYesTarget channel ID: 1: Game / Channel 1, 2: Camera / Channel 2, 3: Mixed output.
classIntegerYesOSD Element Type: 1: Timestamp / Clock, 2: Text banner, 3: Graphic image.
positionIntegerYesAnchor position: 0: Custom (uses offsets), 1: Top-Left, 2: Top-Center, 3: Top-Right, 4: Middle-Left, 5: Center, 6: Middle-Right, 7: Bottom-Left, 8: Bottom-Center, 9: Bottom-Right.
x_offsetIntegerNoHorizontal offset in pixels.
y_offsetIntegerNoVertical offset in pixels.
formatIntegerNoClock format (when class=1):<br>0: YYYY-MM-DD hh:mm:ss<br>1: MM/DD/YYYY hh:mm:ss<br>2: DD/MM/YYYY hh:mm:ss<br>3: YYYY-MM-DD<br>4: MM/DD/YYYY<br>5: DD/MM/YYYY<br>6: hh:mm:ss<br>7: hh:mm
textStringNoText string content (when class=2).
font_sizeIntegerNoFont size in points: [12, 72].
font_colorIntegerNoColor represented as 24-bit decimal RGB integer (e.g., 0xFF0000 = 16711680).
image_idIntegerNoImage ID from Section 1.12 (when class=3).

Response Payload

{

  “result”: “ok”

}

1.14 Delete OSD Overlay

Deletes an active OSD overlay item by ID.

Endpoint: `/codec/encode/del_surface.json`

Method: `POST` / `GET`

Request Payload

{

  “encode_id”: 1,

  “id”: 1

}

Response Payload

{

  “result”: “ok”

}

1.15 Modify OSD Overlay

Updates an existing OSD overlay layer’s properties and transparency.

Endpoint: `/codec/encode/set_surface.json`

Method: `POST` / `GET`

Request Payload

{

  “encode_id”: 1,

  “id”: 1,

  “class”: 1,

  “position”: 1,

  “x_offset”: 0,

  “y_offset”: 0,

  “format”: 0,

  “text”: “”,

  “font_size”: 20,

  “font_color”: 16711680,

  “image_id”: 1,

  “alpha”: 255          // Transparency level: [0, 255] (255 = completely opaque)

}

Response Payload

{

  “result”: “ok”

}

1.16 Set Master OSD Overlay Switch

Enables or disables all OSD overlays globally for the given encoder channel.

Endpoint: `/codec/encode/set_enable_surface.json`

Method: `POST` / `GET`

Request Payload

{

  “encode_id”: 1,

  “enable”: false

}

Response Payload

{

  “result”: “ok”

}

1.17 Toggle Individual OSD Overlay

Enables or disables a specific OSD overlay layer without altering other layers.

Endpoint: `/codec/encode/enable_surface.json`

Method: `POST` / `GET`

Request Payload

{

  “encode_id”: 1,

  “id”: 1,

  “enable”: false

}

Response Payload

{

  “result”: “ok”

}

1.18 Get OSD Overlay List

Queries all configured OSD overlay items and the master switch state.

Endpoint: `/codec/encode/get_surface_all.json`

Method: `POST` / `GET`

Request Payload

{

  “encode_id”: 1

}

Response Payload

{

  “data”: {

    “enable”: true,

    “surfaces”: [

      {

        “id”: 1,

        “class”: 1,

        “position”: 1,

        “x_offest”: 0,

        “y_offest”: 0,

        “format”: 0,

        “font_size”: 20,

        “font_color”: 16711680,

        “image_id”: 1,

        “alpha”: 255,

        “enable”: true,

        “text”: “abcd”

      }

    ]

  },

  “result”: “ok”

}

1.19 Upload No-Signal Background Image

Uploads a custom fallback background image to display when video input signal is lost.

Endpoint: `/codec/img/add_nosignal_file.json`

Method: `POST` / `GET` (Multipart Form-Data)

Request Payload

{

  “upload”: “binary_image_file”,

  “source”: “hdmi” // Target source interface: “hdmi” or “sdi”

}

Response Payload

{

  “result”: “ok”

}

1.20 Delete No-Signal Background Image

Deletes an uploaded no-signal fallback image.

Endpoint: `/codec/img/del_nosignal_file.json`

Method: `POST` / `GET`

Request Payload

{

  “source”: “hdmi”, // Target interface: “hdmi” or “sdi”

  “id”: 3           // Image ID to delete (IDs 1 and 2 are system defaults and protected)

}

Response Payload

{

  “result”: “ok”

}

Note: System default images (id: 1 and id: 2) are protected and cannot be deleted.

1.21 Get No-Signal Background Image List

Retrieves the list of available no-signal placeholder images for HDMI and SDI interfaces.

Endpoint: `/codec/img/get_nosignal_files.json`

Method: `POST` / `GET`

Response Payload

{

  “data”: {

    “hdmi”: [

      {

        “id”: 1,

        “width”: 1920,

        “height”: 1080,

        “img_type”: “png”,

        “path”: “/images/nosignal/1.png”,

        “no_delete”: true,

        “is_used”: false

      },

      {

        “id”: 2,

        “width”: 1920,

        “height”: 1080,

        “img_type”: “png”,

        “path”: “/images/nosignal/2.png”,

        “no_delete”: true,

        “is_used”: true

      }

    ],

    “sdi”: [

      {

        “id”: 1,

        “width”: 1920,

        “height”: 1080,

        “img_type”: “png”,

        “path”: “/images/nosignal/1.png”,

        “no_delete”: true,

        “is_used”: false

      },

      {

        “id”: 2,

        “width”: 1920,

        “height”: 1080,

        “img_type”: “png”,

        “path”: “/images/nosignal/2.png”,

        “no_delete”: true,

        “is_used”: true

      }

    ]

  },

  “result”: “ok”

}

1.22 Set Active No-Signal Background Image

Selects the active no-signal fallback graphic for HDMI or SDI input.

Endpoint: `/codec/img/set_nosignal_file.json`

Method: `POST` / `GET`

Request Payload

{

  “source”: “sdi”, // “hdmi” or “sdi”

  “id”: 1

}

Response Payload

{

  “result”: “ok”

}

1.23 Set Video Cropping

Configures rectangular region-of-interest cropping on the video input.

Endpoint: `/codec/encode/set_crop.json`

Method: `POST` / `GET`

Request Payload

{

  “encode_id”: 1,

  “crop_x”: 25,

  “crop_y”: 25,

  “crop_w”: 50,

  “crop_h”: 50

}

Parameter Description

ParameterTypeRequiredDescription
encode_idIntegerYesTarget encoder channel ID.
crop_xIntegerYesHorizontal start percentage [0, 100].
crop_yIntegerYesVertical start percentage [0, 100].
crop_wIntegerYesWidth crop percentage. Condition: crop_x + crop_w <= 100.
crop_hIntegerYesHeight crop percentage. Condition: crop_y + crop_h <= 100.

Response Payload

{

  “result”: “ok”

}

1.24 Get Video Cropping Settings

Queries the current video cropping parameters and status.

Endpoint: `/codec/encode/get_crop.json`

Method: `POST` / `GET`

Request Payload

{

  “encode_id”: 1

}

Response Payload

{

  “result”: “ok”,

  “data”: {

    “crop_x”: 25,

    “crop_y”: 25,

    “crop_w”: 50,

    “crop_h”: 50,

    “crop_en”: false

  }

}

1.25 Set Rotation, Mirroring, and Flipping

Configures video orientation transforms (rotation, horizontal mirror, vertical flip).

Endpoint: `/codec/encode/set_rmf.json`

Method: `POST` / `GET`

Request Payload

{

  “encode_id”: 1,

  “rotation”: 1,      // 0: 0°, 1: 90°, 2: 180°, 3: 270°

  “mirror_en”: false, // Horizontal mirror

  “flip_en”: false    // Vertical flip

}

Parameter Description

ParameterTypeRequiredDescription
encode_idIntegerYesTarget encoder channel ID.
rotationIntegerYesClockwise rotation angle: 0: 0°, 1: 90°, 2: 180°, 3: 270°.
mirror_enBooleanYesHorizontal mirror reflection flag (true/false).
flip_enBooleanYesVertical inversion / flip flag (true/false).

Response Payload

{

  “result”: “ok”

}

1.26 Get Rotation, Mirroring, and Flipping

Queries active video orientation transforms.

Endpoint: `/codec/encode/get_rmf.json`

Method: `POST` / `GET`

Request Payload

{

  “encode_id”: 1

}

Response Payload

{

  “result”: “ok”,

  “data”: {

    “rotation”: 0,

    “mirror_en”: false,

    “flip_en”: false

  }

}

2. Streaming Service Module

The Streaming Service Module manages live egress streaming pipelines, supporting SRT, NDI®|HX2, NDI®|HX3, RTSP, HLS, TS over UDP, RTMP, Full NDI (HB), and OMT protocols.

2.1 Add Streaming Service

Instantiates a new output streaming service bound to an encoder channel. The payload varies by protocol.

Endpoint: `/codec/stream/add.json`

Method: `POST` / `GET`

2.1.1 SRT Service

{

  “type”: “srt”,

  “name”: “SRT”,

  “mode”: “Caller”,                     // “Caller”, “Listener”, or “Rendezvous”

  “port”: 1025,                         // Port number

  “latency”: 125,                       // Buffer latency in ms

  “encryption”: “AES-128”,              // “AES-128”, “AES-192”, “AES-256”, or empty

  “streamid”: “123”,                    // Stream ID

  “multiple”: 1,                        // Null packet stuffing multiplier: 1, 1.2, 1.5 (1 = disabled)

  “host”: “192.168.0.11”,               // Destination IP (required for Caller/Rendezvous mode)

  “passphrase”: “saldkfjlsadkjfls”,     // Pre-shared key (min 10 characters when encryption enabled)

  “encode_id”: 1

}

2.1.2 NDI®|HX2 Service

{

  “type”: “ndihx2”,

  “name”: “NDI HX2”,

  “group_name”: “”,                     // NDI Group

  “channel_name”: “NDI HX2”,            // Stream name published over NDI

  “connection”: “multicast”,            // “tcp”, “rudp”, or “multicast”

  “netprefix”: “239.255.0.0”,           // Multicast subnet prefix (when connection=”multicast”)

  “netmask”: “255.255.0.0”,             // Multicast subnet mask (when connection=”multicast”)

  “ttl”: 1,                             // Multicast Time-to-Live

  “encode_id”: 1

}

2.1.3 NDI®|HX3 Service

{

  “type”: “ndihx3”,

  “name”: “NDI HX3”,

  “group_name”: “”,

  “channel_name”: “NDI HX3”,

  “connection”: “multicast”,

  “netprefix”: “239.255.0.0”,

  “netmask”: “255.255.0.0”,

  “ttl”: 1,

  “encode_id”: 1

}

2.1.4 RTSP Server Service

{

  “type”: “rtsp”,

  “name”: “RTSP Server”,

  “port”: 554,                          // RTSP listening port

  “session”: “ch01”,                    // Mount path session name (rtsp://<ip>:<port>/ch01)

  “user”: “”,                           // Optional authentication username

  “pass”: “”,                           // Optional authentication password

  “encode_id”: 1

}

2.1.5 HLS Server Service

{

  “type”: “hls”,

  “name”: “HLS Server”,

  “location”: “encode1”,                // URL path mount name (http://<ip>/hls/encode1.m3u8)

  “max_files”: 6,                       // Circular playlist window size: [5, 8]

  “duration”: 10,                       // Target segment duration in seconds: [1, 15]

  “encode_id”: 1

}

2.1.6 TS over UDP Service

{

  “type”: “udp”,

  “name”: “TS over UDP”,

  “host”: “192.168.0.11”,               // Destination unicast or multicast IP address

  “port”: 1,                            // Destination port

  “multiple”: 1,                        // Null packet insertion multiplier: 1, 1.2, 1.5 (1 = disabled)

  “alignment”: -1,                      // TS packet alignment: -1 (Auto) or 7 (7 TS packets per UDP datagram)

  “encode_id”: 1

}

2.1.7 RTMP Server / Push Service

{

  “type”: “rtmp”,

  “name”: “RTMP Server”,

  “location”: “192.168.0.111”,          // RTMP ingest URL or host

  “stream_key”: “123”,                  // Live stream key

  “user”: “”,                           // Optional authentication username

  “pass”: “”,                           // Optional authentication password

  “encode_id”: 1

}

2.1.8 NDI High Bandwidth (NDI HB) Service

{

  “type”: “ndi”,

  “name”: “NDI HB”,

  “channel_name”: “NDI HB”,

  “connection”: “multicast”,            // “tcp”, “rudp”, or “multicast”

  “netprefix”: “239.255.0.0”,

  “netmask”: “255.255.0.0”,

  “ttl”: 1,

  “encode_id”: 2

}

2.1.9 OMT Service

{

  “type”: “omt”,

  “name”: “OMT”,

  “channel_name”: “OMT”,

  “quality”: 0,                         // Quality setting: 0: Auto, 1: Low, 50: Medium, 100: High

  “encode_id”: 2

}

Response Payload

{

  “result”: “ok”

}

2.2 Delete Streaming Service

Deletes an existing stream output service by its unique UUID.

Endpoint: `/codec/stream/delete.json`

Method: `POST` / `GET`

Request Payload

{

  “encode_id”: 1,

  “index”: “702acb69fc644c58865a440c3e6c31c2”

}

Response Payload

{

  “result”: “ok”

}

2.3 Modify Streaming Service

Modifies parameters of a previously configured streaming service.

Endpoint: `/codec/stream/modify_stream.json`

Method: `POST` / `GET`

Request Payload

{

  “encode_id”: 1,

  “index”: “702acb69fc644c58865a440c3e6c31c2”,

  // Include updated protocol parameters matching Section 2.1

}

Response Payload

{

  “result”: “ok”

}

2.4 Start / Stop Streaming Service

Controls the runtime execution state (enable/disable) of an active streaming service.

Endpoints

Start: `/codec/stream/start_stream.json`

Stop: `/codec/stream/stop_stream.json`

Method: `POST` / `GET`

Request Payload

{

  “encode_id”: 1,

  “index”: “702acb69fc644c58865a440c3e6c31c2”

}

Response Payload

{

  “result”: “ok”

}

2.5 Get Streaming Service List

Queries all configured streaming services and their real-time uptime status.

Endpoint: `/codec/stream/get.json`

Method: `POST` / `GET`

Request Payload

{

  “encode_id”: 1

}

Response Payload

{

  “data”: [

    {

      “id”: “8bf62ee9b79a452b8f16e6e3f02ab8fe”,

      “index”: “8bf62ee9b79a452b8f16e6e3f02ab8fe”,

      “type”: “ndi”,

      “name”: “NDI HB”,

      “channel_name”: “NDI HB”,

      “group_name”: “”,

      “connection”: “multicast”,

      “netprefix”: “239.255.0.0”,

      “netmask”: “255.255.0.0”,

      “ttl”: 1,

      “width”: 1920,

      “height”: 1080,

      “fps”: 30,

      “interlaced”: 0,

      “enable”: false,

      “up_time”: 0,

      “status”: []

    },

    {

      “id”: “702acb69fc644c58865a440c3e6c31c2”,

      “index”: “702acb69fc644c58865a440c3e6c31c2”,

      “type”: “omt”,

      “name”: “OMT”,

      “channel_name”: “OMT”,

      “quality”: 0,

      “discovery”: “”,

      “width”: 1920,

      “height”: 1080,

      “fps”: 60,

      “interlaced”: 0,

      “enable”: false,

      “up_time”: 0,

      “status”: []

    }

  ],

  “result”: “ok”

}

3. Decoding Module

The Decoding Module governs ingress stream pulling and decoding to baseband video outputs (HDMI / SDI), video format conversions, audio routing, and network discovery of NDI/OMT sources.

3.1 Add Decode Source

Registers an incoming network stream source in the device’s decode source pool.

Endpoint: `/codec/source/add.json`

Method: `POST` / `GET`

Source Protocol Examples

NDI Source:

{

  “type”: “ndi”,

  “host”: “ENCODER57”,

  “url”: “192.168.0.57%3A5961”, // URL-encoded host:port

  “name”: “ENCODER57 (ndi)”,

  “group”: “public”,

  “channel”: “ndi”

}

OMT Source:

{

  “type”: “omt”,

  “name”: “PC-202408271729 (vMix – Output 1)”,

  “url”: “”

}

RTSP Source:

{

  “type”: “rtsp”,

  “name”: “RTSP Stream”,

  “url”: “rtsp://192.168.0.57:554/ch01”,

  “transport_protocol”: 7,  // 1: UDP, 2: UDP Multicast, 4: TCP, 7: UDP+TCP+UDP Multicast

  “network_caching”: 200,   // Buffer latency in ms

  “rtsp_contimeout”: 15,    // Connection timeout in seconds

  “rtsp_user”: “admin”,

  “rtsp_pwd”: “password”

}

SRT Source:

{

  “type”: “srt”,

  “name”: “SRT Stream”,

  “url”: “192.168.0.57”,     // Effective in caller/rendezvous mode

  “port”: “1234”,

  “srt_mode”: “caller”,      // “caller”, “listener”, or “rendezvous”

  “srt_streamid”: “abcd”,    // Effective in listener mode

  “srt_passphrase”: “”,

  “srt_keylen”: 0,

  “srt_latency”: 125,

  “ts_latency”: 200,

  “network_caching”: 200

}

RTMP Source:

{

  “type”: “rtmp”,

  “name”: “RTMP Pull”,

  “url”: “rtmp://192.168.0.57/live”,

  “rtmp_stream_key”: “stream1”,

  “rtmp_user”: “user”,

  “rtmp_pwd”: “pwd”,

  “contimeout”: 15,          // Timeout in seconds (default 10)

  “network_caching”: 200

}

HLS Source:

{

  “type”: “hls”,

  “name”: “HLS Stream”,

  “url”: “http://192.168.0.57/live/stream.m3u8”,

  “islive”: true,

  “timeout”: 15,

  “user_id”: “user”,

  “user_pwd”: “pwd”,

  “network_caching”: 200

}

TS over UDP Source:

{

  “type”: “udp”,

  “name”: “UDP Stream”,

  “url”: “udp://192.168.0.57:1234”,

  “ts_latency”: 200,

  “network_caching”: 200,

  “mtu”: 0                   // Default 0

}

Response Payload

{

  “result”: “ok”

}

3.2 Delete Decode Source

Removes a registered decode source from the pool by UUID index.

Endpoint: `/codec/source/del.json`

Method: `POST` / `GET`

Request Payload

{

  “index”: “be5018b6abf448aeb8f83716a59c42ac”

}

Response Payload

{

  “result”: “ok”

}

3.3 Modify Decode Source

Updates parameters of an existing decode source item.

Endpoint: `/codec/source/modify.json`

Method: `POST` / `GET`

Request Payload

{

  “index”: “be5018b6abf448aeb8f83716a59c42ac”,

  “type”: “rtmp”,

  “name”: “Updated RTMP”,

  “url”: “rtmp://192.168.0.57”,

  “network_caching”: 200,

  “contimeout”: 15,

  “rtmp_user”: “bbb”,

  “rtmp_pwd”: “bbb”,

  “rtmp_stream_key”: “bbb”

}

Note: Parameters match Section 3.1 with the addition of the target index field. NDI and OMT sources cannot be edited once created.

Response Payload

{

  “result”: “ok”

}

3.4 Get Decode Source List

Queries all registered decode sources and their connectivity status.

Endpoint: `/codec/source/get.json`

Method: `POST` / `GET`

Response Payload

{

  “data”: [

    {

      “index”: “9513222ef9664c0caeec416f2ce13ba1”,

      “status”: {

        “online”: false

      },

      “prop”: {

        “index”: “9513222ef9664c0caeec416f2ce13ba1”,

        “name”: “123”,

        “type”: “rtsp”,

        “url”: “rtsp://192.168.0.57:554/ch01”,

        “transport_protocol”: 2,

        “network_caching”: 200,

        “rtsp_latency”: 2000,

        “rtsp_contimeout”: 15,

        “rtsp_user”: “”,

        “rtsp_pwd”: “”

      }

    },

    {

      “index”: “20be53d8240647bbbbfb11c70d85a98d”,

      “status”: {

        “online”: false

      },

      “prop”: {

        “index”: “20be53d8240647bbbbfb11c70d85a98d”,

        “name”: “ENCODER57 (ndi)”,

        “type”: “ndi”,

        “host”: “ENCODER57”,

        “channel”: “ndi”,

        “group”: “public”,

        “url”: “192.168.0.57:5961”,

        “network_caching”: 0,

        “preview_mode”: 0

      }

    }

  ],

  “result”: “ok”

}

3.5 Select Decode Output Source

Directs a configured decode stream source to physical baseband output (HDMI or SDI).

Endpoint: `/codec/output/select_source.json`

Method: `POST` / `GET`

Request Payload

{

  “type”: “hdmi”,                                // Physical output: “hdmi” or “sdi”

  “index”: “9513222ef9664c0caeec416f2ce13ba1”  // UUID from Section 3.4

}

Response Payload

{

  “result”: “ok”

}

3.6 Remove / Close Decode Output Source

Disconnects the active decode source from the specified physical output port.

Endpoint: `/codec/output/remove_source.json`

Method: `POST` / `GET`

Request Payload

{

  “type”: “hdmi” // “hdmi” or “sdi”

}

Response Payload

{

  “result”: “ok”

}

3.7 Get Real-Time Decoding Status

Retrieves real-time decoding statistics, resolution, bitrate, and health telemetry for HDMI and SDI outputs.

Endpoint: `/codec/output/get_status.json`

Method: `POST` / `GET`

Response Payload

{

  “result”: “ok”,

  “data”: {

    “hdmi”: {

      “status”: {

        “online”: “connected”,

        “resolution”: “1920x1080P 60Hz”,

        “width”: 1920,

        “height”: 1080,

        “fps”: 60,

        “interlaced”: false,

        “video_codec”: “H264”,

        “video_bits”: 7766,

        “audio_codec”: “AAC”,

        “audio_bits”: 129,

        “sample_rate”: 48000,

        “channels”: 2,

        “no_samples”: 1024,

        “reserved”: 0

      },

      “prop”: {

        “index”: 2,

        “name”: “rtsp”,

        “type”: “rtsp”,

        “url”: “rtsp://192.168.0.57:554/ch01”,

        “network_caching”: 200,

        “rtsp_latency”: 2000,

        “rtsp_contimeout”: 15,

        “transport_protocol”: 7,

        “rtsp_user”: “a”,

        “rtsp_pwd”: “b”

      }

    },

    “sdi”: {

      “status”: {

        “online”: “reconnect”,

        “resolution”: “0x0P 0Hz”,

        “width”: 0,

        “height”: 0,

        “fps”: 0,

        “video_codec”: “”,

        “video_bits”: 0,

        “audio_codec”: “”,

        “audio_bits”: 0,

        “sample_rate”: 0,

        “channels”: 0

      },

      “prop”: {

        “index”: 12,

        “name”: “1111”,

        “type”: “hls”,

        “url”: “2223”,

        “islive”: true,

        “retries”: 3,

        “timeout”: 15,

        “network_caching”: 200,

        “user_id”: “”,

        “user_pwd”: “”,

        “user_agent”: “”,

        “proxy”: “”,

        “proxy_id”: “”,

        “proxy_pwd”: “”

      }

    }

  }

}

3.8 Get Output Interface Configuration

Queries hardware display interface parameters for HDMI and SDI video ports.

Endpoint: `/codec/output/get_output_cfg.json`

Method: `POST` / `GET`

Response Payload

{

  “data”: {

    “hdmi”: {

      “enable”: true,

      “intf”: “HDMI”,

      “sync”: 10,                             // Resolution preset value ID (see Section 3.10)

      “format”: 4,                           // Color Space value ID (see Section 3.10)

      “range”: 0,                            // RGB Range: 0: Auto, 1: LIMITED, 2: FULL

      “sample_rate”: 48000,                  // Audio sample rate

      “channels”: 2,                         // Audio channels count

      “channels_map”: [1, 2, 3, 4, 5, 6, 7, 8],

      “gain”: 0,                             // Volume gain [-40, 20] dB

      “bind_uvc”: false                      // Enable USB video output bridge

    },

    “sdi”: {

      “enable”: true,

      “intf”: “LCD”,

      “sync”: 10,

      “format”: 2,

      “range”: 0,

      “sample_rate”: 48000,

      “channels”: 2,

      “channels_map”: [1, 2, 3, 4, 5, 6, 7, 8],

      “gain”: 0,

      “bind_uvc”: false

    }

  },

  “result”: “ok”

}

Field Description

FieldTypeDescription
enableBooleanPort output enable flag (true/false).
syncIntegerResolution format preset ID. Values correspond to sync items in Section 3.10.
formatIntegerColor space format ID. Values correspond to format items in Section 3.10.
rangeIntegerColor quantization range: 0: Auto, 1: Limited (16-235), 2: Full (0-255).
sample_rateIntegerAudio sampling frequency in Hz (see Section 3.10).
channelsIntegerAudio channels count.
channels_mapArray8-channel audio routing map.
gainIntegerAudio volume gain adjustment in dB [-40, 20].
bind_uvcBooleanWhether to bridge decoded stream to USB UVC output.

3.9 Set Output Interface Configuration

Sets display output resolution, color space, audio routing, and UVC bridging for HDMI/SDI.

Endpoint: `/codec/output/set_output_cfg.json`

Method: `POST` / `GET`

Request Payload

{

  “type”: “hdmi”,                             // “hdmi” or “sdi”

  “enable”: true,

  “sync”: 10,                                 // Resolution ID from Section 3.10

  “format”: 2,                                // Color space ID from Section 3.10

  “range”: 0,                                 // 0: Auto, 1: Limited, 2: Full

  “sample_rate”: 48000,

  “channels”: 2,

  “channels_map”: [1, 2, 3, 4, 5, 6, 7, 8],

  “gain”: 0,

  “bind_uvc”: false

}

Response Payload

{

  “result”: “ok”

}

3.10 Get Supported Output Interface Options & Ranges

Queries all permissible values for color space (format), resolution (sync), RGB quantization range (range), and audio sampling rates (sample_rate) supported by HDMI/SDI.

Endpoint: `/codec/output/get_config_list.json`

Method: `POST` / `GET`

Request Payload

{

  “type”: “hdmi” // “hdmi” or “sdi”

}

Response Payload

{

  “data”: {

    “format”: [

      { “value”: 4, “name”: “AUTO” },

      { “value”: 0, “name”: “RGB” },

      { “value”: 1, “name”: “YUV444” },

      { “value”: 2, “name”: “YUV422” },

      { “value”: 3, “name”: “YUV420” }

    ],

    “sync”: [

      { “value”: 10, “name”: “1920x1080P 60Hz”,    “width”: 1920, “height”: 1080, “frameRate”: 60,    “interlace”: false, “hd”: true, “sd”: true },

      { “value”: 47, “name”: “1920x1080P 59.94Hz”, “width”: 1920, “height”: 1080, “frameRate”: 59.94, “interlace”: false, “hd”: true, “sd”: true },

      { “value”: 9,  “name”: “1920x1080P 50Hz”,    “width”: 1920, “height”: 1080, “frameRate”: 50,    “interlace”: false, “hd”: true, “sd”: true },

      { “value”: 4,  “name”: “1920x1080P 30Hz”,    “width”: 1920, “height”: 1080, “frameRate”: 30,    “interlace”: false, “hd”: true, “sd”: true },

      { “value”: 48, “name”: “1920x1080P 29.97Hz”, “width”: 1920, “height”: 1080, “frameRate”: 29.97, “interlace”: false, “hd”: true, “sd”: true },

      { “value”: 3,  “name”: “1920x1080P 25Hz”,    “width”: 1920, “height”: 1080, “frameRate”: 25,    “interlace”: false, “hd”: true, “sd”: true },

      { “value”: 49, “name”: “1920x1080P 23.98Hz”, “width”: 1920, “height”: 1080, “frameRate”: 23.98, “interlace”: false, “hd”: true, “sd”: true },

      { “value”: 2,  “name”: “1920x1080P 24Hz”,    “width”: 1920, “height”: 1080, “frameRate”: 24,    “interlace”: false, “hd”: true, “sd”: true },

      { “value”: 8,  “name”: “1920x1080I 60Hz”,    “width”: 1920, “height”: 1080, “frameRate”: 60,    “interlace”: true,  “hd”: true, “sd”: true },

      { “value”: 50, “name”: “1920x1080I 59.94Hz”, “width”: 1920, “height”: 1080, “frameRate”: 59.94, “interlace”: true,  “hd”: true, “sd”: true },

      { “value”: 7,  “name”: “1920x1080I 50Hz”,    “width”: 1920, “height”: 1080, “frameRate”: 50,    “interlace”: true,  “hd”: true, “sd”: true },

      { “value”: 5,  “name”: “1280x720P 50Hz”,     “width”: 1280, “height”: 720,  “frameRate”: 50,    “interlace”: false, “hd”: true, “sd”: true },

      { “value”: 51, “name”: “1280x720P 59.94Hz”,  “width”: 1280, “height”: 720,  “frameRate”: 59.94, “interlace”: false, “hd”: true, “sd”: true },

      { “value”: 6,  “name”: “1280x720P 60Hz”,     “width”: 1280, “height”: 720,  “frameRate”: 60,    “interlace”: false, “hd”: true, “sd”: true }

    ],

    “range”: [

      { “value”: 0, “name”: “AUTO” },

      { “value”: 1, “name”: “LIMITED” },

      { “value”: 2, “name”: “FULL” }

    ],

    “sample_rate”: [

      { “value”: 32000, “name”: “32kHz” },

      { “value”: 44100, “name”: “44.1kHz” },

      { “value”: 48000, “name”: “48kHz” },

      { “value”: 96000, “name”: “96kHz” },

      { “value”: 0,     “name”: “Disable” }

    ]

  },

  “result”: “ok”

}

3.11 Get Output Audio Volume Levels (dB)

Reads output audio volume levels in decibels for HDMI or SDI ports.

Endpoint: `/codec/output/get_output_real_db.json`

Method: `POST` / `GET`

Request Payload

{

  “type”: “hdmi” // “hdmi” or “sdi”

}

Response Payload

{

  “result”: “ok”,

  “data”: [

    -24.039293, // Left channel output dB

    -24.049520  // Right channel output dB

  ]

}

3.12 WebRTC Decoding Preview

Initiates low-latency WebRTC video stream monitoring of the current decoder output.

Endpoint: `/codec/webrtc/decode_preview.json`

Method: `POST` / `GET`

Request Payload

{

  “mode”: 0,           // 0: Video stream mode, 1: Snapshot image mode

  “ip”: “192.168.1.1”, // Client IP address requesting preview

  “type”: “hdmi”       // “hdmi” or “sdi”

}

Response Payload

{

  “result”: “ok”,

  “data”: {

    “port”: 51545,

    “sdp”: “v=0\r\no=- 1495799811084970 2 IN IP4 192.168.0.176\r\ns=-\r\nt=0 0\r\na=group:BUNDLE video\r\na=ice-lite \r\nm=video 9 UDP/TLS/RTP/SAVPF 126\r\nc=IN IP4 0.0.0.0\r\na=ice-ufrag:uoxv\r\na=ice-pwd:93urglck0zhkz1q4a87clihx\r\na=ice-options:trickle\r\na=fingerprint:sha-256 21:39:6D:25:62:F6:14:A5:28:95:39:DF:7D:F9:DC:D3:13:FA:93:B9:57:54:19:60:62:F9:CF:51:D6:69:DC:D5\r\na=setup:actpass\r\na=mid:video\r\na=sendonly\r\na=rtcp-mux\r\na=rtpmap:126 H264/90000\r\na=fmtp:126 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\r\na=candidate:1 1 udp 12345678 192.168.0.176 51545 typ host\r\na=end-of-candidate\r\n”

  }

}

3.13 Get NDI Network Discovery List

Discovers and lists all NDI sources available on the local subnet (mDNS / Discovery Server).

Endpoint: `/codec/discovery/get_result.json`

Method: `POST` / `GET`

Response Payload

{

  “result”: “ok”,

  “data”: [

    {

      “device_name”: “192168000231”,

      “channel_name”: “12”,

      “name”: “192168000231 (12)”,

      “url”: “192.168.0.226:5961”,

      “group”: “public”

    },

    {

      “device_name”: “192168000231”,

      “channel_name”: “22222a”,

      “name”: “192168000231 (22222a)”,

      “url”: “192.168.0.226:5963”,

      “group”: “public”

    }

  ]

}

3.14 Get OMT Network Discovery List

Discovers and lists all available OMT streaming sources across the local network.

Endpoint: `/codec/discovery/get_omt_result.json`

Method: `POST` / `GET`

Response Payload

{

  “result”: “ok”,

  “data”: [

    {

      “device_name”: “DESKTOP-JK3MJJQ”,

      “channel_name”: “vMix – Output 1”,

      “name”: “DESKTOP-JK3MJJQ (vMix – Output 1)”,

      “url”: “”,

      “group”: “”

    },

    {

      “device_name”: “PC-202408271729”,

      “channel_name”: “OBS Outputzhuji”,

      “name”: “PC-202408271729 (OBS Outputzhuji)”,

      “url”: “”,

      “group”: “”

    }

  ]

}

4. Recording Module

The Recording Module manages local recording of encoded video/audio streams to attached USB storage drives or SD cards, supporting configurable file splitting, recording tactics, and storage file exploration.

4.1 Get Recording Configuration

Queries current recording configuration profiles for an encoder channel.

Endpoint: `/record/get_config.json`

Method: `POST` / `GET`

Request Payload

{

  “id”: 1 // 1: encode1, 2: encode2

}

Response Payload

{

  “result”: “ok”,

  “data”: {

    “id”: 1,

    “enable”: false,

    “disk_id”: “/dev/sda1”,

    “dir”: “RECORDING”,

    “prefix”: “REC”,

    “format”: “ts”,

    “split”: “time”,

    “max_time”: 0,

    “max_size”: 102400,

    “max_files”: 0,

    “tactic”: “loop”

  }

}

Field Description

FieldTypeDescription
idIntegerRecording task ID (1: encode1, 2: encode2).
dirStringTarget storage directory name.
prefixStringRecorded file name prefix.
disk_idStringTarget block device path (e.g., /dev/sda1).
formatStringContainer format: ts, mp4, mov.
splitStringSegmentation mode: time (by duration).
max_timeIntegerSegment duration in seconds (0 = no limit, effective when split=”time”).
max_sizeIntegerSegment file size in KB (effective when split=”size”).
max_filesIntegerMaximum file count retention per session (0 = unlimited).
tacticStringFull disk policy: loop (overwrite oldest file) or stop (stop recording when full).
enableBooleanRecording running state.

4.2 Get External Storage Device Information

Detects and lists attached external storage devices (USB drives, SD cards) along with filesystem type and space statistics.

Endpoint: `/record/get_all_devices.json`

Method: `POST` / `GET`

Response Payload

{

  “result”: “ok”,

  “data”: [

    {

      “device”: “/dev/sda1”,

      “path”: “/mnt/udisk”,

      “label”: “nhp usb”,

      “filesystem”: “ntfs”,

      “total_size”: 29431804,

      “use_size”: 2571928,

      “percentage”: 9,

      “speed”: “–MB/s”,

      “remaining_recording_time”: 26230

    },

    {

      “device”: “/dev/mmcblk1p1”,

      “path”: “/mnt/sdcard”,

      “label”: “Removable Disk”,

      “filesystem”: “exfat”,

      “total_size”: 249970688,

      “use_size”: 4633856,

      “percentage”: 2,

      “speed”: “–MB/s”,

      “remaining_recording_time”: -1

    }

  ]

}

Field Description

FieldTypeDescription
deviceStringLinux block device node (e.g., /dev/sda1).
pathStringSystem mount point directory (e.g., /mnt/udisk).
labelStringDisk volume label name.
filesystemStringFilesystem type (ntfs, exfat, ext4, fat32).
total_sizeIntegerTotal capacity in KB.
use_sizeIntegerUsed space in KB.
percentageIntegerUtilization percentage (0-100%).
speedStringDisk write throughput benchmark.
remaining_recording_timeIntegerEstimated remaining recording duration in seconds (-1 indicates unselected device).

4.3 Set Recording Configuration

Configures recording parameters, target disk partition, and file split settings.

Endpoint: `/record/set_config.json`

Method: `POST` / `GET`

Request Payload

{

  “id”: 1,

  “disk_id”: “/dev/sda1”, // Device node from Section 4.2

  “format”: “ts”,         // “ts”, “mp4”, or “mov”

  “prefix”: “REC”,

  “dir”: “RECORDING”,

  “max_time”: 600,        // Segment length in seconds (0 = unlimited)

  “tactic”: “loop”        // “loop” or “stop”

}

Response Payload

{

  “result”: “ok”

}

4.4 Get Recording Status

Queries active recording elapsed time and status.

Endpoint: `/record/get_status.json`

Method: `POST` / `GET`

Request Payload

{

  “id”: 1

}

Response Payload

{

  “result”: “ok”,

  “data”: {

    “started”: true,

    “start_time”: 3202,

    “now_time”: 3232

  }

}

Calculation: Total recorded duration = now_time – start_time (in seconds).

4.5 Start Recording

Triggers recording initiation for an encoder channel.

Endpoint: `/record/start_record.json`

Method: `POST` / `GET`

Request Payload

{

  “id”: 1

}

Response Payload

{

  “result”: “ok”

}

4.6 Stop Recording

Terminates recording on the specified channel and finalizes files.

Endpoint: `/record/stop_record.json`

Method: `POST` / `GET`

Request Payload

{

  “id”: 1

}

Response Payload

{

  “result”: “ok”

}

4.7 Get Recorded File List from Device

Retrieves a paginated list of recorded media files on a storage device.

Endpoint: `/record/disk/get_file_from_device.json`

Method: `POST` / `GET`

Request Payload

{

  “device”: “/dev/sda1”,

  “page”: 1,

  “limit”: 2000

}

Response Payload

{

  “result”: “ok”,

  “data”: {

    “total”: 8,

    “page”: 1,

    “limit”: 2000,

    “list”: [

      {

        “filename”: “REC-20260916040857.ts”,

        “fpath”: “/mnt/udisk/RECORDING/RECORDING/REC-20260916040857.ts”,

        “ftype”: “file”,

        “size”: 0,

        “opening”: true, // File is actively being written by recorder

        “start_time”: “2026-09-16 04:08:57”,

        “stop_time”: “–“,

        “ctime”: 1789546137,

        “mtime”: 1789546137,

        “atime”: 1789546137,

        “block”: 0,

        “ino”: 89

      },

      {

        “filename”: “REC-20260916040541.ts”,

        “fpath”: “/mnt/udisk/RECORDING/RECORDING/REC-20260916040541.ts”,

        “ftype”: “file”,

        “size”: 86116,

        “opening”: false,

        “start_time”: “2026-09-16 04:05:41”,

        “stop_time”: “2026-09-16 04:08:28”,

        “ctime”: 1789546107,

        “mtime”: 1789546107,

        “atime”: 1789545941,

        “block”: 172232,

        “ino”: 86

      }

    ]

  }

}

4.8 Eject Storage Device

Safely unmounts and prepares an external storage device for physical removal.

Endpoint: `/record/disk/eject_device.json`

Method: `POST` / `GET`

Request Payload

{

  “device”: “/dev/sda1”

}

Response Payload

{

  “result”: “ok”

}

5. System Module

The System Module controls hardware telemetry, LED indicators, reboot/reset routines, analog audio routing, Type-C interface modes, ZeroTier VPN, SNMP, and SSDP discovery.

5.1 Get Advanced System Settings

Queries configuration status for SSDP, ZeroTier VPN, SNMP, and Type-C USB mode.

Endpoint: `/system/get_advanced_info.json`

Method: `POST` / `GET`

Response Payload

{

  “result”: “ok”,

  “data”: {

    “ssdp”: {

      “enable”: true,

      “interface”: “eth0”

    },

    “zerotier”: {

      “enable”: false,

      “networkid”: “”

    },

    “typec_mode”: “rndis”,

    “snmp”: {

      “enable”: false,

      “port”: 161,

      “password”: “public”

    }

  }

}

5.2 Configure ZeroTier VPN

Enables or disables ZeroTier virtual LAN tunnel connection and sets the Network ID.

Endpoint: `/system/zerotier/update_zerotier.json`

Method: `POST` / `GET`

Request Payload

{

  “enable”: false,

  “networkid”: “68bea79acfc41294”

}

Response Payload

{

  “result”: “ok”

}

5.3 Configure SNMP Service

Configures the SNMP monitoring daemon port and community password.

Endpoint: `/system/snmp/update_snmp.json`

Method: `POST` / `GET`

Request Payload

{

  “enable”: false,

  “port”: 161,

  “password”: “public”

}

Response Payload

{

  “result”: “ok”

}

5.4 Configure SSDP Service

Enables or disables Simple Service Discovery Protocol (SSDP) and specifies binding interface.

Endpoint: `/system/ssdp/update_ssdp.json`

Method: `POST` / `GET`

Request Payload

{

  “enable”: false,

  “interface”: “eth0” // “eth0” or “eth1”

}

Response Payload

{

  “result”: “ok”

}

5.5 Set USB Type-C Operating Mode

Switches the USB Type-C port between RNDIS (Ethernet over USB) and UVC (USB Video Class webcam).

Endpoint: `/system/set_typec_mode.json`

Method: `POST` / `GET`

Request Payload

{

  “usbc_mode”: “rndis” // “rndis” (USB Network) or “uvc” (USB Webcam)

}

Response Payload

{

  “result”: “ok”

}

Important: Changing the Type-C operating mode requires a device reboot to take effect.

5.6 Get Analog Audio Output Routing

Reads current routing settings for 3.5mm Line Out and Headphone audio jacks.

Endpoint: `/codec/get_analog.json`

Method: `POST` / `GET`

Response Payload

{

  “result”: “ok”,

  “data”: {

    “lineout”: 0,

    “headphone”: 0

  }

}

5.7 Set Analog Audio Output Routing

Routes audio sources to the Line Out and Headphone physical jacks.

Endpoint: `/codec/set_analog.json`

Method: `POST` / `GET`

Request Payload

{

  “lineout”: 1,

  “headphone”: 0

}

Value Reference Table

ModeValueLine Out / Headphone Source
Encoding Mode0None / Mute
 1Line In
 2Encode Channel 1 Audio
 3Encode Channel 2 Audio
Decoding Mode0None / Mute
 1Line In
 2HDMI Audio
 3SDI Audio

Response Payload

{

  “result”: “ok”

}

5.8 Configure NDI Discovery Server

Sets the IP address of an external centralized NDI Discovery Server.

Endpoint: `/codec/discovery/set_discovery_server.json`

Method: `POST` / `GET`

Request Payload

{

  “enable_server”: true,

  “server”: “192.168.0.91”

}

Response Payload

{

  “result”: “ok”

}

5.9 Get NDI Discovery Server Configuration

Queries the configured NDI Discovery Server settings.

Endpoint: `/codec/discovery/get_discovery_server.json`

Method: `POST` / `GET`

Response Payload

{

  “result”: “ok”,

  “data”: {

    “enable_server”: true,

    “server”: “192.168.0.91”

  }

}

5.10 Reboot Device

Executes an immediate operating system reboot on the hardware.

Endpoint: `/system/reboot.json`

Method: `GET`

Response Payload

{

  “result”: “ok”

}

5.11 Restore Factory Defaults

Resets the device configuration to factory default state and reboots.

Endpoint: `/system/refactory.json`

Method: `GET`

Response Payload

{

  “result”: “ok”

}

5.12 Get LED Status & Configuration

Reads physical LED lamp indicators (Tally, Recording, Streaming, Find Device) and VU volume meter status.

Endpoint: `/led/get_leds.json`

Method: `GET`

Response Payload

{

  “result”: “ok”,

  “data”: {

    “enable”: true,

    “tally”: {

      “program”: 1,

      “preview”: 2,

      “brightness”: 100

    },

    “record”: {

      “enable”: true,

      “color”: 1,

      “brightness”: 100,

      “encode_id”: 1

    },

    “stream”: {

      “enable”: true,

      “color”: 2,

      “brightness”: 100,

      “encode_id”: 1

    },

    “find_device”: {

      “enable”: false,

      “color”: 1,

      “brightness”: 100,

      “mode”: 1,

      “duration”: 5

    },

    “vu”: {

      “enable”: true,

      “encode_id”: 1,

      “decode_id”: 1,

      “id”: 1

    }

  }

}

Parameter Reference

ParameterDescription
enableGlobal LED hardware enable switch.
*.colorColor code: 0: None (Off), 1: Red, 2: Green, 3: Blue, 4: White.
*.brightnessLED brightness percentage: [0, 100].
find_device.modeFlashing animation: 1: Flashlight, 2: Attention strobe, 3: Pulsing glow.
find_device.durationAuto-shutoff timer in minutes (0 = run indefinitely).
vu.idIn Encoding mode: 1: encode1, 2: encode2. In Decoding mode: 1: hdmi, 2: sdi.
vu.enableAudio LED volume meter bar graph toggle.

5.13 Set LED Status & Configuration

Sets hardware LED brightness, color, and operating behaviors.

Endpoint: `/led/set_leds.json`

Method: `POST`

Request Payload

{

  “enable”: false,

  “find_device”: {

    “enable”: true,

    “color”: 2,

    “mode”: 1

  },

  “tally”: {

    “program”: 1,

    “preview”: 1,

    “brightness”: 75

  },

  “record”: {

    “enable”: true,

    “color”: 2,

    “brightness”: 58,

    “encode_id”: 1

  },

  “stream”: {

    “enable”: true,

    “color”: 3,

    “brightness”: 74,

    “encode_id”: 1

  },

  “vu”: {

    “enable”: true,

    “id”: 1

  }

}

Response Payload

{

  “result”: “ok”

}

5.14 Get Real-Time System Performance Status

Reads runtime hardware load: uptime, total memory, CPU utilization, and memory usage.

Endpoint: `/system/get_system_state.json`

Method: `GET`

Response Payload

{

  “result”: “ok”,

  “data”: {

    “ptime”: 7186,       // System uptime in seconds

    “memTotal”: 1956,    // Total system RAM in MB

    “cpu”: 8,            // CPU load percentage (0-100%)

    “mem”: 32            // RAM utilization percentage (0-100%)

  }

}

5.15 Get System Hardware & Firmware Information

Returns serial number, hardware revision, software build version, and active system operating mode.

Endpoint: `/system/get_system_info.json`

Method: `GET`

Response Payload

{

  “result”: “ok”,

  “data”: {

    “DEVICE_NAME”: “V410-V4105464864646”,

    “DEVICE_TYPE”: “V410”,

    “HARDWARE_VERSION”: “2.2”,

    “SOFTWARE_VERSION”: “V1.00.0033”,

    “BUILD_INFO”: “20260720_171602”,

    “SERIAL”: “V4105464864646”,

    “mode”: “ENCODING” // “ENCODING” or “DECODING”

  }

}

6. Network Module

The Network Module manages Ethernet interfaces (LAN1, LAN2), static/DHCP IP configuration, USB tethered networking, and Wi-Fi scanning/connections.

6.1 Get Network Link Configuration

Queries status, IP configuration, gateway, DNS, and traffic throughput for all network interfaces.

Endpoint: `/network/get_link_list.json`

Method: `POST` / `GET`

Response Payload

{

  “result”: “ok”,

  “data”: {

    “eth”: [

      {

        “intf”: “LAN1”,

        “interface”: “eth0”,

        “type”: “eth”,

        “running”: true,                     // Physical link connected (cable plugged)

        “method”: “static”,                  // “dhcp” or “static”

        “ip”: “192.168.0.232”,

        “netmask”: “255.255.252.0”,

        “gateway”: “192.168.1.1”,

        “dns”: [“8.8.8.8”, “114.114.114.114”],

        “mac”: “72:2C:4A:1B:4F:0A”,

        “ipv6”: “fe80::702c:4aff:fe1b:4f0a”,

        “ipv6_scope”: “Link”,

        “up”: 226,                           // Upload throughput in Kbps

        “down”: 8979                         // Download throughput in Kbps

      },

      {

        “intf”: “LAN2”,

        “interface”: “eth1”,

        “type”: “eth”,

        “running”: false,

        “method”: “static”,

        “mac”: “76:2C:4A:1B:4F:0A”,

        “dns”: [],

        “up”: 0,

        “down”: 0

      }

    ],

    “wlan”: [

      {

        “intf”: “Wi-Fi”,

        “interface”: “wlan0”,

        “type”: “wlan”,

        “up”: 0,

        “down”: 0,

        “dns”: []

      }

    ]

  }

}

6.2 Configure Network Connection

Configures IP addressing mode (DHCP or Static), subnet mask, gateway, and DNS servers.

Endpoint: `/network/set_link_connection.json`

Method: `POST` / `GET`

Request Payload

{

  “interface”: “eth0”,         // “eth0” or “eth1”

  “method”: “static”,          // “dhcp” or “static”

  “ip”: “192.168.0.232”,       // Ignored when method=”dhcp”

  “netmask”: “255.255.252.0”,

  “gateway”: “192.168.1.1”,

  “dns”: [“192.168.1.1”, “”]

}

Important: If the IP address is altered, the existing connection immediately closes and no HTTP response payload is returned.

6.3 Get USB Network Interface Information

Queries status of the USB tethered network adapter (usb0).

Endpoint: `/network/get_usb_net.json`

Method: `POST` / `GET`

Response Payload

{

  “result”: “ok”,

  “data”: {

    “interface”: “usb0”,

    “type”: “usb”,

    “ip”: “192.168.64.74”,

    “netmask”: “255.255.255.0”,

    “mac”: “22:D5:C5:D0:F9:6E”,

    “enable”: true,

    “connected”: false

  }

}

6.4 Set USB Network IP Address

Assigns a static IP address to the USB network interface.

Endpoint: `/network/set_usb_net.json`

Method: `POST` / `GET`

Request Payload

{

  “ip”: “192.168.91.10”

}

Response Payload

{

  “result”: “ok”

}

6.5 Get Wi-Fi Status

Queries whether the wireless Wi-Fi radio is enabled.

Endpoint: `/network/wifi/get_config.json`

Method: `POST` / `GET`

Response Payload

{

  “result”: “ok”,

  “data”: {

    “enable”: true

  }

}

6.6 Enable / Disable Wi-Fi

Powers the wireless Wi-Fi module on or off.

Endpoint: `/network/wifi/enable_wifi.json`

Method: `POST` / `GET`

Request Payload

{

  “enable”: true

}

Response Payload

{

  “result”: “ok”

}

6.7 Get Scanned Wi-Fi Networks List

Scans for nearby wireless access points and returns signal strengths and security flags.

Endpoint: `/network/wifi/get_list.json`

Method: `POST` / `GET`

Response Payload

{

  “result”: “ok”,

  “data”: [

    {

      “ssid”: “TP-LINK_2C15”,

      “realname”: “TP-LINK_2C15”,

      “mac”: “9c:47:82:a2:2c:15”,

      “signal”: “-35”,           // RSSI in dBm

      “flags”: “sae”,            // WPA3 / SAE security

      “connect”: false,

      “generation”: 0

    },

    {

      “ssid”: “G_5G”,

      “realname”: “G_5G”,

      “mac”: “08:9b:4b:b9:1e:66”,

      “signal”: “-48”,

      “flags”: “wpa”,            // WPA2 / WPA security

      “connect”: false,

      “generation”: 0

    }

  ]

}

6.8 Connect to Wi-Fi Network

Associates and authenticates with a discovered Wi-Fi network.

Endpoint: `/network/wifi/connect_wifi.json`

Method: `POST` / `GET`

Request Payload

{

  “ssid”: “%40Ruijie-sC214”,           // URL-encoded SSID name

  “mac”: “c2%3Aa4%3A76%3A91%3Ac2%3A16”, // URL-encoded BSSID MAC address

  “psk”: “password123”                  // Pre-shared Wi-Fi password

}

Response Payload

{

  “result”: “ok”

}

6.9 Connect to Hidden Wi-Fi Network

Connects to an unbroadcasted / hidden Wi-Fi network.

Endpoint: `/network/wifi/add_hidden_wifi.json`

Method: `POST` / `GET`

Request Payload

{

  “ssid”: “%40Ruijie-sC214”, // URL-encoded SSID

  “psk”: “password123”,

  “flags”: “wpa”             // Security protocol (e.g., “wpa”)

}

Response Payload

{

  “result”: “ok”

}

6.10 Disconnect / Forget Wi-Fi Network

Disconnects from an active Wi-Fi connection and removes stored credentials.

Endpoint: `/network/wifi/disconnect_wifi.json`

Method: `POST` / `GET`

Request Payload

{

  “ssid”: “%40Ruijie-sC214”,

  “mac”: “c2%3Aa4%3A76%3A91%3Ac2%3A16”

}

Response Payload

{

  “result”: “ok”

}

7. Scheduled Tasks Module

The Scheduled Tasks Module provides an automated cron scheduler on the device to trigger streaming, recording, or scheduled system reboots at predefined times or calendar recurrences.

7.1 Get Scheduled Tasks

Queries all configured cron tasks filtered by type.

Endpoint: `/scheduler/get.json`

Method: `POST`

Request Payload

{

  “type”: 1,       // Task type: 1: Streaming, 2: Recording, 3: Reboot

  “encode_id”: “”  // Target encoder ID for recording tasks

}

Response Payload

{

  “result”: “ok”,

  “data”: [

    {

      “index”: 1,

      “prop”: {

        “title”: “New Scheduler”,

        “desc”: “”,

        “type”: 1,

        “stream_id”: “2”,

        “encode_id”: 1,

        “enable”: true,

        “start_time”: “18:10:05”,

        “end_time”: “18:12:10”,

        “repeat_event”: 1,

        “repeat_week_day”: [0, 0, 0, 0, 0, 0, 0],

        “repeat_month_week”: 1,

        “run_state”: 1

      }

    }

  ]

}

Field Description

FieldTypeDescription
titleStringTask name.
descStringTask notes / description.
typeIntegerTask category: 1: Streaming, 2: Recording, 3: Reboot.
stream_idStringStreaming service ID associated with this task.
encode_idIntegerTarget encoder channel ID.
start_timeStringStart time formatted as hh:mm:ss.
end_timeStringEnd time formatted as hh:mm:ss. If end_time is earlier than start_time, the task spans overnight into the next day. Cannot be identical to start_time.
repeat_eventIntegerRecurrence rule: 1: Daily, 2: Weekly, 3: Monthly, 4: One-time execution.
repeat_week_dayArray7-element boolean array for Monday through Sunday (1: active, 0: inactive).
repeat_month_weekIntegerWeek of month ordinal [1, 5] (effective when repeat_event=3).
run_stateIntegerRuntime state: 1: Waiting / Pending, 2: Running, 3: Execution Failed, 4: Expired / Inactive.
enableBooleanTask enabled flag.

7.2 Create Scheduled Task

Registers a new scheduled streaming or recording automation task.

Endpoint: `/scheduler/create.json`

Method: `POST`

Request Payload

{

  “type”: 1,                              // 1: Streaming, 2: Recording (Reboot tasks cannot be created, only edited)

  “title”: “Automated Broadcast”,

  “desc”: “Morning live stream event”,

  “stream_id”: “2”,

  “encode_id”: 1,

  “start_time”: “08:00:00”,

  “end_time”: “10:00:00”,

  “repeat_event”: 2,                      // 1: Daily, 2: Weekly, 3: Monthly, 4: One-time

  “repeat_week_day”: [1, 1, 1, 1, 1, 0, 0], // Monday through Friday

  “repeat_month_week”: 1,

  “start_date”: “2026-10-01”              // Date string for one-time tasks

}

Note: System Reboot tasks cannot be newly created; they can only be modified via Section 7.3.

Response Payload

{

  “result”: “ok”

}

7.3 Update Scheduled Task

Modifies an existing scheduled automation task by its index.

Endpoint: `/scheduler/update.json`

Method: `POST`

Request Payload

{

  “index”: 1,                             // Task index from Section 7.1

  “title”: “Updated Broadcast”,

  “desc”: “”,

  “stream_id”: “2”,

  “encode_id”: 1,

  “start_time”: “18:10:05”,

  “end_time”: “18:12:10”,

  “repeat_event”: 1,

  “repeat_week_day”: [0, 0, 0, 0, 0, 0, 0],

  “repeat_month_week”: 1,

  “start_date”: “2026-12-03”

}

Response Payload

{

  “result”: “ok”

}

7.4 Enable / Disable Scheduled Task

Toggles an automated schedule task active or inactive.

Endpoint: `/scheduler/enable.json`

Method: `POST`

Request Payload

{

  “index”: 1,

  “enable”: false

}

Response Payload

{

  “result”: “ok”

}

7.5 Delete Scheduled Task

Deletes a scheduled task definition.

Endpoint: `/scheduler/delete.json`

Method: `POST` / `GET`

Request Payload

{

  “index”: 1

}

Response Payload

{

  “result”: “ok”

}

8. User Management Module

The User Management Module provides endpoints for account authentication, password management, and Two-Factor Authentication (2FA / TOTP) configuration.

8.1 User Login

Authenticates user credentials and checks two-factor authentication (2FA) enforcement.

Endpoint: `/system/user/login.json`

Method: `POST` / `GET`

Request Payload

{

  “username”: “admin”,

  “password”: “password123”

}

Response Payload

{

  “result”: “ok”,

  “data”: {

    “username”: “admin”,

    “role”: “admin”,

    “AuthToken”: “b8c8169af00d4600e6304e6ad5ecb6c0”,

    “changed”: true,

    “enable_2fa”: true,    // Defaults to false if omitted

    “activate_2fa”: false  // Defaults to false if omitted

  }

}

8.2 Toggle Two-Factor Authentication (2FA)

Enables or disables Two-Factor Authentication requirements for a user account.

Endpoint: `/system/user/enable_2fa.json`

Method: `POST` / `GET`

Request Payload

{

  “username”: “admin”,

  “enable_2fa”: true

}

Response Payload

{

  “result”: “ok”

}

8.3 Activate Two-Factor Authentication (2FA)

Verifies a 6-digit TOTP verification code from an authenticator application to finalize 2FA activation.

Endpoint: `/system/user/activate_2fa.json`

Method: `POST` / `GET`

Request Payload

{

  “username”: “admin”,

  “code”: “112321” // 6-digit TOTP code

}

Response Payload

{

  “result”: “ok”

}

8.4 Get User Status

Queries a user’s 2FA enrollment status and TOTP secret key for QR code binding.

Endpoint: `/system/user/get_user_status.json`

Method: `POST` / `GET`

Request Payload

{

  “username”: “admin”

}

Response Payload

{

  “result”: “ok”,

  “data”: {

    “username”: “admin”,

    “enable_2fa”: true,

    “activate_2fa”: false,

    “token_2fa”: “GVKEKN2KG5KE4NCMJJDU2V2QLBBVQRBVINDECS2EJJFFAUKUGNGA” // Base32 TOTP secret string

  }

}

Appendix: Error Codes & Status Reference

Standard Error Response Format

When an API request fails, the server responds with a JSON payload containing an integer error code and result: “error”:

{

  “error”: 45073,

  “result”: “error”

}

Error Codes Lookup Table

Decimal CodeHex CodeError MessageDescription & Resolution
00x0000There was an errorGeneric system error. Check system logs.
10x0001Invalid ParameterRequest payload contains invalid, out-of-range, or missing parameters.
20x0002Request failedServer failed to execute the requested command.
30x0003User information timed-outSession token has expired or is invalid. Re-authenticate via login API.
40x0004System call failedUnderlying Linux OS or kernel system call returned an error.
50x0005Invalid requestMalformed HTTP request or unsupported method.
409610xA001OSD numbers maximumMaximum number of concurrent OSD overlay layers reached.
409620xA002OSD modification failedFailed to update the specified OSD overlay layer.
409630xA003Volume modification failedFailed to adjust audio gain or volume level.
409640xA004The audio encoding is abnormal, please try again laterAudio DSP or encoding pipeline is temporarily busy or recovering.
450570xB001No such stream typeUnsupported streaming protocol specified.
450580xB002The number of streams reaches the upper limitMaximum number of active streaming services reached.
450590xB003Port is occupiedTarget network port is already in use by another service.
450600xB004Recording not existSpecified recording task or session ID does not exist.
450610xB005Disk not existTarget storage device or mount path not found.
450620xB006Recording failedRecorder failed to open file or write stream data to disk.
450630xB007No preview informationPreview stream is unavailable or encoder is stopped.
450640xB008No corresponding encoding informationEncoder channel ID is not active or uninitialized.
450650xB009Invalid IP informationProvided IP address format is invalid.
450670xB00BThe server already existsA stream service with identical binding or port already exists.
450680xB00COnly one NDI®|HX2 streaming is allowedConcurrency limit: Only 1 NDI®|HX2 egress stream can run at a time.
450690xB00DOnly one NDI®|HX3 streaming is allowedConcurrency limit: Only 1 NDI®|HX3 egress stream can run at a time.
450700xB00EOnly one HLS streaming is allowedConcurrency limit: Only 1 HLS egress stream can run at a time.
450710xB00FOnly one RTSP streaming is allowedConcurrency limit: Only 1 RTSP server can run at a time.
450720xB010Only one SRT Listener streaming is allowedConcurrency limit: Only 1 SRT in Listener mode is permitted.
450730xB011NDI®|HX3/NDI HB/OMT and other streaming protocols cannot be enabled simultaneouslyProtocol mutual exclusion rule violated.
450740xB012Stream simultaneously to 8 servers at mostHardware stream output limit reached (maximum 8 concurrent targets).
450750xB013NDI®|HX3/NDI HB/OMT and recording cannot be enabled simultaneouslyHigh-bitrate encoding cannot operate concurrently with local recording.
450760xB014Limited to a single encoding stream for 4K4K UHD processing limits the device to a single active encoder channel.
450770xB015Allowed to decode one NDI or OMTDecoding limit: Only 1 NDI or OMT source can be decoded simultaneously.
450780xB016Only one NDI HB streaming is allowedConcurrency limit: Only 1 Full NDI (High Bandwidth) egress stream allowed.
450790xB017Only one OMT streaming is allowedConcurrency limit: Only 1 OMT stream service can be enabled.
450800xB018The channel name already existsNDI or OMT channel name collision detected on local network.
450810xB019OMT and NDI HB resolution up to 1920×1080Full NDI HB and OMT are constrained to a maximum resolution of 1080p.
450880xB020UVC mode is already enabledUSB Type-C port is already assigned to UVC webcam mode.
450890xB021Cannot enable UVC while RNDIS mode is activeConflicting USB modes. Must disable RNDIS or reboot to change mode.
491530xC001Exceed the image limitMaximum number of stored OSD / background images exceeded.
491540xC002Image upload failedFile transfer corrupted or rejected by server.
491550xC003Unable to delete the current recording fileFile is currently locked and being recorded into.
491560xC004Unable to add image with the same nameAn image file with the identical filename already exists in storage.
491570xC005The device is currently in useHardware resource or storage drive is locked by an active process.
491580xC006The disk is full and recording cannot be startedTarget storage partition has zero remaining free space.
532490xD001Wrong PasswordAuthentication failed due to incorrect password.
532500xD002Account doesn’t existSpecified username does not exist on the device.
532510xD003The account already exists and cannot be added repeatedlyUsername already registered.
532520xD004Unable to delete administratorRoot / default administrator account cannot be deleted.
532530xD005Failed to set time zoneInvalid time zone identifier or system clock adjustment failure.
532540xD006Invalid FirmwareFirmware package file corrupted or unsigned.
532550xD007Invalid firmware typeFirmware package is not compatible with this device model.
532560xD008Invalid firmware versionFirmware package version is invalid or downgrade disallowed.
532570xD009Invalid firmware pathSpecified upgrade file path does not exist on filesystem.
532580xD00AUpload failedFirmware upload stream disconnected prematurely.
614410xF001Shortcuts Key ConflictFront panel shortcut button assignment collision.
614420xF002Nginx check errorWeb reverse proxy configuration test failed.
616960xF100Numbers maximumReached maximum allowed number of scheduled task entries.
616970xF101Operation failed. Please disable the scheduled task firstTask cannot be edited or deleted while actively running. Disable first.

End of MIRI Device RESTful API Specification.