Daemon Network API - Calls

Service name: <MachineName>-Daemon (one per machine).

General

General health and lifecycle endpoints for the Network service.

Pixotope-Network-Health [CALL]

Pixotope-Network-Health

Checks whether the Network service is alive and responsive.

No params.



Result

Result

BOOLEAN

Always `true` when the Network service responds.

Example - Health check

Request (you send)

JSON
{
  "Type": "Call",
  "Target": "<MachineName>-Daemon",
  "RespondTo": "<Service>",
  "Method": "Pixotope-Network-Health",
  "ID": "<ID>"
}
JSON
{}

Response (you receive)

JSON
{
  "Type": "CallResult",
  "Target": "<Service>",
  "ExecutedOn": "<MachineName>-Daemon",
  "Method": "Pixotope-Network-Health",
  "ID": "<ID>"
}
JSON
{
  "Result": true
}
NetworkHealth [CALL]

NetworkHealth

Checks the operational health of the Network service. Identical to `Pixotope-Network-Health` but also logs a timestamped entry for latency diagnostics.

No params.



Result

Result

BOOLEAN

Always `true` when the Network service responds.

Example - Network health check

Request (you send)

JSON
{
  "Type": "Call",
  "Target": "<MachineName>-Daemon",
  "RespondTo": "<Service>",
  "Method": "NetworkHealth",
  "ID": "<ID>"
}
JSON
{}

Response (you receive)

JSON
{
  "Type": "CallResult",
  "Target": "<Service>",
  "ExecutedOn": "<MachineName>-Daemon",
  "Method": "NetworkHealth",
  "ID": "<ID>"
}
JSON
{
  "Result": true
}

Encryption

Endpoints for managing Pixotope encryption (.pxkey) files.

Pixotope-Network-RescanEncryptionKeys [CALL]

Pixotope-Network-RescanEncryptionKeys

Rescans the encryption key directory and broadcasts the current key state to all subscribers. Also responds with `true` to the caller.

No params.



Result

Result

BOOLEAN

Always `true`.

Example - Rescan and broadcast encryption keys

Request (you send)

JSON
{
  "Type": "Call",
  "Target": "<MachineName>-Daemon",
  "RespondTo": "<Service>",
  "Method": "Pixotope-Network-RescanEncryptionKeys",
  "ID": "<ID>"
}
JSON
{}

Response (you receive)

JSON
{
  "Type": "CallResult",
  "Target": "<Service>",
  "ExecutedOn": "<MachineName>-Daemon",
  "Method": "Pixotope-Network-RescanEncryptionKeys",
  "ID": "<ID>"
}
JSON
{
  "Result": true
}
Pixotope-Network-RemoveEncryptionKeys [CALL]

Pixotope-Network-RemoveEncryptionKeys

Deletes all .pxkey files from the encryption directory and broadcasts the updated (empty) key state to all subscribers.

No params.



Result

Result

BOOLEAN

Always `true`.

Example - Remove all encryption keys

Request (you send)

JSON
{
  "Type": "Call",
  "Target": "<MachineName>-Daemon",
  "RespondTo": "<Service>",
  "Method": "Pixotope-Network-RemoveEncryptionKeys",
  "ID": "<ID>"
}
JSON
{}

Response (you receive)

JSON
{
  "Type": "CallResult",
  "Target": "<Service>",
  "ExecutedOn": "<MachineName>-Daemon",
  "Method": "Pixotope-Network-RemoveEncryptionKeys",
  "ID": "<ID>"
}
JSON
{
  "Result": true
}
SaveEncryptionKeys [CALL]

SaveEncryptionKeys

Saves the current .pxkey files as a zip archive to the specified destination path. Returns the resulting file name and path. Fails if the destination path is invalid or no key files exist.

Params

DestinationPath

STRING

Absolute folder path where the key archive should be saved.

Result

Result

OBJECT

`{"Success": true, "Path": "<file_path>", "Name": "<file_name>"}` on success, or `{"Success": false, "Path": "", "Name": ""}` on failure.

Example - Save encryption keys to a folder

Request (you send)

