Skip to main content
Version: 8.27 (latest)

API Endpoints

FiestaBoard provides a REST API powered by FastAPI. Interactive API documentation is available at http://localhost:4420/api/docs when FiestaBoard is running.

Base URL

http://localhost:4420

When using the default deployment, prefix all paths with /api (e.g. GET http://localhost:4420/api/health).

System Endpoints

Health & Status

MethodEndpointDescription
GET/healthHealth check, returns service health status
GET/statusService status, uptime, and current configuration
GET/configCurrent configuration settings

Display Control

MethodEndpointDescription
POST/refreshRefresh the current display
POST/force-refreshForce refresh (bypasses preview cache)
POST/send-messageSend a custom message to the board

Service Control

MethodEndpointDescription
POST/startStart the display service
POST/stopStop the display service

Page Endpoints

MethodEndpointDescription
GET/pagesList all pages
POST/pagesCreate a new page
GET/pages/{id}Get a specific page
PUT/pages/{id}Update a page
DELETE/pages/{id}Delete a page
POST/pages/{id}/previewPreview a page (with variables resolved)

Page Fields

When creating or updating a page, the following fields are available:

FieldTypeDescription
namestringPage name (required)
typestring"template", "single", or "composite"
device_typestring"flagship" (22×6) or "note" (15×3). Default: "flagship"
templatestring[]Template lines for template-type pages
duration_secondsnumberHow long to display (10–3600s, default 300)

Batch Operations

MethodEndpointDescription
POST/pages/preview/batchPreview multiple pages at once
POST/displays/raw/batchGet raw display data for multiple pages

Schedule Endpoints

MethodEndpointDescription
GET/schedulesList all schedule entries
POST/schedulesCreate a new schedule entry
GET/schedules/{id}Get a specific schedule entry
PUT/schedules/{id}Update a schedule entry
DELETE/schedules/{id}Delete a schedule entry

Plugin Endpoints

MethodEndpointDescription
GET/pluginsList all plugins with status
GET/plugins/{id}Get plugin details
PUT/plugins/{id}/configUpdate plugin configuration
POST/plugins/{id}/enableEnable a plugin
POST/plugins/{id}/disableDisable a plugin
GET/plugins/{id}/dataGet current plugin data
GET/plugins/{id}/variablesGet available template variables

Settings Endpoints

MethodEndpointDescription
GET/settings/allGet all settings in a single call
GET/settings/transitionsGet transition animation settings and the built-in strategy list
PUT/settings/transitionsUpdate transition settings. strategy accepts a built-in name (column, reverse-column, edges-to-center, row, diagonal, random), "plugin:<id>" to drive a transition plugin, or null for no animation
GET/settings/outputGet output target settings
PUT/settings/outputUpdate output target
GET/settings/boardGet board configuration
PUT/settings/boardUpdate board configuration

Board Management

Installs with more than one board follow a per-board model: each board has its own active page, schedule, and send routing, addressed by a board_id query param (or body field) on the relevant endpoints below. Omitting board_id always falls back to the primary board (boards[0]), which keeps single-board installs behaving exactly as before. Pages and Collections are not per-board — they're one shared library, and their pickers filter to the boards they're compatible with (see Board Instance Fields for the size model).

MethodEndpointDescription
PUT/settings/boardUpdate board configuration (devices, connection)
POST/settings/board/addAdd a new board instance
DELETE/settings/board/{id}Remove a board instance
GET/settings/active-pageGet a board's active page id (?board_id=)
PUT/settings/active-pageSet a board's active page (renders and sends immediately)
POST/pages/{id}/sendSend a page (?target=board&board_id=)
GET/board/current-messageRead a board's current display (?board_id=)

PUT /settings/board — request body fields

FieldTypeDescription
boardsobject[]Array of BoardInstance objects (V2 format)
devicesstring[]Device type list e.g. ["flagship", "note"] (backward-compatible)
board_typestringLegacy field — still accepted

PUT /settings/active-page — request body fields

FieldTypeDescription
page_idstring | nullPage (or collection) id to activate, or null to clear
board_idstringOptional. Omitted → primary board (legacy behavior)

Board Instance Fields

FieldTypeDescription
idstringUUID (auto-generated on create)
namestringDisplay name for this board
device_typestring"flagship" (22×6), "note" (15×3), or "note_array" (variable W×H)
board_colorstring"black" or "white"
api_modestring"local" or "cloud"
hoststringBoard IP address (local mode)
local_api_keystringLocal API key
cloud_keystringCloud Read/Write key
note_array_tokenstringCloud API token (note-array boards in cloud mode)
notes_wide / notes_tallnumberNote-array grid dimensions — resolves to (notes_wide × 15) × (notes_tall × 3) characters
enabledbooleanWhether this board is active
schedule_enabledbooleanWhether this board follows its schedule (vs. manual mode)
pausedbooleanWhether this board's output is paused

Transition Plugin Endpoints

These endpoints back the Transition Lab and the transition pickers in the UI. They are gated behind the Transition Plugins beta flag (Settings → Advanced → Beta Features) and return 404 while it is off. See Transitions for the feature itself.

MethodEndpointDescription
GET/transitions/pluginsList installed transition plugins with their settings schema, runtime caps, and plugin:<id> strategy string
POST/transitions/previewRun a transition plugin in-process and return its frame sequence — nothing is sent to a board
POST/transitions/test-liveRun a transition plugin once on the real board
POST/transitions/restoreSnap a board back to its active page after a live test

POST /transitions/preview — request body fields

FieldTypeDescription
plugin_idstringTransition plugin to drive (required)
to_textstringText rendered into the target grid
from_textstringOptional. Text rendered into the starting grid. Default: blank
configobjectOptional. Per-run overrides for the plugin's settings fields
device_typestringOptional. "flagship" (default), "note", or "note_array"
notes_wide / notes_tallnumberOptional. Note-array geometry (1–8 each)

The response is {"frames": [{"grid": [[...]], "delay_ms": n}, ...], "total_delay_ms": n, "capped": bool, "plugin_id": "..."}. capped is true when the plugin hit its max_frames or max_runtime_seconds limit and the sequence was truncated.

POST /transitions/test-live — request body fields

FieldTypeDescription
plugin_idstringTransition plugin to drive (required)
to_page_idstringPage the transition lands on (required)
from_page_idstringOptional. Page snapped to the board first, so the transition visibly starts from it
configobjectOptional. Per-run overrides for the plugin's settings fields
board_idstringOptional. Omitted → primary board

Live tests respect silence mode and board pause, returning 409 rather than writing to a quiet or paused board. The board is left showing the target page — call POST /transitions/restore (body: optional board_id) to return it to its active page, or wait for the normal display loop.

Example Requests

Get Service Status

curl http://localhost:4420/api/status

Send a Message

curl -X POST http://localhost:4420/api/send-message \
-H "Content-Type: application/json" \
-d '{"message": "Hello World!"}'

List Plugins

curl http://localhost:4420/api/plugins

Preview a Page

curl -X POST http://localhost:4420/api/pages/1/preview

Interactive Documentation

For a complete interactive API explorer with request/response schemas, visit:

http://localhost:4420/api/docs

This provides a Swagger UI where you can try out any endpoint directly in your browser.

Next Steps