Schedules API

Schedules endpoints in the Brix REST API: 9 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/schedules

Bearer token schedule.view

List the workspace's schedules, including their dayparting blocks.

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

Response 200 Success.

FieldTypeDescription
dataarray of Schedule
data[].idstringSchedule id.
data[].spaceIdstring
data[].nodeIdstring | nullHome location (null = workspace root).
data[].namestring
data[].fallbackNamestringLabel of the content played between blocks.
data[].fallbackMode"content" | "off"Between blocks: play the fallback content, or turn the screens off.
data[].fallbackContentKind"media" | "playlist" | "app" | "layout" | "creative" | "signage" | null
data[].fallbackContentIdstring | null
data[].playsSolelyboolean
data[].timeBasis"device" | "cms"Whose clock the block times use: each screen's local time, or the workspace's.
data[].startsAtstring | null`YYYY-MM-DD` or ISO-8601; null = no start bound.
data[].expiresAtstring | null
data[].approvalState"draft" | "pending" | "approved" | "rejected"
data[].createdAtstringISO-8601 timestamp (UTC).
data[].updatedAtstringISO-8601 timestamp (UTC).
data[].deletedAtstring | null
data[].recalledAtstring | nullSet while the schedule is recalled (withheld from every screen).
data[].recalledBystring | null
data[].approvedSnapshotstring | nullJSON of the blocks as last approved (approval workflow).
data[].importSourceIdstring | null
data[].usedByScreenCountintegerScreens assigned this schedule.
data[].fallbackContentRefobject | null
data[].fallbackThumbnailUrlstring | null
data[].blocksarray of ScheduleBlock
data[].blocks[].idstringSchedule block id.
data[].blocks[].labelstring
data[].blocks[].daysOfWeekarray of integer0 = Sunday … 6 = Saturday. Empty = every day.
data[].blocks[].startTimestring24-hour `HH:MM`.
data[].blocks[].endTimestring24-hour `HH:MM`; `00:00` = midnight. An end before the start wraps overnight.
data[].blocks[].priorityinteger0–1000; higher wins where blocks overlap.
data[].blocks[].startDatestring | null`YYYY-MM-DD`, or null for no start bound.
data[].blocks[].endDatestring | null
data[].blocks[].repeatEveryWeeksinteger1–52.
data[].blocks[].refKind"media" | "playlist" | "app" | "layout" | "creative" | "signage"
data[].blocks[].refIdstring
data[].blocks[].screensOffbooleanThe block turns the screens off instead of playing `ref`.
data[].blocks[].contentNamestringCurrent name of the content, `Screens off`, or `(missing content)` when the ref no longer resolves.
data[].blocks[].thumbnailUrlstring | null
data[].blocks[].positioninteger

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/schedules

Bearer token schedule.create

Create a schedule with a name and an optional nodeId and other fields. Safe to retry with an idempotency key. Creates an empty schedule. Add its dayparts with POST /v1/schedules/{id}/blocks, then assign it to screens. **Notes.** - Create returns the stored row plus blocks: [], not the composed schedule the other schedule routes return: no usedByScreenCount, fallbackContentRef, fallbackThumbnailUrl, recalledAt, approvedSnapshot or importSourceId.

Request body application/json

FieldTypeRequiredDescription
namestringyesRequired.
nodeIdstringnoHome location. Default: the caller's own location.
fallbackNamestringno
fallbackContentKind"media" | "playlist" | "app" | "layout" | "creative" | "signage"no
fallbackContentIdstringno
fallbackMode"content" | "off"no
playsSolelybooleanno
timeBasis"device" | "cms"no
startsAtstring | nullno`YYYY-MM-DD` or ISO-8601.
expiresAtstring | nullno`YYYY-MM-DD` or ISO-8601.
curl -X POST "https://api.brixsignage.com/v1/schedules" \
  -H "Authorization: Bearer $BRIX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Weekday dayparts","fallbackContentKind":"playlist","fallbackContentId":"pl_2a3b4c5d6e7f8a9b","startsAt":"2026-10-01"}'

Response 201 Success.