JSON
{
  "Type": "Call",
  "Target": "<MachineName>-Daemon",
  "RespondTo": "<Service>",
  "Method": "SaveEncryptionKeys",
  "ID": "<ID>"
}
JSON
{
  "Params": "C:\\Pixotope\\Keys"
}

Response (you receive)

JSON
{
  "Type": "CallResult",
  "Target": "<Service>",
  "ExecutedOn": "<MachineName>-Daemon",
  "Method": "SaveEncryptionKeys",
  "ID": "<ID>"
}
JSON
{
  "Result": {
    "Success": true,
    "Path": "C:\\Pixotope\\Keys\\keys.zip",
    "Name": "keys.zip"
  }
}
Pixotope-Network-AddEncryptionKeys [CALL]

Pixotope-Network-AddEncryptionKeys

Installs a .pxkey file from a binary buffer. Any existing key files are removed first. The buffer must be a byte array passed as `{"buffer": {"type": "<type>", "data": [<bytes>]}}`.

Params

buffer

OBJECT

Object containing the key file data. Must have `type` (string) and `data` (array of bytes).

Result

Result

BOOLEAN

Always `true`.

Example - Add encryption keys from a buffer

Request (you send)

JSON
{
  "Type": "Call",
  "Target": "<MachineName>-Daemon",
  "RespondTo": "<Service>",
  "Method": "Pixotope-Network-AddEncryptionKeys",
  "ID": "<ID>"
}
JSON
{
  "Params": {
    "buffer": {
      "type": "Buffer",
      "data": [
        80,
        75,
        3,
        4
      ]
    }
  }
}

Response (you receive)

JSON
{
  "Type": "CallResult",
  "Target": "<Service>",
  "ExecutedOn": "<MachineName>-Daemon",
  "Method": "Pixotope-Network-AddEncryptionKeys",
  "ID": "<ID>"
}
JSON
{
  "Result": true
}

Videohub

Endpoints for managing Blackmagic Videohub routing and connectivity.

ConnectVideohub [CALL]

ConnectVideohub

Connects to a Blackmagic Videohub device over TCP. If already connected to a different IP, disconnects first. Spawns a background thread to read Videohub state changes continuously after connecting.

Params

IP

STRING

IP address of the Videohub device. Required.

Reconnect

OPTIONAL

(default: false)

BOOLEAN

Whether to force a reconnection even if already connected.

Port

OPTIONAL

(default: 9990)

NUMBER

TCP port of the Videohub device. Defaults to `9990`.

Result

Result

STRING

A success message string on connection, or an error string on failure.

Example - Connect to a Videohub at a specific IP

Request (you send)

JSON
{
  "Type": "Call",
  "Target": "<MachineName>-Daemon",
  "RespondTo": "<Service>",
  "Method": "ConnectVideohub",
  "ID": "<ID>"
}
JSON
{
  "Params": {
    "IP": "192.168.1.20",
    "Port": 9990,
    "Reconnect": false
  }
}

Response (you receive)

JSON
{
  "Type": "CallResult",
  "Target": "<Service>",
  "ExecutedOn": "<MachineName>-Daemon",
  "Method": "ConnectVideohub",
  "ID": "<ID>"
}
JSON
{
  "Result": "Connected to Videohub at 192.168.1.20:9990"
}
DisconnectVideohub [CALL]

DisconnectVideohub

Disconnects from the currently connected Blackmagic Videohub device and clears its state.

No params.



Result

Result

BOOLEAN

Always `true`.

Example - Disconnect from the Videohub

Request (you send)

JSON
{
  "Type": "Call",
  "Target": "<MachineName>-Daemon",
  "RespondTo": "<Service>",
  "Method": "DisconnectVideohub",
  "ID": "<ID>"
}
JSON
{}

Response (you receive)

JSON
{
  "Type": "CallResult",
  "Target": "<Service>",
  "ExecutedOn": "<MachineName>-Daemon",
  "Method": "DisconnectVideohub",
  "ID": "<ID>"
}
JSON
{
  "Result": true
}
SetVideohubRouting [CALL]

SetVideohubRouting

