Summary
Haivision Furnace IP Video System (Mantaray Series) REST API v6.6 for managing IP video distribution, recording, publishing, and client control. Provides HTTP/HTTPS REST interface with XML responses, OAuth two-legged authentication (HMAC-SHA1), and resources for assets, clients, commands, recordings, stations, and volumes.
Transport
protocols:
- http
addressing:
base_url: "https://{portal-server}/apis/"
# UNRESOLVED: specific HTTPS port not stated in source
auth:
type: oauth
method: hmac-sha1
description: "Two-legged OAuth 1.0. Consumer key/secret created via VF Admin Credential Manager. HTTPS required."
Traits
traits:
- powerable # inferred: power on/off command present
- queryable # inferred: GET queries return device/client state
- levelable # inferred: volume 0-100 control present
Actions
actions:
- id: command_volume
label: Set Volume
kind: action
description: "Set client volume level via command API"
method: POST
path: "/apis/commands"
params:
- name: value
type: integer
description: "Volume level 0-100"
- id: command_mute
label: Set Mute
kind: action
description: "Toggle client mute on/off"
method: POST
path: "/apis/commands"
params:
- name: value
type: enum
values: [on, off]
- id: command_power
label: Set Power
kind: action
description: "Toggle client power on/off"
method: POST
path: "/apis/commands"
params:
- name: value
type: enum
values: [on, off]
- id: command_channel
label: Set Channel
kind: action
description: "Set client channel number"
method: POST
path: "/apis/commands"
params:
- name: value
type: integer
description: "Channel number"
- id: command_station
label: Set Station
kind: action
description: "Set client station by ID"
method: POST
path: "/apis/commands"
params:
- name: value
type: string
description: "Station ID"
- id: command_lockinterface
label: Lock Interface
kind: action
description: "Lock or unlock client interface"
method: POST
path: "/apis/commands"
params:
- name: value
type: enum
values: [on, off]
- id: command_guide
label: Toggle Guide
kind: action
description: "Show or hide guide on client"
method: POST
path: "/apis/commands"
params:
- name: value
type: enum
values: [on, off]
- id: command_cc
label: Set Closed Captions
kind: action
description: "Set closed caption mode"
method: POST
path: "/apis/commands"
params:
- name: value
type: enum
values: ["0", "2", "4"]
description: "0=CC1, 2=CC3, 4=off"
- id: command_ontop
label: Set On Top
kind: action
description: "Toggle always-on-top mode"
method: POST
path: "/apis/commands"
params:
- name: value
type: enum
values: [on, off]
- id: command_dashboard
label: Toggle Dashboard
kind: action
description: "Toggle dashboard display"
method: POST
path: "/apis/commands"
params:
- name: value
type: enum
values: [on, off]
- id: command_thumbnail
label: Toggle Thumbnail
kind: action
description: "Toggle thumbnail display"
method: POST
path: "/apis/commands"
params:
- name: value
type: enum
values: [on, off]
- id: command_minimize
label: Toggle Minimize
kind: action
description: "Minimize or restore client"
method: POST
path: "/apis/commands"
params:
- name: value
type: enum
values: [on, off]
- id: command_activate
label: Activate Client
kind: action
description: "Activate the client application"
method: POST
path: "/apis/commands"
params: []
- id: command_show
label: Show/Hide Client
kind: action
description: "Toggle client visibility"
method: POST
path: "/apis/commands"
params:
- name: value
type: enum
values: [on, off]
- id: command_fullscreen
label: Toggle Fullscreen
kind: action
description: "Toggle fullscreen mode"
method: POST
path: "/apis/commands"
params:
- name: value
type: enum
values: [on, off]
- id: command_sleeptimer
label: Set Sleep Timer
kind: action
description: "Set sleep timer in minutes"
method: POST
path: "/apis/commands"
params:
- name: value
type: integer
description: "Sleep timer in minutes"
- id: command_hdtv
label: Set HDTV Mode
kind: action
description: "Set HDTV output resolution"
method: POST
path: "/apis/commands"
params:
- name: value
type: enum
values: [SD, 720p, 1080i, 1080p]
- id: command_settvmode
label: Set TV Mode
kind: action
description: "Set TV output format"
method: POST
path: "/apis/commands"
params:
- name: value
type: string
description: "TV format string"
- id: command_delay
label: Command Delay
kind: action
description: "Insert delay between actions in multi-action command"
method: POST
path: "/apis/commands"
params:
- name: value
type: integer
description: "Delay in milliseconds"
- id: command_url
label: Launch URL
kind: action
description: "Launch a specific VOD asset or URL on client"
method: POST
path: "/apis/commands"
params:
- name: value
type: string
description: "URL (e.g. udp://239.10.10.10:4900) or UUID (uuid:xxxx-xxxx-xxxx-xxxxxxx)"
- id: command_message_video
label: Send Video Overlay Message
kind: action
description: "Display text overlay on supporting clients"
method: POST
path: "/apis/commands"
params:
- name: text
type: string
description: "Message text to display"
- name: duration
type: integer
description: "Display duration in seconds"
- name: priority
type: integer
description: "Priority 0=lowest, 254=highest"
- name: font_size
type: integer
description: "Font size in pixels"
- name: brightness
type: integer
description: "Brightness 0-255"
- name: position
type: integer
description: "Screen position 0-8 (0=top-left, 7=bottom-center, 8=bottom-right)"
- name: scroll_speed
type: number
description: "Text scroll speed, default 44.0"
- id: command_message_dialog
label: Send Dialog Message
kind: action
description: "Display dialog popup on supporting clients"
method: POST
path: "/apis/commands"
params:
- name: text
type: string
description: "Dialog message text"
- name: duration
type: integer
description: "Display duration in seconds"
- name: priority
type: integer
description: "Priority 0=lowest, 254=highest"
- name: title
type: string
description: "Dialog box title"
- id: command_network_config
label: Configure Network
kind: action
description: "Change network configuration on supporting set-top box clients"
method: POST
path: "/apis/commands"
params:
- name: bootproto
type: enum
values: [static, dhcp]
description: "Boot protocol; if dhcp, other fields optional"
- name: ipaddress
type: string
description: "Static IP address"
- name: netmask
type: string
description: "Subnet mask"
- name: gateway
type: string
description: "Default gateway"
- name: dns1
type: string
description: "Primary DNS"
- name: dns2
type: string
description: "Secondary DNS"
- id: list_assets
label: List Assets
kind: query
description: "Retrieve paginated list of published assets"
method: GET
path: "/apis/assets"
params:
- name: page
type: integer
description: "Page number, default 1"
- name: size
type: integer
description: "Results per page 1-100, default 100"
- name: q
type: string
description: "Simple search on title, description, tags"
- id: get_asset
label: Get Asset
kind: query
description: "Retrieve full details for a specific asset"
method: GET
path: "/apis/assets/asset-{id}"
params:
- name: id
type: string
description: "Asset ID"
- id: list_clients
label: List Clients
kind: query
description: "Retrieve paginated list of connected clients"
method: GET
path: "/apis/clients"
params:
- name: page
type: integer
description: "Page number, default 1"
- name: size
type: integer
description: "Results per page 1-100, default 100"
- id: get_client
label: Get Client
kind: query
description: "Retrieve details for a specific client"
method: GET
path: "/apis/clients/client-{id}"
params:
- name: id
type: string
description: "Client instance ID"
- id: list_recorders
label: List Recorders
kind: query
description: "Retrieve list of all registered recorders"
method: GET
path: "/apis/recorders"
params: []
- id: get_recorder
label: Get Recorder
kind: query
description: "Retrieve recorder entity by ID"
method: GET
path: "/apis/recorders/recorder-{id}"
params:
- name: id
type: string
description: "Recorder ID"
- id: create_recording
label: Start Recording
kind: action
description: "Start a recording on a recorder"
method: POST
path: "/apis/recordings"
params:
- name: sourceUrl
type: string
description: "Source URL (vftp://, udp://, or uuid: format)"
- name: maxDuration
type: integer
description: "Maximum recording duration in seconds"
- name: title
type: string
description: "Recording title"
- name: description
type: string
description: "Recording description"
- id: update_recording
label: Update Recording
kind: action
description: "Update recording metadata or pause/resume"
method: PUT
path: "/apis/recordings/recording-{id}"
params:
- name: id
type: string
description: "Recording ID"
- name: state
type: enum
values: [RECORDING, PAUSED]
description: "Change recording state"
- id: delete_recording
label: Delete Recording
kind: action
description: "Stop and delete a recording"
method: DELETE
path: "/apis/recordings/recording-{id}"
params:
- name: id
type: string
description: "Recording ID"
- id: list_recordings
label: List Recordings
kind: query
description: "Retrieve list of all recordings in NVR"
method: GET
path: "/apis/recordings"
params: []
- id: create_hotmark
label: Create HotMark
kind: action
description: "Create a new HotMark on a recording"
method: POST
path: "/apis/recordings/recording-{id}/hotmarks"
params:
- name: id
type: string
description: "Recording ID"
- name: title
type: string
description: "HotMark title (required)"
- name: time
type: integer
description: "Time in milliseconds (optional, defaults to current)"
- name: type
type: enum
values: [TAG, CHAPTER]
description: "HotMark type, default TAG"
- id: publish_recording
label: Publish Recording
kind: action
description: "Begin publishing recording to media server"
method: POST
path: "/apis/recordings/recording-{id}/publishes"
params:
- name: id
type: string
description: "Recording ID"
- name: volume_id
type: string
description: "Target volume ID (optional)"
- id: cancel_publish
label: Cancel Publish
kind: action
description: "Stop publishing and return recording to RECORDED state"
method: DELETE
path: "/apis/recordings/recording-{id}/publishes/publish-{publishId}"
params:
- name: id
type: string
description: "Recording ID"
- name: publishId
type: string
description: "Publish ID"
- id: start_review
label: Start Review
kind: action
description: "Begin review of a recording"
method: POST
path: "/apis/recordings/recording-{id}/reviews"
params:
- name: id
type: string
description: "Recording ID"
- name: outputUrl
type: string
description: "Streaming output URL (optional; omit for VoD-style)"
- id: stop_review
label: Stop Review
kind: action
description: "Stop and remove a review"
method: DELETE
path: "/apis/recordings/recording-{id}/reviews/review-{reviewId}"
params:
- name: id
type: string
description: "Recording ID"
- name: reviewId
type: string
description: "Review ID"
- id: list_stations
label: List Stations
kind: query
description: "Retrieve list of all stations"
method: GET
path: "/apis/stations"
params: []
- id: get_station
label: Get Station
kind: query
description: "Retrieve station details including tracks"
method: GET
path: "/apis/stations/station-{id}"
params:
- name: id
type: string
description: "Station ID"
- id: get_schedule
label: Get Station Schedule
kind: query
description: "Retrieve paginated schedule for a station"
method: GET
path: "/apis/stations/station-{id}/schedule"
params:
- name: id
type: string
description: "Station ID"
- name: page
type: integer
description: "Page number, default 1"
- name: size
type: integer
description: "Results per page 1-100, default 100"
- name: t0
type: integer
description: "Start time (Linux epoch)"
- name: t1
type: integer
description: "End time (Linux epoch)"
- id: get_program
label: Get Program
kind: query
description: "Retrieve scheduled program details"
method: GET
path: "/apis/programs/program-{id}"
params:
- name: id
type: string
description: "Program ID"
- id: list_volumes
label: List Volumes
kind: query
description: "Retrieve list of storage volumes"
method: GET
path: "/apis/volumes"
params: []
- id: get_volume
label: Get Volume
kind: query
description: "Retrieve volume details including free/total space"
method: GET
path: "/apis/volumes/volume-{id}"
params:
- name: id
type: string
description: "Volume ID"
Feedbacks
feedbacks:
- id: recording_state
type: enum
values: [RECORDING, PAUSED, FINALIZING, RECORDED, REVIEWING, PUBLISHING]
description: "Current state of a recording"
- id: recording_progress
type: number
description: "Publish progress 0.00 to 1.00"
- id: recorder_is_recording
type: boolean
description: "Whether recorder has an active recording"
- id: recorder_is_slave
type: boolean
description: "Whether recorder is in use by another recorder"
- id: client_app
type: enum
values: [UNKNOWN, INSTREAM, EDITOR, PILOT, MONITOR, ARCHIVE, COMMANDER, NVR, DECODER]
description: "Connected client application type"
- id: client_platform
type: enum
values: [UNKNOWN, Windows, "OS X", Linux, Solaris, STB, Makito]
description: "Client platform"
- id: publish_progress
type: number
description: "Publish progress 0.00 to 1.00"
- id: volume_free_mb
type: integer
description: "Free space on volume in MB"
- id: volume_total_mb
type: integer
description: "Total space on volume in MB"
Variables
variables:
- id: client_channel
type: integer
description: "Current channel number on client"
- id: client_volume
type: integer
description: "Current volume level 0-100 on client"
- id: client_callsign
type: string
description: "Client callsign identifier"
- id: recording_max_duration
type: integer
description: "Maximum recording duration in seconds"
- id: hotmark_time
type: integer
description: "HotMark time position in milliseconds"
Events
# UNRESOLVED: source does not describe unsolicited push notifications or event subscriptions
Macros
# UNRESOLVED: no multi-step macro sequences explicitly defined in source
Safety
confirmation_required_for: []
interlocks: []
# UNRESOLVED: source contains no safety warnings, interlock procedures, or power-on sequencing
Notes
- All API communication routed through portal server; base URI matches portal root.
- Response format: XML (
application/xml) with root<response>element. - Commands support
<restrict_to>block for targeting specific clients by app, session, instance, callsign, channel, IP, MAC, or platform. Operator must beOR. - Multiple actions can be combined in a single command POST inside
<actions>. - Recording states: RECORDING → PAUSED → FINALIZING → RECORDED → REVIEWING/PUBLISHING.
- Recording source URLs support
vftp://,udp://, anduuid:formats. - API Version 2.0 required for OAuth; configured via VF Admin module.
- Complex asset search supports equal (
=), not equal (=!), like (=~), not like (=^) operators. - One active recording per recorder at a time.
- One publish per recording supported.
- VoD-style reviews must be explicitly deleted via API to end REVIEWING state.
- Error responses include XML
<error>entity with numeric code and message.
Provenance
source_domains:
- doc.haivision.com
- aca.im
source_urls:
- "https://doc.haivision.com/__attachments/15171865/Furnace6.6%20API%20Integrator%27s%20Guide.pdf?inst-v=1b9ce571-bddd-4c75-83b6-fccbfd064a21"
- https://aca.im/driver_docs/Haivision/furnace_api.pdf
- https://doc.haivision.com/
retrieved_at: 2026-05-05T06:00:56.364Z
last_checked_at: 2026-06-02T22:07:30.283Z
Verification Summary
verdict: verified
checked_at: 2026-06-02T22:07:30.283Z
matched_actions: 44
action_count: 44
confidence: medium
summary: "All 44 spec actions traced to source (dip-safe re-verify). (10 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "specific Mantaray hardware model identifiers not stated; source covers Furnace API generically"
- "HTTPS port not stated (assumed standard 443 but not confirmed)"
- "specific HTTPS port not stated in source"
- "source does not describe unsolicited push notifications or event subscriptions"
- "no multi-step macro sequences explicitly defined in source"
- "source contains no safety warnings, interlock procedures, or power-on sequencing"
- "specific Mantaray hardware models covered by this API not enumerated"
- "API rate limits not documented"
- "maximum concurrent client connections not stated"
- "firmware version compatibility range not stated"
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0