FieldTypeDescription
dataobject
data.idstringSchedule id.
data.spaceIdstring
data.nodeIdstring | nullHome location (null = workspace root).
data.namestring
data.fallbackNamestringLabel of the content played between blocks.
data.fallbackMode"content" | "off"Between blocks: play the fallback content, or turn the screens off.
data.fallbackContentKind"media" | "playlist" | "app" | "layout" | "creative" | "signage" | null
data.fallbackContentIdstring | null
data.playsSolelyboolean
data.timeBasis"device" | "cms"Whose clock the block times use: each screen's local time, or the workspace's.
data.startsAtstring | null`YYYY-MM-DD` or ISO-8601; null = no start bound.
data.expiresAtstring | null
data.approvalState"draft" | "pending" | "approved" | "rejected"
data.createdAtstringISO-8601 timestamp (UTC).
data.updatedAtstringISO-8601 timestamp (UTC).
data.deletedAtstring | null
data.blocksarray of ScheduleBlockAlways empty on create.
data.blocks[].idstringSchedule block id.
data.blocks[].labelstring
data.blocks[].daysOfWeekarray of integer0 = Sunday … 6 = Saturday. Empty = every day.
data.blocks[].startTimestring24-hour `HH:MM`.
data.blocks[].endTimestring24-hour `HH:MM`; `00:00` = midnight. An end before the start wraps overnight.
data.blocks[].priorityinteger0–1000; higher wins where blocks overlap.
data.blocks[].startDatestring | null`YYYY-MM-DD`, or null for no start bound.
data.blocks[].endDatestring | null
data.blocks[].repeatEveryWeeksinteger1–52.
data.blocks[].refKind"media" | "playlist" | "app" | "layout" | "creative" | "signage"
data.blocks[].refIdstring
data.blocks[].screensOffbooleanThe block turns the screens off instead of playing `ref`.
data.blocks[].contentNamestringCurrent name of the content, `Screens off`, or `(missing content)` when the ref no longer resolves.
data.blocks[].thumbnailUrlstring | null
data.blocks[].positioninteger
{
  "data": {
    "id": "sch_6f7a8b9c0d1e2f3a",
    "spaceId": "space_1a2b3c4d5e6f7a8b",
    "nodeId": null,
    "name": "Weekday dayparts",
    "fallbackName": "Default Loop",
    "fallbackContentKind": "playlist",
    "fallbackContentId": "pl_2a3b4c5d6e7f8a9b",
    "fallbackMode": "content",
    "playsSolely": false,
    "timeBasis": "device",
    "startsAt": "2026-10-01",
    "expiresAt": null,
    "approvalState": "draft",
    "createdAt": "2026-09-28T09:00:00.000Z",
    "updatedAt": "2026-09-28T09:00:00.000Z",
    "deletedAt": null,
    "blocks": []
  }
}

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 `not_shared`: the fallback content is not shared to the schedule's 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 The fallback content or location does not exist 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 `name` missing, or an unparseable `startsAt` / `expiresAt`.

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/schedules/{id}

Bearer token schedule.view

Retrieve one schedule, including its ordered blocks, with each block's time window, recurrence, content reference, and priority.

ParameterInTypeRequiredDescription
idpathstringyesSchedule id.
curl "https://api.brixsignage.com/v1/schedules/{id}" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 200 Success.