Sets the video routing for a given output port on the connected Videohub. The output must not be hard-locked (`"L"`). If the output is owner-locked (`"O"`), it is temporarily unlocked, re-routed, then re-locked. Requires an active Videohub connection.

Params

OutputIndex

STRING

Zero-based index of the output port (as a string).

InputIndex

STRING

Zero-based index of the input source to route to the output (as a string).

Result

Result

STRING

`"Routing set successfully."` on success, or an error string on failure.

Example - Route input 2 to output 5

Request (you send)

JSON
{
  "Type": "Call",
  "Target": "<MachineName>-Daemon",
  "RespondTo": "<Service>",
  "Method": "SetVideohubRouting",
  "ID": "<ID>"
}
JSON
{
  "Params": {
    "OutputIndex": "5",
    "InputIndex": "2"
  }
}

Response (you receive)

JSON
{
  "Type": "CallResult",
  "Target": "<Service>",
  "ExecutedOn": "<MachineName>-Daemon",
  "Method": "SetVideohubRouting",
  "ID": "<ID>"
}
JSON
{
  "Result": "Routing set successfully."
}
SetVideohubOutputLock [CALL]

SetVideohubOutputLock

Locks or unlocks a specific output port on the connected Videohub. Requires an active Videohub connection.

Params

OutputIndex

STRING

Zero-based index of the output port (as a string).

ShouldLock

BOOLEAN

`true` to lock the output, `false` to unlock it.

Result

Result

STRING

`"Output lock set successfully."` on success, or an error string on failure.

Example - Lock output port 3

Request (you send)

JSON
{
  "Type": "Call",
  "Target": "<MachineName>-Daemon",
  "RespondTo": "<Service>",
  "Method": "SetVideohubOutputLock",
  "ID": "<ID>"
}
JSON
{
  "Params": {
    "OutputIndex": "3",
    "ShouldLock": true
  }
}

Response (you receive)

JSON
{
  "Type": "CallResult",
  "Target": "<Service>",
  "ExecutedOn": "<MachineName>-Daemon",
  "Method": "SetVideohubOutputLock",
  "ID": "<ID>"
}
JSON
{
  "Result": "Output lock set successfully."
}

IOBot

Endpoints for controlling Pixotope IOBot devices (robotics preset playback).

IoBotConnect [CALL]

IoBotConnect

Connects to an IOBot device at the specified IP address and port. If already connected, re-uses the existing connection and returns `true` immediately. Broadcasts the updated connection status to all subscribers after connecting.

Params

IPAddress

STRING

IP address of the IOBot device.

Port

NUMBER

TCP port of the IOBot device.

Result

Result

BOOLEAN

`true` if connected (or already connected), `false` if connection failed.

Example - Connect to an IOBot device

Request (you send)

JSON
{
  "Type": "Call",
  "Target": "<MachineName>-Daemon",
  "RespondTo": "<Service>",
  "Method": "IoBotConnect",
  "ID": "<ID>"
}
JSON
{
  "Params": {
    "IPAddress": "192.168.1.50",
    "Port": 8080
  }
}

Response (you receive)

JSON
{
  "Type": "CallResult",
  "Target": "<Service>",
  "ExecutedOn": "<MachineName>-Daemon",
  "Method": "IoBotConnect",
  "ID": "<ID>"
}
JSON
{
  "Result": true
}
IoBotDisconnect [CALL]

IoBotDisconnect

Disconnects from the currently connected IOBot device. Broadcasts the updated connection status to all subscribers.

No params.



Result

Result

BOOLEAN

Always `true`.

Example - Disconnect from the IOBot device

Request (you send)

JSON
{
  "Type": "Call",
  "Target": "<MachineName>-Daemon",
  "RespondTo": "<Service>",
  "Method": "IoBotDisconnect",
  "ID": "<ID>"
}
JSON
{}

Response (you receive)

JSON
{
  "Type": "CallResult",
  "Target": "<Service>",
  "ExecutedOn": "<MachineName>-Daemon",
  "Method": "IoBotDisconnect",
  "ID": "<ID>"
}
JSON
{
  "Result": true
}
IoBotPresetsFromEntity [CALL]

IoBotPresetsFromEntity

Returns all presets for a given IOBot entity as a JSON array.

