Where you are: docs → reference → api → macro Read this first: api.md See also: subsystems/control-plane.md#macros · api/preset.md
TL;DR Seven endpoints cover the macro system: list, get, save (upsert), delete, run (async), cancel a running macro, and dismiss the final execution state. Only one macro can run at a time; progress is broadcast on every step transition.
Purpose: list all saved macros.
Handler: control/api_macro.go → (*API).handleListMacros.
Response 200: []macro.Macro.
Handler: (*API).handleGetMacro. Errors: 404 (macro.ErrNotFound).
Purpose: create or update a macro. The name path parameter overrides the body's name.
Handler: (*API).handleSaveMacro.
Request body (macro.Macro):
{
"name": "opener",
"steps": [
{ "action": "cut", "params": { "source": "cam1" } },
{ "action": "wait", "params": { "ms": 2000 } },
{ "action": "transition", "params": { "source": "graphics-layer", "type": "mix", "durationMs": 1000 } }
]
}Valid actions are listed in macro.allActions (~60 actions covering cut, preview, transition, wait, audio controls, graphics, keys, clips, SCTE-35, etc.). Each action validates its own params; invalid steps are rejected on save by macro.ValidateSteps.
Response 200: saved macro.Macro.
Errors: 400 (macro.ErrEmptyName, macro.ErrNoSteps, unknown action, bad params).
Handler: (*API).handleDeleteMacro. Response 204.
Purpose: execute a macro asynchronously. Returns immediately with 202 Accepted; progress streams through state broadcasts.
Handler: (*API).handleRunMacro.
Response 202: { "status": "started", "name": "<macro name>" }.
Errors: 404 (macro.ErrNotFound), 409 ("macro already running").
Emits: continuous state broadcasts with evolving Macro field — each step transitions from pending → running → done / failed / skipped, and wait steps populate WaitStartMs / WaitMs so the UI can show a countdown.
Related: subsystems/control-plane.md#macros
Purpose: cancel the currently-running macro. Any subsequent steps are marked skipped.
Handler: (*API).handleCancelMacro.
Response 204.
Purpose: dismiss a completed-or-cancelled macro's execution state, clearing it from the broadcast. If the macro is still running, it is also cancelled (so a silent background run doesn't continue unnoticed).
Handler: (*API).handleDismissMacro.
Response 204.
- Reference: api.md · state-broadcast.md · api/preset.md
- Subsystems: control-plane.md