FieldTypeDescription
dataobject
data.idstringSchedule id.
data.spaceIdstring
data.nodeIdstring | nullHome location (null = workspace root).
data.namestring
data.fallbackNamestringLabel of the content played between blocks.
data.fallbackMode"content" | "off"Between blocks: play the fallback content, or turn the screens off.
data.fallbackContentKind"media" | "playlist" | "app" | "layout" | "creative" | "signage" | null
data.fallbackContentIdstring | null
data.playsSolelyboolean
data.timeBasis"device" | "cms"Whose clock the block times use: each screen's local time, or the workspace's.
data.startsAtstring | null`YYYY-MM-DD` or ISO-8601; null = no start bound.
data.expiresAtstring | null
data.approvalState"draft" | "pending" | "approved" | "rejected"
data.createdAtstringISO-8601 timestamp (UTC).
data.updatedAtstringISO-8601 timestamp (UTC).
data.deletedAtstring | null
data.recalledAtstring | nullSet while the schedule is recalled (withheld from every screen).
data.recalledBystring | null
data.approvedSnapshotstring | nullJSON of the blocks as last approved (approval workflow).
data.importSourceIdstring | null
data.usedByScreenCountintegerScreens assigned this schedule.
data.fallbackContentRefobject | null
data.fallbackThumbnailUrlstring | null
data.blocksarray of ScheduleBlock
data.blocks[].idstringSchedule block id.
data.blocks[].labelstring
data.blocks[].daysOfWeekarray of integer0 = Sunday … 6 = Saturday. Empty = every day.
data.blocks[].startTimestring24-hour `HH:MM`.
data.blocks[].endTimestring24-hour `HH:MM`; `00:00` = midnight. An end before the start wraps overnight.
data.blocks[].priorityinteger0–1000; higher wins where blocks overlap.
data.blocks[].startDatestring | null`YYYY-MM-DD`, or null for no start bound.
data.blocks[].endDatestring | null
data.blocks[].repeatEveryWeeksinteger1–52.
data.blocks[].refKind"media" | "playlist" | "app" | "layout" | "creative" | "signage"
data.blocks[].refIdstring
data.blocks[].screensOffbooleanThe block turns the screens off instead of playing `ref`.
data.blocks[].contentNamestringCurrent name of the content, `Screens off`, or `(missing content)` when the ref no longer resolves.
data.blocks[].thumbnailUrlstring | null
data.blocks[].positioninteger
data.requiresApprovalbooleanThe schedule's location requires approval before edits air.

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 schedule 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/schedules/{id}

Bearer token schedule.edit

Edit a schedule's own fields, such as name, node, timezone, and default behaviour. Blocks are managed through the separate /blocks routes. Partial update of schedule-level fields. A playback change to an approved schedule returns it to draft.

ParameterInTypeRequiredDescription
idpathstringyesSchedule id.

Request body application/json

FieldTypeRequiredDescription
namestringnoRequired.
nodeIdstring | nullnoMove to another location (needs schedule.edit there too).
fallbackNamestringno
fallbackContentKind"media" | "playlist" | "app" | "layout" | "creative" | "signage" | nullno
fallbackContentIdstring | nullno
fallbackMode"content" | "off"no
playsSolelybooleanno
timeBasis"device" | "cms"no
startsAtstring | nullno`YYYY-MM-DD` or ISO-8601.
expiresAtstring | nullno`YYYY-MM-DD` or ISO-8601.
curl -X PATCH "https://api.brixsignage.com/v1/schedules/{id}" \
  -H "Authorization: Bearer $BRIX_API_KEY" \
  -H "Content-Type: application/json"

Response 200 Success.

FieldTypeDescription
dataScheduleA schedule with its timed blocks.
data.idstringSchedule id.
data.spaceIdstring
data.nodeIdstring | nullHome location (null = workspace root).
data.namestring
data.fallbackNamestringLabel of the content played between blocks.
data.fallbackMode"content" | "off"Between blocks: play the fallback content, or turn the screens off.
data.fallbackContentKind"media" | "playlist" | "app" | "layout" | "creative" | "signage" | null
data.fallbackContentIdstring | null
data.playsSolelyboolean
data.timeBasis"device" | "cms"Whose clock the block times use: each screen's local time, or the workspace's.
data.startsAtstring | null`YYYY-MM-DD` or ISO-8601; null = no start bound.
data.expiresAtstring | null
data.approvalState"draft" | "pending" | "approved" | "rejected"
data.createdAtstringISO-8601 timestamp (UTC).
data.updatedAtstringISO-8601 timestamp (UTC).
data.deletedAtstring | null
data.recalledAtstring | nullSet while the schedule is recalled (withheld from every screen).
data.recalledBystring | null
data.approvedSnapshotstring | nullJSON of the blocks as last approved (approval workflow).
data.importSourceIdstring | null
data.usedByScreenCountintegerScreens assigned this schedule.
data.fallbackContentRefobject | null
data.fallbackThumbnailUrlstring | null
data.blocksarray of ScheduleBlock
data.blocks[].idstringSchedule block id.
data.blocks[].labelstring
data.blocks[].daysOfWeekarray of integer0 = Sunday … 6 = Saturday. Empty = every day.
data.blocks[].startTimestring24-hour `HH:MM`.
data.blocks[].endTimestring24-hour `HH:MM`; `00:00` = midnight. An end before the start wraps overnight.
data.blocks[].priorityinteger0–1000; higher wins where blocks overlap.
data.blocks[].startDatestring | null`YYYY-MM-DD`, or null for no start bound.
data.blocks[].endDatestring | null
data.blocks[].repeatEveryWeeksinteger1–52.
data.blocks[].refKind"media" | "playlist" | "app" | "layout" | "creative" | "signage"
data.blocks[].refIdstring
data.blocks[].screensOffbooleanThe block turns the screens off instead of playing `ref`.
data.blocks[].contentNamestringCurrent name of the content, `Screens off`, or `(missing content)` when the ref no longer resolves.
data.blocks[].thumbnailUrlstring | null
data.blocks[].positioninteger

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 Moving to a location you cannot edit, or fallback content not shared there.

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 schedule, fallback content or 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 422 Unparseable `startsAt` / `expiresAt`.

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/schedules/{id}