Params

EntityId

NUMBER

Numeric ID of the IOBot entity.

Result

Result

ARRAY

JSON array of preset objects for the specified entity.

Example - Get presets for entity 1

Request (you send)

JSON
{
  "Type": "Call",
  "Target": "<MachineName>-Daemon",
  "RespondTo": "<Service>",
  "Method": "IoBotPresetsFromEntity",
  "ID": "<ID>"
}
JSON
{
  "Params": {
    "EntityId": 1
  }
}

Response (you receive)

JSON
{
  "Type": "CallResult",
  "Target": "<Service>",
  "ExecutedOn": "<MachineName>-Daemon",
  "Method": "IoBotPresetsFromEntity",
  "ID": "<ID>"
}
JSON
{
  "Result": [
    {
      "name": "Home",
      "id": 1,
      "type": "position",
      "status": "idle"
    }
  ]
}
IoBotPreset [CALL]

IoBotPreset

Returns a single preset by entity ID and preset ID, and broadcasts a preset update event to all subscribers.

Params

EntityId

NUMBER|STRING

ID of the IOBot entity (numeric or string).

PresetId

NUMBER|STRING

ID of the preset to retrieve (numeric or string).

Result

Result

OBJECT

JSON object for the requested preset. Also broadcasts `IoBotPresetUpdate` with the same data.

Example - Get a specific preset

Request (you send)

JSON
{
  "Type": "Call",
  "Target": "<MachineName>-Daemon",
  "RespondTo": "<Service>",
  "Method": "IoBotPreset",
  "ID": "<ID>"
}
JSON
{
  "Params": {
    "EntityId": 1,
    "PresetId": 2
  }
}

Response (you receive)

JSON
{
  "Type": "CallResult",
  "Target": "<Service>",
  "ExecutedOn": "<MachineName>-Daemon",
  "Method": "IoBotPreset",
  "ID": "<ID>"
}
JSON
{
  "Result": {
    "name": "Home",
    "id": 2,
    "type": "position",
    "status": "idle"
  }
}
IoBotPresetCue [CALL]

IoBotPresetCue

Cues (pre-loads) a preset on the specified IOBot entity without playing it. Broadcasts a preset update if the cue succeeds.

Params

EntityId

NUMBER|STRING

ID of the IOBot entity (numeric or string).

PresetId

NUMBER|STRING

ID of the preset to cue (numeric or string).

Result

Result

OBJECT

`{ "success": <bool>, "message": "<msg>" }`.

Example - Cue preset 3 on entity 1

Request (you send)

JSON
{
  "Type": "Call",
  "Target": "<MachineName>-Daemon",
  "RespondTo": "<Service>",
  "Method": "IoBotPresetCue",
  "ID": "<ID>"
}
JSON
{
  "Params": {
    "EntityId": 1,
    "PresetId": 3
  }
}

Response (you receive)

JSON
{
  "Type": "CallResult",
  "Target": "<Service>",
  "ExecutedOn": "<MachineName>-Daemon",
  "Method": "IoBotPresetCue",
  "ID": "<ID>"
}
JSON
{
  "Result": {
    "success": true,
    "message": "OK"
  }
}
IoBotPresetPlay [CALL]

IoBotPresetPlay

Plays a preset on the specified IOBot entity. Broadcasts a preset update if playback starts successfully.

Params

EntityId

NUMBER|STRING

ID of the IOBot entity (numeric or string).

PresetId

NUMBER|STRING

ID of the preset to play (numeric or string).

Result

Result

OBJECT

`{ "success": <bool>, "message": "<msg>" }`.

Example - Play preset 3 on entity 1

Request (you send)

JSON
{
  "Type": "Call",
  "Target": "<MachineName>-Daemon",
  "RespondTo": "<Service>",
  "Method": "IoBotPresetPlay",
  "ID": "<ID>"
}
JSON
{
  "Params": {
    "EntityId": 1,
    "PresetId": 3
  }
}

Response (you receive)

