Summary

Cloud REST API for controlling Stagetimer stage timer rooms. Controls playback (start/stop/reset/jump), timer management (create/update/delete), room state (blackout/on-air/focus modes), and message overlays. Authentication via room-scoped or team-scoped API keys passed as api_key query parameter or Authorization: Bearer header; keys are JWT format and legacy 32-character room keys remain supported.

Transport

protocols:
  - http
addressing:
  base_url: https://api.stagetimer.io/v1/
auth:
  type: api_key  # JWT format; room key (single room) or team key (all team rooms); legacy 32-char keys still supported
rate_limit:
  requests: 100
  window: 60  # seconds

Traits

- powerable      # start/stop/reset playback commands present
- routable       # timer selection (next/previous/select_timer) present
- queryable      # get_status/get_room/get_logs/get_timer/get_all_timers/get_all_messages/get_message/get_output_links present
- levelable      # add_time/subtract_time/jump commands present

Actions

- id: test_connection
  label: Test API Connection
  kind: action
  params: []

- id: test_auth
  label: Test API Authorization
  kind: action
  params:
    - name: room_id
      type: string
      required: true
      description: Room ID to authorize against

- id: get_playback_status
  label: Get Playback Status
  kind: action
  params:
    - name: room_id
      type: string
      required: true

- id: get_room
  label: Get Room State
  kind: action
  params:
    - name: room_id
      type: string
      required: true

- id: get_logs
  label: Get Event Logs
  kind: action
  params:
    - name: room_id
      type: string
      required: true
    - name: limit
      type: integer
      required: false
      default: 20
      description: Max 200
    - name: offset
      type: integer
      required: false
      default: 0
      description: Pagination offset, max 200

- id: start
  label: Start/Resume Highlighted Timer
  kind: action
  params:
    - name: room_id
      type: string
      required: true

- id: stop
  label: Stop Highlighted Timer
  kind: action
  params:
    - name: room_id
      type: string
      required: true

- id: start_or_stop
  label: Toggle Start/Stop Highlighted Timer
  kind: action
  params:
    - name: room_id
      type: string
      required: true

- id: reset
  label: Reset Highlighted Timer
  kind: action
  params:
    - name: room_id
      type: string
      required: true
    - name: autostart
      type: boolean
      required: false
      default: false

- id: next
  label: Highlight Next Timer
  kind: action
  params:
    - name: room_id
      type: string
      required: true
    - name: autostart
      type: boolean
      required: false
      default: false

- id: previous
  label: Reset or Highlight Previous Timer
  kind: action
  params:
    - name: room_id
      type: string
      required: true
    - name: autostart
      type: boolean
      required: false
      default: false

- id: add_time
  label: Add Time to Highlighted Timer
  kind: action
  params:
    - name: room_id
      type: string
      required: true
    - name: amount
      type: string
      required: false
      description: Time shorthand e.g. "30s", "10m"
    - name: milliseconds
      type: integer
      required: false

- id: subtract_time
  label: Subtract Time from Highlighted Timer
  kind: action
  params:
    - name: room_id
      type: string
      required: true
    - name: amount
      type: string
      required: false
    - name: milliseconds
      type: integer
      required: false

- id: jump
  label: Jump Playhead
  kind: action
  params:
    - name: room_id
      type: string
      required: true
    - name: milliseconds
      type: integer
      required: true
      description: Positive = forward, negative = backward

- id: start_flashing
  label: Flash Screen
  kind: action
  params:
    - name: room_id
      type: string
      required: true
    - name: count
      type: integer
      required: false
      default: 3
      description: 1-999

- id: stop_flashing
  label: Stop Flashing
  kind: action
  params:
    - name: room_id
      type: string
      required: true

- id: enable_blackout
  label: Enable Blackout Mode
  kind: action
  params:
    - name: room_id
      type: string
      required: true

- id: disable_blackout
  label: Disable Blackout Mode
  kind: action
  params:
    - name: room_id
      type: string
      required: true

