Summary

Resolume Arena is a real-time video mixing and effects application. This spec covers control of Arena via its built-in Webserver & REST API and Websocket API, which together expose a JSON-over-HTTP and JSON-over-Websocket interface for querying composition state, subscribing to parameter updates, and mutating the composition (layers, columns, sources, effects, parameters).

Transport

protocols:
  - http
  - tcp  # Websocket runs over TCP
addressing:
  base_url: /api/v1
  # UNRESOLVED: port number not stated in source
  port: null  # UNRESOLVED: Webserver/REST/Websocket port not stated in source
auth:
  type: none  # inferred: no auth procedure in source

Traits

queryable: true  # inferred from "get" action
powerable: false
routable: false
levelable: false

Actions

- id: subscribe_parameter
  label: Subscribe to parameter
  kind: action
  command: '{"action":"subscribe","parameter":"/parameter/by-id/{parameter_id}"}'
  params:
    - name: parameter_id
      type: string
      description: Parameter id from composition object
- id: unsubscribe_parameter
  label: Unsubscribe from parameter
  kind: action
  command: '{"action":"unsubscribe","parameter":"/parameter/by-id/{parameter_id}"}'
  params:
    - name: parameter_id
      type: string
      description: Parameter id currently subscribed
- id: set_parameter
  label: Set parameter value
  kind: action
  command: '{"action":"set","parameter":"/parameter/by-id/{parameter_id}","value":<value>}'
  params:
    - name: parameter_id
      type: string
      description: Parameter id from composition object
    - name: value
      type: string
      description: Value matching the parameter's declared type (string for StringParameter, etc.)
- id: get_parameter
  label: Get parameter value
  kind: query
  command: '{"action":"get","parameter":"/parameter/by-id/{parameter_id}"}'
  params:
    - name: parameter_id
      type: string
      description: Parameter id from composition object
- id: reset_parameter
  label: Reset parameter
  kind: action
  command: '{"action":"reset","parameter":"/parameter/by-id/{parameter_id}"}'
  params:
    - name: parameter_id
      type: string
      description: Parameter id to reset
- id: trigger_parameter
  label: Trigger parameter
  kind: action
  command: '{"action":"trigger","parameter":"/parameter/by-id/{parameter_id}"}'
  params:
    - name: parameter_id
      type: string
      description: Parameter id to trigger
- id: post_path
  label: Post (create) composition object
  kind: action
  command: '{"action":"post","id":"<optional_id>","path":"<path>","body":<optional_body>}'
  params:
    - name: path
      type: string
      description: Swagger path minus /api/v1 (e.g. /composition/layers/add)
    - name: id
      type: string
      description: Optional message id echoed back in response
    - name: body
      type: string
      description: Optional request data depending on action
- id: remove_path
  label: Remove composition object
  kind: action
  command: '{"action":"remove","id":"<optional_id>","path":"<path>"}'
  params:
    - name: path
      type: string
      description: Swagger path minus /api/v1 (e.g. /composition/columns/1)
    - name: id
      type: string
      description: Optional message id echoed back in response

Feedbacks

- id: composition_state
  type: object
  description: "Composition state pushed on connect and on structural changes (columns/layers added/removed)."
- id: sources_update
  type: object
  description: "List of available sources, wrapped as {\"type\":\"sources_update\",\"value\":<sources>}."
- id: effects_update
  type: object
  description: "List of available effects, wrapped as {\"type\":\"effects_update\",\"value\":<effects>}."
- id: parameter_subscribed
  type: object
  description: "Confirmation after subscribe action."
- id: parameter_unsubscribed
  type: object
  description: "Confirmation after unsubscribe action."
- id: parameter_get
  type: object
  description: "Response carrying the current value after a get action."
- id: parameter_set
  type: object
  description: "Confirmation after a set action."
- id: parameter_update
  type: object
  description: "Pushed when a subscribed parameter's value changes."

Variables

# UNRESOLVED: enumerable parameter set lives in the linked REST API reference,
# not in this Websocket doc. Refer to https://resolume.com/docs/restapi/ for the
# full parameter catalogue (e.g. /composition/columns/{column-index}/name).

Events

- id: composition_state_push
  description: Sent immediately on Websocket connect and on structural composition changes.
- id: sources_update_push
  description: Sent when a source is added or removed.
- id: effects_update_push
  description: Sent when an effect is added or removed.
- id: parameter_update_push
  description: Sent for parameters with an active subscription whose value changes.
- id: action_response
  description: Response to action messages (subscribe/unsubscribe/set/get), includes id and error fields.

Macros

# UNRESOLVED: no multi-step sequences documented in source.

Safety

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

Notes

Webserver & REST API must be enabled under Preferences > Webserver ("Enable Webserver & REST API") before any of these endpoints are reachable. The Websocket endpoint reuses the same address and port as the REST API, at path /api/v1. The REST API path used by HTTP clients is also rooted at /api/v1 (e.g. /api/v1/composition/columns/{column-index}/name).

Parameter paths use the form /parameter/by-id/<parameter_id> where <parameter_id> is the id given in the composition object; logical paths mirror the REST API reference without the /api/v1 prefix and with the parameter name appended. Action verbs (subscribe, unsubscribe, set, get, reset, trigger, post, remove) are case-sensitive lowercase — remove is used in place of delete because delete is a reserved keyword in JavaScript and C++.

The full per-parameter catalogue (types, allowed values, enum ranges, choice ids like colorid) is documented separately at https://resolume.com/docs/restapi/ (Arena) and https://resolume.com/docs/wirerestapi/ (Wire); this spec covers only the transport envelope.

Provenance

source_domains:
  - resolume.com
source_urls:
  - https://resolume.com/support/en/websocket-api
retrieved_at: 2026-06-08T11:57:36.022Z
last_checked_at: 2026-09-18T22:18:22.303Z

Verification Summary

verdict: verified
checked_at: 2026-09-18T22:18:22.303Z
matched_actions: 8
action_count: 8
confidence: medium
summary: "All 8 spec actions (subscribe/unsubscribe/set/get/reset/trigger/post/remove) are documented verbatim in source; /api/v1 path is present. (7 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "concrete TCP port number for the Webserver/REST/Websocket listener not stated in source"
- "port number not stated in source"
- "Webserver/REST/Websocket port not stated in source"
- "enumerable parameter set lives in the linked REST API reference,"
- "no multi-step sequences documented in source."
- "no safety warnings or interlock procedures documented in source."
- "listener port, firmware compatibility, and the full parameter catalogue are documented outside this document."

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