#
# -Jeff Mikels-
# NOTE TO EDITORS OF THIS FILE
#
# This structure documents a selection of the API exposed from Captivate.
# The commands are mostly found in SchedulerCommandXML.cpp file, but they can
# also be generated at runtime from other places in the code. Also, there
# are some API calls that are exposed but intentionally not documented either
# because they are deprecated or because they are primarily for internal use.
#
# As a result, I have reorganized the file into "grouped" commands. The group designation
# is my own and was completely arbitrary. If you think there's a better way to organize,
# feel free to contribute.
#
# If you add a new command to this list, place it in an appropriate group, and be sure to
# follow the same schema as the other items.
#
# All command fields except `name` and `docs` are optional.
#
# ==============================================================================
# API_VERSION: 250721
# ==============================================================================
#
#

openapi: 3.0.0
info:
  license:
    name: Public Domain
    url: https://creativecommons.org/publicdomain/zero/1.0/
  version: '250721'
  title: NewBlue Captivate REST API Commands
  description: 'This document describes the REST API commands available in NewBlue
    Captivate.

    There are three main ways to use the Captivate API:

    1. **REST API** - Standard HTTP requests to the Captivate server documented here.

    2. **DIRECT TCP/UDP** - Direct communication with the Captivate server by sending
    JSON messages to the server''s TCP/UDP ports.

    3. **WebSocket API** - Real-time communication with the Captivate server using the
    `ServiceHandler` library. See below for instructions to translate from this
    documentation back to the `ServiceHandler` methods.

    # Using the REST API

    All REST endpoints expect to receive a JSON object in the body of a POST request
    with the content-type set to `application/json`.

    The parameters specified should be included as query parameters to the request,
    but any variables should be passed in the JSON body.

    All REST API commands can also be sent as a POST directly to the `/api` endpoint by using
    the same JSON body as described in the TCP/UDP section below.

    Note: Whenever a request needs no variables, you may use the GET method.

    # Using the TCP API

    The TCP methods require sending a JSON object to the Captivate server on the
    port 9025 (tcp). The JSON object should contain the following fields:

    ## When sending a "command":

    - `command` : this field should be a string identifying the command you want to run.

    - `parameters` : this field should be an object containing the parameters for the command or action.

    - `variables` : this field should be an object containing the variables to set (and is rarely used)
    
    ## When sending an "action":

    - `action` : this field should be a string identifying the action you want to run.

    - `input` : this field should be a string identifying the input you want to target.

    - `title` : this field should be a string identifying the title you want to target.

    - `variables` : this field should be an object containing the variables to set.

    ## In the rare case where an API command requires the use of our older XML API, an object with one key may be sent:
    - `commandxml` : this field should be a string containing the XML command to run.
    
    ## All messages:

    All messages to the TCP/UDP ports should be valid JSON and then terminated with
    the raw `\r\n` character sequence.

    The Captivate server will respond with a JSON object.

    Note: TCP connections can be persistent, and as long as you are connected to the
    TCP port, you will receive the current notification stream from Captivate.

    # Items requiring the WebSocket API

    At present, if an item is only available through the WebSocket API, it will be
    noted with a path from the ServiceHandler scheduler object like this: `/scheduler.updateInputDefinition...`

    # To translate from this documentation back to the JavaScript API, do the following:

    ## For `/api/command/` endpoints:

    ```javascript
    
    await ServiceHandler.scheduler.scheduleCommand([command], [params], [variables])
    
    ```

    - `command` [required] is the path element after `/api/command/`
    
    - `params` [required] is an object described by the `properties` field
    
    - `variables` [required] is an object with the variables to set.
    

    ## For `/api/action/` endpoints:

    ```javascript
    
    await ServiceHandler.scheduler.scheduleAction([action], [input], [title], [variables])
    
    ```
    
    - `action` is the path element after `/api/action/`
    
    - `input` is the input name to target
    
    - `title` is the title name or id to target
    
    - `variables` is an object with the variables to set
    
    - all arguments are required, so to target just an input or a title, pass an empty string `''''` for the other one.'
security: []
servers:
- url: http://{captivate_ip}:{port}
  description: Captivate HTTP API server
  variables:
    captivate_ip:
      default: 127.0.0.1
      description: IP address of the Captivate computer. This can be discovered using
        MDNS queries for `_newblue._tcp.local.`
    port:
      default: '9022'
      description: Port can be changed with a registry key setting
- url: https://controllers.newbluefx.com/tunnel/{tunnel_id}
  description: Captivate HTTP API server (tunneled)
  variables:
    tunnel_id:
      default: ''
      description: Auto assigned at Captivate startup. Find the current tunnel by sending a REST request to the `/api/tunnel` endpoint
# - url: tcp://127.0.0.1:{port}
#   description: Captivate TCP API server
#   variables:
#     port:
#       default: '9024'
#       description: Port can be changed with a registry key setting
# - url: ws://127.0.0.1:9023
#   description: Captivate WebSocket API server (qwebchannel / ServiceHandler)
components:
  schemas:
    KeyValue:
      type: object
      additionalProperties:
        type: string
      example:
        key1: value1
        key2: value2
    AnyJson:
      description: 'Any valid JSON object'