- id: toggle_blackout
  label: Toggle Blackout Mode
  kind: action
  params:
    - name: room_id
      type: string
      required: true

- id: enable_on_air
  label: Enable On-Air Mode
  kind: action
  params:
    - name: room_id
      type: string
      required: true

- id: disable_on_air
  label: Disable On-Air Mode
  kind: action
  params:
    - name: room_id
      type: string
      required: true

- id: toggle_on_air
  label: Toggle On-Air Mode
  kind: action
  params:
    - name: room_id
      type: string
      required: true

- id: enable_focus
  label: Enable Focus Mode (Deprecated)
  kind: action
  params:
    - name: room_id
      type: string
      required: true

- id: disable_focus
  label: Disable Focus Mode (Deprecated)
  kind: action
  params:
    - name: room_id
      type: string
      required: true

- id: toggle_focus
  label: Toggle Focus Mode (Deprecated)
  kind: action
  params:
    - name: room_id
      type: string
      required: true

- id: start_timer
  label: Start Specific Timer
  kind: action
  params:
    - name: room_id
      type: string
      required: true
    - name: timer_id
      type: string
      required: false
    - name: index
      type: integer
      required: false
      description: "1-based index; use timer_id or index, not both"

- id: stop_timer
  label: Stop Specific Timer
  kind: action
  params:
    - name: room_id
      type: string
      required: true
    - name: timer_id
      type: string
      required: false
    - name: index
      type: integer
      required: false

- id: start_or_stop_timer
  label: Toggle Specific Timer
  kind: action
  params:
    - name: room_id
      type: string
      required: true
    - name: timer_id
      type: string
      required: false
    - name: index
      type: integer
      required: false

- id: select_timer
  label: Select (Cue Up) Timer Without Starting
  kind: action
  params:
    - name: room_id
      type: string
      required: true
    - name: timer_id
      type: string
      required: false
    - name: index
      type: integer
      required: false

- id: reset_timer
  label: Reset Specific Timer
  kind: action
  params:
    - name: room_id
      type: string
      required: true
    - name: timer_id
      type: string
      required: false
    - name: index
      type: integer
      required: false

- id: get_all_timers
  label: Get All Timers
  kind: action
  params:
    - name: room_id
      type: string
      required: true

- id: get_timer
  label: Get Single Timer
  kind: action
  params:
    - name: room_id
      type: string
      required: true
    - name: timer_id
      type: string
      required: false
    - name: index
      type: integer
      required: false

- id: create_timer
  label: Create Timer
  kind: action
  params:
    - name: room_id
      type: string
      required: true
    - name: name
      type: string
      required: false
    - name: speaker
      type: string
      required: false
    - name: notes
      type: string
      required: false
    - name: labels
      type: array
      required: false
      description: "Array of {name, color}; color '#' must be URL-encoded as %23"
    - name: appearance
      type: string
      required: false
      description: "COUNTDOWN | COUNTUP | TOD | COUNTDOWN_TOD | COUNTUP_TOD | HIDDEN"
    - name: type
      type: string
      required: false
      description: "DURATION | FINISH_TIME"
    - name: hours
      type: integer
      required: false
    - name: minutes
      type: integer
      required: false
    - name: seconds
      type: integer
      required: false
    - name: wrap_up_yellow
      type: integer
      required: false
    - name: wrap_up_red
      type: integer
      required: false
    - name: trigger
      type: string
      required: false
      description: "MANUAL | LINKED | SCHEDULED"
    - name: start_time
      type: string
      required: false
    - name: start_time_uses_date
      type: boolean
      required: false
    - name: finish_time
      type: string
      required: false
    - name: finish_time_uses_date
      type: boolean
      required: false