JSON
{
  "Type": "CallResult",
  "Target": "<Service>",
  "ExecutedOn": "<MachineName>-Daemon",
  "Method": "IoBotPresetPlay",
  "ID": "<ID>"
}
JSON
{
  "Result": {
    "success": true,
    "message": "OK"
  }
}
IoBotPresetPlayLoop [CALL]

IoBotPresetPlayLoop

Plays a preset in a continuous loop on the specified IOBot entity. Broadcasts a preset update if the loop starts successfully.

Params

EntityId

NUMBER|STRING

ID of the IOBot entity (numeric or string).

PresetId

NUMBER|STRING

ID of the preset to loop (numeric or string).

Result

Result

OBJECT

`{ "success": <bool>, "message": "<msg>" }`.

Example - Loop preset 3 on entity 1

Request (you send)

JSON
{
  "Type": "Call",
  "Target": "<MachineName>-Daemon",
  "RespondTo": "<Service>",
  "Method": "IoBotPresetPlayLoop",
  "ID": "<ID>"
}
JSON
{
  "Params": {
    "EntityId": 1,
    "PresetId": 3
  }
}

Response (you receive)

JSON
{
  "Type": "CallResult",
  "Target": "<Service>",
  "ExecutedOn": "<MachineName>-Daemon",
  "Method": "IoBotPresetPlayLoop",
  "ID": "<ID>"
}
JSON
{
  "Result": {
    "success": true,
    "message": "OK"
  }
}
IoBotPresetStop [CALL]

IoBotPresetStop

Stops the currently playing or looping preset on the specified IOBot entity. Broadcasts a preset update if the stop succeeds.

Params

EntityId

NUMBER|STRING

ID of the IOBot entity (numeric or string).

PresetId

NUMBER|STRING

ID of the preset to stop (numeric or string).

Result

Result

OBJECT

`{ "success": <bool>, "message": "<msg>" }`.

Example - Stop preset 3 on entity 1

Request (you send)

JSON
{
  "Type": "Call",
  "Target": "<MachineName>-Daemon",
  "RespondTo": "<Service>",
  "Method": "IoBotPresetStop",
  "ID": "<ID>"
}
JSON
{
  "Params": {
    "EntityId": 1,
    "PresetId": 3
  }
}

Response (you receive)

JSON
{
  "Type": "CallResult",
  "Target": "<Service>",
  "ExecutedOn": "<MachineName>-Daemon",
  "Method": "IoBotPresetStop",
  "ID": "<ID>"
}
JSON
{
  "Result": {
    "success": true,
    "message": "OK"
  }
}

Internet

Endpoints for downloading files from the internet.

DownloadFileFromUrl [CALL]

DownloadFileFromUrl

Downloads a file from a given URL and saves it to a local folder. Progress is broadcast as `FileUpdateInProgress` events at each percentage point. The file name is derived from the URL path. The destination directory is created if it does not exist.

Params

URL

STRING

Full URL of the file to download.

FolderPath

STRING

Absolute local folder path where the file will be saved.

Result

Result

OBJECT

`{ "Success": true, "Path": "<local_file_path>" }` on completion. On failure, a `CallError` is returned instead of a `CallResult`.

Example - Download a file from a URL

Request (you send)

JSON
{
  "Type": "Call",
  "Target": "<MachineName>-Daemon",
  "RespondTo": "<Service>",
  "Method": "DownloadFileFromUrl",
  "ID": "<ID>"
}
JSON
{
  "Params": {
    "URL": "https://example.com/update.zip",
    "FolderPath": "C:\\Pixotope\\Downloads"
  }
}

Response (you receive)

JSON
{
  "Type": "Update",
  "Source": "<MachineName>-Daemon",
  "Target": "Broadcast",
  "Name": "FileUpdateInProgress"
}
JSON
{
  "Url": "https://example.com/update.zip",
  "Path": "C:\\Pixotope\\Downloads\\update.zip",
  "Percent": 42
}
JSON
{
  "Type": "CallResult",
  "Target": "<Service>",
  "ExecutedOn": "<MachineName>-Daemon",
  "Method": "DownloadFileFromUrl",
  "ID": "<ID>"
}
JSON
{
  "Result": {
    "Success": true,
    "Path": "C:\\Pixotope\\Downloads\\update.zip"
  }
}