Serial templates API

Serial templates endpoints in the Brix REST API: 5 operations (GET, POST, PATCH, DELETE), with auth, permissions and curl examples.

View as Markdown

Base URL https://api.brixsignage.com. Send Authorization: Bearer $BRIX_API_KEY unless an operation says No auth. The permission chip names what the key must hold. See Authentication and scopes, Errors and rate limits and Pagination.

GET/v1/serial-templates

Bearer token screen.view

List saved RS232 serial command templates for your workspace, such as profiles for turning a display on or switching its input. Each template includes the exact bytes each command sends. **Notes.** - Not paginated. Only templates at locations where the key has screen.view are listed.

curl "https://api.brixsignage.com/v1/serial-templates" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 200 Success.

FieldTypeDescription
dataarray of SerialTemplate
data[].idstringSerial template id.
data[].spaceIdstring
data[].namestring
data[].modelstring | nullFree-text panel model (`Sony Bravia FW-series`).
data[].nodeIdstring | nullHome location; null = workspace root.
data[].createdAtstringISO-8601 timestamp (UTC).
data[].updatedAtstringISO-8601 timestamp (UTC).
data[].itemsarray of object
data[].items[].idstringCommand id. Kept across edits, so saved buttons that name it keep working.
data[].items[].namestring
data[].items[].valuestringThe command: literal text (`ascii`) or hex digits (`hex`).
data[].items[].encoding"ascii" | "hex"
data[].items[].eol"none" | "cr" | "lf" | "crlf"Line ending added after the value.
data[].items[].hexPreviewstringThe exact bytes sent, as spaced hex (`2A 53 0A`).

Response 401 Missing, expired or revoked bearer token.

FieldTypeDescription
errorstringMachine-readable code: `unauthorized`, `forbidden`, `not_found`, `validation_error`, `conflict`, `rate_limited`, `internal_error`, …
messagestringHuman-readable explanation. Safe to show an operator.
requestIdstringPresent on 5xx: quote it to support.

Response 403 The token lacks the permission this operation needs (see `x-brix-permission`).

FieldTypeDescription
errorstringMachine-readable code: `unauthorized`, `forbidden`, `not_found`, `validation_error`, `conflict`, `rate_limited`, `internal_error`, …
messagestringHuman-readable explanation. Safe to show an operator.
requestIdstringPresent on 5xx: quote it to support.

Response 5XX Server error. The body carries a `requestId` to quote to support.

FieldTypeDescription
errorstringMachine-readable code: `unauthorized`, `forbidden`, `not_found`, `validation_error`, `conflict`, `rate_limited`, `internal_error`, …
messagestringHuman-readable explanation. Safe to show an operator.
requestIdstringPresent on 5xx: quote it to support.

POST/v1/serial-templates

Bearer token screen.edit

Create an RS232 command template. Provide a name, an optional model, an items array of commands each with name, value, encoding (ascii or hex), and eol, and an optional nodeId.

Request body application/json

FieldTypeRequiredDescription
namestringyes
modelstring | nullno
nodeIdstring | nullnoHome location; null = workspace root.
itemsarray of objectnoThe commands, at most 200. On update the list replaces the stored one.
items[].idstringnoKeep an existing command's id; omit to get a new one.
items[].namestringyes
items[].valuestringyesAt most 512 characters, and it must give at least one byte.
items[].encoding"ascii" | "hex"noDefault `ascii`. An unknown value is read as `ascii`.
items[].eol"none" | "cr" | "lf" | "crlf"noDefault `none`. An unknown value is read as `none`.
curl -X POST "https://api.brixsignage.com/v1/serial-templates" \
  -H "Authorization: Bearer $BRIX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Sony Bravia","model":"FW-55BZ35","items":[{"name":"Power on","value":"*SCPOWR0000000000000001","encoding":"ascii","eol":"lf"}]}'

Response 201 Success.