- id: update_timer
  label: Update Timer (Partial)
  kind: action
  params:
    - name: room_id
      type: string
      required: true
    - name: timer_id
      type: string
      required: false
    - name: index
      type: integer
      required: false
    - name: name
      type: string
      required: false
    - name: speaker
      type: string
      required: false
    - name: notes
      type: string
      required: false
    - name: labels
      type: array
      required: false
    - name: appearance
      type: string
      required: false
    - name: type
      type: string
      required: false
    - name: hours
      type: integer
      required: false
    - name: minutes
      type: integer
      required: false
    - name: seconds
      type: integer
      required: false
    - name: wrap_up_yellow
      type: integer
      required: false
    - name: wrap_up_red
      type: integer
      required: false
    - name: trigger
      type: string
      required: false
    - name: start_time
      type: string
      required: false
    - name: start_time_uses_date
      type: boolean
      required: false
    - name: finish_time
      type: string
      required: false
    - name: finish_time_uses_date
      type: boolean
      required: false

- id: delete_timer
  label: Delete Timer
  kind: action
  params:
    - name: room_id
      type: string
      required: true
    - name: timer_id
      type: string
      required: false
    - name: index
      type: integer
      required: false

- id: show_message
  label: Show Message
  kind: action
  params:
    - name: room_id
      type: string
      required: true
    - name: message_id
      type: string
      required: false
    - name: index
      type: integer
      required: false
    - name: focus
      type: boolean
      required: false
      default: false
      description: Show the message in fullscreen focus mode, covering all other output elements.

- id: hide_message
  label: Hide Message
  kind: action
  params:
    - name: room_id
      type: string
      required: true
    - name: message_id
      type: string
      required: false
    - name: index
      type: integer
      required: false

- id: show_or_hide_message
  label: Toggle Message
  kind: action
  params:
    - name: room_id
      type: string
      required: true
    - name: message_id
      type: string
      required: false
    - name: index
      type: integer
      required: false
    - name: focus
      type: boolean
      required: false
      default: false
      description: Show the message in fullscreen focus mode, covering all other output elements.

- id: get_all_messages
  label: Get All Messages
  kind: action
  params:
    - name: room_id
      type: string
      required: true

- id: get_message
  label: Get Message
  kind: action
  params:
    - name: room_id
      type: string
      required: true
    - name: message_id
      type: string
      required: false
    - name: index
      type: integer
      required: false

- id: create_message
  label: Create Message
  kind: action
  params:
    - name: room_id
      type: string
      required: true
    - name: text
      type: string
      required: false
    - name: color
      type: string
      required: false
      description: "white | green | red"
    - name: bold
      type: boolean
      required: false
      default: false
    - name: uppercase
      type: boolean
      required: false
      default: false

- id: update_message
  label: Update Message
  kind: action
  params:
    - name: room_id
      type: string
      required: true
    - name: message_id
      type: string
      required: false
    - name: index
      type: integer
      required: false
    - name: text
      type: string
      required: false
    - name: color
      type: string
      required: false
      description: "white | green | red"
    - name: bold
      type: boolean
      required: false
    - name: uppercase
      type: boolean
      required: false

- id: delete_message
  label: Delete Message
  kind: action
  params:
    - name: room_id
      type: string
      required: true
    - name: message_id
      type: string
      required: false
    - name: index
      type: integer
      required: false

- id: get_output_links
  label: Get Output Links
  kind: action
  params:
    - name: room_id
      type: string
      required: true
    - name: identifier
      type: string
      required: false
      description: Custom device name displayed in the Live Connections list.
    - name: mirror
      type: string
      required: false
      description: "vertical | horizontal | vertical,horizontal | horizontal,vertical"
    - name: delay
      type: integer
      required: false
      description: "Broadcast delay in seconds. Min: 0, Max: 3600"
    - name: tz
      type: string
      required: false
      description: Override the room timezone for this link.
    - name: hide_controls
      type: boolean
      required: false
      default: false
    - name: short_url
      type: boolean
      required: false
      default: false
      description: Return short URLs instead of full signed URLs.

Feedbacks

- id: playback_status
  label: Playback Status
  type: object
  fields:
    - name: timer_id
      type: string
    - name: running
      type: boolean
    - name: start
      type: integer
      description: Unix timestamp ms
    - name: finish
      type: integer
      description: Unix timestamp ms
    - name: pause
      type: integer
      description: Unix timestamp ms
    - name: server_time
      type: integer
      description: Unix timestamp ms

