Install
openclaw skills install @benloveitt/brix-signageControl Brix digital signage screens from an agent — list screens and check which are offline, put an image, video or playlist on screens for a set time, import media from a URL, set what a screen plays, reboot or refresh a screen, fire an emergency message, and pull proof-of-play reports.
openclaw skills install @benloveitt/brix-signageBrix is cloud digital signage software. It runs screens on the Amazon Signage Stick, Fire TV, Android, Windows and web players, and manages them from one console. This skill calls the Brix REST API.
screen.view, screen.cast or media.create. You can also limit the key to one location.BRIX_API_KEY to the key (ak_…).Pricing is $6 per screen per month billed yearly, or $8 month to month.
https://api.brixsignage.comAuthorization: Bearer $BRIX_API_KEY{ "data": … }. Errors are { "error": "<code>", "message": "…" }.429 or a 503 database_busy comes with Retry-After. Wait that long and retry.?limit=. Follow nextCursor with ?cursor= until it is null.curl -s https://api.brixsignage.com/v1/screens -H "Authorization: Bearer $BRIX_API_KEY"
Always look up real ids with a list call first. Never guess an id.
GET /v1/screens returns each screen's location, assigned content, online status and player settings. GET /v1/screens/{id} returns one screen. GET /v1/screens/{id}/diagnose explains why a screen is having trouble.
GET /v1/media: images, videos and web linksGET /v1/playlistsGET /v1/schedulesGET /v1/screen-groupsPOST /v1/media/import-url with {"url": "https://…/file.jpg", "name": "Lunch special"}. Brix fetches the file on its own servers and returns the new media item.
POST /v1/casts:
{ "contentKind": "media", "contentId": "<media id>", "scopeKind": "screens",
"screenIds": ["<screen id>"], "expiresAt": "2026-10-20T18:00:00Z" }
contentKind is one of media, playlist, app, creative or schedule.scopeKind is all, node (with scopeNodeId set to a location id) or screens (with screenIds).expiresAt passes. End a cast early with POST /v1/casts/{id}/clear.POST /v1/screens/{id}/assign with {"contentKind": "playlist", "contentId": "<playlist id>"}. This is a lasting change. Confirm with the user before you make it.
POST /v1/screens/{id}/commands with {"kind": "reboot"}. Other kinds include refresh, screenshot, clear-cache, cec-on/cec-off (turn the TV on or off), and set-volume with {"payload": {"level": 0-100}}. The device runs the command the next time it checks in.
GET /v1/emergency-templates lists the stored templates. POST /v1/emergencies/from-template/{templateId} with {} fires one as stored, or send scopeKind and expiresAt to override its scope and end time. Clear it with POST /v1/emergencies/{id}/clear. Emergencies take over real screens, so always confirm with the user first.
GET /v1/proof?from=2026-10-01T00:00:00Z&to=2026-10-19T00:00:00Z returns what played, where and for how long, broken down by content and by screen. Add screenId= to look at one screen.
403 means the key lacks the permission named in the error, so ask the user to add it rather than retry.404, not 403.Brix also runs a hosted MCP server at https://api.brixsignage.com/v1/mcp with OAuth sign-in. It works in Claude, ChatGPT and other MCP clients. Setup: https://brixsignage.com/developers/mcp/