Download OpenAPI specification:Download
This is a client API for Watcher VMS.
This API is designed for accessing content including cameras, mosaics, episodes, reports, etc. The access is subject to user permissions so you will need login and password in order to execute the requests. Use Watcher Admin API for managing users, permissions, and other infrastructure.
You can use this API to develop your own UI for your subscribers who use Watcher or for integration with an external system that needs the access to the content.
This method creates activation token for agent. This token used by mobile app in qr-code for wifi camera with agent for adding camera with agent in watcher.
The fields with which the camera will be created
{- "title": "string",
- "organization_id": 0,
- "preset_id": 0,
- "folder_id": 0,
- "enabled": true,
- "static": true,
- "dvr_depth": 0,
- "dvr_space": 0,
- "comment": "string",
- "coordinates": {
- "latitude": null,
- "longitude": null
}, - "postal_address": "string"
}
{- "token": "string",
- "stream_name": "string"
}
This method allows you to check that camera with agent was provisioned to watcher. If you got 404 on this method you - token not existing and you must create a new one to add camera with agent. If no camera_name field in response - camera not provisioned yet to watcher. If camera_name field in response - camera provisioned to watcher.
{- "token": "string",
- "stream_name": "string"
}
This API method is one of the most important in whole API, because it gives the list of all streams.
streams_list
in Watcher Admin API:
streams_list
in Watcher Client API:
select | string Example: select=episode_id,media,close_reason Comma-separated list of fields (including nested) that will be returned. |
sort | string Example: sort=-stats.bitrate,name,position Composite sort direction.
Default sort order is |
limit | integer Example: limit=100 Limit select count in collection to N elements. |
cursor | string Example: cursor=JTI0cG9zaXRpb25fZ3Q9MQ== Properly encoded analog of offset, allowing to read next bunch of items.
We do not offer common |
q | string Example: q=somepattern Search pattern for different fields like name, title, urls, etc. |
{- "estimated_count": 5,
- "next": "JTI0cG9zaXRpb25fZ3Q9MA==",
- "prev": "JTI0cG9zaXRpb25fbHQ9MSYlMjRyZXZlcnNlZD10cnVl",
- "timing": { },
- "streams": [
- {
- "name": "string",
- "comment": "This is a test stream",
- "title": "Hockey channel",
- "static": true,
- "disabled": false,
- "stats": {
- "lifetime": 71977,
- "last_dts_at": 1636383841974,
- "media_info": {
- "flow_type": "stream",
- "tracks": [ ],
- "duration": 0,
- "provider": "Netflix",
- "title": "Bunny",
- "stream_id": 253,
- "program_id": 110
}, - "ts_delay": 1284,
- "status": "running",
- "input_error_rate": 0,
- "retry_count": 0,
- "current_agent_id": "string",
- "agent_status": "connected",
- "dvr_info": {
- "from": 1641045644,
- "depth": 259200,
- "ranges": [
- {
- "from": 1525186456,
- "duration": 28800,
- "opened_at": 1000000000000,
- "closed_at": 1000000000000
}
], - "bytes": 129600000000,
- "disk_size": 1099511627776,
- "duration": 172800
}, - "alive": true,
- "bitrate": 186,
- "playback_token": "onetime_token",
- "streaming_endpoint": "string",
- "online_clients": 3,
- "bytes_out": 0
}, - "inputs": [
- {
- "url": "fake://fake",
- "width": 0,
- "height": 0,
- "bitrate": 0,
- "comment": "This is a test input",
- "source_timeout": 20,
- "audio_timeout": 20,
- "video_timeout": 20,
- "max_retry_timeout": 30,
- "timeout": 10,
- "frames_timeout": 3,
- "priority": 1,
- "stats": {
- "ip": "172.16.25.73",
- "proto": "dash",
- "opened_at": 1637094994000,
- "media_info": {
- "flow_type": "stream",
- "tracks": [ ],
- "duration": 0,
- "provider": "Netflix",
- "title": "Bunny",
- "stream_id": 253,
- "program_id": 110
}, - "ts_delay": 1284,
- "ts_delay_per_tracks": [
- 1284
], - "url": "udp://239.0.0.1:1234",
- "user_agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML. like Gecko) Chrome/90.0.4430.72 Safari/537.36",
- "active": true,
- "dvr_info": {
- "from": 1641045644,
- "depth": 259200,
- "ranges": [
- {
- "from": 1525186456,
- "duration": 28800,
- "opened_at": 1000000000000,
- "closed_at": 1000000000000
}
], - "bytes": 129600000000,
- "disk_size": 1099511627776,
- "duration": 172800
}, - "bytes": 0,
- "frames": 0,
- "retries": 0,
- "media_info_changes": 0,
- "valid_secondary_inputs": 2,
- "invalid_secondary_inputs": 0,
- "resync_count_normal": 0,
- "resync_count_jump": 0,
- "resync_count_drift": 0,
- "reorder_count": 0,
- "ad_splices_ingested": 0,
- "ad_splices_inserted": 0,
- "srt": {
- "rtt": 0,
- "latency": 0,
- "packets": 0,
- "retransmitted_packets": 0,
- "error_lost_packets": 0,
- "error_dropped_packets": 0
}, - "motion_detector": {
- "motion_detected_count": 0,
- "episodes_count": 0,
- "errors_not_authorized_count": 0,
- "errors_url_unreachable_count": 0,
- "errors_broken_payload": 0,
- "errors_no_agent_connected": 0,
- "errors_no_service_count": 0,
- "errors_incorrect_time_values_count": 0
}, - "errors": 0,
- "error_rate": 0,
- "errors_lost_packets": 0,
- "errors_decoder_reset": 0,
- "errors_broken_payload": 0,
- "errors_dropped_frames": 0,
- "errors_desync": 0,
- "errors_ts_pat": 0,
- "pids": [
- {
- "pid": 0,
- "pnr": 0,
- "packets": 0,
- "frames": 0,
- "empty_packets": 0,
- "errors_adaptation_broken": 0,
- "errors_ts_scrambled": 0,
- "errors_ts_pmt": 0,
- "errors_ts_cc": 0,
- "errors_ts_tei": 0,
- "errors_ts_psi_checksum": 0,
- "errors_pid_lost": 0,
- "broken_pes_count": 0,
- "broken_pes_sum": 0,
- "time_corrections": 0,
- "repeated_frames": 0,
- "corrected_backward_pts": 0,
- "pcr_resync": 0,
- "discarded_buffer_count": 0,
- "discarded_buffer_sum": 0,
- "fillers_count": 0,
- "fillers_sum": 0,
- "padding_pes_count": 0,
- "padding_pes_sum": 0,
- "crashed": 0,
- "dts_goes_backwards": 0,
- "dts_jump_forward": 0,
- "too_large_dts_jump": 0
}
], - "rtp_channels": [
- {
- "channel_id": 0,
- "content": "video",
- "rtp_packets": 0,
- "rtcp_packets": 0,
- "bytes": 0,
- "frames": 0,
- "pt_reject_count": 0,
- "pt_reject_sum": 0,
- "ts_goes_backwards": 0,
- "ts_jump_forward": 0,
- "ts_stuck": 0,
- "errors_dts_stuck": 0,
- "sr_ts_stuck": 0,
- "sender_clock_deviation": 0,
- "marker_packets_count": 0,
- "no_marker_mode_flag": true,
- "errors_broken_payload": 0,
- "errors_lost_packets": 0,
- "nal_count": 0,
- "discarded_broken_nal_count": 0,
- "discarded_not_allowed_nal_count": 0,
- "nal_fu_count": 0,
- "nal_stap_a_count": 0,
- "nal_aggregation_count": 0,
- "fu_pattern_is_broken_count": 0,
- "fu_has_both_start_end_bits_count": 0,
- "incomplete_nal_count": 0,
- "discarded_fu_count": 0,
- "fu_end_then_middle_workaround_count": 0,
- "nal_sei_count": 0,
- "invalid_sei_type_count": 0,
- "invalid_sei_size_count": 0,
- "invalid_sei_payload_count": 0,
- "discarded_sei_count": 0,
- "nal_idr_count": 0,
- "nal_single_count": 0,
- "nal_sps_count": 0,
- "nal_pps_count": 0,
- "nal_aud_count": 0,
- "nal_filler_count": 0,
- "nal_slice_count": 0,
- "nal_vps_count": 0,
- "nal_other_count": 0,
- "discarded_nal_count": 0
}
], - "errors_ts_service_lost": 0,
- "errors_ts_stuck_restarts": 0,
- "errors_404": 0,
- "errors_403": 0,
- "errors_500": 0,
- "errors_crashed": 0,
- "sdi": {
- "errors_no_signal": 0,
- "errors_duplicate": 0,
- "errors_ts_duplicate": 0,
- "errors_cpu_stall": 0,
- "peak_duration_deviation": 0,
- "avg_recv_duration": 0,
- "error_lost_audio": 0
}, - "agent": {
- "errors_conn_failed": 0,
- "errors_out_of_memory": 0,
- "errors_buffer_overrun": 0,
- "errors_invalid_request": 0,
- "errors_unknown": 0
}
}, - "user_agent": "string",
- "via": "string",
- "output_audio": "keep",
- "headers": {
- "User-Agent": "curl/7.85.0",
- "Authorization": "Basic dXNlcjpwYXNzd29yZA=="
}, - "no_clients_reconnect_delay": 0,
- "allow_if": "string",
- "deny_if": "string"
}
], - "dvr": {
- "redundancy_factor": 1,
- "storage_limit": 400000000000,
- "expiration": 0,
- "episodes_expiration": 0
}, - "vision": {
- "alg": "faces",
- "areas": "string",
- "detectors": [
- {
- "detector_type": "faces",
- "region_title": "Zone 1",
- "region_id": "string",
- "region_coordinates": [
- {
- "x": 1,
- "y": 1
}, - {
- "x": 1,
- "y": 1
}, - {
- "x": 1,
- "y": 1
}
]
}
]
}, - "organization_id": 9,
- "is_favourite": true,
- "notifications_enabled": true,
- "coordinates": {
- "latitude": 55.7512,
- "longitude": 37.6184
}, - "postal_address": "string",
- "map_coordinates": {
- "latitude": 55.7512,
- "longitude": 37.6184
}, - "onvif": {
- "ptz": true
}, - "preset_id": 0,
- "folder_id": 0,
- "audio": {
- "transcode_audio_codec": "aac",
- "disabled": false
}, - "path": [
- {
- "id": 0,
- "title": "string"
}
], - "firmware_update_duration": 0,
- "last_episode_at": 1000000000000,
- "last_change": {
- "created_at": 1000000000000,
- "user": "string"
}
}
]
}
This method allows to fetch a single stream. Refer to the streams_list
operation to find out what data will be returned in this method.
{- "name": "string",
- "comment": "This is a test stream",
- "title": "Hockey channel",
- "static": true,
- "disabled": false,
- "stats": {
- "lifetime": 71977,
- "last_dts_at": 1636383841974,
- "media_info": {
- "flow_type": "stream",
- "tracks": [ ],
- "duration": 0,
- "provider": "Netflix",
- "title": "Bunny",
- "stream_id": 253,
- "program_id": 110
}, - "ts_delay": 1284,
- "status": "running",
- "input_error_rate": 0,
- "retry_count": 0,
- "current_agent_id": "string",
- "agent_status": "connected",
- "dvr_info": {
- "from": 1641045644,
- "depth": 259200,
- "ranges": [
- {
- "from": 1525186456,
- "duration": 28800,
- "opened_at": 1000000000000,
- "closed_at": 1000000000000
}
], - "bytes": 129600000000,
- "disk_size": 1099511627776,
- "duration": 172800
}, - "alive": true,
- "bitrate": 186,
- "playback_token": "onetime_token",
- "streaming_endpoint": "string",
- "online_clients": 3,
- "bytes_out": 0
}, - "inputs": [
- {
- "url": "fake://fake",
- "width": 0,
- "height": 0,
- "bitrate": 0,
- "comment": "This is a test input",
- "source_timeout": 20,
- "audio_timeout": 20,
- "video_timeout": 20,
- "max_retry_timeout": 30,
- "timeout": 10,
- "frames_timeout": 3,
- "priority": 1,
- "stats": {
- "ip": "172.16.25.73",
- "proto": "dash",
- "opened_at": 1637094994000,
- "media_info": {
- "flow_type": "stream",
- "tracks": [ ],
- "duration": 0,
- "provider": "Netflix",
- "title": "Bunny",
- "stream_id": 253,
- "program_id": 110
}, - "ts_delay": 1284,
- "ts_delay_per_tracks": [
- 1284
], - "url": "udp://239.0.0.1:1234",
- "user_agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML. like Gecko) Chrome/90.0.4430.72 Safari/537.36",
- "active": true,
- "dvr_info": {
- "from": 1641045644,
- "depth": 259200,
- "ranges": [
- {
- "from": 1525186456,
- "duration": 28800,
- "opened_at": 1000000000000,
- "closed_at": 1000000000000
}
], - "bytes": 129600000000,
- "disk_size": 1099511627776,
- "duration": 172800
}, - "bytes": 0,
- "frames": 0,
- "retries": 0,
- "media_info_changes": 0,
- "valid_secondary_inputs": 2,
- "invalid_secondary_inputs": 0,
- "resync_count_normal": 0,
- "resync_count_jump": 0,
- "resync_count_drift": 0,
- "reorder_count": 0,
- "ad_splices_ingested": 0,
- "ad_splices_inserted": 0,
- "srt": {
- "rtt": 0,
- "latency": 0,
- "packets": 0,
- "retransmitted_packets": 0,
- "error_lost_packets": 0,
- "error_dropped_packets": 0
}, - "motion_detector": {
- "motion_detected_count": 0,
- "episodes_count": 0,
- "errors_not_authorized_count": 0,
- "errors_url_unreachable_count": 0,
- "errors_broken_payload": 0,
- "errors_no_agent_connected": 0,
- "errors_no_service_count": 0,
- "errors_incorrect_time_values_count": 0
}, - "errors": 0,
- "error_rate": 0,
- "errors_lost_packets": 0,
- "errors_decoder_reset": 0,
- "errors_broken_payload": 0,
- "errors_dropped_frames": 0,
- "errors_desync": 0,
- "errors_ts_pat": 0,
- "pids": [
- {
- "pid": 0,
- "pnr": 0,
- "packets": 0,
- "frames": 0,
- "empty_packets": 0,
- "errors_adaptation_broken": 0,
- "errors_ts_scrambled": 0,
- "errors_ts_pmt": 0,
- "errors_ts_cc": 0,
- "errors_ts_tei": 0,
- "errors_ts_psi_checksum": 0,
- "errors_pid_lost": 0,
- "broken_pes_count": 0,
- "broken_pes_sum": 0,
- "time_corrections": 0,
- "repeated_frames": 0,
- "corrected_backward_pts": 0,
- "pcr_resync": 0,
- "discarded_buffer_count": 0,
- "discarded_buffer_sum": 0,
- "fillers_count": 0,
- "fillers_sum": 0,
- "padding_pes_count": 0,
- "padding_pes_sum": 0,
- "crashed": 0,
- "dts_goes_backwards": 0,
- "dts_jump_forward": 0,
- "too_large_dts_jump": 0
}
], - "rtp_channels": [
- {
- "channel_id": 0,
- "content": "video",
- "rtp_packets": 0,
- "rtcp_packets": 0,
- "bytes": 0,
- "frames": 0,
- "pt_reject_count": 0,
- "pt_reject_sum": 0,
- "ts_goes_backwards": 0,
- "ts_jump_forward": 0,
- "ts_stuck": 0,
- "errors_dts_stuck": 0,
- "sr_ts_stuck": 0,
- "sender_clock_deviation": 0,
- "marker_packets_count": 0,
- "no_marker_mode_flag": true,
- "errors_broken_payload": 0,
- "errors_lost_packets": 0,
- "nal_count": 0,
- "discarded_broken_nal_count": 0,
- "discarded_not_allowed_nal_count": 0,
- "nal_fu_count": 0,
- "nal_stap_a_count": 0,
- "nal_aggregation_count": 0,
- "fu_pattern_is_broken_count": 0,
- "fu_has_both_start_end_bits_count": 0,
- "incomplete_nal_count": 0,
- "discarded_fu_count": 0,
- "fu_end_then_middle_workaround_count": 0,
- "nal_sei_count": 0,
- "invalid_sei_type_count": 0,
- "invalid_sei_size_count": 0,
- "invalid_sei_payload_count": 0,
- "discarded_sei_count": 0,
- "nal_idr_count": 0,
- "nal_single_count": 0,
- "nal_sps_count": 0,
- "nal_pps_count": 0,
- "nal_aud_count": 0,
- "nal_filler_count": 0,
- "nal_slice_count": 0,
- "nal_vps_count": 0,
- "nal_other_count": 0,
- "discarded_nal_count": 0
}
], - "errors_ts_service_lost": 0,
- "errors_ts_stuck_restarts": 0,
- "errors_404": 0,
- "errors_403": 0,
- "errors_500": 0,
- "errors_crashed": 0,
- "sdi": {
- "errors_no_signal": 0,
- "errors_duplicate": 0,
- "errors_ts_duplicate": 0,
- "errors_cpu_stall": 0,
- "peak_duration_deviation": 0,
- "avg_recv_duration": 0,
- "error_lost_audio": 0
}, - "agent": {
- "errors_conn_failed": 0,
- "errors_out_of_memory": 0,
- "errors_buffer_overrun": 0,
- "errors_invalid_request": 0,
- "errors_unknown": 0
}
}, - "user_agent": "string",
- "via": "string",
- "output_audio": "keep",
- "headers": {
- "User-Agent": "curl/7.85.0",
- "Authorization": "Basic dXNlcjpwYXNzd29yZA=="
}, - "no_clients_reconnect_delay": 0,
- "allow_if": "string",
- "deny_if": "string"
}
], - "dvr": {
- "redundancy_factor": 1,
- "storage_limit": 400000000000,
- "expiration": 0,
- "episodes_expiration": 0
}, - "vision": {
- "alg": "faces",
- "areas": "string",
- "detectors": [
- {
- "detector_type": "faces",
- "region_title": "Zone 1",
- "region_id": "string",
- "region_coordinates": [
- {
- "x": 1,
- "y": 1
}, - {
- "x": 1,
- "y": 1
}, - {
- "x": 1,
- "y": 1
}
]
}
]
}, - "organization_id": 9,
- "is_favourite": true,
- "notifications_enabled": true,
- "coordinates": {
- "latitude": 55.7512,
- "longitude": 37.6184
}, - "postal_address": "string",
- "map_coordinates": {
- "latitude": 55.7512,
- "longitude": 37.6184
}, - "onvif": {
- "ptz": true
}, - "preset_id": 0,
- "folder_id": 0,
- "audio": {
- "transcode_audio_codec": "aac",
- "disabled": false
}, - "path": [
- {
- "id": 0,
- "title": "string"
}
], - "firmware_update_duration": 0,
- "last_episode_at": 1000000000000,
- "last_change": {
- "created_at": 1000000000000,
- "user": "string"
}
}
Create or update a stream by its name. If the stream doesn't exists in the disk config, it will be created.
If you try to update a stream that is started from a template by a user request
having named_by=user
, a new stream will be created in the disk config.
If you pass only a partial stream configuration, this field will be updated, not the whole stream.
To create a new stream the property name
is required.
Pass the "$reset": true
option to replace the stream configuration with the provided one.
Partial stream configuration
{- "comment": "This is a test stream",
- "title": "Hockey channel",
- "static": true,
- "disabled": false,
- "inputs": [
- {
- "url": "fake://fake",
- "width": 0,
- "height": 0,
- "bitrate": 0,
- "comment": "This is a test input",
- "source_timeout": 20,
- "audio_timeout": 20,
- "video_timeout": 20,
- "max_retry_timeout": 30,
- "timeout": 10,
- "frames_timeout": 3,
- "priority": 1,
- "user_agent": "string",
- "via": "string",
- "output_audio": "keep",
- "headers": {
- "User-Agent": "curl/7.85.0",
- "Authorization": "Basic dXNlcjpwYXNzd29yZA=="
}, - "no_clients_reconnect_delay": 0,
- "allow_if": "string",
- "deny_if": "string"
}
], - "dvr": {
- "redundancy_factor": 1,
- "storage_limit": 400000000000,
- "expiration": 0,
- "episodes_expiration": 0
}, - "vision": {
- "alg": "faces",
- "areas": "string",
- "detectors": [
- {
- "detector_type": "faces",
- "region_title": "Zone 1",
- "region_id": "string",
- "region_coordinates": [
- {
- "x": 1,
- "y": 1
}, - {
- "x": 1,
- "y": 1
}, - {
- "x": 1,
- "y": 1
}
]
}
]
}, - "organization_id": 9,
- "is_favourite": true,
- "notifications_enabled": true,
- "coordinates": {
- "latitude": 55.7512,
- "longitude": 37.6184
}, - "postal_address": "string",
- "map_coordinates": {
- "latitude": 55.7512,
- "longitude": 37.6184
}, - "onvif": {
- "ptz": true
}, - "preset_id": 0,
- "folder_id": 0,
- "audio": {
- "transcode_audio_codec": "aac",
- "disabled": false
}
}
{- "name": "string",
- "comment": "This is a test stream",
- "title": "Hockey channel",
- "static": true,
- "disabled": false,
- "stats": {
- "lifetime": 71977,
- "last_dts_at": 1636383841974,
- "media_info": {
- "flow_type": "stream",
- "tracks": [ ],
- "duration": 0,
- "provider": "Netflix",
- "title": "Bunny",
- "stream_id": 253,
- "program_id": 110
}, - "ts_delay": 1284,
- "status": "running",
- "input_error_rate": 0,
- "retry_count": 0,
- "current_agent_id": "string",
- "agent_status": "connected",
- "dvr_info": {
- "from": 1641045644,
- "depth": 259200,
- "ranges": [
- {
- "from": 1525186456,
- "duration": 28800,
- "opened_at": 1000000000000,
- "closed_at": 1000000000000
}
], - "bytes": 129600000000,
- "disk_size": 1099511627776,
- "duration": 172800
}, - "alive": true,
- "bitrate": 186,
- "playback_token": "onetime_token",
- "streaming_endpoint": "string",
- "online_clients": 3,
- "bytes_out": 0
}, - "inputs": [
- {
- "url": "fake://fake",
- "width": 0,
- "height": 0,
- "bitrate": 0,
- "comment": "This is a test input",
- "source_timeout": 20,
- "audio_timeout": 20,
- "video_timeout": 20,
- "max_retry_timeout": 30,
- "timeout": 10,
- "frames_timeout": 3,
- "priority": 1,
- "stats": {
- "ip": "172.16.25.73",
- "proto": "dash",
- "opened_at": 1637094994000,
- "media_info": {
- "flow_type": "stream",
- "tracks": [ ],
- "duration": 0,
- "provider": "Netflix",
- "title": "Bunny",
- "stream_id": 253,
- "program_id": 110
}, - "ts_delay": 1284,
- "ts_delay_per_tracks": [
- 1284
], - "url": "udp://239.0.0.1:1234",
- "user_agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML. like Gecko) Chrome/90.0.4430.72 Safari/537.36",
- "active": true,
- "dvr_info": {
- "from": 1641045644,
- "depth": 259200,
- "ranges": [
- {
- "from": 1525186456,
- "duration": 28800,
- "opened_at": 1000000000000,
- "closed_at": 1000000000000
}
], - "bytes": 129600000000,
- "disk_size": 1099511627776,
- "duration": 172800
}, - "bytes": 0,
- "frames": 0,
- "retries": 0,
- "media_info_changes": 0,
- "valid_secondary_inputs": 2,
- "invalid_secondary_inputs": 0,
- "resync_count_normal": 0,
- "resync_count_jump": 0,
- "resync_count_drift": 0,
- "reorder_count": 0,
- "ad_splices_ingested": 0,
- "ad_splices_inserted": 0,
- "srt": {
- "rtt": 0,
- "latency": 0,
- "packets": 0,
- "retransmitted_packets": 0,
- "error_lost_packets": 0,
- "error_dropped_packets": 0
}, - "motion_detector": {
- "motion_detected_count": 0,
- "episodes_count": 0,
- "errors_not_authorized_count": 0,
- "errors_url_unreachable_count": 0,
- "errors_broken_payload": 0,
- "errors_no_agent_connected": 0,
- "errors_no_service_count": 0,
- "errors_incorrect_time_values_count": 0
}, - "errors": 0,
- "error_rate": 0,
- "errors_lost_packets": 0,
- "errors_decoder_reset": 0,
- "errors_broken_payload": 0,
- "errors_dropped_frames": 0,
- "errors_desync": 0,
- "errors_ts_pat": 0,
- "pids": [
- {
- "pid": 0,
- "pnr": 0,
- "packets": 0,
- "frames": 0,
- "empty_packets": 0,
- "errors_adaptation_broken": 0,
- "errors_ts_scrambled": 0,
- "errors_ts_pmt": 0,
- "errors_ts_cc": 0,
- "errors_ts_tei": 0,
- "errors_ts_psi_checksum": 0,
- "errors_pid_lost": 0,
- "broken_pes_count": 0,
- "broken_pes_sum": 0,
- "time_corrections": 0,
- "repeated_frames": 0,
- "corrected_backward_pts": 0,
- "pcr_resync": 0,
- "discarded_buffer_count": 0,
- "discarded_buffer_sum": 0,
- "fillers_count": 0,
- "fillers_sum": 0,
- "padding_pes_count": 0,
- "padding_pes_sum": 0,
- "crashed": 0,
- "dts_goes_backwards": 0,
- "dts_jump_forward": 0,
- "too_large_dts_jump": 0
}
], - "rtp_channels": [
- {
- "channel_id": 0,
- "content": "video",
- "rtp_packets": 0,
- "rtcp_packets": 0,
- "bytes": 0,
- "frames": 0,
- "pt_reject_count": 0,
- "pt_reject_sum": 0,
- "ts_goes_backwards": 0,
- "ts_jump_forward": 0,
- "ts_stuck": 0,
- "errors_dts_stuck": 0,
- "sr_ts_stuck": 0,
- "sender_clock_deviation": 0,
- "marker_packets_count": 0,
- "no_marker_mode_flag": true,
- "errors_broken_payload": 0,
- "errors_lost_packets": 0,
- "nal_count": 0,
- "discarded_broken_nal_count": 0,
- "discarded_not_allowed_nal_count": 0,
- "nal_fu_count": 0,
- "nal_stap_a_count": 0,
- "nal_aggregation_count": 0,
- "fu_pattern_is_broken_count": 0,
- "fu_has_both_start_end_bits_count": 0,
- "incomplete_nal_count": 0,
- "discarded_fu_count": 0,
- "fu_end_then_middle_workaround_count": 0,
- "nal_sei_count": 0,
- "invalid_sei_type_count": 0,
- "invalid_sei_size_count": 0,
- "invalid_sei_payload_count": 0,
- "discarded_sei_count": 0,
- "nal_idr_count": 0,
- "nal_single_count": 0,
- "nal_sps_count": 0,
- "nal_pps_count": 0,
- "nal_aud_count": 0,
- "nal_filler_count": 0,
- "nal_slice_count": 0,
- "nal_vps_count": 0,
- "nal_other_count": 0,
- "discarded_nal_count": 0
}
], - "errors_ts_service_lost": 0,
- "errors_ts_stuck_restarts": 0,
- "errors_404": 0,
- "errors_403": 0,
- "errors_500": 0,
- "errors_crashed": 0,
- "sdi": {
- "errors_no_signal": 0,
- "errors_duplicate": 0,
- "errors_ts_duplicate": 0,
- "errors_cpu_stall": 0,
- "peak_duration_deviation": 0,
- "avg_recv_duration": 0,
- "error_lost_audio": 0
}, - "agent": {
- "errors_conn_failed": 0,
- "errors_out_of_memory": 0,
- "errors_buffer_overrun": 0,
- "errors_invalid_request": 0,
- "errors_unknown": 0
}
}, - "user_agent": "string",
- "via": "string",
- "output_audio": "keep",
- "headers": {
- "User-Agent": "curl/7.85.0",
- "Authorization": "Basic dXNlcjpwYXNzd29yZA=="
}, - "no_clients_reconnect_delay": 0,
- "allow_if": "string",
- "deny_if": "string"
}
], - "dvr": {
- "redundancy_factor": 1,
- "storage_limit": 400000000000,
- "expiration": 0,
- "episodes_expiration": 0
}, - "vision": {
- "alg": "faces",
- "areas": "string",
- "detectors": [
- {
- "detector_type": "faces",
- "region_title": "Zone 1",
- "region_id": "string",
- "region_coordinates": [
- {
- "x": 1,
- "y": 1
}, - {
- "x": 1,
- "y": 1
}, - {
- "x": 1,
- "y": 1
}
]
}
]
}, - "organization_id": 9,
- "is_favourite": true,
- "notifications_enabled": true,
- "coordinates": {
- "latitude": 55.7512,
- "longitude": 37.6184
}, - "postal_address": "string",
- "map_coordinates": {
- "latitude": 55.7512,
- "longitude": 37.6184
}, - "onvif": {
- "ptz": true
}, - "preset_id": 0,
- "folder_id": 0,
- "audio": {
- "transcode_audio_codec": "aac",
- "disabled": false
}, - "path": [
- {
- "id": 0,
- "title": "string"
}
], - "firmware_update_duration": 0,
- "last_episode_at": 1000000000000,
- "last_change": {
- "created_at": 1000000000000,
- "user": "string"
}
}
This method allows to delete a single stream. You can delete config_override
by this API call if you want
to remove all runtime overrides.
If you do not specify any part
parameter, this stream will be deleted from config_on_disk
and if it was named_by: config
, then it will immediately stop.
part | string Default: "config_on_disk" Enum: "config_override" "config_on_disk" part of config to delete |
This method allows you to easily add or update camera configurations. If a camera with the specified name exists, its settings will be updated; otherwise, a new camera will be created. This is useful for making simultaneous changes to multiple cameras, such as integrating billing or setting up different user configurations.
New cameras will be added or existing ones updated without affecting others.
Requests can be sent in CSV format.
Ensure the user has permission to edit cameras in the relevant organizations before submitting.
If errors occur, no changes will be made, preserving the original configuration.
Streams configurations
name,title,comment,static,disabled,inputs_0_url,inputs_1_url,dvr_expiration,dvr_episodes_expiration,dvr_storage_limit,dvr_redundancy_factor,vision_alg,vision_areas,organization_id,coordinates_latitude,coordinates_longitude,is_test,onvif_ptz cam-e7fee73458,Primary camera title,,true,false,rtsp://127.0.0.1/stream/main,rtsp://127.0.0.1/stream/sub,86400,259200,32212254720,3,faces,x1 y1,1,55.71182944518981,37.7775426954031,false,false ,Secondary camera title,Camera comment,true,false,rtsp://127.0.0.1/stream2/main,rtsp://127.0.0.1/stream2/sub,172800,432000,,0,plates,x2 y2,1,51.711667039488155,35.77733281254769,true,true
{- "created": 0,
- "updated": 0
}
This method allows to fetch a single stream camera config info.
{- "sensor": {
- "brightness_correction": 100,
- "contrast_correction": 100,
- "sharpness": 100,
- "saturation": 100,
- "wide_dynamic_range": 100,
- "blacklight_compensation": {
- "mode": "on"
}, - "infrared_cutoff_filter": {
- "mode": "on"
}, - "image_orientation": "normal"
}, - "camera_info": {
- "firmware": "string",
- "model": "string",
- "manufacturer": "string",
- "serial_number": "string"
}, - "media_quality": "low"
}
Create or update a stream config by its name.
Partial stream config configuration
{- "sensor": {
- "brightness_correction": 100,
- "contrast_correction": 100,
- "sharpness": 100,
- "saturation": 100,
- "wide_dynamic_range": 100,
- "blacklight_compensation": {
- "mode": "on"
}, - "infrared_cutoff_filter": {
- "mode": "on"
}, - "image_orientation": "normal"
}, - "camera_info": {
- "firmware": "string",
- "model": "string",
- "manufacturer": "string",
- "serial_number": "string"
}, - "media_quality": "low"
}
{- "sensor": {
- "brightness_correction": 100,
- "contrast_correction": 100,
- "sharpness": 100,
- "saturation": 100,
- "wide_dynamic_range": 100,
- "blacklight_compensation": {
- "mode": "on"
}, - "infrared_cutoff_filter": {
- "mode": "on"
}, - "image_orientation": "normal"
}, - "camera_info": {
- "firmware": "string",
- "model": "string",
- "manufacturer": "string",
- "serial_number": "string"
}, - "media_quality": "low"
}
This method allows you to update camera firmware
Protocol data and firmware for update camera
image required | any <binary> Image for updating camera. Documentation for updating cameras: https://flussonic.com/doc/flussonic-home-v1/#upgrade. |
Iris"iris" (string) or ISAPI/PSIA"isapi" (string) or Xm"xm" (string) or MSTAR/Sputnik"sputnik" (string) Default: "iris" Protocol for connecting to camera. |
{- "image": "b'DL\u0003\u0004\u0014\u0000'",
- "proto": "iris"
}
The method creates a new temporary auth-token (JWT). The JTW token used as Bearer token in requests other than /login
.
{- "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c",
- "refresh_token": "3637e790-5530-11ed-bdc3-0242ac120002"
}
Send user email with password recovery instructions. This method will return success regardless of whether there is a user with the specified email address or not
string <email> Email address to which instructions will be sent |
{- "email": "user@example.com"
}
{- "errors": [
- {
- "id": "string",
- "status": "string",
- "code": "string",
- "title": "string",
- "source": {
- "pointer": "string",
- "parameter": "string"
}, - "meta": {
- "property1": "string",
- "property2": "string"
}
}
]
}
Changes user password
password | string [ 5 .. 128 ] characters New password |
{- "password": "string"
}
{- "errors": [
- {
- "id": "string",
- "status": "string",
- "code": "string",
- "title": "string",
- "source": {
- "pointer": "string",
- "parameter": "string"
}, - "meta": {
- "property1": "string",
- "property2": "string"
}
}
]
}
This method allows you to fetch registered episodes
select | string Example: select=episode_id,media,close_reason Comma-separated list of fields (including nested) that will be returned. |
limit | integer Example: limit=100 Limit select count in collection to N elements. |
cursor | string Example: cursor=JTI0cG9zaXRpb25fZ3Q9MQ== Properly encoded analog of offset, allowing to read next bunch of items.
We do not offer common |
group_view | boolean Show only last episodes by person or vehicle. |
is_unknown | boolean Show episodes with unknown persons and vehicles |
episode_type | string Example: episode_type=generic Episode type |
media | string Example: media=cam-045 Filter the collection by media name on which the episode is registered |
updated_at_gt | integer <utc_ms> [ 1000000000000 .. 10000000000000 ] Example: updated_at_gt=1637094994000 Filter the collection by episode update time. This field is rather specific because it allows to have an update stream with new/updated episodes |
poll_timeout | integer <seconds> Example: poll_timeout=30 Client may ask to delay a response if there are no episodes to fetch. This should be used as a long-poll mechanism for lightweight fetching episodes from origin. |
person_id | integer <snowflake_id> Filter by Person's identifier |
q | string Example: q=yellow car Request for the search across the streams being processed by the inference server.
Query is a free-formed text that describes an object to search for and its attributes.
Query may include color properties ("yellow"), appearance attributes ("beard").
Results may be inaccurate and should be reviewed by inspecting corresponding video fragments.
In order to use "context search" feature packages flussonic-vision and |
{- "estimated_count": 5,
- "next": "JTI0cG9zaXRpb25fZ3Q9MA==",
- "prev": "JTI0cG9zaXRpb25fbHQ9MSYlMjRyZXZlcnNlZD10cnVl",
- "timing": { },
- "episodes": [
- {
- "episode_id": 0,
- "media": "string",
- "close_reason": "timeout",
- "opened_at": 1000000000000,
- "started_at": 1000000000000,
- "updated_at": 1000000000000,
- "closed_at": 1000000000000,
- "preview_timestamp": 1000000000000,
- "preview": "string",
- "frame_preview": "string",
- "episode_appearance_timestamps": {
- "inference_timestamp": 1637094994000,
- "central_timestamp": 1637098611000,
- "watcher_timestamp": 1637094994000
}, - "episode_type": "generic",
- "playback_token": "onetime_token",
}
]
}
{- "name": "string",
- "fullname": "string",
- "email": "user@example.com",
- "phone": "+78007778413",
- "locale": "en",
- "note": "string",
- "max_sessions": 0,
- "is_admin": true,
- "is_domain_admin": true,
- "is_readonly": true,
- "apikey": "string"
}
Update profile info.
Profile params.
{- "name": "string",
- "fullname": "string",
- "password": "string",
- "email": "user@example.com",
- "phone": "+78007778413",
- "locale": "en",
- "note": "string",
- "max_sessions": 0,
- "apikey": "string"
}
{- "name": "string",
- "fullname": "string",
- "email": "user@example.com",
- "phone": "+78007778413",
- "locale": "en",
- "note": "string",
- "max_sessions": 0,
- "is_admin": true,
- "is_domain_admin": true,
- "is_readonly": true,
- "apikey": "string"
}
Save a new device token in Watcher. You can read how to create it here: https://firebase.google.com/docs/cloud-messaging/android/client?hl=en#sample-register You must save and refresh token if you want to receive notifications about camera events.
Device token received from Firebase
object (device_info) Device info |
{- "device": {
- "model": "string",
- "platform": "ios",
- "version": "string"
}
}
{- "token": "string",
- "device": {
- "model": "string",
- "platform": "ios",
- "version": "string"
}
}
Create a new event subscription
{- "stream_name": "string",
- "event_types": {
- "episode_generic": true,
- "episode_vehicle": false,
- "episode_face": true
}, - "notification_type": "push"
}
{- "stream_name": "string",
- "event_types": {
- "episode_generic": true,
- "episode_vehicle": false,
- "episode_face": true
}, - "notification_type": "push",
- "notification_frequency": 0
}
The method allows you to fetch UI settings including branding colors, logos, etc. It can work without authorization for the login page to be loaded.
{- "title": "string",
- "brand": "string",
- "product": "string",
- "fonts": {
- "light": "fira-sans-300.woff2",
- "regular": "fira-sans-400.woff2",
- "medium": "fira-sans-500.woff2"
}, - "favicons": {
- "16": "icons/favicon-16.png",
- "32": "icons/favicon-32.png",
- "48": "icons/favicon-48.png",
- "64": "icons/favicon-64.png",
- "128": "icons/favicon-128.png"
}, - "colors": {
- "primary": "string",
- "secondary": "string",
- "background": "#fff"
}, - "locales": [
- "en",
- "ru"
], - "default_locale": "en",
- "company_info": {
- "address": "string",
- "phone": "string",
- "business_hours": "string"
}, - "map": {
- "center": {
- "latitude": 55.7512,
- "longitude": 37.6184
}, - "api_key": "string",
- "provider": "string"
}
}
Checks for subscription on the backend
{- "errors": [
- {
- "id": "string",
- "status": "string",
- "code": "string",
- "title": "string",
- "source": {
- "pointer": "string",
- "parameter": "string"
}, - "meta": {
- "property1": "string",
- "property2": "string"
}
}
]
}
Subscribes the client to Push Messages
Result of PushManager: subscribe()
without expirationTime
endpoint required | string <uri> Endpoint on which Billing will send Push Messages |
required | object Keys that are used to encrypt the payload |
{- "keys": {
- "p256dh": "string",
- "auth": "string"
}
}
Deletes the subscription, so the client will no longer receive Push Messages on it
endpoint required | string <uri> Endpoint on which Billing will send Push Messages |
{
}
{- "errors": [
- {
- "id": "string",
- "status": "string",
- "code": "string",
- "title": "string",
- "source": {
- "pointer": "string",
- "parameter": "string"
}, - "meta": {
- "property1": "string",
- "property2": "string"
}
}
]
}
The list of registered videoanalytics persons
select | string Example: select=episode_id,media,close_reason Comma-separated list of fields (including nested) that will be returned. |
limit | integer Example: limit=100 Limit select count in collection to N elements. |
cursor | string Example: cursor=JTI0cG9zaXRpb25fZ3Q9MQ== Properly encoded analog of offset, allowing to read next bunch of items.
We do not offer common |
{- "estimated_count": 5,
- "next": "JTI0cG9zaXRpb25fZ3Q9MA==",
- "prev": "JTI0cG9zaXRpb25fbHQ9MSYlMjRyZXZlcnNlZD10cnVl",
- "timing": { },
- "persons": [
- {
- "person_id": 0,
- "name": "string",
- "external_id": "string",
- "originator": "api",
- "updated_at": 1637034282845,
- "deleted_at": 1637095014573,
- "photos": [
- {
- "data": "string",
- "sha256": "stringstringstringstringstringstringstringstringstringstringstri",
- "mime_type": "image/jpeg"
}
], - "organization": {
- "id": 7,
- "title": "Example LLC"
}, - "person_list": {
- "id": 3,
- "name": "List 1"
}, - "first_seen_at": 1637034282845,
- "last_seen_at": 1637095014573
}
]
}
This method allows you to fetch the person by its identifier
{- "person_id": 0,
- "name": "string",
- "external_id": "string",
- "originator": "api",
- "updated_at": 1637034282845,
- "deleted_at": 1637095014573,
- "photos": [
- {
- "data": "string",
- "sha256": "stringstringstringstringstringstringstringstringstringstringstri",
- "mime_type": "image/jpeg"
}
], - "organization": {
- "id": 7,
- "title": "Example LLC"
}, - "person_list": {
- "id": 3,
- "name": "List 1"
}, - "first_seen_at": 1637034282845,
- "last_seen_at": 1637095014573
}
Delete person by its id.
{- "errors": [
- {
- "id": "string",
- "status": "string",
- "code": "string",
- "title": "string",
- "source": {
- "pointer": "string",
- "parameter": "string"
}, - "meta": {
- "property1": "string",
- "property2": "string"
}
}
]
}
This method allows you to fetch the person lists
select | string Example: select=episode_id,media,close_reason Comma-separated list of fields (including nested) that will be returned. |
limit | integer Example: limit=100 Limit select count in collection to N elements. |
cursor | string Example: cursor=JTI0cG9zaXRpb25fZ3Q9MQ== Properly encoded analog of offset, allowing to read next bunch of items.
We do not offer common |
{- "estimated_count": 5,
- "next": "JTI0cG9zaXRpb25fZ3Q9MA==",
- "prev": "JTI0cG9zaXRpb25fbHQ9MSYlMjRyZXZlcnNlZD10cnVl",
- "timing": { },
- "person_lists": [
- {
- "id": 1,
- "name": "List 1",
- "organization": {
- "id": 7,
- "title": "Example LLC"
}, - "stats": {
- "person": 1,
- "camera": 1
}
}
]
}
Organizations of which the user is member
select | string Example: select=episode_id,media,close_reason Comma-separated list of fields (including nested) that will be returned. |
limit | integer Example: limit=100 Limit select count in collection to N elements. |
cursor | string Example: cursor=JTI0cG9zaXRpb25fZ3Q9MQ== Properly encoded analog of offset, allowing to read next bunch of items.
We do not offer common |
{- "estimated_count": 5,
- "next": "JTI0cG9zaXRpb25fZ3Q9MA==",
- "prev": "JTI0cG9zaXRpb25fbHQ9MSYlMjRyZXZlcnNlZD10cnVl",
- "timing": { },
- "organizations": [
- {
- "id": 7,
- "title": "Example LLC",
- "stats": {
- "streams": 12,
- "users": 12,
- "mosaics": 2
}, - "limits": {
- "streams": 50,
- "users": 50
}, - "is_default": true,
- "owner": {
- "id": 2,
- "name": "admin"
}, - "user_permissions": {
- "is_member": true,
- "can_view_stats": true,
- "can_edit_streams": true,
- "can_edit_users": true,
- "can_view_persons_lists": true,
- "can_edit_persons_lists": true
}
}
]
}
Create new organization
Organization body
title required | string Human-readable name of the organization. |
object Limits for properties in organization. | |
object Owner properties. |
{- "title": "Example LLC",
- "limits": {
- "streams": 50,
- "users": 50
}, - "owner": {
- "id": 2
}
}
{- "id": 7,
- "title": "Example LLC",
- "stats": {
- "streams": 12,
- "users": 12,
- "mosaics": 2
}, - "limits": {
- "streams": 50,
- "users": 50
}, - "is_default": true,
- "owner": {
- "id": 2,
- "name": "admin"
}, - "user_permissions": {
- "is_member": true,
- "can_view_stats": true,
- "can_edit_streams": true,
- "can_edit_users": true,
- "can_view_persons_lists": true,
- "can_edit_persons_lists": true
}
}
This method allows to fetch a single organization info. Refer to the organizations_list
operation to find out what data will be returned in this method.
{- "id": 7,
- "title": "Example LLC",
- "stats": {
- "streams": 12,
- "users": 12,
- "mosaics": 2
}, - "limits": {
- "streams": 50,
- "users": 50
}, - "is_default": true,
- "owner": {
- "id": 2,
- "name": "admin"
}, - "user_permissions": {
- "is_member": true,
- "can_view_stats": true,
- "can_edit_streams": true,
- "can_edit_users": true,
- "can_view_persons_lists": true,
- "can_edit_persons_lists": true
}
}
Update organization by its id.
Organization info
title required | string Human-readable name of the organization. |
object Limits for properties in organization. | |
object Owner properties. |
{- "title": "Example LLC",
- "limits": {
- "streams": 50,
- "users": 50
}, - "owner": {
- "id": 2
}
}
{- "id": 7,
- "title": "Example LLC",
- "stats": {
- "streams": 12,
- "users": 12,
- "mosaics": 2
}, - "limits": {
- "streams": 50,
- "users": 50
}, - "is_default": true,
- "owner": {
- "id": 2,
- "name": "admin"
}, - "user_permissions": {
- "is_member": true,
- "can_view_stats": true,
- "can_edit_streams": true,
- "can_edit_users": true,
- "can_view_persons_lists": true,
- "can_edit_persons_lists": true
}
}
Delete organization by its id.
{- "errors": [
- {
- "id": "string",
- "status": "string",
- "code": "string",
- "title": "string",
- "source": {
- "pointer": "string",
- "parameter": "string"
}, - "meta": {
- "property1": "string",
- "property2": "string"
}
}
]
}
Users who are members of the organization
select | string Example: select=episode_id,media,close_reason Comma-separated list of fields (including nested) that will be returned. |
limit | integer Example: limit=100 Limit select count in collection to N elements. |
cursor | string Example: cursor=JTI0cG9zaXRpb25fZ3Q9MQ== Properly encoded analog of offset, allowing to read next bunch of items.
We do not offer common |
{- "estimated_count": 5,
- "next": "JTI0cG9zaXRpb25fZ3Q9MA==",
- "prev": "JTI0cG9zaXRpb25fbHQ9MSYlMjRyZXZlcnNlZD10cnVl",
- "timing": { },
- "users": [
- {
- "id": 7,
- "name": "Example LLC",
- "email": "user@example.com",
- "permissions": {
- "folders": [
- {
- "id": 0,
- "can_view": false,
- "can_view_dvr": false,
- "dvr_depth_limit": 3600,
- "can_use_ptz": false,
- "can_use_actions": false
}
], - "organization": {
- "is_member": true,
- "can_view_stats": true,
- "can_edit_streams": true,
- "can_edit_users": true,
- "can_view_persons_lists": true,
- "can_edit_persons_lists": true
}
}
}
]
}
This method allows to fetch a single organizations user info.
organization_id required | integer Organization identifier |
user_id required | integer User identifier |
{- "id": 7,
- "name": "Example LLC",
- "email": "user@example.com",
- "permissions": {
- "folders": [
- {
- "id": 0,
- "can_view": false,
- "can_view_dvr": false,
- "dvr_depth_limit": 3600,
- "can_use_ptz": false,
- "can_use_actions": false
}
], - "organization": {
- "is_member": true,
- "can_view_stats": true,
- "can_edit_streams": true,
- "can_edit_users": true,
- "can_view_persons_lists": true,
- "can_edit_persons_lists": true
}
}
}
Update organization user by its id or adds new user to organization.
organization_id required | integer Organization identifier |
user_id required | integer User identifier |
Organization user info
{- "can_view_stats": true,
- "can_edit_streams": true,
- "can_edit_users": true,
- "can_view_persons_lists": true,
- "can_edit_persons_lists": true
}
{- "id": 7,
- "name": "Example LLC",
- "email": "user@example.com",
- "permissions": {
- "folders": [
- {
- "id": 0,
- "can_view": false,
- "can_view_dvr": false,
- "dvr_depth_limit": 3600,
- "can_use_ptz": false,
- "can_use_actions": false
}
], - "organization": {
- "is_member": true,
- "can_view_stats": true,
- "can_edit_streams": true,
- "can_edit_users": true,
- "can_view_persons_lists": true,
- "can_edit_persons_lists": true
}
}
}
Save organization preset by its id or adds new preset to organization.
Organization preset info
preset_id | integer Preset identifier |
{- "preset_id": 7
}
{- "id": 7,
- "title": "Example preset name",
- "is_adjustable": true,
- "dvr": {
- "redundancy_factor": 1,
- "storage_limit": 400000000000,
- "expiration": 0,
- "episodes_expiration": 0
}, - "vision": {
- "alg": "faces"
}, - "is_default": true
}
This method allows to remove a specific preset from organization.
organization_id required | integer Organization identifier |
preset_id required | integer Preset identifier |
{- "errors": [
- {
- "id": "string",
- "status": "string",
- "code": "string",
- "title": "string",
- "source": {
- "pointer": "string",
- "parameter": "string"
}, - "meta": {
- "property1": "string",
- "property2": "string"
}
}
]
}
The presets in Watcher is a set of DVR and analytics parameters that you can use as a template when creating and configuring cameras. When you select a preset in the camera settings, the parameters from the preset are populated to the camera settings. A set of presets on the camera is defined by the set of presets selected for the camera's Organization. https://flussonic.com/doc/manage-presets-in-watcher-ui/
This method is used to get info about presets.
If the organization_id
is transferred this method will return presets only allowed in organization with that Id.
select | string Example: select=episode_id,media,close_reason Comma-separated list of fields (including nested) that will be returned. |
limit | integer Example: limit=100 Limit select count in collection to N elements. |
cursor | string Example: cursor=JTI0cG9zaXRpb25fZ3Q9MQ== Properly encoded analog of offset, allowing to read next bunch of items.
We do not offer common |
organization_id | integer Organization identifier to select presets only available for this organization.
If the |
{- "estimated_count": 5,
- "next": "JTI0cG9zaXRpb25fZ3Q9MA==",
- "prev": "JTI0cG9zaXRpb25fbHQ9MSYlMjRyZXZlcnNlZD10cnVl",
- "timing": { },
- "presets": [
- {
- "id": 7,
- "title": "Example preset name",
- "is_adjustable": true,
- "dvr": {
- "redundancy_factor": 1,
- "storage_limit": 400000000000,
- "expiration": 0,
- "episodes_expiration": 0
}, - "vision": {
- "alg": "faces"
}, - "is_default": true
}
]
}
This method is used to get info about preset by its id.
{- "id": 7,
- "title": "Example preset name",
- "is_adjustable": true,
- "dvr": {
- "redundancy_factor": 1,
- "storage_limit": 400000000000,
- "expiration": 0,
- "episodes_expiration": 0
}, - "vision": {
- "alg": "faces"
}, - "is_default": true
}
Send an arbitrary push notification. This method sends test push notification to user.
title required | string Title of notification |
body required | string Body of notification |
{- "title": "string",
- "body": "string"
}
Returns the list of all mosaics. Mosaics allow you to combine multiple cameras to display on a single screen.
select | string Example: select=episode_id,media,close_reason Comma-separated list of fields (including nested) that will be returned. |
limit | integer Example: limit=100 Limit select count in collection to N elements. |
cursor | string Example: cursor=JTI0cG9zaXRpb25fZ3Q9MQ== Properly encoded analog of offset, allowing to read next bunch of items.
We do not offer common |
{- "estimated_count": 5,
- "next": "JTI0cG9zaXRpb25fZ3Q9MA==",
- "prev": "JTI0cG9zaXRpb25fbHQ9MSYlMjRyZXZlcnNlZD10cnVl",
- "timing": { },
- "mosaics": [
- {
- "title": "string",
- "type": "2x2",
- "organization_id": 9,
- "id": 7,
- "streams": [
- {
- "name": "ag-12345",
- "title": "Hockey channel",
- "playback_token": "onetime_token",
- "alive": true
}
]
}
]
}
This method allows you to create a mosaic
Mosaic data
{- "title": "string",
- "type": "2x2",
- "organization_id": 9,
- "streams": [
- {
- "name": "ag-12345"
}
]
}
{- "title": "string",
- "type": "2x2",
- "organization_id": 9,
- "id": 7,
- "streams": [
- {
- "name": "ag-12345",
- "title": "Hockey channel",
- "playback_token": "onetime_token",
- "alive": true
}
]
}
This method is used to get info about mosaic by its id.
{- "title": "string",
- "type": "2x2",
- "organization_id": 9,
- "id": 7,
- "streams": [
- {
- "name": "ag-12345",
- "title": "Hockey channel",
- "playback_token": "onetime_token",
- "alive": true
}
]
}
This method allows you to update mosaic data
Mosaic data
{- "title": "string",
- "type": "2x2",
- "organization_id": 9,
- "streams": [
- {
- "name": "ag-12345"
}
]
}
{- "title": "string",
- "type": "2x2",
- "organization_id": 9,
- "id": 7,
- "streams": [
- {
- "name": "ag-12345",
- "title": "Hockey channel",
- "playback_token": "onetime_token",
- "alive": true
}
]
}
Execute a PTZ command
PTZ command
{- "command": "move_continuous",
- "up": 0,
- "down": 50,
- "left": 50,
- "right": 0,
- "in": 20,
- "out": 0
}
{- "errors": [
- {
- "id": "string",
- "status": "string",
- "code": "string",
- "title": "string",
- "source": {
- "pointer": "string",
- "parameter": "string"
}, - "meta": {
- "property1": "string",
- "property2": "string"
}
}
]
}
List of available users
select | string Example: select=episode_id,media,close_reason Comma-separated list of fields (including nested) that will be returned. |
limit | integer Example: limit=100 Limit select count in collection to N elements. |
cursor | string Example: cursor=JTI0cG9zaXRpb25fZ3Q9MQ== Properly encoded analog of offset, allowing to read next bunch of items.
We do not offer common |
organization_id | integer Organization identifier to select users only available for this organization.
If the |
{- "estimated_count": 5,
- "next": "JTI0cG9zaXRpb25fZ3Q9MA==",
- "prev": "JTI0cG9zaXRpb25fbHQ9MSYlMjRyZXZlcnNlZD10cnVl",
- "timing": { },
- "users_list": [
- {
- "name": "string",
- "fullname": "string",
- "email": "user@example.com",
- "phone": "+78007778413",
- "locale": "en",
- "note": "string",
- "max_sessions": 0,
- "id": 1,
- "disabled": false,
- "readonly": false,
- "organizations": [
- {
- "id": 1,
- "title": "Cameras",
- "owner": {
- "id": 2,
- "name": "admin"
}, - "permissions": {
- "is_member": true,
- "can_view_stats": true,
- "can_edit_streams": true,
- "can_edit_users": true,
- "can_view_persons_lists": true,
- "can_edit_persons_lists": true
}
}
], - "access_level": "generic"
}
]
}
This method allows you to create a user
User data
{- "name": "string",
- "fullname": "string",
- "password": "string",
- "email": "user@example.com",
- "phone": "+78007778413",
- "locale": "en",
- "note": "string",
- "max_sessions": 0,
- "disabled": false,
- "readonly": false,
- "access_level": "generic",
- "organization_id": 12
}
{- "name": "string",
- "fullname": "string",
- "email": "user@example.com",
- "phone": "+78007778413",
- "locale": "en",
- "note": "string",
- "max_sessions": 0,
- "id": 1,
- "disabled": false,
- "readonly": false,
- "organizations": [
- {
- "id": 1,
- "title": "Cameras",
- "owner": {
- "id": 2,
- "name": "admin"
}, - "permissions": {
- "is_member": true,
- "can_view_stats": true,
- "can_edit_streams": true,
- "can_edit_users": true,
- "can_view_persons_lists": true,
- "can_edit_persons_lists": true
}
}
], - "access_level": "generic"
}
This method allows you to fetch the user by its identifier
{- "name": "string",
- "fullname": "string",
- "email": "user@example.com",
- "phone": "+78007778413",
- "locale": "en",
- "note": "string",
- "max_sessions": 0,
- "id": 1,
- "disabled": false,
- "readonly": false,
- "organizations": [
- {
- "id": 1,
- "title": "Cameras",
- "owner": {
- "id": 2,
- "name": "admin"
}, - "permissions": {
- "is_member": true,
- "can_view_stats": true,
- "can_edit_streams": true,
- "can_edit_users": true,
- "can_view_persons_lists": true,
- "can_edit_persons_lists": true
}
}
], - "access_level": "generic"
}
This method allows you to update user data
User data
{- "name": "string",
- "fullname": "string",
- "password": "string",
- "email": "user@example.com",
- "phone": "+78007778413",
- "locale": "en",
- "note": "string",
- "max_sessions": 0,
- "disabled": false,
- "readonly": false,
- "access_level": "generic"
}
{- "name": "string",
- "fullname": "string",
- "email": "user@example.com",
- "phone": "+78007778413",
- "locale": "en",
- "note": "string",
- "max_sessions": 0,
- "id": 1,
- "disabled": false,
- "readonly": false,
- "organizations": [
- {
- "id": 1,
- "title": "Cameras",
- "owner": {
- "id": 2,
- "name": "admin"
}, - "permissions": {
- "is_member": true,
- "can_view_stats": true,
- "can_edit_streams": true,
- "can_edit_users": true,
- "can_view_persons_lists": true,
- "can_edit_persons_lists": true
}
}
], - "access_level": "generic"
}
Get list of folders available for user in specific organization
user_id required | integer User identifier |
organization_id required | integer Organization identifier |
{- "estimated_count": 5,
- "next": "JTI0cG9zaXRpb25fZ3Q9MA==",
- "prev": "JTI0cG9zaXRpb25fbHQ9MSYlMjRyZXZlcnNlZD10cnVl",
- "timing": { },
- "folders": [
- {
- "id": 0,
- "streams_count": 0,
- "coordinates": {
- "latitude": 55.7512,
- "longitude": 37.6184
}, - "floor_plan": {
- "file": {
- "url": "string",
- "name": "1-maps-2_07957af5f132243350a0f5546a675cb006354b69"
}, - "bottomleft": {
- "latitude": 55.7512,
- "longitude": 37.6184
}, - "topleft": {
- "latitude": 55.7512,
- "longitude": 37.6184
}, - "topright": {
- "latitude": 55.7512,
- "longitude": 37.6184
}
}, - "hierarchy": {
- "level": 0,
- "order_num": 0
}, - "organization_id": 0,
- "parent_id": 0,
- "title": "string",
- "permissions": {
- "can_view": false,
- "can_view_dvr": false,
- "dvr_depth_limit": 3600,
- "can_use_ptz": false,
- "can_use_actions": false
}
}
]
}
Get list of organizations available for user
can_edit | boolean A parameter to filter organizations based on their edit availability for the current user |
{- "estimated_count": 5,
- "next": "JTI0cG9zaXRpb25fZ3Q9MA==",
- "prev": "JTI0cG9zaXRpb25fbHQ9MSYlMjRyZXZlcnNlZD10cnVl",
- "timing": { },
- "organizations": [
- {
- "id": 7,
- "title": "Example LLC",
- "stats": {
- "streams": 12,
- "users": 12,
- "mosaics": 2
}, - "limits": {
- "streams": 50,
- "users": 50
}, - "is_default": true,
- "owner": {
- "id": 2,
- "name": "admin"
}, - "user_permissions": {
- "is_member": true,
- "can_view_stats": true,
- "can_edit_streams": true,
- "can_edit_users": true,
- "can_view_persons_lists": true,
- "can_edit_persons_lists": true
}
}
]
}
This method allows to fetch a list of folders info.
{- "estimated_count": 5,
- "next": "JTI0cG9zaXRpb25fZ3Q9MA==",
- "prev": "JTI0cG9zaXRpb25fbHQ9MSYlMjRyZXZlcnNlZD10cnVl",
- "timing": { },
- "folders": [
- {
- "id": 0,
- "streams_count": 0,
- "coordinates": {
- "latitude": 55.7512,
- "longitude": 37.6184
}, - "floor_plan": {
- "file": {
- "url": "string",
- "name": "1-maps-2_07957af5f132243350a0f5546a675cb006354b69"
}, - "bottomleft": {
- "latitude": 55.7512,
- "longitude": 37.6184
}, - "topleft": {
- "latitude": 55.7512,
- "longitude": 37.6184
}, - "topright": {
- "latitude": 55.7512,
- "longitude": 37.6184
}
}, - "hierarchy": {
- "level": 0,
- "order_num": 0
}, - "organization_id": 0,
- "parent_id": 0,
- "title": "string"
}
]
}
Create folder.
Folder info
{- "coordinates": {
- "latitude": 55.7512,
- "longitude": 37.6184
}, - "floor_plan": {
- "file": {
- "b64_content": "string",
- "binary_content": "string",
- "mime_type": "string"
}, - "bottomleft": {
- "latitude": 55.7512,
- "longitude": 37.6184
}, - "topleft": {
- "latitude": 55.7512,
- "longitude": 37.6184
}, - "topright": {
- "latitude": 55.7512,
- "longitude": 37.6184
}
}, - "hierarchy": {
- "shift": {
- "direction": "after",
- "destination": 0
}
}, - "parent_id": 0,
- "title": "string"
}
{- "id": 0,
- "streams_count": 0,
- "coordinates": {
- "latitude": 55.7512,
- "longitude": 37.6184
}, - "floor_plan": {
- "file": {
- "url": "string",
- "name": "1-maps-2_07957af5f132243350a0f5546a675cb006354b69"
}, - "bottomleft": {
- "latitude": 55.7512,
- "longitude": 37.6184
}, - "topleft": {
- "latitude": 55.7512,
- "longitude": 37.6184
}, - "topright": {
- "latitude": 55.7512,
- "longitude": 37.6184
}
}, - "hierarchy": {
- "level": 0,
- "order_num": 0
}, - "organization_id": 0,
- "parent_id": 0,
- "title": "string"
}
This method allows to fetch folder info.
organization_id required | integer Organization identifier |
folder_id required | integer Folder identifier |
{- "id": 0,
- "streams_count": 0,
- "coordinates": {
- "latitude": 55.7512,
- "longitude": 37.6184
}, - "floor_plan": {
- "file": {
- "url": "string",
- "name": "1-maps-2_07957af5f132243350a0f5546a675cb006354b69"
}, - "bottomleft": {
- "latitude": 55.7512,
- "longitude": 37.6184
}, - "topleft": {
- "latitude": 55.7512,
- "longitude": 37.6184
}, - "topright": {
- "latitude": 55.7512,
- "longitude": 37.6184
}
}, - "hierarchy": {
- "level": 0,
- "order_num": 0
}, - "organization_id": 0,
- "parent_id": 0,
- "title": "string"
}
Save folder.
organization_id required | integer Organization identifier |
folder_id required | integer Folder identifier |
Folder info
{- "coordinates": {
- "latitude": 55.7512,
- "longitude": 37.6184
}, - "floor_plan": {
- "file": {
- "b64_content": "string",
- "binary_content": "string",
- "mime_type": "string"
}, - "bottomleft": {
- "latitude": 55.7512,
- "longitude": 37.6184
}, - "topleft": {
- "latitude": 55.7512,
- "longitude": 37.6184
}, - "topright": {
- "latitude": 55.7512,
- "longitude": 37.6184
}
}, - "hierarchy": {
- "shift": {
- "direction": "after",
- "destination": 0
}
}, - "parent_id": 0,
- "title": "string"
}
{- "id": 0,
- "streams_count": 0,
- "coordinates": {
- "latitude": 55.7512,
- "longitude": 37.6184
}, - "floor_plan": {
- "file": {
- "url": "string",
- "name": "1-maps-2_07957af5f132243350a0f5546a675cb006354b69"
}, - "bottomleft": {
- "latitude": 55.7512,
- "longitude": 37.6184
}, - "topleft": {
- "latitude": 55.7512,
- "longitude": 37.6184
}, - "topright": {
- "latitude": 55.7512,
- "longitude": 37.6184
}
}, - "hierarchy": {
- "level": 0,
- "order_num": 0
}, - "organization_id": 0,
- "parent_id": 0,
- "title": "string"
}
This method allows to fetch a list of users in a folder.
organization_id required | integer Organization identifier |
folder_id required | integer Folder identifier |
{- "estimated_count": 5,
- "next": "JTI0cG9zaXRpb25fZ3Q9MA==",
- "prev": "JTI0cG9zaXRpb25fbHQ9MSYlMjRyZXZlcnNlZD10cnVl",
- "timing": { },
- "users": [
- {
- "user_id": 0,
- "can_view": false,
- "can_view_dvr": false,
- "dvr_depth_limit": 3600,
- "can_use_ptz": false,
- "can_use_actions": false
}
]
}
This method allows to fetch user in a folder.
organization_id required | integer Organization identifier |
folder_id required | integer Folder identifier |
user_id required | integer User identifier |
{- "can_view": false,
- "can_view_dvr": false,
- "dvr_depth_limit": 3600,
- "can_use_ptz": false,
- "can_use_actions": false
}
Save user info in a folder.
organization_id required | integer Organization identifier |
folder_id required | integer Folder identifier |
user_id required | integer User identifier |
Folder user
{- "can_view": false,
- "can_view_dvr": false,
- "dvr_depth_limit": 3600,
- "can_use_ptz": false,
- "can_use_actions": false
}
{- "can_view": false,
- "can_view_dvr": false,
- "dvr_depth_limit": 3600,
- "can_use_ptz": false,
- "can_use_actions": false
}
List of messages
limit | integer Example: limit=100 Limit select count in collection to N elements. |
cursor | string Example: cursor=JTI0cG9zaXRpb25fZ3Q9MQ== Properly encoded analog of offset, allowing to read next bunch of items.
We do not offer common |
{- "estimated_count": 5,
- "next": "JTI0cG9zaXRpb25fZ3Q9MA==",
- "prev": "JTI0cG9zaXRpb25fbHQ9MSYlMjRyZXZlcnNlZD10cnVl",
- "timing": { },
- "messages": [
- {
- "title": "Attention! Maintenance work is in progress.\n",
- "body": "**Maintenance work is in progress.**\n",
- "type": "warning",
- "is_push": false,
- "is_dashboard": false,
- "id": 1,
- "is_deleted": false,
- "sender": {
- "id": 1,
- "name": "admin"
}, - "user": {
- "id": 1,
- "name": "support"
}, - "was_read": false
}
]
}
This method allows you to send a message to a user
Message data
{- "title": "Attention! Maintenance work is in progress.\n",
- "body": "**Maintenance work is in progress.**\n",
- "type": "warning",
- "is_push": false,
- "is_dashboard": false,
- "user_id": 1
}
{- "title": "Attention! Maintenance work is in progress.\n",
- "body": "**Maintenance work is in progress.**\n",
- "type": "warning",
- "is_push": false,
- "is_dashboard": false,
- "id": 1,
- "is_deleted": false,
- "sender": {
- "id": 1,
- "name": "admin"
}, - "user": {
- "id": 1,
- "name": "support"
}, - "was_read": false,
- "devices": 3
}
This method allows you to fetch the message by its identifier
{- "title": "Attention! Maintenance work is in progress.\n",
- "body": "**Maintenance work is in progress.**\n",
- "type": "warning",
- "is_push": false,
- "is_dashboard": false,
- "id": 1,
- "is_deleted": false,
- "sender": {
- "id": 1,
- "name": "admin"
}, - "user": {
- "id": 1,
- "name": "support"
}, - "was_read": false
}
This method allows you to delete a message
{- "errors": [
- {
- "id": "string",
- "status": "string",
- "code": "string",
- "title": "string",
- "source": {
- "pointer": "string",
- "parameter": "string"
}, - "meta": {
- "property1": "string",
- "property2": "string"
}
}
]
}