- id: room_state
  label: Room State
  type: object
  fields:
    - name: name
      type: string
    - name: blackout
      type: boolean
    - name: focus_message
      type: boolean
    - name: on_air
      type: boolean
    - name: timezone
      type: string

- id: timer_object
  label: Timer Object
  type: object
  fields:
    - name: _id
      type: string
    - name: name
      type: string
    - name: speaker
      type: string
    - name: notes
      type: string
    - name: labels
      type: array
    - name: appearance
      type: string
    - name: type
      type: string
    - name: duration
      type: string
    - name: hours
      type: integer
    - name: minutes
      type: integer
    - name: seconds
      type: integer
    - name: wrap_up_yellow
      type: integer
    - name: wrap_up_red
      type: integer
    - name: trigger
      type: string
    - name: start_time
      type: string
    - name: finish_time
      type: string

- id: message_object
  label: Message Object
  type: object
  fields:
    - name: _id
      type: string
    - name: showing
      type: boolean
    - name: text
      type: string
    - name: color
      type: string
    - name: bold
      type: boolean
    - name: uppercase
      type: boolean

- id: output_link
  label: Output Link
  type: object
  fields:
    - name: id
      type: string
    - name: name
      type: string
    - name: index
      type: integer
    - name: url
      type: string

- id: api_response
  label: Standard API Response
  type: object
  fields:
    - name: ok
      type: boolean
    - name: message
      type: string
    - name: data
      type: object

- id: socket_playback_status
  label: Socket Event: playback_status
  type: object
  source: socket.io
  fields:
    - name: timer_id
      type: string
    - name: running
      type: boolean
    - name: start
      type: integer
      description: Unix timestamp ms
    - name: finish
      type: integer
      description: Unix timestamp ms
    - name: pause
      type: integer
      description: Unix timestamp ms
    - name: server_time
      type: integer
      description: Unix timestamp ms

- id: socket_room
  label: Socket Event: room
  type: object
  source: socket.io
  fields:
    - name: name
      type: string
    - name: blackout
      type: boolean
    - name: focus_message
      type: boolean
      description: Deprecated; no longer live-updated via WebSocket
    - name: on_air
      type: boolean
    - name: timezone
      type: string

- id: socket_message
  label: Socket Event: message
  type: object
  source: socket.io
  fields:
    - name: _id
      type: string
    - name: showing
      type: boolean
    - name: text
      type: string
    - name: color
      type: string
    - name: bold
      type: boolean
    - name: uppercase
      type: boolean

- id: socket_current_timer
  label: Socket Event: current_timer
  type: object
  source: socket.io
  description: Full timer object or null. See timer_object.
  fields:
    - name: _id
      type: string
    - name: name
      type: string
    - name: speaker
      type: string
    - name: notes
      type: string
    - name: labels
      type: array
    - name: appearance
      type: string
    - name: type
      type: string
    - name: duration
      type: string
    - name: hours
      type: integer
    - name: minutes
      type: integer
    - name: seconds
      type: integer
    - name: wrap_up_yellow
      type: integer
    - name: wrap_up_red
      type: integer
    - name: trigger
      type: string
    - name: start_time
      type: string
    - name: finish_time
      type: string

- id: socket_next_timer
  label: Socket Event: next_timer
  type: object
  source: socket.io
  description: Full timer object or null. See timer_object.
  fields:
    - name: _id
      type: string
    - name: name
      type: string
    - name: speaker
      type: string
    - name: notes
      type: string
    - name: labels
      type: array
    - name: appearance
      type: string
    - name: type
      type: string
    - name: duration
      type: string
    - name: hours
      type: integer
    - name: minutes
      type: integer
    - name: seconds
      type: integer
    - name: wrap_up_yellow
      type: integer
    - name: wrap_up_red
      type: integer
    - name: trigger
      type: string
    - name: start_time
      type: string
    - name: finish_time
      type: string