Bearer token schedule.delete

Delete a schedule to the recycle bin. Screens using it fall back to their assigned content. Soft-deletes into the recycle bin. Screens on it fall back to their other content.

ParameterInTypeRequiredDescription
idpathstringyesSchedule id.
forcequery"true"noDelete even when shared; the shares are removed too.
curl -X DELETE "https://api.brixsignage.com/v1/schedules/{id}" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 200 Success.

FieldTypeDescription
dataobject
data.idstring
data.deletedtrue
data.sharesRemovedinteger

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 schedule.

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 409 `content_shared`: the schedule is shared; the body carries `shareCount`. Retry with `?force=true`.

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/schedules/{id}/blocks

Bearer token schedule.edit

Add one dayparting block to a schedule with refKind, refId, days, startTime, endTime, and an optional priority and other fields. **Notes.** - The returned schedule is composed from the row read BEFORE the edit, so approvalState / updatedAt can lag the edit by one read (the blocks are current).

ParameterInTypeRequiredDescription
idpathstringyesSchedule id.

Request body application/json

FieldTypeRequiredDescription
refKind"media" | "playlist" | "app" | "layout" | "creative" | "signage"yesRequired on create.
refIdstringyesRequired on create.
labelstringnoDefault "Block".
daysOfWeekarray of integerno0 = Sunday. Default: every day.
startTimestringno24-hour `HH:MM`. Default `09:00`.
endTimestringno24-hour `HH:MM`; `24:00` is accepted as midnight. Default `17:00`.
priorityintegernoClamped to 0–1000.
startDatestring | nullno`YYYY-MM-DD`. Any other value is stored as null.
endDatestring | nullno
repeatEveryWeeksintegernoClamped to 1–52.
screensOffbooleanno
curl -X POST "https://api.brixsignage.com/v1/schedules/{id}/blocks" \
  -H "Authorization: Bearer $BRIX_API_KEY" \
  -H "Content-Type: application/json"

Response 201 Success.

FieldTypeDescription
dataScheduleA schedule with its timed blocks.
data.idstringSchedule id.
data.spaceIdstring
data.nodeIdstring | nullHome location (null = workspace root).
data.namestring
data.fallbackNamestringLabel of the content played between blocks.
data.fallbackMode"content" | "off"Between blocks: play the fallback content, or turn the screens off.
data.fallbackContentKind"media" | "playlist" | "app" | "layout" | "creative" | "signage" | null
data.fallbackContentIdstring | null
data.playsSolelyboolean
data.timeBasis"device" | "cms"Whose clock the block times use: each screen's local time, or the workspace's.
data.startsAtstring | null`YYYY-MM-DD` or ISO-8601; null = no start bound.
data.expiresAtstring | null
data.approvalState"draft" | "pending" | "approved" | "rejected"
data.createdAtstringISO-8601 timestamp (UTC).
data.updatedAtstringISO-8601 timestamp (UTC).
data.deletedAtstring | null
data.recalledAtstring | nullSet while the schedule is recalled (withheld from every screen).
data.recalledBystring | null
data.approvedSnapshotstring | nullJSON of the blocks as last approved (approval workflow).
data.importSourceIdstring | null
data.usedByScreenCountintegerScreens assigned this schedule.
data.fallbackContentRefobject | null
data.fallbackThumbnailUrlstring | null
data.blocksarray of ScheduleBlock
data.blocks[].idstringSchedule block id.
data.blocks[].labelstring
data.blocks[].daysOfWeekarray of integer0 = Sunday … 6 = Saturday. Empty = every day.
data.blocks[].startTimestring24-hour `HH:MM`.
data.blocks[].endTimestring24-hour `HH:MM`; `00:00` = midnight. An end before the start wraps overnight.
data.blocks[].priorityinteger0–1000; higher wins where blocks overlap.
data.blocks[].startDatestring | null`YYYY-MM-DD`, or null for no start bound.
data.blocks[].endDatestring | null
data.blocks[].repeatEveryWeeksinteger1–52.
data.blocks[].refKind"media" | "playlist" | "app" | "layout" | "creative" | "signage"
data.blocks[].refIdstring
data.blocks[].screensOffbooleanThe block turns the screens off instead of playing `ref`.
data.blocks[].contentNamestringCurrent name of the content, `Screens off`, or `(missing content)` when the ref no longer resolves.
data.blocks[].thumbnailUrlstring | null
data.blocks[].positioninteger

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 `not_shared`: the content is not shared to the schedule's 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 schedule, or the content does not exist 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 Missing `refKind`/`refId`, or a malformed time.

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/schedules/{id}/blocks/{blockId}