FieldTypeDescription
dataSerialTemplateA saved set of RS232 commands for one panel model.
data.idstringSerial template id.
data.spaceIdstring
data.namestring
data.modelstring | nullFree-text panel model (`Sony Bravia FW-series`).
data.nodeIdstring | nullHome location; null = workspace root.
data.createdAtstringISO-8601 timestamp (UTC).
data.updatedAtstringISO-8601 timestamp (UTC).
data.itemsarray of object
data.items[].idstringCommand id. Kept across edits, so saved buttons that name it keep working.
data.items[].namestring
data.items[].valuestringThe command: literal text (`ascii`) or hex digits (`hex`).
data.items[].encoding"ascii" | "hex"
data.items[].eol"none" | "cr" | "lf" | "crlf"Line ending added after the value.
data.items[].hexPreviewstringThe exact bytes sent, as spaced hex (`2A 53 0A`).
{
  "data": {
    "id": "sertpl_2b3c4d5e6f7a8b9c",
    "spaceId": "space_1a2b3c4d5e6f7a8b",
    "name": "Sony Bravia",
    "model": "FW-55BZ35",
    "nodeId": null,
    "createdAt": "2026-09-28T09:00:00.000Z",
    "updatedAt": "2026-09-28T09:00:00.000Z",
    "items": [
      {
        "id": "sti_3c4d5e6f7a8b9c0d",
        "name": "Power on",
        "value": "*SCPOWR0000000000000001",
        "encoding": "ascii",
        "eol": "lf",
        "hexPreview": "2A 53 43 50 4F 57 52 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 31 0A"
      }
    ]
  }
}

Response 401 Missing, expired or revoked bearer token.

FieldTypeDescription
errorstringMachine-readable code: `unauthorized`, `forbidden`, `not_found`, `validation_error`, `conflict`, `rate_limited`, `internal_error`, …
messagestringHuman-readable explanation. Safe to show an operator.
requestIdstringPresent on 5xx: quote it to support.

Response 403 The token lacks the permission this operation needs (see `x-brix-permission`).

FieldTypeDescription
errorstringMachine-readable code: `unauthorized`, `forbidden`, `not_found`, `validation_error`, `conflict`, `rate_limited`, `internal_error`, …
messagestringHuman-readable explanation. Safe to show an operator.
requestIdstringPresent on 5xx: quote it to support.

Response 422 `name` is missing, `invalid_node` (the location is not in this workspace), or a command is not valid (no name, no value, too long, no bytes, a duplicate id, over 200 commands); `message` names it.

FieldTypeDescription
errorstringMachine-readable code: `unauthorized`, `forbidden`, `not_found`, `validation_error`, `conflict`, `rate_limited`, `internal_error`, …
messagestringHuman-readable explanation. Safe to show an operator.
requestIdstringPresent on 5xx: quote it to support.

Response 5XX Server error. The body carries a `requestId` to quote to support.

FieldTypeDescription
errorstringMachine-readable code: `unauthorized`, `forbidden`, `not_found`, `validation_error`, `conflict`, `rate_limited`, `internal_error`, …
messagestringHuman-readable explanation. Safe to show an operator.
requestIdstringPresent on 5xx: quote it to support.

GET/v1/serial-templates/{id}

Bearer token screen.view

Get one RS232 command template, including a preview of the exact bytes each command will send to the device.

ParameterInTypeRequiredDescription
idpathstringyesSerial template id.
curl "https://api.brixsignage.com/v1/serial-templates/{id}" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 200 Success.