- id: socket_flash
  label: Socket Event: flash
  type: object
  source: socket.io
  description: Emitted for manual flash only (not scheduled flashing on timer 0:00).
  fields:
    - name: count
      type: integer

- id: socket_timers_changed
  label: Socket Event: timers_changed
  type: object
  source: socket.io
  description: Array of {timer_id, change} entries; refresh via /get_all_timers.
  fields:
    - name: timer_id
      type: string
    - name: change
      type: string

- id: socket_messages_changed
  label: Socket Event: messages_changed
  type: object
  source: socket.io
  description: Array of {message_id, change} entries; refresh via /get_all_messages.
  fields:
    - name: message_id
      type: string
    - name: change
      type: string

Variables

# No discrete settable parameters outside of timer object fields.
# room_id is a runtime targeting parameter, not a device variable.
# UNRESOLVED: no standalone device configuration parameters found in source

Events

# Socket.IO connection: wss/https://api.stagetimer.io path /v1/socket.io, auth {room_id, api_key}.
# Socket is receive-only; does not accept currentState messages from clients.
# On initial connect the server emits current state for: room, playback_status, current_timer, next_timer, message (if any).
- id: playback_status
  description: Time-related changes (start, stop, next, previous). Same data shape as Feedback playback_status.
- id: room
  description: Room/viewer events (blackout, on-air). focus_message is deprecated and no longer live-updated.
- id: message
  description: Message shown/hidden or active message updated.
- id: current_timer
  description: Currently selected timer (full timer object or null).
- id: next_timer
  description: Next timer after the selected one (full timer object or null).
- id: flash
  description: Manual flash triggered; payload {count}. Not sent for scheduled flashing at 0:00.
- id: timers_changed
  description: Array of {timer_id, change} on every timer mutation. Refresh via /get_all_timers.
- id: messages_changed
  description: Array of {message_id, change} on every message mutation. Refresh via /get_all_messages.

Macros

# No explicit multi-step macros documented in source

Safety

confirmation_required_for: []
interlocks: []
# UNRESOLVED: no safety warnings or interlock procedures in source

Notes

All endpoints use GET requests with query parameters. Timestamps returned as Unix epoch milliseconds. Client must compute remaining time locally: if running=true, use remaining = finish - Date.now(); if running=false, use remaining = finish - pause. Room keys are rate-limited per room; team keys share budget across all team rooms. Legacy 32-character room keys (pre-3.4.0) continue to work. Socket.IO endpoint at path /v1/socket.io over https://api.stagetimer.io; connect with auth: {room_id, api_key}. The socket is receive-only; the server pushes room, playback_status, current_timer, next_timer, and active message on connect. Standard error envelope: { ok: false, message: <human-readable> } for 400 (invalid/missing parameters), 401 (missing/invalid API key), 404 (timer or room not found), 429 (rate limit exceeded).

Provenance

source_domains:
  - stagetimer.io
source_urls:
  - https://stagetimer.io/docs/api-v1/
  - https://stagetimer.io/docs/integration-with-streamdeck-companion/
retrieved_at: 2026-04-30T01:44:44.758Z
last_checked_at: 2026-09-30T01:17:23.750Z

Verification Summary

verdict: verified
checked_at: 2026-09-30T01:17:23.750Z
matched_actions: 44
action_count: 44
confidence: medium
summary: "All 44 semantic-id actions map to documented endpoints with matching shapes and transport; all documented socket events are also represented. (7 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "WebSocket socket event payload details provided for playback_status, room, message, current_timer/next_timer, flash, timers_changed, messages_changed; connection uses Socket.IO path /v1/socket.io with auth {room_id, api_key}"
- "no standalone device configuration parameters found in source"
- "no safety warnings or interlock procedures in source"
- "WebSocket event documentation incomplete"
- "create_timer response model not shown in source"
- "delete_timer response model not shown in source"
- "show_message/hide_message response model incomplete"

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