Summary
VDO.Ninja web-based video conferencing platform with remote control via HTTP GET API and WebSocket (WSS). Supports local media control (speaker, mic, camera, volume), guest management for directors, scene/layout control, and timer management. Auth via shared API key passed as URL parameter.
Transport
protocols:
- http
- tcp # WebSocket upgrade on port 443
addressing:
base_url: https://api.vdo.ninja
port: 443 # stated: wss://api.vdo.ninja:443 for WebSocket
auth:
type: api_key # shared secret via &api=XXXXXX URL parameter; no password
Traits
- queryable # getDetails, getGuestList return JSON state
- levelable # volume (0-100), panning (0-180), bitrate (kbps)
- routable # forward guests, addScene, group management
Actions
- id: speaker
label: Control Speaker
kind: action
params:
- name: value
type: string
enum: [true, false, toggle]
description: Unmute (true), mute (false), or toggle speaker
- id: mic
label: Control Microphone
kind: action
params:
- name: value
type: string
enum: [true, false, toggle]
description: Unmute (true), mute (false), or toggle mic
- id: camera
label: Control Camera
kind: action
params:
- name: value
type: string
enum: [true, false, toggle]
description: Unmute (true), mute (false), or toggle camera
- id: volume
label: Set Playback Volume
kind: action
params:
- name: value
type: integer
description: Volume 0-100, or true/false for mute/unmute
- id: sendChat
label: Send Chat Message
kind: action
params:
- name: value
type: string
description: Chat message to send to all connected
- id: record
label: Control Recording
kind: action
params:
- name: value
type: string
enum: [true, false]
description: Start (true) or stop (false) local recording
- id: reload
label: Reload Page
kind: action
params: []
- id: hangup
label: Hang Up
kind: action
params: []
- id: bitrate
label: Control Video Bitrate
kind: action
params:
- name: value
type: integer
description: Bitrate in kbps, or true/false for unlock/pause
- id: panning
label: Set Audio Panning
kind: action
params:
- name: value
type: integer
description: Panning 0-180 (0=left, 90=center, 180=right), or true/false to center
- id: togglehand
label: Toggle Hand Raise
kind: action
params: []
- id: togglescreenshare
label: Toggle Screen Share
kind: action
params: []
- id: forceKeyframe
label: Force Keyframe
kind: action
params: []
- id: group
label: Toggle Group
kind: action
params:
- name: value
type: integer
description: Group ID 1-8
- id: joinGroup
label: Join Group
kind: action
params:
- name: value
type: integer
description: Group ID 1-8
- id: leaveGroup
label: Leave Group
kind: action
params:
- name: value
type: integer
description: Group ID 1-8
- id: viewGroup
label: Toggle Group Preview
kind: action
params:
- name: value
type: integer
description: Group ID 1-8
- id: joinViewGroup
label: Preview Group
kind: action
params:
- name: value
type: integer
description: Group ID 1-8
- id: leaveViewGroup
label: Stop Group Preview
kind: action
params:
- name: value
type: integer
description: Group ID 1-8
- id: getDetails
label: Get Room State
kind: query
params: []
- id: nextSlide
label: Next PowerPoint Slide
kind: action
params: []
- id: prevSlide
label: Previous PowerPoint Slide
kind: action
params: []
- id: soloVideo
label: Highlight Video
kind: action
params:
- name: value
type: string
enum: [true, false, toggle]
description: Highlight/unhighlight video for all guests (director only)
- id: stopRoomTimer
label: Stop Room Timer
kind: action
params: []
- id: startRoomTimer
label: Start Room Timer
kind: action
params:
- name: value
type: integer
description: Countdown duration in seconds
- id: pauseRoomTimer
label: Pause Room Timer
kind: action
params: []
- id: getGuestList
label: Get Guest List
kind: query
params: []
- id: layout
label: Set Layout
kind: action
params:
- name: value
type: integer
description: Layout index (0=auto mixer, 1+=custom layouts)
Remote Guest Actions (Director)
# Target: guest slot (1-99) or stream ID
- id: forward
label: Transfer Guest
params:
- name: target
type: string
description: Guest slot or stream ID
- name: value
type: string
description: Destination room ID
- id: addScene
label: Toggle Guest in Scene
params:
- name: target
type: string
description: Guest slot or stream ID
- name: value
type: integer
description: Scene ID 0-8 or custom scene name
- id: muteScene
label: Toggle Guest Mic in Scene
params:
- name: target
type: string
description: Guest slot or stream ID
- name: value
type: integer
description: Scene ID 0-8 or custom scene name
- id: guestGroup
label: Toggle Guest in Group
params:
- name: target
type: string
description: Guest slot or stream ID
- name: value
type: integer
description: Group ID 1-8
- id: guestMic
label: Toggle Guest Mic
params:
- name: target
type: string
description: Guest slot or stream ID
- id: guestHangup
label: Hang Up Guest
params:
- name: target
type: string
description: Guest slot or stream ID
- id: soloChat
label: Solo Chat with Guest
params:
- name: target
type: string
description: Guest slot or stream ID
- id: soloChatBidirectional
label: Two-Way Solo Chat
params:
- name: target
type: string
description: Guest slot or stream ID
- id: guestSpeaker
label: Toggle Guest Speaker
params:
- name: target
type: string
description: Guest slot or stream ID
- id: guestDisplay
label: Toggle Guest Video Display
params:
- name: target
type: string
description: Guest slot or stream ID
- id: sendDirectorChat
label: Send Chat Overlay to Guest
params:
- name: target
type: string
description: Guest slot or stream ID
- name: value
type: string
description: Chat message text
- id: sendPinnedDirectorChat
label: Send Persistent Chat Overlay
params:
- name: target
type: string
description: Guest slot or stream ID
- name: value
type: string
description: Chat message text
- id: guestForceKeyframe
label: Force Guest Keyframe
params:
- name: target
type: string
description: Guest slot or stream ID
- id: guestSoloVideo
label: Highlight Guest Video
params:
- name: target
type: string
description: Guest slot or stream ID
- id: guestVolume
label: Set Guest Microphone Volume
params:
- name: target
type: string
description: Guest slot or stream ID
- name: value
type: integer
description: Volume 0-100
- id: ptzZoom
label: Control Guest Zoom
params:
- name: target
type: string
description: Guest slot or stream ID
- name: value
type: number
description: Zoom delta or absolute (value2 indicates mode)
- id: ptzPan
label: Control Guest Pan
params:
- name: target
type: string
description: Guest slot or stream ID
- name: value
type: number
description: Pan delta or absolute (value2 indicates mode)
- id: ptzTilt
label: Control Guest Tilt
params:
- name: target
type: string
description: Guest slot or stream ID
- name: value
type: number
description: Tilt delta or absolute (value2 indicates mode)
- id: ptzFocus
label: Control Guest Focus
params:
- name: target
type: string
description: Guest slot or stream ID
- name: value
type: number
description: Focus delta or absolute (value2 indicates mode)
- id: ptzAutofocus
label: Toggle Guest Autofocus
params:
- name: target
type: string
description: Guest slot or stream ID
- name: value
type: boolean
- id: remoteMirror
label: Set Guest Mirror State
params:
- name: target
type: string
description: Guest slot or stream ID
- name: value
type: string
enum: [true, false, toggle]
- id: remoteRotate
label: Rotate Guest Output
params:
- name: target
type: string
description: Guest slot or stream ID
- name: value
type: string
description: true=+90 step, false=reset, number=explicit rotation
Feedbacks
# HTTP API returns: true, false, null, fail, {value}, timeout
# WebSocket returns JSON with state + original request
# State queries return JSON objects
Variables
# Room state via getDetails: guest states, connection status
# Guest list via getGuestList: slot positions, stream IDs, labels
Events
# WebSocket callback responses include original request data
# Custom fields (e.g. data.cid) available for request linking
Macros
# Layout switching via layout action with array of layout objects
# PowerPoint control via nextSlide/prevSlide
# Timer control for room-wide countdowns
Safety
confirmation_required_for: []
interlocks: []
# No safety-critical procedures in source
Notes
WebSocket connection timeout ~1 minute; need reconnect logic and rejoin after timeout. HTTP API uses GET requests only. Double slashes in URL cause issues. API is draft status and may change.
Provenance
source_domains:
- docs.vdo.ninja
- sdk.vdo.ninja
source_urls:
- https://docs.vdo.ninja/advanced-settings/api-and-midi-parameters/api/api-reference
- https://docs.vdo.ninja/advanced-settings/api-and-midi-parameters/api
- https://sdk.vdo.ninja/docs/api-reference.html
- https://sdk.vdo.ninja
retrieved_at: 2026-04-30T02:39:35.358Z
last_checked_at: 2026-06-02T22:16:00.129Z
Verification Summary
verdict: verified
checked_at: 2026-06-02T22:16:00.129Z
matched_actions: 28
action_count: 28
confidence: medium
summary: "All 28 spec actions traced to source (dip-safe re-verify). (2 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "physical device spec not applicable; web-based platform"
- "API version compatibility, production readiness"
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0