FieldTypeDescription
dataSerialTemplateA saved set of RS232 commands for one panel model.
data.idstringSerial template id.
data.spaceIdstring
data.namestring
data.modelstring | nullFree-text panel model (`Sony Bravia FW-series`).
data.nodeIdstring | nullHome location; null = workspace root.
data.createdAtstringISO-8601 timestamp (UTC).
data.updatedAtstringISO-8601 timestamp (UTC).
data.itemsarray of object
data.items[].idstringCommand id. Kept across edits, so saved buttons that name it keep working.
data.items[].namestring
data.items[].valuestringThe command: literal text (`ascii`) or hex digits (`hex`).
data.items[].encoding"ascii" | "hex"
data.items[].eol"none" | "cr" | "lf" | "crlf"Line ending added after the value.
data.items[].hexPreviewstringThe exact bytes sent, as spaced hex (`2A 53 0A`).

Response 401 Missing, expired or revoked bearer token.

FieldTypeDescription
errorstringMachine-readable code: `unauthorized`, `forbidden`, `not_found`, `validation_error`, `conflict`, `rate_limited`, `internal_error`, …
messagestringHuman-readable explanation. Safe to show an operator.
requestIdstringPresent on 5xx: quote it to support.

Response 403 The token lacks the permission this operation needs (see `x-brix-permission`).

FieldTypeDescription
errorstringMachine-readable code: `unauthorized`, `forbidden`, `not_found`, `validation_error`, `conflict`, `rate_limited`, `internal_error`, …
messagestringHuman-readable explanation. Safe to show an operator.
requestIdstringPresent on 5xx: quote it to support.

Response 404 No such serial template in this workspace.

FieldTypeDescription
errorstringMachine-readable code: `unauthorized`, `forbidden`, `not_found`, `validation_error`, `conflict`, `rate_limited`, `internal_error`, …
messagestringHuman-readable explanation. Safe to show an operator.
requestIdstringPresent on 5xx: quote it to support.

Response 5XX Server error. The body carries a `requestId` to quote to support.

FieldTypeDescription
errorstringMachine-readable code: `unauthorized`, `forbidden`, `not_found`, `validation_error`, `conflict`, `rate_limited`, `internal_error`, …
messagestringHuman-readable explanation. Safe to show an operator.
requestIdstringPresent on 5xx: quote it to support.

PATCH/v1/serial-templates/{id}

Bearer token screen.edit

Update an RS232 command template's name, model, organization node, or list of commands. Existing command IDs are preserved, so anything referencing a specific command continues to work.

ParameterInTypeRequiredDescription
idpathstringyesSerial template id.

Request body application/json

FieldTypeRequiredDescription
namestringnoRequired on create. Cut to 120 characters.
modelstring | nullno
nodeIdstring | nullnoHome location; null = workspace root.
itemsarray of objectnoThe commands, at most 200. On update the list replaces the stored one.
items[].idstringnoKeep an existing command's id; omit to get a new one.
items[].namestringyes
items[].valuestringyesAt most 512 characters, and it must give at least one byte.
items[].encoding"ascii" | "hex"noDefault `ascii`. An unknown value is read as `ascii`.
items[].eol"none" | "cr" | "lf" | "crlf"noDefault `none`. An unknown value is read as `none`.
curl -X PATCH "https://api.brixsignage.com/v1/serial-templates/{id}" \
  -H "Authorization: Bearer $BRIX_API_KEY" \
  -H "Content-Type: application/json"

Response 200 Success.

FieldTypeDescription
dataSerialTemplateA saved set of RS232 commands for one panel model.
data.idstringSerial template id.
data.spaceIdstring
data.namestring
data.modelstring | nullFree-text panel model (`Sony Bravia FW-series`).
data.nodeIdstring | nullHome location; null = workspace root.
data.createdAtstringISO-8601 timestamp (UTC).
data.updatedAtstringISO-8601 timestamp (UTC).
data.itemsarray of object
data.items[].idstringCommand id. Kept across edits, so saved buttons that name it keep working.
data.items[].namestring
data.items[].valuestringThe command: literal text (`ascii`) or hex digits (`hex`).
data.items[].encoding"ascii" | "hex"
data.items[].eol"none" | "cr" | "lf" | "crlf"Line ending added after the value.
data.items[].hexPreviewstringThe exact bytes sent, as spaced hex (`2A 53 0A`).

