Schedules API

Schedules endpoints in the Brix REST API: 10 operations (GET, POST, PATCH, DELETE). Each lists its path, auth, required permission and a curl example.

View as Markdown · For AI agents: the full docs index is at /llms.txt

Base URL https://api.brixsignage.com. Send Authorization: Bearer $BRIX_API_KEY unless an operation says Auth: none or Auth: no API key. The Permission line names what the key must hold. See Authentication and scopes, Errors and rate limits and Pagination.

Every 4xx and 5xx response below returns this body:

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

Auth: Bearer token. Permission: 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[].fallbackSharedFromstring | nullThe workspace that shares the content played between blocks in, when it is not this workspace's own. Null for this workspace's own content.
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 | nullYYYY-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 | nullYYYY-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[].sharedFromstring | nullThe workspace that shares this block's content in, when it is not this workspace's own. Null for this workspace's own content.
data[].blocks[].thumbnailUrlstring | null
data[].blocks[].positioninteger

Response 401: Missing, expired or revoked bearer token.

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

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

POST /v1/schedules

Auth: Bearer token. Permission: 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 | nullnoYYYY-MM-DD or ISO-8601.
expiresAtstring | nullnoYYYY-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.fallbackSharedFromstring | nullThe workspace that shares the content played between blocks in, when it is not this workspace's own. Null for this workspace's own content.
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 | nullYYYY-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 | nullYYYY-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[].sharedFromstring | nullThe workspace that shares this block's content in, when it is not this workspace's own. Null for this workspace's own content.
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.

Response 403: not_shared: the fallback content is not shared to the schedule's location.

Response 404: The fallback content or location does not exist in this workspace.

Response 422: name missing, or an unparseable startsAt / expiresAt.

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

GET /v1/schedules/{id}

Auth: Bearer token. Permission: 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.fallbackSharedFromstring | nullThe workspace that shares the content played between blocks in, when it is not this workspace's own. Null for this workspace's own content.
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 | nullYYYY-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 | nullYYYY-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[].sharedFromstring | nullThe workspace that shares this block's content in, when it is not this workspace's own. Null for this workspace's own content.
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.

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

Response 404: No such schedule in this workspace.

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

PATCH /v1/schedules/{id}

Auth: Bearer token. Permission: 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 | nullnoYYYY-MM-DD or ISO-8601.
expiresAtstring | nullnoYYYY-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.fallbackSharedFromstring | nullThe workspace that shares the content played between blocks in, when it is not this workspace's own. Null for this workspace's own content.
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 | nullYYYY-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 | nullYYYY-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[].sharedFromstring | nullThe workspace that shares this block's content in, when it is not this workspace's own. Null for this workspace's own content.
data.blocks[].thumbnailUrlstring | null
data.blocks[].positioninteger

Response 401: Missing, expired or revoked bearer token.

Response 403: Moving to a location you cannot edit, or fallback content not shared there.

Response 404: No such schedule, fallback content or location.

Response 422: Unparseable startsAt / expiresAt.

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

DELETE /v1/schedules/{id}

Auth: Bearer token. Permission: 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.

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

Response 404: No such schedule.

Response 409: content_shared: the schedule is shared; the body carries shareCount. Retry with ?force=true.

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

POST /v1/schedules/{id}/blocks

Auth: Bearer token. Permission: 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 | nullnoYYYY-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.fallbackSharedFromstring | nullThe workspace that shares the content played between blocks in, when it is not this workspace's own. Null for this workspace's own content.
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 | nullYYYY-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 | nullYYYY-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[].sharedFromstring | nullThe workspace that shares this block's content in, when it is not this workspace's own. Null for this workspace's own content.
data.blocks[].thumbnailUrlstring | null
data.blocks[].positioninteger

Response 401: Missing, expired or revoked bearer token.

Response 403: not_shared: the content is not shared to the schedule's location.

Response 404: No such schedule, or the content does not exist in this workspace.

Response 422: Missing refKind/refId, or a malformed time.

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

PATCH /v1/schedules/{id}/blocks/{blockId}

Auth: Bearer token. Permission: 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 | nullnoYYYY-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.fallbackSharedFromstring | nullThe workspace that shares the content played between blocks in, when it is not this workspace's own. Null for this workspace's own content.
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 | nullYYYY-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 | nullYYYY-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[].sharedFromstring | nullThe workspace that shares this block's content in, when it is not this workspace's own. Null for this workspace's own content.
data.blocks[].thumbnailUrlstring | null
data.blocks[].positioninteger

Response 401: Missing, expired or revoked bearer token.

Response 403: not_shared: the content is not shared to the schedule's location.

Response 404: No such schedule or block.

Response 422: A malformed time.

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

DELETE /v1/schedules/{id}/blocks/{blockId}

Auth: Bearer token. Permission: 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.fallbackSharedFromstring | nullThe workspace that shares the content played between blocks in, when it is not this workspace's own. Null for this workspace's own content.
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 | nullYYYY-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 | nullYYYY-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[].sharedFromstring | nullThe workspace that shares this block's content in, when it is not this workspace's own. Null for this workspace's own content.
data.blocks[].thumbnailUrlstring | null
data.blocks[].positioninteger

Response 401: Missing, expired or revoked bearer token.

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

Response 404: No such schedule.

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

POST /v1/schedules/{id}/restore

Auth: Bearer token. Permission: schedule.delete.

Restore a deleted schedule so its block layout returns to the schedule library. Notes. - Also restores the cross-workspace shares that were removed when the schedule was deleted.

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

Response 200: Success.

FieldTypeDescription
dataobject
data.idstring
data.restoredtrue

Response 401: Missing, expired or revoked bearer token.

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

Response 404: No such schedule in this workspace.

Response 409: not_deleted: the schedule is not in the recycle bin.

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

POST /v1/schedules/bulk-delete

Auth: Bearer token.

Move up to 500 schedules to the recycle bin in one call. Permission is checked for each one. The answer lists the deleted IDs in ok and the rest in failed, so one failure does not stop the rest.

curl -X POST "https://api.brixsignage.com/v1/schedules/bulk-delete" \
  -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.

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