Sending commands
The REST interface includes two endpoint types. Use the DisplayNet API request forms for commands that change DisplayNet state. Use SDVoE API operations for commands that work directly with devices.
Both endpoint types use the same /api base URL, bearer-token authentication, and response envelope. Their paths and request bodies differ. Choose the endpoint type before building the request.
| Endpoint type | Use it for | Request paths |
|---|---|---|
| DisplayNet API commands | Routing, presets, walls, MultiView, tagging, and other DisplayNet commands | POST /api/displaynet/<operation> or POST /api/displaynet |
| SDVoE API commands | Device resources, stream control, device configuration, events, and asynchronous request polling | /api/device/*, /api/event, and /api/request/* |
DisplayNet API operation names
An operation name is the command and its subcommand joined with an underscore. A command with no subcommand uses the command name alone.
| TCI command | REST operation |
|---|---|
preset list | preset_list |
preset get <name> | preset_get |
wall get <name> | wall_get |
version | version |
DisplayNet request forms
DisplayNet API operations support two request forms. Both use POST and return the same response envelope.
Operation in the URL
Put the operation name in the last URL segment. Put its parameters in the JSON body.
No parameters
For an operation with no parameters, send the request without a body:
POST /api/displaynet/preset_list
With parameters
For an operation with parameters, include them as a JSON body:
POST /api/displaynet/preset_get
Content-Type: application/json
{
"name": "MorningState"
}
This is the form described by the OpenAPI spec, so generated clients and Swagger UI use it.
Operation in the body
Post every DisplayNet API operation to /api/displaynet and put the operation name in the op field.
POST /api/displaynet{
"op": "preset_get",
"name": "MorningState"
}
The op field selects the DisplayNet API operation. The remaining fields carry its parameters. The JSON shape resembles an SDVoE API request, but the route makes this a DisplayNet API request. Send it to /api/displaynet, not /api/device/<target>. For device-level operations, use the SDVoE API request form.
If both the URL and the body name an operation, they must match. The server rejects a mismatch; it does not resolve the two names for you:
{
"status": "ERROR",
"request_id": null,
"result": null,
"error": {
"message": "Body op 'wall_list' conflicts with route op 'preset_list'",
"reason": "ILLEGAL_ARGUMENT"
}
}
Naming the same operation in both places is accepted.
Parameters
Parameters are named fields in the JSON body, using the command's argument names. Each command page documents its parameters under REST API.
A missing required parameter is reported by the command:
{
"status": "ERROR",
"request_id": null,
"result": null,
"error": {
"message": "Missing required parameter 'name'",
"reason": "PRESET API ERROR"
}
}
GET /api/commands returns parameter names for every DisplayNet API operation, with each parameter's type and whether it is optional:
GET /api/commands: preset_get{
"op": "preset_get",
"command": "preset",
"subcommand": "get",
"aliases": [],
"description": "Get a preset's contents (snapshot or script)",
"parameters": [
{
"name": "name",
"type": "string",
"optional": false,
"rest": false,
"description": ""
}
]
}
A rest parameter captures the remaining input as one value, like a trailing argument in the TCI interface.
Device names
Anywhere a command accepts a device, you can use a DisplayNet device name or device ID. This matches the TCI interface and also applies to SDVoE API operations.
Worked example
Create a script preset, then read it back.
Create the preset
POST /api/displaynet/preset_set
Content-Type: application/json
{
"type": "script",
"name": "docs_example",
"commands": "[ \"connect hdmi tx1 rx2\", \"WAIT 500\" ]"
}
Read it back
POST /api/displaynet/preset_get
Content-Type: application/json
{
"name": "docs_example"
}
Response
{
"status": "SUCCESS",
"request_id": null,
"result": {
"preset_details": [
{
"type": "script",
"name": "docs_example",
"scriptItemId": 13,
"creationDate": "2026-07-31T21:36:13.74366",
"lastEditDate": "2026-07-31T21:36:13.743729",
"createdBy": "RestApi",
"lastEditedBy": "RestApi",
"commands": ["connect hdmi tx1 rx2", "WAIT 500"],
"versions": []
}
]
},
"error": null
}
Resources created over REST have createdBy set to RestApi. This lets an audit distinguish them from changes made through a TCI session or DisplayNet Manager.
The commands value is a bracketed list of quoted strings, matching the preset set script syntax rather than a plain string.
See also
- SDVoE API operations: device paths, request bodies, and asynchronous requests
- Responses and errors: status codes and what an error looks like
- API Discovery: the live list of DisplayNet API operations and their parameters