Response 401 Missing, expired or revoked bearer token.

FieldTypeDescription
errorstringMachine-readable code: `unauthorized`, `forbidden`, `not_found`, `validation_error`, `conflict`, `rate_limited`, `internal_error`, …
messagestringHuman-readable explanation. Safe to show an operator.
requestIdstringPresent on 5xx: quote it to support.

Response 403 No `screen.edit` at the destination location.

FieldTypeDescription
errorstringMachine-readable code: `unauthorized`, `forbidden`, `not_found`, `validation_error`, `conflict`, `rate_limited`, `internal_error`, …
messagestringHuman-readable explanation. Safe to show an operator.
requestIdstringPresent on 5xx: quote it to support.

Response 404 No such serial template in this workspace.

FieldTypeDescription
errorstringMachine-readable code: `unauthorized`, `forbidden`, `not_found`, `validation_error`, `conflict`, `rate_limited`, `internal_error`, …
messagestringHuman-readable explanation. Safe to show an operator.
requestIdstringPresent on 5xx: quote it to support.

Response 422 An empty `name`, `invalid_node` (the destination is not in this workspace), or a command is not valid; `message` names it.

FieldTypeDescription
errorstringMachine-readable code: `unauthorized`, `forbidden`, `not_found`, `validation_error`, `conflict`, `rate_limited`, `internal_error`, …
messagestringHuman-readable explanation. Safe to show an operator.
requestIdstringPresent on 5xx: quote it to support.

Response 5XX Server error. The body carries a `requestId` to quote to support.

FieldTypeDescription
errorstringMachine-readable code: `unauthorized`, `forbidden`, `not_found`, `validation_error`, `conflict`, `rate_limited`, `internal_error`, …
messagestringHuman-readable explanation. Safe to show an operator.
requestIdstringPresent on 5xx: quote it to support.

DELETE/v1/serial-templates/{id}

Bearer token screen.edit

Delete an RS232 command template. Commands already queued using this template are unaffected, because they carry their own fully expanded bytes rather than a reference to the template. **Notes.** - Answers { data: { ok: true } }, not the { id, deleted: true } most other deletes return. There is no restore route.

ParameterInTypeRequiredDescription
idpathstringyesSerial template id.
curl -X DELETE "https://api.brixsignage.com/v1/serial-templates/{id}" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 200 Success.

FieldTypeDescription
dataobject
data.oktrue

Response 401 Missing, expired or revoked bearer token.

FieldTypeDescription
errorstringMachine-readable code: `unauthorized`, `forbidden`, `not_found`, `validation_error`, `conflict`, `rate_limited`, `internal_error`, …
messagestringHuman-readable explanation. Safe to show an operator.
requestIdstringPresent on 5xx: quote it to support.

Response 403 The token lacks the permission this operation needs (see `x-brix-permission`).

FieldTypeDescription
errorstringMachine-readable code: `unauthorized`, `forbidden`, `not_found`, `validation_error`, `conflict`, `rate_limited`, `internal_error`, …
messagestringHuman-readable explanation. Safe to show an operator.
requestIdstringPresent on 5xx: quote it to support.

Response 404 No such serial template in this workspace.

FieldTypeDescription
errorstringMachine-readable code: `unauthorized`, `forbidden`, `not_found`, `validation_error`, `conflict`, `rate_limited`, `internal_error`, …
messagestringHuman-readable explanation. Safe to show an operator.
requestIdstringPresent on 5xx: quote it to support.

Response 5XX Server error. The body carries a `requestId` to quote to support.

FieldTypeDescription
errorstringMachine-readable code: `unauthorized`, `forbidden`, `not_found`, `validation_error`, `conflict`, `rate_limited`, `internal_error`, …
messagestringHuman-readable explanation. Safe to show an operator.
requestIdstringPresent on 5xx: quote it to support.