paths:
  /api:
    post: 
      summary: primary
      description: 'any api command can be sent as a POST request body to this endpoint'
      tags:
      - General
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                command:
                  type: string
                  example: getTime
                parameters:
                  type: object
                  example:
                    key1: value1
                    key2: value2
                variables:
                  type: object
                  example:
                    key1: value1
                    key2: value2
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      success:
                        type: boolean
                        example: true
                    additionalProperties:
                      type: string
        '400':
          description: bad request
  /api/command/schedule:
    post:
      summary: schedule
      description: 'Internal version of the scheduleAction command.'
      tags:
      - Advanced Control
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/KeyValue"
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
        example: '123'
      - name: id
        in: query
        description: 'optional: UUID of title/layer to operate on'
        required: false
        schema:
          type: string
      - name: title
        in: query
        description: 'optional: Name (or UUID) of the title to operate on.'
        required: false
        schema:
          type: string
        example: Test
      - name: channel
        in: query
        description: channel to query or -1 for all; channels are numbered from left
          to right starting at 0 regardless of their names in the project
        required: false
        schema:
          type: number
        example: -1
      - name: action
        in: query
        description: '(REQUIRED) ONE OF: animateIn, animateOut, alert, cutin, cutout,
          render, update, still, automatic'
        required: true
        schema:
          type: string
        example: animateIn
      - name: queue
        in: query
        description: optional A "queue" name used internally
        required: false
        schema:
          type: string
        example: AlertQueue
      - name: markIn
        in: query
        description: optional
        required: false
        schema:
          type: string
      - name: markOut
        in: query
        description: optional
        required: false
        schema:
          type: string
      - name: time
        in: query
        description: 'When should this action fire? Time is specified in seconds since
          program launch. See command: `getTime`'
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: schedule
                      reply:
                        type: string
                        example: schedule
                      requestId:
                        type: string
                        example: '123'
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/macro:
    get:
      summary: macro
      description: 'High level title playback control.'
      tags:
      - Advanced Control
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: id
        in: query
        description: 'optional: UUID of title/layer to operate on'
        required: false
        schema:
          type: string
      - name: title
        in: query
        description: comma-separated list of title names. In direct case, prepend
          'name:' to title id, ie 'name:{id...}'
        required: false
        schema:
          type: string
        example: Title Name
      - name: channel
        in: query
        description: channel to query or -1 for all; channels are numbered from left
          to right starting at 0 regardless of their names in the project
        required: false
        schema:
          type: number
        example: -1
      - name: event
        in: query
        description: '(REQUIRED) ONE OF: auto, in, out, stop, cut, update, still,
          play, setvars, show, hide, take, takein, link, unlink, activate, deactivate'
        required: true
        schema:
          type: string
        example: auto
      - name: time
        in: query
        description: 'When should this action fire? Time is specified in seconds since
          program launch. See command: `getTime`'
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: macro
                      macroEvent:
                        type: string
                        example: auto
                      reply:
                        type: string
                        example: macro
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/customMessage:
    get:
      summary: customMessage
      description: 'The command doesn''t have to be "customMessage". It can be anything
        you want, just so long as the `to` field has been set. If the `to` field names
        a listening controller, this command will result in a success message. Otherwise,
        the result will be an error. In either case, the message will be sent as a
        notification to all controllers.'
      tags:
      - Advanced Control
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: to
        in: query
        description: By convention, is usually the name of another input. When set,
          this message is passed to all data controllers as a notification (including
          itself) but will not be handled by Captivate at all. If this is missing, Captivate
          will treat this like a normal command, and it might cause undesired results.
        required: true
        schema:
          type: string
        example: 'My Controller: Instance 1'
      - name: sender
        in: query
        description: You can specify a "sender" for this message. The sender defaults to the empty string
          and is internally known as the "default" sender. Controllers that subscribe to notifications can
          choose which "sender" to listen to. Currently, only some API methods support filtering messages by
          sender, but making use of sender values in your controllers is good practice.
        required: false
        schema:
          type: string
        example: 'My Controller: Instance 2'
      - name: key1
        in: query
        description: The data set in the parameters will be passed through directly
          to all data controllers
        required: false
        schema:
          $ref: "#/components/schemas/AnyJson"
        example: 'value'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: customMessage
                      error:
                        type: string
                        example: No such input
                      reply:
                        type: string
                        example: customMessage
                      sender:
                        type: string
                        example: ''
                      success:
                        type: boolean
                        example: true
                      to:
                        type: string
                        example: Some+Listener
        '400':
          description: bad request
  /api/command/joinMeeting:
    get:
      summary: joinMeeting
      description: 'Join a Zoom or Teams meeting.'
      tags:
      - Meeting Control
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
        example: optional id to track this command, will be returned in the response
      - name: meetingProvider
        in: query
        description: zoom or ms-teams
        required: false
        schema:
          type: string
        example: zoom
      - name: meetingId
        in: query
        description: id of the meeting to join
        required: false
        schema:
          type: string
        example: '1234353121'
      - name: name
        in: query
        description: name of this meeting participant
        required: false
        schema:
          type: string
        example: My Name
      - name: password
        in: query
        description: optional password
        required: false
        schema:
          type: string
        example: abc123BaddPazzword
      - name: subscribe
        in: query
        description: enable to receive meeting status updates
        required: false
        schema:
          type: string
        example: test
      - name: showUI
        in: query
        description: if set, open Zoom UI
        required: false
        schema:
          type: number
        example: 0
      - name: sendVideo
        in: query
        description: if set, send video / audio to zoom virtual webcam
        required: false
        schema:
          type: number
        example: 1
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: joinMeeting
                      reply:
                        type: string
                        example: joinMeeting
                      requestId:
                        type: string
                        example: optional+id+to+track+this+command%2C+will+be+returned+in+the+response
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/meetingStatus:
    get:
      summary: meetingStatus
      description: 'Get current meeting status.'
      tags:
      - Meeting Control
      parameters: []
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: meetingStatus
                      reply:
                        type: string
                        example: meetingStatus
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/leaveMeeting:
    get:
      summary: leaveMeeting
      description: 'Leave current meeting.'
      tags:
      - Meeting Control
      parameters: []
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: leaveMeeting
                      reply:
                        type: string
                        example: leaveMeeting
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/subscribe:
    get:
      summary: subscribe
      description: "Configure a notification subscription to get information when\
        \ titles change play state, when their data is updated,\n                \
        \  or when a system event happens. You can subscribe to notifications that\
        \ originate from a specific \"sender\" and\n                  can specify\
        \ an input and title id, both or neither.\n                  Internally, Captivate\
        \ registers a different subscription for each \"sender\" and each \"sender\"\
        \ can specify one or more\n                  inputs, title ids, and events,\
        \ each separated by commas to filter which notifications that sender will\
        \ send.\n                  If a sender by the provided name doesn't exist,\
        \ it will be created.\n                  If a sender by the name already exists,\
        \ the events, inputs, and title ids will be appended to the existing ones.\n\
        \                  NOTE: In the JavaScript/WebSocket API, all connected clients\
        \ get all notifications from all subscriptions,\n                  so you\
        \ will need to do your own filtering by sender, input, and/or title id on\
        \ each received notification.\n> Because this endpoint doesn't use any variables,\
        \ it can also be accessed using a GET request."
      tags:
      - Notifications
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: id
        in: query
        description: Comma-separated list of title ids. Use empty string or "all"
          for all titles.
        required: false
        schema:
          type: string
        example: ''
      - name: input
        in: query
        description: Comma-separated list of input names. Use empty string or "all"
          for all inputs.
        required: false
        schema:
          type: string
        example: ''
      - name: sender
        in: query
        description: The name of the subscription you are creating/modifying.
        required: false
        schema:
          type: string
        example: ''
      - name: events
        in: query
        description: Comma-separated list of event types. Currently, 'play' for play
          state, 'data' for variable updates, and 'event.*' for other events like
          chat message updates. For specific events, you can specify them individually
          too, like 'event.onchatmessageevent'
        required: false
        schema:
          type: string
        example: play,data
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties: {}
        '400':
          description: bad request
  /api/command/unSubscribe:
    get:
      summary: unSubscribe
      description: 'Remove a title, input, or event from a notification subscription
        identified by "sender." When a sender has no events, it will be removed from
        the Captivate subscription list.'
      tags:
      - Notifications
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: id
        in: query
        description: Comma-separated list of title ids. Use empty string or "all"
          for all titles.
        required: false
        schema:
          type: string
        example: all
      - name: input
        in: query
        description: Comma-separated list of input names. Use empty string or "all"
          for all inputs.
        required: false
        schema:
          type: string
        example: ''
      - name: sender
        in: query
        description: The name of the subscription you are modifying.
        required: false
        schema:
          type: string
        example: ''
      - name: events
        in: query
        description: Comma-separated list of event types. Currently, 'play' for play
          state and 'data' for variable updates
        required: false
        schema:
          type: string
        example: play,data
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: unSubscribe
                      error:
                        type: string
                        example: cannot do an unsubscribe with the default notification
                          sender
                      id:
                        type: string
                        example: all
                      reply:
                        type: string
                        example: unSubscribe
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/getSubscriptions:
    get:
      summary: getSubscriptions
      description: 'Get a list of all active subscriptions with their sender names,
        inputs, titles, and events.'
      tags:
      - Notifications
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: sender
        in: query
        description: The name of the subscription you are querying. Leave blank to
          retrieve all subscriptions.
        required: false
        schema:
          type: string
        example: ''
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: getSubscriptions
                      reply:
                        type: string
                        example: getSubscriptions
                      sender:
                        type: string
                        example: ''
                      senders:
                        type: array
                        items:
                          type: object
                          properties:
                            events:
                              type: string
                              example: play,control,data,play-data
                            id:
                              type: string
                              example: ''
                            input:
                              type: string
                              example: ''
                            is_default:
                              type: string
                              example: '1'
                            name:
                              type: string
                              example: ''
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/getTimelineDuration:
    get:
      summary: getTimelineDuration
      description: 'get the duration of the graphic timeline attached to this title.'
      tags:
      - Title Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: id
        in: query
        description: 'optional: UUID of title/layer to operate on'
        required: false
        schema:
          type: string
      - name: title
        in: query
        description: 'optional: Name (or UUID) of the title to operate on.'
        required: false
        schema:
          type: string
        example: Title Name
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: getTimelineDuration
                      error:
                        type: string
                        example: unable to find title from 'title' or 'id' attributes
                      reply:
                        type: string
                        example: getTimelineDuration
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/selectTitle:
    get:
      summary: selectTitle
      description: 'same as clicking on the title in the UI.'
      tags:
      - Title Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: title
        in: query
        description: 'optional: Name (or UUID) of the title to operate on.'
        required: false
        schema:
          type: string
        example: Title Name
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: selectTitle
                      error:
                        type: string
                        example: No such title name
                      reply:
                        type: string
                        example: selectTitle
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/setTitleInput:
    get:
      summary: setTitleInput
      description: 'Assign an input to the title.'
      tags:
      - Title Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: id
        in: query
        description: 'optional: UUID of title/layer to operate on'
        required: false
        schema:
          type: string
      - name: title
        in: query
        description: 'optional: Name (or UUID) of the title to operate on.'
        required: false
        schema:
          type: string
        example: Test
      - name: input
        in: query
        description: 'optional: Input name, used to select the title(s) to operate
          on'
        required: false
        schema:
          type: string
        example: inputName
      - name: merge
        in: query
        description: when 1, the new input will be combined with existing inputs on
          the title
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: setTitleInput
                      reply:
                        type: string
                        example: setTitleInput
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/removeTitleInput:
    get:
      summary: removeTitleInput
      description: 'Remove an input from the title.'
      tags:
      - Title Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: id
        in: query
        description: 'optional: UUID of title/layer to operate on'
        required: false
        schema:
          type: string
      - name: title
        in: query
        description: 'optional: Name (or UUID) of the title to operate on. Either title name or id are required.'
        required: false
        schema:
          type: string
        example: Test
      - name: input
        in: query
        description: 'required: Input name to remove from the title.'
        required: true
        schema:
          type: string
        example: inputName
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: setTitleInput
                      reply:
                        type: string
                        example: setTitleInput
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/setTitleName:
    get:
      summary: setTitleName
      description: 'Assign a new name to the title. The title can be selected by either
        id or title name.'
      tags:
      - Title Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: id
        in: query
        description: 'optional: UUID of title/layer to operate on'
        required: false
        schema:
          type: string
      - name: title
        in: query
        description: 'optional: Name (or UUID) of the title to operate on.'
        required: false
        schema:
          type: string
        example: Current Name
      - name: newName
        in: query
        description: new name for the title/layer
        required: false
        schema:
          type: string
        example: New Name
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: setTitleName
                      error:
                        type: string
                        example: no title found.
                      reply:
                        type: string
                        example: setTitleName
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/setTitlePosition:
    get:
      summary: setTitlePosition
      description: 'Reposition a title in the list.'
      tags:
      - Title Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: id
        in: query
        description: 'optional: UUID of title/layer to operate on'
        required: false
        schema:
          type: string
      - name: title
        in: query
        description: 'optional: Name (or UUID) of the title to operate on.'
        required: false
        schema:
          type: string
        example: Test
      - name: position
        in: query
        description: Desired location in play list
        required: false
        schema:
          type: number
        example: 3
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: setTitlePosition
                      reply:
                        type: string
                        example: setTitlePosition
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/newTitle:
    get:
      summary: newTitle
      description: 'Create a new title/layer.'
      tags:
      - Title Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: newId
        in: query
        description: Optional ID to assign to the title
        required: false
        schema:
          type: string
        example: '{85DB25322-F9BF-4D40-AC16-85DB05E21BF8}'
      - name: newName
        in: query
        description: Optional name to give the title
        required: false
        schema:
          type: string
        example: Title Name
      - name: newPosition
        in: query
        description: Optional position in the list
        required: false
        schema:
          type: number
        example: 2
      - name: channel
        in: query
        description: Channel to use for title
        required: false
        schema:
          type: number
        example: 1
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: newTitle
                      reply:
                        type: string
                        example: newTitle
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/duplicateTitle:
    get:
      summary: duplicateTitle
      description: 'Create a copy of the selected title/layer.'
      tags:
      - Title Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: id
        in: query
        description: 'optional: UUID of title/layer to operate on'
        required: false
        schema:
          type: string
        example: '{218f46f9-e881-49a8-ab17-03c8f9cc8461}'
      - name: title
        in: query
        description: 'optional: Name (or UUID) of the title to operate on.'
        required: false
        schema:
          type: string
      - name: newId
        in: query
        description: Optional ID to assign to the new title
        required: false
        schema:
          type: string
        example: '{85DB25322-F9BF-4D40-AC16-85DB05E21BF8}'
      - name: newName
        in: query
        description: Optional name to give the title
        required: false
        schema:
          type: string
        example: New Title Name
      - name: newPosition
        in: query
        description: Optional position in the list
        required: false
        schema:
          type: number
        example: 2
      - name: channel
        in: query
        description: Channel to use for title
        required: false
        schema:
          type: number
        example: 0
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: duplicateTitle
                      id:
                        type: string
                        example: '{954d679e-9977-43eb-96ce-83f122b0d786}'
                      reply:
                        type: string
                        example: duplicateTitle
                      success:
                        type: boolean
                        example: true
                      title:
                        type: string
                        example: New+Title+Name
        '400':
          description: bad request
  /api/command/loadTitle:
    get:
      summary: loadTitle
      description: 'Load a title from file, and optionally give it a new name, position,
        and id.'
      tags:
      - Title Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: file
        in: query
        description: File to load the title from. Ends with .nbtitle
        required: false
        schema:
          type: string
        example: c:\desktop\dot2.nbtitle
      - name: newId
        in: query
        description: Optional ID to assign to the title
        required: false
        schema:
          type: string
        example: '{85DB25322-F9BF-4D40-AC16-85DB05E21BF8}'
      - name: newName
        in: query
        description: Optional name to give the title
        required: false
        schema:
          type: string
        example: Title Name
      - name: newPosition
        in: query
        description: Optional position in the list
        required: false
        schema:
          type: number
        example: 2
      - name: channel
        in: query
        description: Channel of list
        required: false
        schema:
          type: number
        example: 1
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: loadTitle
                      reply:
                        type: string
                        example: loadTitle
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/saveTitle:
    get:
      summary: saveTitle
      description: 'Save the selected title to file.'
      tags:
      - Title Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: id
        in: query
        description: 'optional: UUID of title/layer to operate on'
        required: false
        schema:
          type: string
        example: '{218f46f9-e881-49a8-ab17-03c8f9cc8461}'
      - name: title
        in: query
        description: 'optional: Name (or UUID) of the title to operate on.'
        required: false
        schema:
          type: string
      - name: file
        in: query
        description: File path to save to. Ends with .nbtitle
        required: false
        schema:
          type: string
        example: c:\desktop\dot2.nbtitle
      - name: channel
        in: query
        description: Channel of title
        required: false
        schema:
          type: number
        example: 1
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: saveTitle
                      id:
                        type: string
                        example: '{218f46f9-e881-49a8-ab17-03c8f9cc8461}'
                      reply:
                        type: string
                        example: saveTitle
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/deleteTitle:
    get:
      summary: deleteTitle
      description: 'Delete the requested title/layer.'
      tags:
      - Title Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: id
        in: query
        description: 'optional: UUID of title/layer to operate on'
        required: false
        schema:
          type: string
        example: '{218f46f9-e881-49a8-ab17-03c8f9cc8461}'
      - name: title
        in: query
        description: 'optional: Name (or UUID) of the title to operate on.'
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: deleteTitle
                      id:
                        type: string
                        example: '{218f46f9-e881-49a8-ab17-03c8f9cc8461}'
                      reply:
                        type: string
                        example: deleteTitle
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/openDesigner:
    get:
      summary: openDesigner
      description: 'Open the title designer with the requested title..'
      tags:
      - Title Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: id
        in: query
        description: 'optional: UUID of title/layer to operate on'
        required: false
        schema:
          type: string
        example: '{218f46f9-e881-49a8-ab17-03c8f9cc8461}'
      - name: title
        in: query
        description: 'optional: Name (or UUID) of the title to operate on.'
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: openDesigner
                      id:
                        type: string
                        example: '{218f46f9-e881-49a8-ab17-03c8f9cc8461}'
                      reply:
                        type: string
                        example: openDesigner
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/closeDesigner:
    get:
      summary: closeDesigner
      description: 'Close the title designer..'
      tags:
      - Title Commands
      parameters: []
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: closeDesigner
                      reply:
                        type: string
                        example: closeDesigner
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/setOutputDevice:
    get:
      summary: setOutputDevice
      description: "Set the current device to use for channel output.\n          \
        \           NOTE: only some products allow you to set different output devices\
        \ for different channels.\n> Because this endpoint doesn't use any variables,\
        \ it can also be accessed using a GET request."
      tags:
      - Output Commands
      parameters:
      - name: device
        in: query
        description: the name of the output device to use, i.e. NDI
        required: false
        schema:
          type: string
      - name: channels
        in: query
        description: 'optional: comma-separated list of channel indexes to connect
          to this device'
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: setOutputDevice
                      reply:
                        type: string
                        example: setOutputDevice
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/getOutputDevice:
    get:
      summary: getOutputDevice
      description: 'Get the current video format settings.'
      tags:
      - Output Commands
      parameters: []
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: getOutputDevice
                      device:
                        type: string
                        example: NDI
                      reply:
                        type: string
                        example: getOutputDevice
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/setStreamHostServers:
    get:
      summary: setStreamHostServers
      description: 'Set the container format for the stream..'
      tags:
      - Output Commands
      parameters:
      - name: containerFormat
        in: query
        description: RTMP for now
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: setStreamHostServers
                      error:
                        type: string
                        example: unknown command
                      reply:
                        type: string
                        example: setStreamHostServers
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/getStreamHostServer:
    get:
      summary: getStreamHostServer
      description: 'Get information on the current stream..'
      tags:
      - Output Commands
      parameters: []
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: getStreamHostServer
                      reply:
                        type: string
                        example: getStreamHostServer
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/startStreaming:
    get:
      summary: startStreaming
      description: 'Start an RTMP stream.'
      tags:
      - Output Commands
      parameters:
      - name: choice
        in: query
        description: Service name, like "Facebook"
        required: false
        schema:
          type: string
      - name: serverUrl
        in: query
        description: rtmp(s) server url
        required: false
        schema:
          type: string
      - name: streamKey
        in: query
        description: stream key for the rtmp server
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: startStreaming
                      reply:
                        type: string
                        example: startStreaming
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/stopStreaming:
    get:
      summary: stopStreaming
      description: 'Stop the RTMP stream.'
      tags:
      - Output Commands
      parameters: []
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: stopStreaming
                      reply:
                        type: string
                        example: stopStreaming
                      folder:
                        type: string
                        example: ''
                      subfolder:
                        type: string
                        example: ''
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/setPngOutPath:
    get:
      summary: setPngOutPath
      description: 'Specify the path to save PNG files to when rendering titles to PNG.'
      tags:
      - Output Commands
      parameters:
      - name: folder
        in: query
        description: 'Folder to set as the main folder for PNG output files: "c:\\desktop\\pngout". This setting will be used for all PNG renders.'
        required: false
        schema:
          type: string
        example: c:\desktop\pngout
      - name: subfolder
        in: query
        description: 'Subfolder under the main folder, use this during rendering to temporarily change the output folder without changing the main folder.'
        required: false
        schema:
          type: string
        example: subfolder
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: setPngOutPath
                      reply:
                        type: string
                        example: stopStreaming
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/getVideoFormat:
    get:
      summary: getVideoFormat
      description: 'Get the current video format settings.'
      tags:
      - Project Commands
      parameters: []
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: getVideoFormat
                      frameRate:
                        type: string
                        example: '29.97'
                      height:
                        type: string
                        example: '1080'
                      interlaced:
                        type: string
                        example: '0'
                      reply:
                        type: string
                        example: getVideoFormat
                      success:
                        type: boolean
                        example: true
                      width:
                        type: string
                        example: '1920'
        '400':
          description: bad request
  /api/command/setVideoFormat:
    get:
      summary: setVideoFormat
      description: 'Set the project video format.'
      tags:
      - Project Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: width
        in: query
        description: width of project
        required: false
        schema:
          type: number
        example: 1280
      - name: height
        in: query
        description: height of project
        required: false
        schema:
          type: number
        example: 720
      - name: frameRate
        in: query
        description: current frames per second
        required: false
        schema:
          type: number
        example: 30
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: setVideoFormat
                      frameRate:
                        type: string
                        example: '30'
                      height:
                        type: string
                        example: '720'
                      interlaced:
                        type: string
                        example: '0'
                      reply:
                        type: string
                        example: setVideoFormat
                      success:
                        type: boolean
                        example: true
                      width:
                        type: string
                        example: '1280'
        '400':
          description: bad request
  /api/command/loadProject:
    get:
      summary: loadProject
      description: 'Load a project from file, replacing the current project..'
      tags:
      - Project Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: autoCache
        in: query
        description: set to 1 to enable auto-cache
        required: false
        schema:
          type: string
      - name: videoSource
        in: query
        description: if the project uses a video source, specify it by name here
        required: false
        schema:
          type: string
      - name: file
        in: query
        description: File path to load the project from. (nbtlproj or zip are allowed)
        required: false
        schema:
          type: string
        example: c:\desktop\dot2.nbtlproj
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties: {}
        '400':
          description: bad request
  /api/command/saveProject:
    get:
      summary: saveProject
      description: 'Save the current project to a file..'
      tags:
      - Project Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: file
        in: query
        description: File path to save the project to, can end with .nbtlproj or .zip
        required: false
        schema:
          type: string
        example: c:\desktop\dot2.nbtlproj
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties: {}
        '400':
          description: bad request
  /api/command/closeProject:
    get:
      summary: closeProject
      description: 'Close the current project, optionally saving it first..'
      tags:
      - Project Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: saveProject
        in: query
        description: set to 1 to save first
        required: false
        schema:
          type: number
        example: 1
      - name: closeProject
        in: query
        description: set to 1 to confirm the close
        required: false
        schema:
          type: number
        example: 1
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: closeProject
                      filePath:
                        type: string
                        example: /Users/Jeff/Desktop/simple-leaderboard.nbtlproj
                      reply:
                        type: string
                        example: closeProject
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/checkProjectEdited:
    get:
      summary: checkProjectEdited
      description: 'Read data about the current project: has it been changed, is it
        cached, is it customized, did it come from the library, and more..'
      tags:
      - Project Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: checkProjectEdited
                      filePath:
                        type: string
                        example: ''
                      hasChanged:
                        type: string
                        example: '1'
                      isCached:
                        type: string
                        example: '0'
                      isCustomized:
                        type: string
                        example: '0'
                      isLibraryScene:
                        type: string
                        example: '0'
                      newFilePath:
                        type: string
                        example: ''
                      reply:
                        type: string
                        example: checkProjectEdited
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/getCurrentProject:
    get:
      summary: getCurrentProject
      description: 'Get the full filepath of the current project along with its icon
        if it has one..'
      tags:
      - Project Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: getCurrentProject
                      reply:
                        type: string
                        example: getCurrentProject
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/getRecentProjects:
    get:
      summary: getRecentProjects
      description: 'Returns a list of recently opened projects with metadata.'
      tags:
      - Project Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: getRecentProjects
                      recentProjects:
                        type: array
                        items:
                          type: object
                          properties:
                            creationDate:
                              type: string
                              example: '2025-02-20T10:40:30'
                            extension:
                              type: string
                              example: nbtlproj
                            filename:
                              type: string
                              example: simple-leaderboard.nbtlproj
                            filesize:
                              type: number
                              example: 1580718
                            modifiedDate:
                              type: string
                              example: '2025-02-20T10:40:30'
                            name:
                              type: string
                              example: simple-leaderboard
                            notes:
                              type: string
                              example: ''
                            tags:
                              type: array
                              items:
                                type: object
                                properties: {}
                                additionalProperties: true
                            thumbnailData:
                              type: string
                              example: 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
                            thumbnailUri:
                              type: string
                              example: file:///Users/Jeff/Desktop/simple-leaderboard.nbtlproj.jpg
                            uri:
                              type: string
                              example: file:///Users/Jeff/Desktop/simple-leaderboard.nbtlproj
                      reply:
                        type: string
                        example: getRecentProjects
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/loadPlaylist:
    get:
      summary: loadPlaylist
      description: 'Load a layer list from file into the requested channel / tab..'
      tags:
      - Project Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: file
        in: query
        description: File path to load the layer list from. Should end with .nbplist
        required: false
        schema:
          type: string
        example: c:\desktop\dot2.nbplist
      - name: channel
        in: query
        description: Channel of layer list
        required: false
        schema:
          type: number
        example: 1
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: loadPlaylist
                      reply:
                        type: string
                        example: loadPlaylist
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/clearPlaylist:
    get:
      summary: clearPlaylist
      description: 'Clear titles/layers from the requested channel.'
      tags:
      - Project Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: channel
        in: query
        description: Channel of layer list
        required: false
        schema:
          type: number
        example: 0
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: clearPlaylist
                      reply:
                        type: string
                        example: clearPlaylist
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/savePlaylist:
    get:
      summary: savePlaylist
      description: 'Save the layer list from a specific channel / tab..'
      tags:
      - Project Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: file
        in: query
        description: File path to save the layer list to. Should end with .nbplist
        required: false
        schema:
          type: string
        example: c:\desktop\dot2.nbplist
      - name: channel
        in: query
        description: Channel of layer list
        required: false
        schema:
          type: number
        example: 1
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: savePlaylist
                      reply:
                        type: string
                        example: savePlaylist
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/setProfile:
    get:
      summary: setProfile
      description: "Creates an input dynamically at runtime. The profile field must\
        \ contain the full XML of an input.\n                      After creating\
        \ an input, you can then assign it to a title by name using the attachProfile\
        \ command.\n                      NOTE: This function can only be used through\
        \ the scheduleCommandXml API as shown below:\n> Because this endpoint doesn't\
        \ use any variables, it can also be accessed using a GET request."
      tags:
      - Input Commands
      parameters:
      - name: profile
        in: query
        description: ''
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: setProfile
                      error:
                        type: string
                        example: Invalid profile data.
                      reply:
                        type: string
                        example: setProfile
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/attachProfile:
    get:
      summary: attachProfile
      description: "Connects a specific input profile to a title. It works exactly\
        \ like setTitleInput\n                      except this command allows you\
        \ to use 'input' to find a title by input while that one\n               \
        \       reuires the use of title name/id.\n> Because this endpoint doesn't\
        \ use any variables, it can also be accessed using a GET request."
      tags:
      - Input Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: id
        in: query
        description: 'optional: UUID of title/layer to operate on'
        required: false
        schema:
          type: string
        example: '{218f46f9-e881-49a8-ab17-03c8f9cc8461}'
      - name: title
        in: query
        description: 'optional: Name (or UUID) of the title to operate on.'
        required: false
        schema:
          type: string
      - name: input
        in: query
        description: 'optional: Input name, used to select the title(s) to operate
          on'
        required: false
        schema:
          type: string
      - name: merge
        in: query
        description: set to 1 to merge the new input with existing inputs
        required: false
        schema:
          type: string
      - name: profile
        in: query
        description: Name of profile (data controller) to add to the found title(s)
        required: false
        schema:
          type: string
        example: 'Test: Profile Name'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: attachProfile
                      error:
                        type: string
                        example: title not found
                      id:
                        type: string
                        example: '{218f46f9-e881-49a8-ab17-03c8f9cc8461}'
                      reply:
                        type: string
                        example: attachProfile
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/changeInputName:
    get:
      summary: changeInputName
      description: 'Renames an input controller.'
      tags:
      - Input Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: input
        in: query
        description: Name of input / profile to change.
        required: false
        schema:
          type: string
        example: 'Test: Input Name 1'
      - name: newName
        in: query
        description: New name to assign to it.
        required: false
        schema:
          type: string
        example: 'Test: Dog Walker Mark 5'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: changeInputName
                      error:
                        type: string
                        example: unknown command
                      reply:
                        type: string
                        example: changeInputName
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/setDynamic:
    get:
      summary: setDynamic
      description: 'Change the dynamic state of a specific title variable.'
      tags:
      - Variable Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: id
        in: query
        description: 'optional: UUID of title/layer to operate on'
        required: false
        schema:
          type: string
      - name: title
        in: query
        description: 'optional: Name (or UUID) of the title to operate on.'
        required: false
        schema:
          type: string
        example: Test
      - name: channel
        in: query
        description: channel to query or -1 for all; channels are numbered from left
          to right starting at 0 regardless of their names in the project
        required: false
        schema:
          type: number
        example: 0
      - name: variable
        in: query
        description: name of the variable
        required: false
        schema:
          type: string
        example: message
      - name: dynamic
        in: query
        description: 1 to set to dynamic, 0 to set to static.
        required: false
        schema:
          type: number
        example: 1
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: setDynamic
                      reply:
                        type: string
                        example: setDynamic
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/assignVariable:
    get:
      summary: assignVariable
      description: 'Assign an input variable to a title variable..'
      tags:
      - Variable Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: id
        in: query
        description: 'optional: UUID of title/layer to operate on'
        required: false
        schema:
          type: string
      - name: title
        in: query
        description: 'optional: Name (or UUID) of the title to operate on.'
        required: false
        schema:
          type: string
        example: Test
      - name: input
        in: query
        description: 'optional: Input name, used to select the title(s) to operate
          on'
        required: false
        schema:
          type: string
        example: ''
      - name: inputVar
        in: query
        description: Name of the input variable.
        required: false
        schema:
          type: string
        example: ''
      - name: titleVar
        in: query
        description: Name of the title variable to connect input to.
        required: false
        schema:
          type: string
        example: ''
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: assignVariable
                      reply:
                        type: string
                        example: assignVariable
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/getAllVideoIns:
    get:
      summary: getAllVideoIns
      description: 'Returns a list of all video devices available for input.'
      tags:
      - Video Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: verbose
        in: query
        description: set to 1 for more information
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: getAllVideoIns
                      count:
                        type: string
                        example: '23'
                      reply:
                        type: string
                        example: getAllVideoIns
                      success:
                        type: boolean
                        example: true
                      videoIns:
                        type: array
                        items:
                          type: string
                          example: NDI Video
        '400':
          description: bad request
  /api/command/getVideoInInfo:
    get:
      summary: getVideoInInfo
      description: 'Returns a set of all video devices available and their status.'
      tags:
      - Video Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: videoIn
        in: query
        description: The name of the video input to query.
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: getVideoInInfo
                      reply:
                        type: string
                        example: getVideoInInfo
                      success:
                        type: boolean
                        example: true
                      videoIns:
                        type: array
                        items:
                          type: object
                          properties:
                            add:
                              type: string
                              example: '0'
                            audio:
                              type: string
                              example: '0'
                            config:
                              type: string
                              example: BB86C477-373F-49D9-AA4B-CE86A0E883F1
                            name:
                              type: string
                              example: NDI Video
                            setup:
                              type: string
                              example: '0'
                            type:
                              type: string
                              example: Mac
                            video:
                              type: string
                              example: '1'
        '400':
          description: bad request
  /api/command/getVideoInIcon:
    get:
      summary: getVideoInIcon
      description: 'Retrieve an encoded png of the specified stream in the width and
        height requested.'
      tags:
      - Video Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: width
        in: query
        description: required width in pixels
        required: true
        schema:
          type: string
      - name: height
        in: query
        description: required height in pixels
        required: true
        schema:
          type: string
      - name: video
        in: query
        description: The name of the video input to query.
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: getVideoInIcon
                      error:
                        type: string
                        example: missing width or height or video attributes
                      reply:
                        type: string
                        example: getVideoInIcon
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/getOpenedVideoIns:
    get:
      summary: getOpenedVideoIns
      description: 'Get a list of all opened video devices..'
      tags:
      - Video Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: getOpenedVideoIns
                      reply:
                        type: string
                        example: getOpenedVideoIns
                      success:
                        type: boolean
                        example: true
                      videoIns:
                        type: array
                        items:
                          type: object
                          properties: {}
                          additionalProperties: true
        '400':
          description: bad request
  /api/command/openVideoIn:
    get:
      summary: openVideoIn
      description: 'Open a video device by named port. NOTE: This call uses "video"
        as the field name, not "videoIn.".'
      tags:
      - Video Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: video
        in: query
        description: Name of the video device to open.
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: openVideoIn
                      reply:
                        type: string
                        example: openVideoIn
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/closeVideoIn:
    get:
      summary: closeVideoIn
      description: 'Close a video device by named port. NOTE: This call uses "video"
        as the field name, not "videoIn.".'
      tags:
      - Video Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: video
        in: query
        description: Name of the video device to open.
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: closeVideoIn
                      reply:
                        type: string
                        example: closeVideoIn
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/switchVideoIn:
    get:
      summary: switchVideoIn
      description: 'Make a specific video device active in the switcher..'
      tags:
      - Video Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: channel
        in: query
        description: A specific channel index must be specified.
        required: false
        schema:
          type: string
      - name: video
        in: query
        description: Name of the video device to open.
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: switchVideoIn
                      reply:
                        type: string
                        example: switchVideoIn
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/getAllAudioIns:
    get:
      summary: getAllAudioIns
      description: 'Returns a list of all audio devices available for input.'
      tags:
      - Audio Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      audioIns:
                        type: array
                        items:
                          type: string
                          example: JOSEPH.LOCAL (Captivate Channel 1)
                      command:
                        type: string
                        example: getAllAudioIns
                      count:
                        type: string
                        example: '16'
                      reply:
                        type: string
                        example: getAllAudioIns
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/getOpenedAudioIns:
    get:
      summary: getOpenedAudioIns
      description: 'Get a list of all opened audio devices..'
      tags:
      - Audio Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: mixer
        in: query
        description: optional name of mixer to query
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      audioOpened:
                        type: array
                        items:
                          type: object
                          properties: {}
                          additionalProperties: true
                      command:
                        type: string
                        example: getOpenedAudioIns
                      leftLevel:
                        type: string
                        example: '1.53358e-19'
                      reply:
                        type: string
                        example: getOpenedAudioIns
                      rightLevel:
                        type: string
                        example: '4.0178e-41'
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/replay_commands:
    get:
      summary: replay_commands
      description: 'Get a list of all the available replay commands..'
      tags:
      - Instant Replay Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: replay_commands
                      commands:
                        type: array
                        items:
                          type: string
                          example: replay_is_trial_mode
                      reply:
                        type: string
                        example: replay_commands
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/replay_is_trial_mode:
    get:
      summary: replay_is_trial_mode
      description: 'Get a boolean value indicating if Instant Replay has been properly
        licensed. Returns an object with a boolean named `isTrial`.'
      tags:
      - Instant Replay Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: replay_is_trial_mode
                      isTrial:
                        type: boolean
                        example: true
                      reply:
                        type: string
                        example: replay_is_trial_mode
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/replay_enter_playback:
    get:
      summary: replay_enter_playback
      description: 'Enters Instant Replay playback mode if it is enabled..'
      tags:
      - Instant Replay Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: replay_enter_playback
                      reply:
                        type: string
                        example: replay_enter_playback
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/replay_exit_playback:
    get:
      summary: replay_exit_playback
      description: 'Exits Instant Replay playback mode..'
      tags:
      - Instant Replay Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: replay_exit_playback
                      reply:
                        type: string
                        example: replay_exit_playback
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/replay_get_settings:
    get:
      summary: replay_get_settings
      description: 'Get the current settings. Callback will have a settings object..'
      tags:
      - Instant Replay Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: replay_get_settings
                      reply:
                        type: string
                        example: replay_get_settings
                      settings:
                        type: object
                        properties:
                          armedPortList:
                            type: array
                            items:
                              type: object
                              properties: {}
                              additionalProperties: true
                          bufferLength:
                            type: number
                            example: 15
                          muteGraphicsOnReplay:
                            type: boolean
                            example: true
                          playSpeed:
                            type: number
                            example: 0.5
                          transIn:
                            type: string
                            example: ''
                          transOut:
                            type: string
                            example: ''
                          usesExternalSwitcher:
                            type: boolean
                            example: true
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/replay_set_settings:
    get:
      summary: replay_set_settings
      description: 'Set new Instant Replay settings. Note: `settings` parameter should
        follow the same structure as the settings object from replay_get_settings.'
      tags:
      - Instant Replay Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: settings
        in: query
        description: '{''armedPortList'': [], ''bufferLength'': 15, ''muteGraphicsOnReplay'':
          True, ''playSpeed'': 0.5, ''transIn'': '''', ''transOut'': '''', ''usesExternalSwitcher'':
          False}'
        required: false
        schema:
          type: object
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: replay_set_settings
                      reply:
                        type: string
                        example: replay_set_settings
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/replay_set_replay_speed:
    get:
      summary: replay_set_replay_speed
      description: 'Change the replay speed.Note: The settings object uses `playSpeed`
        but this command uses `speed` to mean the same thing..'
      tags:
      - Instant Replay Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: speed
        in: query
        description: '0.5'
        required: false
        schema:
          type: number
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: replay_set_replay_speed
                      error:
                        type: string
                        example: invalid params
                      reply:
                        type: string
                        example: replay_set_replay_speed
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/replay_get_replay_speed:
    get:
      summary: replay_get_replay_speed
      description: 'Get the current replay speed..'
      tags:
      - Instant Replay Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: speed
        in: query
        description: '0.5'
        required: false
        schema:
          type: number
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: replay_get_replay_speed
                      reply:
                        type: string
                        example: replay_get_replay_speed
                      speed:
                        type: number
                        example: 0.5
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/replay_enable:
    get:
      summary: replay_enable
      description: 'Does the same as starting the instant replay if there are any
        armed inputs..'
      tags:
      - Instant Replay Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: speed
        in: query
        description: '0.5'
        required: false
        schema:
          type: number
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: replay_enable
                      reply:
                        type: string
                        example: replay_enable
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/replay_get_inputs:
    get:
      summary: replay_get_inputs
      description: 'Get a list of available inputs that can be used for Instant Replay.'
      tags:
      - Instant Replay Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: speed
        in: query
        description: '0.5'
        required: false
        schema:
          type: number
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: replay_get_inputs
                      inputs:
                        type: array
                        items:
                          type: object
                          properties: {}
                          additionalProperties: true
                      reply:
                        type: string
                        example: replay_get_inputs
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/replay_arm_inputs:
    get:
      summary: replay_arm_inputs
      description: 'Arms a list of inputs and immediately starts the Instant Replay
        buffer. You can see the list of available inputs by using replay_get_inputs.'
      tags:
      - Instant Replay Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: inputs
        in: query
        description: '[''USB Camera VID:1133 PID:2075'']'
        required: false
        schema:
          type: array
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: replay_arm_inputs
                      reply:
                        type: string
                        example: replay_arm_inputs
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/replay_disarm_inputs:
    get:
      summary: replay_disarm_inputs
      description: 'Removes an input from the armed inputs list. If there are no armed
        inputs, the Instant Replay will be disabled..'
      tags:
      - Instant Replay Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: inputs
        in: query
        description: '[''USB Camera VID:1133 PID:2075'']'
        required: false
        schema:
          type: array
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: replay_disarm_inputs
                      reply:
                        type: string
                        example: replay_disarm_inputs
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/replay_get_play_info:
    get:
      summary: replay_get_play_info
      description: 'Get some statistics about the current Instant Replay playback..'
      tags:
      - Instant Replay Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: inputs
        in: query
        description: '[''USB Camera VID:1133 PID:2075'']'
        required: false
        schema:
          type: array
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: replay_get_play_info
                      frameRate:
                        type: number
                        example: 29.97
                      replayDuration:
                        type: number
                        example: 0
                      replayEnd:
                        type: number
                        example: 0
                      replayScrubStart:
                        type: number
                        example: 0
                      replayStart:
                        type: number
                        example: 0
                      replayTime:
                        type: number
                        example: 15
                      reply:
                        type: string
                        example: replay_get_play_info
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/replay_enable_scrubbing:
    get:
      summary: replay_enable_scrubbing
      description: 'Turn scrubbing on or off. Note: When set to `true` will leave
        recording mode and enter replay mode..'
      tags:
      - Instant Replay Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: enable
        in: query
        description: 'True'
        required: false
        schema:
          type: boolean
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: replay_enable_scrubbing
                      reply:
                        type: string
                        example: replay_enable_scrubbing
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/replay_play_pause:
    get:
      summary: replay_play_pause
      description: 'If in replay mode, does the same as clicking the play arrow..'
      tags:
      - Instant Replay Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: enable
        in: query
        description: 'True'
        required: false
        schema:
          type: boolean
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: replay_play_pause
                      reply:
                        type: string
                        example: replay_play_pause
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/replay_set_scrub_position:
    get:
      summary: replay_set_scrub_position
      description: 'If in replay mode, sets the scrub position according to seconds
        in the replay buffer. If the replay buffer is 20 seconds long, a position
        value of 10 will put the scrub bar in the center of the buffer..'
      tags:
      - Instant Replay Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: position
        in: query
        description: '10.3'
        required: false
        schema:
          type: number
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: replay_set_scrub_position
                      reply:
                        type: string
                        example: replay_set_scrub_position
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/replay_set_in_point:
    get:
      summary: replay_set_in_point
      description: 'Set the Instant Replay play-in point. Takes a `position` parameter
        just like the previous command, but can be usedwhether replay mode is active
        or not..'
      tags:
      - Instant Replay Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: position
        in: query
        description: '10.3'
        required: false
        schema:
          type: number
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: replay_set_in_point
                      reply:
                        type: string
                        example: replay_set_in_point
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/replay_set_out_point:
    get:
      summary: replay_set_out_point
      description: 'Set the Instant Replay play-out point. Same as above..'
      tags:
      - Instant Replay Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: position
        in: query
        description: '10.3'
        required: false
        schema:
          type: number
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: replay_set_out_point
                      reply:
                        type: string
                        example: replay_set_out_point
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/tunnel:
    get: 
      summary: tunnel
      description: 'get the current tunnel id'
      tags:
      - Status Information
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  tunnel:
                    type: string
        '400':
          description: bad request
  /api/command/listCommands:
    get:
      summary: listCommands
      description: 'Returns a list of all available commands..'
      tags:
      - Status Information
      parameters: []
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: listCommands
                      commands:
                        type: array
                        items:
                          type: string
                          example: assignvariable
                      reply:
                        type: string
                        example: listCommands
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/getTime:
    get:
      summary: getTime
      description: 'Returns floating point seconds since Captivate was launched..'
      tags:
      - Status Information
      parameters: []
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: getTime
                      reply:
                        type: string
                        example: getTime
                      success:
                        type: boolean
                        example: true
                      time:
                        type: string
                        example: '911.01'
        '400':
          description: bad request
  /api/command/getStats:
    get:
      summary: getStats
      description: 'Returns statistics about the currently active instance..'
      tags:
      - Status Information
      parameters: []
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      actions:
                        type: array
                        items:
                          type: object
                          properties:
                            action:
                              type: array
                              items:
                                type: object
                                properties:
                                  duration:
                                    type: string
                                    example: '13.2996'
                                  play:
                                    type: string
                                    example: '3'
                                  template:
                                    type: string
                                    example: Title
                                  update:
                                    type: string
                                    example: '0'
                      command:
                        type: string
                        example: getStats
                      reply:
                        type: string
                        example: getStats
                      session:
                        type: object
                        properties:
                          format:
                            type: object
                            properties:
                              fps:
                                type: string
                                example: '29.97'
                              height:
                                type: string
                                example: '1080'
                              width:
                                type: string
                                example: '1920'
                          output:
                            type: object
                            properties:
                              channels:
                                type: string
                                example: '1'
                              format:
                                type: string
                                example: NDI
                              host:
                                type: string
                                example: CaptivateLiveStandalone
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/getProductInfo:
    get:
      summary: getProductInfo
      description: 'Returns information about the currently running product..'
      tags:
      - Status Information
      parameters: []
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      api_version:
                        type: string
                        example: '240910'
                      buildDate:
                        type: string
                        example: Feb 21 2025
                      buildTime:
                        type: string
                        example: '16:30:45'
                      command:
                        type: string
                        example: getProductInfo
                      licensed:
                        type: boolean
                        example: true
                      product:
                        type: string
                        example: Captivate
                      reply:
                        type: string
                        example: getProductInfo
                      serial:
                        type: string
                        example: NBTL5BR-58C728-436890-581F1C-CB2CBE
                      sha:
                        type: string
                        example: d74bf9
                      sku:
                        type: string
                        example: SKUTL5BR
                      success:
                        type: boolean
                        example: true
                      version:
                        type: string
                        example: 2024.0.241118
        '400':
          description: bad request
  /api/command/getReport:
    get:
      summary: getReport
      description: 'Returns the same information as getStats but also includes information
        about the product, license, and active user (including user email and machine
        id)..'
      tags:
      - Status Information
      parameters: []
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      actions:
                        type: array
                        items:
                          type: object
                          properties: {}
                          additionalProperties: true
                      command:
                        type: string
                        example: getReport
                      product:
                        type: object
                        properties:
                          licensed:
                            type: string
                            example: 'true'
                          product:
                            type: string
                            example: Captivate
                          serial:
                            type: string
                            example: NBTL5BR-58C728-436890-581F1C-CB2CBE
                          sku:
                            type: string
                            example: SKUTL5BR
                          version:
                            type: string
                            example: 2024.0.241118
                      reply:
                        type: string
                        example: getReport
                      session:
                        type: object
                        properties:
                          format:
                            type: object
                            properties:
                              fps:
                                type: string
                                example: '29.97'
                              height:
                                type: string
                                example: '1080'
                              width:
                                type: string
                                example: '1920'
                          output:
                            type: object
                            properties:
                              channels:
                                type: string
                                example: '1'
                              format:
                                type: string
                                example: NDI
                              host:
                                type: string
                                example: CaptivateLiveStandalone
                      success:
                        type: boolean
                        example: true
                      user:
                        type: object
                        properties:
                          appmanversion:
                            type: string
                            example: 1.14.250102
                          email:
                            type: string
                            example: jeffmikels@gmail.com
                          first:
                            type: string
                            example: ''
                          last:
                            type: string
                            example: ''
                          machineId:
                            type: string
                            example: M=F623F137-7330-5C42-94B6-3147922F3D89
                          os:
                            type: string
                            example: Mac
        '400':
          description: bad request
  /api/command/getAppGlobalSettings:
    get:
      summary: getAppGlobalSettings
      description: 'Returns information about all the global settings including the
        currently registered Live Objects..'
      tags:
      - Status Information
      parameters: []
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: getAppGlobalSettings
                      globalSettings:
                        type: array
                        items:
                          type: object
                          properties:
                            liveObjects:
                              type: array
                              items:
                                type: object
                                properties: {}
                                additionalProperties: true
                            output:
                              type: object
                              properties:
                                device:
                                  type: object
                                  properties:
                                    channels:
                                      type: string
                                      example: '0'
                                    device:
                                      type: string
                                      example: NDI
                                format:
                                  type: object
                                  properties:
                                    FPS:
                                      type: string
                                      example: '29.97'
                                    PAR:
                                      type: string
                                      example: '1'
                                    frameRate:
                                      type: string
                                      example: '29.97'
                                    height:
                                      type: string
                                      example: '1080'
                                    interlace:
                                      type: string
                                      example: '0'
                                    supportsAlpha:
                                      type: string
                                      example: '1'
                                    width:
                                      type: string
                                      example: '1920'
                            outputsettings:
                              type: object
                              properties:
                                streaming:
                                  type: object
                                  properties:
                                    choice:
                                      type: string
                                      example: Generic
                                    format:
                                      type: object
                                      properties:
                                        audio:
                                          type: object
                                          properties:
                                            bitrate:
                                              type: string
                                              example: '320'
                                            channels:
                                              type: string
                                              example: '2'
                                            encoder:
                                              type: string
                                              example: aac
                                            samplerate:
                                              type: string
                                              example: '48000'
                                        titles:
                                          type: array
                                          items:
                                            type: object
                                            properties:
                                              language:
                                                type: string
                                                example: EN
                                              text:
                                                type: string
                                                example: ''
                            videoaudioMix:
                              type: object
                              properties:
                                audioMix:
                                  type: object
                                  properties:
                                    masterMute:
                                      type: string
                                      example: '0'
                                    masterMuteLiveMonitor:
                                      type: string
                                      example: '0'
                                    masterVolume:
                                      type: string
                                      example: '1'
                                renderSettings:
                                  type: array
                                  items:
                                    type: object
                                    properties:
                                      instance:
                                        type: array
                                        items:
                                          type: object
                                          properties:
                                            created:
                                              type: string
                                              example: '2025-01-28'
                                            frameBuffer:
                                              type: string
                                              example: ''
                                            mediaCache:
                                              type: string
                                              example: M=F623F137-7330-5C42-94B6-3147922F3D89
                                            renderNode:
                                              type: string
                                              example: 172.56.253.210
                                videoMix:
                                  type: object
                                  properties:
                                    replayChannel:
                                      type: string
                                      example: '0'
                      reply:
                        type: string
                        example: getAppGlobalSettings
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/readProject:
    get:
      summary: readProject
      description: 'Return extensive information about the current project..'
      tags:
      - Status Information
      parameters:
      - name: verbose
        in: query
        description: set to 1 for even more information
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: readProject
                      project:
                        type: array
                        items:
                          type: object
                          properties:
                            playlist:
                              type: array
                              items:
                                type: object
                                properties:
                                  channel:
                                    type: string
                                    example: '0'
                                  name:
                                    type: string
                                    example: Channel 1
                      reply:
                        type: string
                        example: readProject
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/readPlaylist:
    get:
      summary: readPlaylist
      description: 'Return extensive information about the playlist for the specified
        channel..'
      tags:
      - Status Information
      parameters:
      - name: channel
        in: query
        description: channel index to query for playlist information
        required: false
        schema:
          type: string
      - name: verbose
        in: query
        description: set to 1 for even more information
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: readPlaylist
                      playlist:
                        type: array
                        items:
                          type: object
                          properties:
                            channel:
                              type: string
                              example: '0'
                            name:
                              type: string
                              example: Channel 1
                      reply:
                        type: string
                        example: readPlaylist
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/getProfileList:
    get:
      summary: getProfileList
      description: 'Read the profile information for all inputs..'
      tags:
      - Status Information
      parameters: []
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: getProfileList
                      inputs:
                        type: array
                        items:
                          type: object
                          properties:
                            name:
                              type: string
                              example: 'Google: Sheets.Sheet 1'
                      profiles:
                        type: array
                        items:
                          type: object
                          properties:
                            name:
                              type: string
                              example: 'Google: Sheets.Sheet 1'
                      reply:
                        type: string
                        example: getProfileList
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/getProfile:
    get:
      summary: getProfile
      description: 'Request the profile information for a specific input..'
      tags:
      - Status Information
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: input
        in: query
        description: Optional, you may use either `profile` or `input` but the value
          should be the full name of an Input / Data Controller
        required: false
        schema:
          type: string
        example: 'Test: Input Name'
      - name: profile
        in: query
        description: Optional, you may use either `profile` or `input` but the value
          should be the full name of an Input / Data Controller
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: getProfile
                      error:
                        type: string
                        example: profile Test%3A+Input+Name not found.
                      id:
                        type: string
                        example: '{218f46f9-e881-49a8-ab17-03c8f9cc8461}'
                      profile:
                        type: object
                        properties: {}
                      reply:
                        type: string
                        example: getProfile
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/readTitle:
    get:
      summary: readTitle
      description: 'Get extensive information about one or more titles. Specify a
        title name or id to get information for a single title. Specify an input to
        get information for all titles using that input. Leave both blank to get data
        for all titles..'
      tags:
      - Status Information
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: id
        in: query
        description: 'optional: UUID of title/layer to operate on'
        required: false
        schema:
          type: string
      - name: title
        in: query
        description: 'optional: Name (or UUID) of the title to operate on.'
        required: false
        schema:
          type: string
        example: name
      - name: channel
        in: query
        description: channel to query or -1 for all; channels are numbered from left
          to right starting at 0 regardless of their names in the project
        required: false
        schema:
          type: number
        example: 0
      - name: verbose
        in: query
        description: 1 for extensive information, 0 for streamlined result
        required: false
        schema:
          type: number
        example: 1
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: readTitle
                      reply:
                        type: string
                        example: readTitle
                      success:
                        type: boolean
                        example: true
                      titles:
                        type: array
                        items:
                          type: object
                          properties: {}
                          additionalProperties: true
        '400':
          description: bad request
  /api/command/getRenderStatus:
    get:
      summary: getRenderStatus
      description: 'Get the render status of a title.'
      tags:
      - Status Information
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: id
        in: query
        description: 'optional: UUID of title/layer to operate on'
        required: false
        schema:
          type: string
      - name: title
        in: query
        description: 'optional: Name (or UUID) of the title to operate on.'
        required: false
        schema:
          type: string
        example: Test
      - name: channel
        in: query
        description: channel to query or -1 for all; channels are numbered from left
          to right starting at 0 regardless of their names in the project
        required: false
        schema:
          type: number
        example: 0
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: getRenderStatus
                      reply:
                        type: string
                        example: getRenderStatus
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/getPlayStatus:
    get:
      summary: getPlayStatus
      description: 'Get the playback status of the specific title and variable combo.'
      tags:
      - Status Information
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: id
        in: query
        description: 'optional: UUID of title/layer to operate on'
        required: false
        schema:
          type: string
      - name: title
        in: query
        description: 'optional: Name (or UUID) of the title to operate on.'
        required: false
        schema:
          type: string
        example: Test
      - name: channel
        in: query
        description: channel to query or -1 for all; channels are numbered from left
          to right starting at 0 regardless of their names in the project
        required: false
        schema:
          type: number
        example: 0
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: getPlayStatus
                      reply:
                        type: string
                        example: getPlayStatus
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/getTitlesPlayStatus:
    get:
      summary: getTitlesPlayStatus
      description: 'Returns a list of all titles and their input and play status.
        NOTE: The getRenderStatus command reports renderStatus more accurately..'
      tags:
      - Status Information
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: channel
        in: query
        description: channel to query, or -1 for all
        required: false
        schema:
          type: number
        example: -1
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: getTitlesPlayStatus
                      reply:
                        type: string
                        example: getTitlesPlayStatus
                      success:
                        type: boolean
                        example: true
                      titles:
                        type: array
                        items:
                          type: object
                          properties: {}
                          additionalProperties: true
        '400':
          description: bad request
  /api/command/getInputsPlayStatus:
    get:
      summary: getInputsPlayStatus
      description: 'Returns a list of all inputs and play status on the requested
        channel.'
      tags:
      - Status Information
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: channel
        in: query
        description: channel to query, or -1 for all
        required: false
        schema:
          type: number
        example: -1
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: getInputsPlayStatus
                      inputs:
                        type: array
                        items:
                          type: object
                          properties: {}
                          additionalProperties: true
                      reply:
                        type: string
                        example: getInputsPlayStatus
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/isTitleConnected:
    get:
      summary: isTitleConnected
      description: 'Returns true if at least one title in the provided channel is
        connected to one of a list of inputs..'
      tags:
      - Status Information
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: channel
        in: query
        description: channel to query, or -1 for all
        required: false
        schema:
          type: number
        example: -1
      - name: input
        in: query
        description: comma-delimited list of inputs
        required: false
        schema:
          type: string
        example: ''
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: isTitleConnected
                      connected:
                        type: string
                        example: '0'
                      error:
                        type: string
                        example: isTitleConnected command must include an input attribute
                          containing a comma-delimited list of inputs to check.
                      reply:
                        type: string
                        example: isTitleConnected
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/getTitlesConnected:
    get:
      summary: getTitlesConnected
      description: 'Returns a list of all titles that are connected to the specified
        input..'
      tags:
      - Status Information
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: channel
        in: query
        description: channel to query, or -1 for all
        required: false
        schema:
          type: number
        example: -1
      - name: input
        in: query
        description: comma-delimited list of inputs
        required: false
        schema:
          type: string
        example: ''
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: getTitlesConnected
                      input:
                        type: string
                        example: ''
                      reply:
                        type: string
                        example: getTitlesConnected
                      success:
                        type: boolean
                        example: true
                      titleCount:
                        type: string
                        example: '0'
                      titles:
                        type: array
                        items:
                          type: object
                          properties: {}
                          additionalProperties: true
        '400':
          description: bad request
  /api/command/getTitleControlInfo:
    get:
      summary: getTitleControlInfo
      description: "Get extensive information for all titles, just one title, or titles\
        \ connected to the input.\n                     The returned object will contain\
        \ a field called 'function' that is used internally by some of\n         \
        \            our controllers and is determined by the name of the title/layer.\
        \ In custom controllers, that\n                     value should be ignored.\n\
        > Because this endpoint doesn't use any variables, it can also be accessed\
        \ using a GET request."
      tags:
      - Status Information
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: id
        in: query
        description: 'optional: UUID of title/layer to operate on'
        required: false
        schema:
          type: string
      - name: title
        in: query
        description: 'optional: Name (or UUID) of the title to operate on.'
        required: false
        schema:
          type: string
        example: Test
      - name: input
        in: query
        description: 'optional: Input name, used to select the title(s) to operate
          on'
        required: false
        schema:
          type: string
        example: ''
      - name: icon
        in: query
        description: boolean flag, if set, return an image of the title
        required: false
        schema:
          type: number
        example: 0
      - name: width
        in: query
        description: width for icon
        required: false
        schema:
          type: number
        example: 80
      - name: height
        in: query
        description: height for icon
        required: false
        schema:
          type: number
        example: 45
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: getTitleControlInfo
                      reply:
                        type: string
                        example: getTitleControlInfo
                      success:
                        type: boolean
                        example: true
                      titleCount:
                        type: string
                        example: '0'
                      titles:
                        type: array
                        items:
                          type: object
                          properties: {}
                          additionalProperties: true
        '400':
          description: bad request
  /api/command/getTitleIcon:
    get:
      summary: getTitleIcon
      description: 'Request an encoded png of the specified title..'
      tags:
      - Status Information
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: channel
        in: query
        description: channel to query or -1 for all; channels are numbered from left
          to right starting at 0 regardless of their names in the project
        required: false
        schema:
          type: number
        example: -1
      - name: id
        in: query
        description: 'optional: UUID of title/layer to operate on'
        required: false
        schema:
          type: string
        example: all
      - name: title
        in: query
        description: 'optional: Name (or UUID) of the title to operate on.'
        required: false
        schema:
          type: string
      - name: width
        in: query
        description: Pixel width of desired render
        required: false
        schema:
          type: string
        example: '320'
      - name: height
        in: query
        description: Pixel height of desired render
        required: false
        schema:
          type: string
        example: '180'
      - name: checkSum
        in: query
        description: Checksum from last render. If unchanged, no render will occur.
        required: false
        schema:
          type: string
        example: ''
      - name: scaleToFit
        in: query
        description: If true, make the icon draw letterboxed in the image.
        required: false
        schema:
          type: number
        example: 1
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: getTitleIcon
                      error:
                        type: string
                        example: unable to find title from 'id' attribute
                      id:
                        type: string
                        example: all
                      reply:
                        type: string
                        example: getTitleIcon
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/getSnapShot:
    get:
      summary: getSnapShot
      description: 'Request a rendering of a title with specific variable settings
        - can be used to preview..'
      tags:
      - Status Information
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: id
        in: query
        description: 'optional: UUID of title/layer to operate on'
        required: false
        schema:
          type: string
        example: all
      - name: title
        in: query
        description: 'optional: Name (or UUID) of the title to operate on.'
        required: false
        schema:
          type: string
      - name: channel
        in: query
        description: channel to query or -1 for all; channels are numbered from left
          to right starting at 0 regardless of their names in the project
        required: false
        schema:
          type: number
        example: -1
      - name: width
        in: query
        description: Pixel width of desired render
        required: false
        schema:
          type: string
        example: '320'
      - name: height
        in: query
        description: Pixel height of desired render
        required: false
        schema:
          type: string
        example: '180'
      - name: file
        in: query
        description: Optional file path to write the image to. Otherwise, file path
          will be created.
        required: false
        schema:
          type: string
        example: ''
      - name: encode
        in: query
        description: If set, image is returned byte encoded instead of to file.
        required: false
        schema:
          type: number
        example: 1
      - name: scaleToFit
        in: query
        description: Scale the visible portion of the image to fit the supplied frame
          dimensions.
        required: false
        schema:
          type: number
        example: 1
      - name: sync
        in: query
        description: If set, image is returned synchronously, otherwise later in separate
          message
        required: false
        schema:
          type: number
        example: 0
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: getSnapShot
                      id:
                        type: string
                        example: all
                      reply:
                        type: string
                        example: getSnapShot
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/getVideoFrame:
    get:
      summary: getVideoFrame
      description: 'Request the frame from a video input..'
      tags:
      - Status Information
      parameters:
      - name: channel
        in: query
        description: Name of the channel to query
        required: false
        schema:
          type: number
        example: -1
      - name: video
        in: query
        description: Name of the video input
        required: false
        schema:
          type: string
        example: USB Webcam
      - name: width
        in: query
        description: Pixel width of desired render (set to 0 to get the original resolution)
        required: false
        schema:
          type: string
        example: '0'
      - name: height
        in: query
        description: Pixel height of desired render (set to 0 to get the original
          resolution)
        required: false
        schema:
          type: string
        example: '0'
      - name: checkSum
        in: query
        description: Optional checksum. If this matches the current checksum, no image
          is created. If changed, a new value is returned.
        required: false
        schema:
          type: string
        example: '2343'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: getVideoFrame
                      error:
                        type: string
                        example: unable to find video input
                      reply:
                        type: string
                        example: getVideoFrame
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/getPreviewFrame:
    get:
      summary: getPreviewFrame
      description: 'Request a rendering of a title at a specific point in time..'
      tags:
      - Status Information
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: id
        in: query
        description: 'optional: UUID of title/layer to operate on'
        required: false
        schema:
          type: string
        example: '{3e2fd47b-4090-4a45-a588-b25711f409d0}'
      - name: title
        in: query
        description: 'optional: Name (or UUID) of the title to operate on.'
        required: false
        schema:
          type: string
      - name: time
        in: query
        description: Optional time in title's timeline
        required: false
        schema:
          type: string
        example: '0.2'
      - name: width
        in: query
        description: Pixel width of desired render
        required: false
        schema:
          type: string
        example: '320'
      - name: height
        in: query
        description: Pixel height of desired render
        required: false
        schema:
          type: string
        example: '180'
      - name: checkSum
        in: query
        description: Optional checksum. If this matches the current checksum, no image
          is created. If changed, a new value is returned.
        required: false
        schema:
          type: string
        example: '2343'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: getPreviewFrame
                      error:
                        type: string
                        example: unable to find title from input or title attribute
                      id:
                        type: string
                        example: '{3e2fd47b-4090-4a45-a588-b25711f409d0}'
                      reply:
                        type: string
                        example: getPreviewFrame
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/getMonitorFrame:
    get:
      summary: getMonitorFrame
      description: 'Request a rendering of current program output..'
      tags:
      - Status Information
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: channel
        in: query
        description: Output channel to grab
        required: false
        schema:
          type: number
        example: 0
      - name: width
        in: query
        description: Pixel width of desired render
        required: false
        schema:
          type: string
        example: '320'
      - name: height
        in: query
        description: Pixel height of desired render
        required: false
        schema:
          type: string
        example: '180'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: getMonitorFrame
                      height:
                        type: string
                        example: '180'
                      image:
                        type: string
                        example: /9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAC0AUADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD5/ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//Z
                      reply:
                        type: string
                        example: getMonitorFrame
                      success:
                        type: boolean
                        example: true
                      width:
                        type: string
                        example: '320'
        '400':
          description: bad request
  /api/command/openUrl:
    get:
      summary: openUrl
      description: 'Open a url in the system browser..'
      tags:
      - File Tools
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: url
        in: query
        description: Url to open
        required: false
        schema:
          type: string
        example: https://newbluefx.com
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: openUrl
                      reply:
                        type: string
                        example: openUrl
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/openFileDialog:
    get:
      summary: openFileDialog
      description: 'Open a file browser to select a file and return its full path..'
      tags:
      - File Tools
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: caption
        in: query
        description: Message for the title bar (does not work on all platforms)
        required: false
        schema:
          type: string
        example: Select A File
      - name: dir
        in: query
        description: Optional, folder to search
        required: false
        schema:
          type: string
        example: ''
      - name: filter
        in: query
        description: File format to look for, ie 'Images (*.png *.jpg *.jpeg);;XML files (*.xml)'. Multiple patterns are separated by ';;'.
        required: false
        schema:
          type: string
        example: 'Images (*.png *.jpg *.jpeg);;XML files (*.xml)'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties: {}
        '400':
          description: bad request
  /api/command/openDirectoryDialog:
    get:
      summary: openDirectoryDialog
      description: 'Open a file browser to select a directory and return its full
        path along with its file contents..'
      tags:
      - File Tools
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: caption
        in: query
        description: Message for the title bar
        required: false
        schema:
          type: string
        example: Select A Directory
      - name: dir
        in: query
        description: Optional, folder to search
        required: false
        schema:
          type: string
        example: ''
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties: {}
        '400':
          description: bad request
  /api/command/convertToJson:
    get:
      summary: convertToJson
      description: 'Takes a supplied string of structured data (xml, csv, other json)
        and converts it to a JSON object..'
      tags:
      - File Tools
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: content
        in: query
        description: String contents that should be parsed and converted.
        required: false
        schema:
          type: string
        example: <item><child name="hello">world</child></item>
      - name: type
        in: query
        description: type of the input string (xml, csv, json)
        required: false
        schema:
          type: string
        example: xml
      - name: flatten
        in: query
        description: boolean value, if true, the data will be flattened into 1 level
          deep simplified object of key-value pairs.
        required: false
        schema:
          type: number
        example: 1
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: convertToJson
                      json:
                        type: object
                        properties: {}
                      reply:
                        type: string
                        example: convertToJson
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/runDbQuery:
    get:
      summary: runDbQuery
      description: 'Open a database file (sqlite), run a query, and return the results.
        If `sql` and `table` are not provided, this will return all rows from all tables in the database.'
      tags:
      - File Tools
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: filePath
        in: query
        description: Full file path. Also see openFileDialog.
        required: false
        schema:
          type: string
        example: ''
      - name: table
        in: query
        description: 'If provided, will return the full content of the table using the same parsing as used by `getFileContent`.'
        required: false
        schema:
          type: string
      - name: sql
        in: query
        description: SQL query to run against the database.
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: getFileContent
                      reply:
                        type: string
                        example: getFileContent
                      success:
                        type: number
                        example: false
        '400':
          description: bad request
  /api/command/fetchUrl:
    get:
      summary: fetchUrl
      description: 'Execute a web request through the Captivate Backend. When a browser blocks network access, you can use this command to fetch data from a URL.'
      tags:
      - File Tools
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: url
        in: query
        description: Url to fetch.
        required: true
        schema:
          type: string
        example: 'https://newbluefx.com'
      - name: method
        in: query
        description: 'HTTP method to use (GET, POST, PUT, DELETE, etc). Default is GET.'
        required: false
        schema:
          type: string
      - name: headers
        in: query
        description: 'HTTP headers to include in the request, formatted as a JSON object with key-value pairs. Encode as JSON when sending in a query parameter.'
        required: false
        schema:
          type: string
      - name: body
        in: query
        description: 'HTTP body to include in the request as a string. Typically used with POST or PUT requests. Remember to set the appropriate Content-Type header if needed. For large requests, post to the /api endpoint directly.'
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: fetchUrl
                      reply:
                        type: string
                        example: fetchUrl
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/getFileContent:
    get:
      summary: getFileContent
      description: 'Read a file or url and return its data - especially useful when
        polling files for data..'
      tags:
      - File Tools
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: filePath
        in: query
        description: Full file path. Also see openFileDialog.
        required: false
        schema:
          type: string
        example: ''
      - name: url
        in: query
        description: Url to fetch.
        required: false
        schema:
          type: string
        example: ''
      - name: parseMethods
        in: query
        description: 'Comma-separated string. Applies multiple parse methods to the data. Options: b64 (returns b64 encoded raw data), text (returns utf-8 encoded string), table (uses our csv, xml, json, Excel, db parser to extract tabular data), json (expects the file content to be XML or json, parses it, and returns a JavaScript object)'
        required: false
        schema:
          type: string
      - name: flatten
        in: query
        description: boolean value, if true, the data will be flattened into 1 level
          deep simplified object of key-value pairs.
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: getFileContent
                      reply:
                        type: string
                        example: getFileContent
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/setFileContent:
    get:
      summary: setFileContent
      description: 'Write the supplied data to a file..'
      tags:
      - File Tools
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: content
        in: query
        description: Data to write to the file
        required: false
        schema:
          type: string
      - name: filePath
        in: query
        description: Full file path. If omitted, will trigger the save dialog to open.
        required: false
        schema:
          type: string
        example: ''
      - name: hasBinaryContent
        in: query
        description: Set to 1 if the content is binary data.
        required: false
        schema:
          type: string
      - name: defaultname
        in: query
        description: Optional, default name for the save dialog.
        required: false
        schema:
          type: string
      - name: userContext
        in: query
        description: Optional, user context to pass back in the notification.
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: setFileContent
                      error:
                        type: string
                        example: Content size is 0
                      reply:
                        type: string
                        example: setFileContent
                      setFileContentRequest:
                        type: string
                        example: SFCREQ_1
                      success:
                        type: boolean
                        example: true
                      userContext:
                        type: string
                        example: ''
        '400':
          description: bad request
  /api/command/getDirectoryContent:
    get:
      summary: getDirectoryContent
      description: 'Gets a list of all entries in the specified directory..'
      tags:
      - File Tools
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: dirPath
        in: query
        description: Full file path. Also see openFileDialog.
        required: false
        schema:
          type: string
        example: ''
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: getDirectoryContent
                      directory:
                        type: string
                        example: ''
                      reply:
                        type: string
                        example: getDirectoryContent
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/encodeImage:
    get:
      summary: encodeImage
      description: 'Encode an image file from the local filesystem into a data url.'
      tags:
      - File Tools
      parameters:
      - name: file
        in: query
        description: Full path to the image file
        required: false
        schema:
          type: string
        example: ''
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: encodeImage
                      reply:
                        type: string
                        example: encodeImage
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/downloadImage:
    get:
      summary: downloadImage
      description: 'Download an image file from the Internet or parse it from a data
        url and save it to a local temporary file..'
      tags:
      - File Tools
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: url
        in: query
        description: 'Optional: Full url to the image file'
        required: false
        schema:
          type: string
        example: ''
      - name: data
        in: query
        description: 'Optional: a "data url" construct like "data:image/jpeg;base64,BASE_64_DATA..."'
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: downloadImage
                      reply:
                        type: string
                        example: downloadImage
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/setMaxCacheCount:
    get:
      summary: setMaxCacheCount
      description: 'Sets the number of variable variations to keep in memory and save
        to file.'
      tags:
      - Cache Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: maxCacheCount
        in: query
        description: Number of variations to keep in memory.
        required: false
        schema:
          type: number
        example: 20
      - name: maxSaveCount
        in: query
        description: Number of variations to save to file.
        required: false
        schema:
          type: number
        example: 10
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: setMaxCacheCount
                      reply:
                        type: string
                        example: setMaxCacheCount
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/rebuildCache:
    get:
      summary: rebuildCache
      description: 'Forces a complete rebuild of the requested title/layer.'
      tags:
      - Cache Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: id
        in: query
        description: 'optional: UUID of title/layer to operate on'
        required: false
        schema:
          type: string
        example: '{218f46f9-e881-49a8-ab17-03c8f9cc8461}'
      - name: title
        in: query
        description: 'optional: Name (or UUID) of the title to operate on.'
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: rebuildCache
                      id:
                        type: string
                        example: '{218f46f9-e881-49a8-ab17-03c8f9cc8461}'
                      reply:
                        type: string
                        example: rebuildCache
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/getCachePath:
    get:
      summary: getCachePath
      description: 'Gets the location of the cache for the requested title / layer.'
      tags:
      - Cache Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: id
        in: query
        description: 'optional: UUID of title/layer to operate on'
        required: false
        schema:
          type: string
        example: '{218f46f9-e881-49a8-ab17-03c8f9cc8461}'
      - name: title
        in: query
        description: 'optional: Name (or UUID) of the title to operate on.'
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: getCachePath
                      id:
                        type: string
                        example: '{218f46f9-e881-49a8-ab17-03c8f9cc8461}'
                      reply:
                        type: string
                        example: getCachePath
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/setCachePath:
    get:
      summary: setCachePath
      description: 'Sets a unique location to build the cache for the requested title
        / layer.'
      tags:
      - Cache Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: id
        in: query
        description: 'optional: UUID of title/layer to operate on'
        required: false
        schema:
          type: string
        example: '{218f46f9-e881-49a8-ab17-03c8f9cc8461}'
      - name: title
        in: query
        description: 'optional: Name (or UUID) of the title to operate on.'
        required: false
        schema:
          type: string
      - name: file
        in: query
        description: File path to write the cache to.
        required: false
        schema:
          type: string
        example: c:\desktop\cachefile.cache
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: setCachePath
                      id:
                        type: string
                        example: '{218f46f9-e881-49a8-ab17-03c8f9cc8461}'
                      reply:
                        type: string
                        example: setCachePath
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/command/saveTitleCache:
    get:
      summary: saveTitleCache
      description: 'Forces a save of the title cache..'
      tags:
      - Cache Commands
      parameters:
      - name: requestId
        in: query
        description: optional id to track this command, will be returned in the response
        required: false
        schema:
          type: string
      - name: id
        in: query
        description: 'optional: UUID of title/layer to operate on'
        required: false
        schema:
          type: string
        example: '{218f46f9-e881-49a8-ab17-03c8f9cc8461}'
      - name: title
        in: query
        description: 'optional: Name (or UUID) of the title to operate on.'
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: saveTitleCache
                      id:
                        type: string
                        example: '{218f46f9-e881-49a8-ab17-03c8f9cc8461}'
                      reply:
                        type: string
                        example: saveTitleCache
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
  /api/action/{action}/title/{title}:
    post:
      summary: '{action}/title/{title}'
      description: Perform an action on a title given a title ID or name
      tags:
      - Actions
      parameters:
      - name: action
        in: path
        description: The action to perform on the title.
        required: true
        schema:
          type: string
      - name: title
        in: path
        description: The title ID or name to perform the action on.
        required: true
        schema:
          type: string
      requestBody:
        description: variables to modify
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/KeyValue"
      responses:
        '200':
          description: successful operation
        '400':
          description: bad request
  /api/action/{action}/input/{input}:
    post:
      summary: '{action}/input/{input}'
      description: Perform an action on all titles connected to the given input
      tags:
      - Actions
      parameters:
      - name: action
        in: path
        description: The action to perform on the titles.
        required: true
        schema:
          type: string
      - name: input
        in: path
        description: The name of the input to perform the action on.
        required: true
        schema:
          type: string
      requestBody:
        description: variables to modify
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/KeyValue'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    type: object
                    properties:
                      command:
                        type: string
                        example: schedule
                      id:
                        type: string
                        example: '{218f46f9-e881-49a8-ab17-03c8f9cc8461}'
                      reply:
                        type: string
                        example: schedule
                      success:
                        type: boolean
                        example: true
        '400':
          description: bad request
