WATCHOUT HTTP API
For complete API reference with schemas and interactive testing, visit:
http://localhost:3019/test
This document provides quick-reference examples for common integration tasks. Examples use curl syntax but work with any HTTP client. Many endpoints use timeline and cue IDs.
System
- Get Software version
curl http://localhost:3019/info
Playback
- Get Current Playback State
curl http://localhost:3019/v0/state - Play All Timelines
curl -X POST http://localhost:3019/v0/play - Play Timeline by ID
curl -X POST http://localhost:3019/v0/play/0 - Pause Timeline by ID
curl -X POST http://localhost:3019/v0/pause/0 - Stop Timeline by ID
curl -X POST http://localhost:3019/v0/stop/0 - Jump to Time (milliseconds)
curl -X POST "http://localhost:3019/v0/jump-to-time/0?time=6000&state=pause" - Jump to Cue
curl -X POST "http://localhost:3019/v0/jump-to-cue/0/0?state=pause" - Get Timelines
curl http://localhost:3019/v0/timelines - Get Timeline Cues
curl http://localhost:3019/v0/cues/0 - Send MSC (MIDI Show Control)
curl -X POST -H "Content-Type: application/json" http://localhost:3019/v0/msc --data '[{"command": {"go": {}}}]'
Inputs
- Get All Inputs
curl http://localhost:3019/v0/inputs - Set Multiple Inputs
curl -X POST -H "Content-Type: application/json" http://localhost:3019/v0/inputs --data '[{"key": "MyInput", "value": 0.5}]' - Set Input with Interpolation Duration (milliseconds)
curl -X POST -H "Content-Type: application/json" http://localhost:3019/v0/inputs --data '[{"key": "MyInput", "value": 0.5, "duration": 1000}]' - Set Single Input by Name
curl -X POST "http://localhost:3019/v0/input/MyInput?value=0.5"
Show
- Get Current Show
curl http://localhost:3019/v0/show - Load Show from JSON
curl -X POST -H "Content-Type: application/json" http://localhost:3019/v0/show --data @show.json - Load Show from .watch File
curl -X POST -H "Content-Type: application/octet-stream" http://localhost:3019/v0/showfile --data-binary @show.watch - Load Show with Name
curl -X POST "http://localhost:3019/v0/showfile?showName=MyShow" -H "Content-Type: application/octet-stream" --data-binary @show.watch - Hit Test (check if coordinates hit cues)
Returnscurl -X POST -H "Content-Type: application/json" http://localhost:3019/v0/hittest --data '{"cues": ["1/42"], "x": 960.0, "y": 540.0}'{"hit_cues": ["1/42"]}for cues hit at the given stage coordinates. Only visual media cues without conditional rendering are supported.
Cue Sets
- Get States by ID
curl http://localhost:3019/v0/cue-group-state/by-id - Get States by Name
curl http://localhost:3019/v0/cue-group-state/by-name - Switch Single Variant by ID
curl -X POST http://localhost:3019/v0/cue-group-state/by-id/<groupId>/<variantId> - Switch Single Variant by Name
curl -X POST http://localhost:3019/v0/cue-group-state/by-name/<groupName>/<variantName> - Switch Multiple Variants by ID
curl -X POST -H "Content-Type: application/json" http://localhost:3019/v0/cue-group-state/by-id --data '{"groupId1": "variantId1", "groupId2": "variantId2"}' - Switch Multiple Variants by Name
curl -X POST -H "Content-Type: application/json" http://localhost:3019/v0/cue-group-state/by-name --data '{"groupName1": "variantName1", "groupName2": "variantName2"}' - Reset All to Default (empty object)
curl -X POST -H "Content-Type: application/json" http://localhost:3019/v0/cue-group-state/by-name --data '{}'
Event Streams
Three SSE versions are available, plus NDJSON alternatives:
SSE (Server-Sent Events)
| Endpoint | Events | Description |
|---|---|---|
/v0/sse | PlaybackState, CueVisibility | Legacy, basic events |
/v1/sse | PlaybackState, Inputs, ShowRevision, CueVisibility | Full state on each update |
/v2/sse | PlaybackState (diff), TimelineCountdowns, Inputs, ShowRevision, CueVisibility | Optimized with diffs and countdowns |
curl http://localhost:3019/v2/sse
The TimelineCountdowns event provides countdown/countup timing to cues with status: Pre, Last10, Last5, Reached.
NDJSON (Newline-Delimited JSON)
Same event data as SSE, but as newline-delimited JSON stream:
curl http://localhost:3019/v2/ndjson
Node Management
These commands are sent directly to individual nodes (Runners), not to the Director. Replace the IP address with the target node's address.
- Shutdown Node
curl -X POST http://192.168.1.2:3017/v0/shutdown - Reboot Node
curl -X POST http://192.168.1.2:3017/v0/reboot - Restart Node Services
curl -X POST http://192.168.1.2:3017/v0/services/restart
Appendix
Timeline and Cue IDs
Many API endpoints require a timeline ID or cue ID. These are numeric identifiers that remain stable even if you rename the timeline or cue in Producer.
To get the IDs, use Copy ID from the context menu in the Timeline window. Right-clicking a cue copies both the timeline ID and cue ID.
For example, jump-to-cue/0/5 uses timeline ID 0 and cue ID 5.
curl
curl is a command-line tool for making HTTP requests. The examples in this document use curl syntax, but any HTTP client (Postman, Python requests, etc.) can be used.
Windows Notes
Windows 10/11 includes curl, but PowerShell has a built-in alias curl that points to Invoke-WebRequest. To use the real curl:
- Use
curl.exeinstead ofcurl - Or remove the alias:
Remove-Item Alias:curl
Single quotes in JSON don't work in PowerShell. Use escaped double quotes:
curl.exe -X POST -H "Content-Type: application/json" http://localhost:3019/v0/inputs --data "[{\"key\": \"MyInput\", \"value\": 0.5}]"
Or use a here-string:
$body = @'
[{"key": "MyInput", "value": 0.5}]
'@
curl.exe -X POST -H "Content-Type: application/json" http://localhost:3019/v0/inputs --data $body