Bearer token schedule.edit

Edit one dayparting block's time window, days, priority, or content reference. Partial: omitted fields keep their stored value. **Notes.** - The returned schedule is composed from the row read BEFORE the edit, so approvalState / updatedAt can lag the edit by one read (the blocks are current).

ParameterInTypeRequiredDescription
idpathstringyesSchedule id.
blockIdpathstringyesBlock id.

Request body application/json

FieldTypeRequiredDescription
refKind"media" | "playlist" | "app" | "layout" | "creative" | "signage"noRequired on create.
refIdstringnoRequired on create.
labelstringnoDefault "Block".
daysOfWeekarray of integerno0 = Sunday. Default: every day.
startTimestringno24-hour `HH:MM`. Default `09:00`.
endTimestringno24-hour `HH:MM`; `24:00` is accepted as midnight. Default `17:00`.
priorityintegernoClamped to 0–1000.
startDatestring | nullno`YYYY-MM-DD`. Any other value is stored as null.
endDatestring | nullno
repeatEveryWeeksintegernoClamped to 1–52.
screensOffbooleanno
curl -X PATCH "https://api.brixsignage.com/v1/schedules/{id}/blocks/{blockId}" \
  -H "Authorization: Bearer $BRIX_API_KEY" \
  -H "Content-Type: application/json"

Response 200 Success.

FieldTypeDescription
dataScheduleA schedule with its timed blocks.
data.idstringSchedule id.
data.spaceIdstring
data.nodeIdstring | nullHome location (null = workspace root).
data.namestring
data.fallbackNamestringLabel of the content played between blocks.
data.fallbackMode"content" | "off"Between blocks: play the fallback content, or turn the screens off.
data.fallbackContentKind"media" | "playlist" | "app" | "layout" | "creative" | "signage" | null
data.fallbackContentIdstring | null
data.playsSolelyboolean
data.timeBasis"device" | "cms"Whose clock the block times use: each screen's local time, or the workspace's.
data.startsAtstring | null`YYYY-MM-DD` or ISO-8601; null = no start bound.
data.expiresAtstring | null
data.approvalState"draft" | "pending" | "approved" | "rejected"
data.createdAtstringISO-8601 timestamp (UTC).
data.updatedAtstringISO-8601 timestamp (UTC).
data.deletedAtstring | null
data.recalledAtstring | nullSet while the schedule is recalled (withheld from every screen).
data.recalledBystring | null
data.approvedSnapshotstring | nullJSON of the blocks as last approved (approval workflow).
data.importSourceIdstring | null
data.usedByScreenCountintegerScreens assigned this schedule.
data.fallbackContentRefobject | null
data.fallbackThumbnailUrlstring | null
data.blocksarray of ScheduleBlock
data.blocks[].idstringSchedule block id.
data.blocks[].labelstring
data.blocks[].daysOfWeekarray of integer0 = Sunday … 6 = Saturday. Empty = every day.
data.blocks[].startTimestring24-hour `HH:MM`.
data.blocks[].endTimestring24-hour `HH:MM`; `00:00` = midnight. An end before the start wraps overnight.
data.blocks[].priorityinteger0–1000; higher wins where blocks overlap.
data.blocks[].startDatestring | null`YYYY-MM-DD`, or null for no start bound.
data.blocks[].endDatestring | null
data.blocks[].repeatEveryWeeksinteger1–52.
data.blocks[].refKind"media" | "playlist" | "app" | "layout" | "creative" | "signage"
data.blocks[].refIdstring
data.blocks[].screensOffbooleanThe block turns the screens off instead of playing `ref`.
data.blocks[].contentNamestringCurrent name of the content, `Screens off`, or `(missing content)` when the ref no longer resolves.
data.blocks[].thumbnailUrlstring | null
data.blocks[].positioninteger

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 `not_shared`: the content is not shared to the schedule's 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 schedule or block.

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 A malformed time.

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/schedules/{id}/blocks/{blockId}

