Summary

WATCHOUT is a multi-display presentation and show control system. This spec covers the HTTP REST API for controlling playback, managing timelines and cues, manipulating inputs, loading shows, and monitoring event streams. The API uses port 3019 for Director commands and port 3017 for direct node management. No authentication is required.

Transport

protocols:
  - http
addressing:
  base_url: http://localhost:3019
auth:
  type: none  # inferred: no auth procedure in source

Node management uses a different port:

addressing:
  node_base_url: http://<node-ip>:3017

Traits

- queryable       # inferred: GET endpoints for playback state, timelines, cues, inputs
- routable        # inferred: input set commands present
- levelable       # inferred: input value parameter (0.0-1.0 range)

Actions

- id: play_all_timelines
  label: Play All Timelines
  kind: action
  params: []

- id: play_timeline
  label: Play Timeline by ID
  kind: action
  params:
    - name: timeline_id
      type: integer
      description: Timeline ID

- id: pause_timeline
  label: Pause Timeline by ID
  kind: action
  params:
    - name: timeline_id
      type: integer
      description: Timeline ID

- id: stop_timeline
  label: Stop Timeline by ID
  kind: action
  params:
    - name: timeline_id
      type: integer
      description: Timeline ID

- id: jump_to_time
  label: Jump to Time
  kind: action
  params:
    - name: timeline_id
      type: integer
      description: Timeline ID
    - name: time
      type: integer
      description: Time in milliseconds
    - name: state
      type: string
      description: "play or pause"

- id: jump_to_cue
  label: Jump to Cue
  kind: action
  params:
    - name: timeline_id
      type: integer
      description: Timeline ID
    - name: cue_id
      type: integer
      description: Cue ID
    - name: state
      type: string
      description: "play or pause"

- id: send_msc
  label: Send MSC (MIDI Show Control)
  kind: action
  params:
    - name: command
      type: object
      description: JSON command object, e.g. {"go": {}}

- id: set_multiple_inputs
  label: Set Multiple Inputs
  kind: action
  params:
    - name: inputs
      type: array
      description: Array of {key: string, value: number, duration?: number}
    - name: value
      type: number
      description: Input value (0.0-1.0)
    - name: duration
      type: integer
      description: "Optional interpolation duration in milliseconds"

- id: set_single_input
  label: Set Single Input by Name
  kind: action
  params:
    - name: key
      type: string
      description: Input name
    - name: value
      type: number
      description: Input value (0.0-1.0)

- id: load_show_json
  label: Load Show from JSON
  kind: action
  params:
    - name: show_data
      type: string
      description: JSON show data

- id: load_show_file
  label: Load Show from .watch File
  kind: action
  params:
    - name: show_file
      type: string
      description: Binary .watch file data
    - name: show_name
      type: string
      description: "Optional show name"

- id: hittest
  label: Hit Test
  kind: action
  params:
    - name: cues
      type: array
      description: Array of cue IDs to test
    - name: x
      type: number
      description: X coordinate
    - name: y
      type: number
      description: Y coordinate

- id: switch_cue_variant_by_id
  label: Switch Cue Variant by ID
  kind: action
  params:
    - name: group_id
      type: string
      description: Cue group ID
    - name: variant_id
      type: string
      description: Variant ID

- id: switch_cue_variant_by_name
  label: Switch Cue Variant by Name
  kind: action
  params:
    - name: group_name
      type: string
      description: Cue group name
    - name: variant_name
      type: string
      description: Variant name

- id: reset_cue_groups_default
  label: Reset All Cue Groups to Default
  kind: action
  params: []

- id: node_shutdown
  label: Shutdown Node
  kind: action
  params: []

- id: node_reboot
  label: Reboot Node
  kind: action
  params: []

- id: node_restart_services
  label: Restart Node Services
  kind: action
  params: []

Feedbacks

- id: playback_state
  label: Current Playback State
  type: enum
  values: [playing, paused, stopped]
  query: GET /v0/state

- id: timelines
  label: Timeline List
  type: array
  query: GET /v0/timelines

- id: timeline_cues
  label: Timeline Cues
  type: array
  query: GET /v0/cues/{timeline_id}

- id: inputs
  label: Input States
  type: array
  query: GET /v0/inputs

- id: current_show
  label: Current Show
  type: object
  query: GET /v0/show

- id: cue_group_states_by_id
  label: Cue Group States by ID
  type: object
  query: GET /v0/cue-group-state/by-id

- id: cue_group_states_by_name
  label: Cue Group States by Name
  type: object
  query: GET /v0/cue-group-state/by-name

- id: hit_test_result
  label: Hit Test Result
  type: object
  description: Returns {hit_cues: [...]} for cues at given coordinates
  query: POST /v0/hittest

Variables

# No discrete settable parameters beyond input values.
# Input values are controlled via actions set_multiple_inputs / set_single_input.

Events

# SSE / NDJSON endpoints at /v0/sse, /v1/sse, /v2/sse, /v2/ndjson

- id: PlaybackState
  description: Playback state changes (play/pause/stop)
  versions: [v0, v1, v2]

- id: CueVisibility
  description: Cue visibility changes
  versions: [v0, v1, v2]

- id: Inputs
  description: Input value changes
  versions: [v1, v2]

- id: ShowRevision
  description: Show revision updates
  versions: [v1, v2]

- id: TimelineCountdowns
  description: Countdown/countup timing to cues with status Pre/Last10/Last5/Reached
  versions: [v2]

Macros

# No explicit multi-step macros documented in source.

Safety

confirmation_required_for: []
interlocks: []
<!-- UNRESOLVED: no safety warnings or interlock procedures in source -->

Notes

Port usage: Director API uses port 3019. Individual node commands use port 3017.

API version paths: Commands use /v0/ prefix (e.g. /v0/play, /v0/state). Event streams have versioned endpoints (/v0/sse, /v1/sse, /v2/sse).

Input values: Input parameters accept floating point values in the 0.0–1.0 range. Optional duration parameter enables interpolation over a specified milliseconds window.

Cue IDs: Timeline and cue IDs are numeric and stable across renames. Right-click context menu in Producer provides Copy ID function.

MSC support: The API accepts MIDI Show Control commands via POST to /v0/msc with JSON payload.

Windows PowerShell: JSON single quotes do not work; escape double quotes or use here-strings.

Provenance

source_domains:
  - docs.dataton.com
source_urls:
  - https://docs.dataton.com/watchout-7/external_protocol/external_protocol.html
retrieved_at: 2026-04-30T04:46:13.343Z
last_checked_at: 2026-06-03T06:35:49.212Z

Verification Summary

verdict: verified
checked_at: 2026-06-03T06:35:49.212Z
matched_actions: 18
action_count: 18
confidence: medium
summary: "Perfect match: 18/18 actions verified (6 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "physical RS-232 serial control not documented in source"
- "no safety warnings or interlock procedures in source"
- "physical RS-232 serial protocol not documented"
- "default TCP port for Watchout production deployments not confirmed in source (3019 is localhost default)"
- "authentication mechanism for production deployments not documented"
- "firmware version compatibility not stated in source"

From the AI4AV catalog (https://ai4av.net) · ODbL-1.0