Bearer token schedule.edit

Remove one dayparting block from a schedule. Removes the block (a hard delete of the child row) and re-packs positions. **Notes.** - The returned schedule is composed from the row read BEFORE the edit, so approvalState / updatedAt can lag the edit by one read (the blocks are current). - An unknown blockId is not an error: the route answers 200 with the unchanged schedule.

ParameterInTypeRequiredDescription
idpathstringyesSchedule id.
blockIdpathstringyesBlock id.
curl -X DELETE "https://api.brixsignage.com/v1/schedules/{id}/blocks/{blockId}" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 200 Success.

FieldTypeDescription
dataScheduleA schedule with its timed blocks.
data.idstringSchedule id.
data.spaceIdstring
data.nodeIdstring | nullHome location (null = workspace root).
data.namestring
data.fallbackNamestringLabel of the content played between blocks.
data.fallbackMode"content" | "off"Between blocks: play the fallback content, or turn the screens off.
data.fallbackContentKind"media" | "playlist" | "app" | "layout" | "creative" | "signage" | null
data.fallbackContentIdstring | null
data.playsSolelyboolean
data.timeBasis"device" | "cms"Whose clock the block times use: each screen's local time, or the workspace's.
data.startsAtstring | null`YYYY-MM-DD` or ISO-8601; null = no start bound.
data.expiresAtstring | null
data.approvalState"draft" | "pending" | "approved" | "rejected"
data.createdAtstringISO-8601 timestamp (UTC).
data.updatedAtstringISO-8601 timestamp (UTC).
data.deletedAtstring | null
data.recalledAtstring | nullSet while the schedule is recalled (withheld from every screen).
data.recalledBystring | null
data.approvedSnapshotstring | nullJSON of the blocks as last approved (approval workflow).
data.importSourceIdstring | null
data.usedByScreenCountintegerScreens assigned this schedule.
data.fallbackContentRefobject | null
data.fallbackThumbnailUrlstring | null
data.blocksarray of ScheduleBlock
data.blocks[].idstringSchedule block id.
data.blocks[].labelstring
data.blocks[].daysOfWeekarray of integer0 = Sunday … 6 = Saturday. Empty = every day.
data.blocks[].startTimestring24-hour `HH:MM`.
data.blocks[].endTimestring24-hour `HH:MM`; `00:00` = midnight. An end before the start wraps overnight.
data.blocks[].priorityinteger0–1000; higher wins where blocks overlap.
data.blocks[].startDatestring | null`YYYY-MM-DD`, or null for no start bound.
data.blocks[].endDatestring | null
data.blocks[].repeatEveryWeeksinteger1–52.
data.blocks[].refKind"media" | "playlist" | "app" | "layout" | "creative" | "signage"
data.blocks[].refIdstring
data.blocks[].screensOffbooleanThe block turns the screens off instead of playing `ref`.
data.blocks[].contentNamestringCurrent name of the content, `Screens off`, or `(missing content)` when the ref no longer resolves.
data.blocks[].thumbnailUrlstring | null
data.blocks[].positioninteger

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 schedule.

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/schedules/{id}/restore

Bearer token

Restore a deleted schedule so its block layout returns to the schedule library.

ParameterInTypeRequiredDescription
idpathstringyesIdentifier for id.
curl -X POST "https://api.brixsignage.com/v1/schedules/{id}/restore" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 4XX Client error. 404 rather than 403 for another tenant's resource, so account existence is not leaked.

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.