You are on page 1of 220

Integration SDK

  
 Integration SDK

Table of contents
1 HTTP API...............................................................................................................................9
1.1 General agreements.......................................................................................................................... 9
1.2 Infrastructure .................................................................................................................................... 9
1.2.1 Server HTTP API ................................................................................................................................................ 9
1.2.1.1 Get unique identifier ......................................................................................................................................... 9
1.2.1.2 Servers ............................................................................................................................................................... 9
1.2.1.2.1 Get Server list .................................................................................................................................................... 9
1.2.1.2.1.1 List of Axxon domain Servers ...............................................................................................................................................9
1.2.1.2.1.2 Server info ...........................................................................................................................................................................10
1.2.1.2.2 Get info about Server usage ........................................................................................................................... 11
1.2.1.2.3 Get info about Server version......................................................................................................................... 11
1.2.1.2.4 Statistics for Server......................................................................................................................................... 12
1.2.1.3 Cameras........................................................................................................................................................... 12
1.2.1.3.1 Get list of video sources (cameras) ................................................................................................................ 12
1.2.1.3.2 Get camera live stream................................................................................................................................... 15
1.2.1.3.2.1 General information............................................................................................................................................................16
1.2.1.3.2.2 HLS video.............................................................................................................................................................................17
1.2.1.3.2.3 RTSP video ..........................................................................................................................................................................17
1.2.1.3.2.4 HTTP video ..........................................................................................................................................................................18
1.2.1.3.2.5 Tunneling RTSP over HTTP ................................................................................................................................................18
1.2.1.3.2.6 H.264 and H.265 video ........................................................................................................................................................18
1.2.1.3.2.7 Get high and low quality streams ......................................................................................................................................19
1.2.1.3.2.8 Configure tunneling RTSP over HTTP in VLC .....................................................................................................................19
1.2.1.3.3 Get camera snapshot...................................................................................................................................... 19
1.2.1.3.4 Get list of groups and their contents.............................................................................................................. 20
1.2.1.3.4.1 Get list of all available groups ............................................................................................................................................20
1.2.1.3.4.2 Get list of groups containing specified camera .................................................................................................................21
1.2.1.3.5 PTZ cameras.................................................................................................................................................... 22
1.2.1.3.5.1 Get list of telemetry devices for specified video source....................................................................................................22
1.2.1.3.5.2 Acquire telemetry control session .....................................................................................................................................22
1.2.1.3.5.3 Keep session alive ...............................................................................................................................................................23
1.2.1.3.5.4 Release session ...................................................................................................................................................................23
1.2.1.3.5.5 Control degrees of freedom................................................................................................................................................24
1.2.1.3.5.6 Preset control......................................................................................................................................................................28

 –  2
 Integration SDK

1.2.1.3.5.7 Get information about errors .............................................................................................................................................29


1.2.1.3.5.8 Get coordinates...................................................................................................................................................................29
1.2.1.3.6 Camera statistics............................................................................................................................................. 30
1.2.1.4 Archives ........................................................................................................................................................... 31
1.2.1.4.1 Get archive contents ....................................................................................................................................... 31
1.2.1.4.1.1 Get archive contents: ..........................................................................................................................................................31
1.2.1.4.2 Get info about archive .................................................................................................................................... 32
1.2.1.4.2.1 Archive depth ......................................................................................................................................................................32
1.2.1.4.2.2 Recording capacity to specific camera archive.................................................................................................................33
1.2.1.4.3 Get info about archive damage...................................................................................................................... 33
1.2.1.4.4 Get archive stream .......................................................................................................................................... 35
1.2.1.4.4.1 Get archive stream from default archive ...........................................................................................................................35
1.2.1.4.4.2 Assign ID to the stream .......................................................................................................................................................37
1.2.1.4.4.3 RTSP archive video .............................................................................................................................................................37
1.2.1.4.4.4 HTTP archive video .............................................................................................................................................................37
1.2.1.4.4.5 Tunneling RTSP over HTTP ................................................................................................................................................37
1.2.1.4.4.6 H.264 archive video.............................................................................................................................................................38
1.2.1.4.4.7 Get archive stream info.......................................................................................................................................................38
1.2.1.4.4.8 Control archive stream .......................................................................................................................................................38
1.2.1.4.4.9 Review video footage by frame ..........................................................................................................................................38
1.2.1.4.5 Working with bookmarks................................................................................................................................ 40
1.2.1.4.5.1 Get bookmarks from archive..............................................................................................................................................40
1.2.1.4.5.2 Edit bookmarks ...................................................................................................................................................................42
1.2.1.4.5.3 Create bookmarks...............................................................................................................................................................43
1.2.1.4.5.4 Delete video from archive...................................................................................................................................................44
1.2.1.4.6 Archive search ................................................................................................................................................. 45
1.2.1.4.6.1 General interface.................................................................................................................................................................45
1.2.1.4.6.2 Face search API ...................................................................................................................................................................47
1.2.1.4.6.3 LPR search API.....................................................................................................................................................................49
1.2.1.4.6.4 Forensic Search MomentQuest (VMDA) API .......................................................................................................................52
1.2.1.4.6.5 'Familiar face'-'stranger' face search API ..........................................................................................................................62
1.2.1.4.6.6 Define 'familiar face'-'stranger' attribute from image......................................................................................................65
1.2.1.4.6.7 Heat Map API .......................................................................................................................................................................66
1.2.1.5 Events, triggerings of detection tools and alarms ........................................................................................ 66
1.2.1.5.1 Triggerings of detection tools ........................................................................................................................ 66
1.2.1.5.1.1 Get list of detection tools ...................................................................................................................................................66
1.2.1.5.1.2 Get list of detection tools events........................................................................................................................................68

 –  3
 Integration SDK

1.2.1.5.2 Get audit events from system log .................................................................................................................. 78


1.2.1.5.3 Get list of alarms ............................................................................................................................................. 80
1.2.1.6 Export .............................................................................................................................................................. 83
1.2.1.6.1 Export start...................................................................................................................................................... 83
1.2.1.6.2 Get export status............................................................................................................................................. 87
1.2.1.6.3 Download file .................................................................................................................................................. 88
1.2.1.6.4 Export completion .......................................................................................................................................... 88
1.2.1.7 Macros ............................................................................................................................................................. 89
1.2.1.7.1 Getting the list of macros ............................................................................................................................... 89
1.2.1.7.2 Executing macro ............................................................................................................................................. 89
1.2.1.8 Switch between virtual IP-device states (HttpListener) ............................................................................... 90
1.2.1.9 Get current web-client user............................................................................................................................ 90
1.2.1.10 gRPC API method calls.................................................................................................................................... 90
1.2.1.11 Get camera events using WebSocket............................................................................................................. 91
1.2.2 Client HTTP API ............................................................................................................................................... 92
1.2.2.1 Working with layouts and videowalls ............................................................................................................ 92
1.2.2.1.1 Sequence of actions........................................................................................................................................ 92
1.2.2.1.2 Getting the list of layouts................................................................................................................................ 92
1.2.2.1.3 Switching the layout on the screen................................................................................................................ 93
1.2.2.1.4 Getting the list of cameras displayed on the layout ..................................................................................... 94
1.2.2.1.5 Adding and removing cameras ...................................................................................................................... 95
1.2.2.1.5.1 Removing a camera from the current layout ....................................................................................................................95
1.2.2.1.5.2 Removing all cameras from the current layout.................................................................................................................95
1.2.2.1.5.3 Adding a camera to the current layout ..............................................................................................................................96
1.2.2.1.6 Getting the list of displays .............................................................................................................................. 96
1.2.2.1.7 Selecting active display .................................................................................................................................. 97
1.2.2.1.8 Switching camera to archive mode ............................................................................................................... 97
1.2.2.1.9 Switching to layout with camera in forensic search mode........................................................................... 98
1.2.2.1.10 Switching to layout with camera in immersion mode .................................................................................. 98
1.2.2.1.11 Switching to saved forensic search results.................................................................................................... 99
2 gRPC API ...........................................................................................................................100
2.1 gRPC API general information...................................................................................................... 100
2.2 Roles and Users............................................................................................................................. 100
2.3 Recognition lists............................................................................................................................ 104
2.3.1 ChangeLists method ..................................................................................................................................... 105

 –  4
 Integration SDK

2.3.2 ChangeItems method ................................................................................................................................... 105


2.3.3 GetLists method ............................................................................................................................................ 105
2.3.4 GetItems method .......................................................................................................................................... 106
2.4 Axxon Next configuration settings ............................................................................................... 106
2.4.1 ChangeConfig method.................................................................................................................................. 106
2.4.2 ListConfig method......................................................................................................................................... 107
2.5 Macros configuration.................................................................................................................... 107
2.5.1 Operation modes .......................................................................................................................................... 108
2.5.2 Launch conditions ........................................................................................................................................ 108
2.5.3 Actions ........................................................................................................................................................... 111
2.6 Data export.................................................................................................................................... 112
2.6.1 General information...................................................................................................................................... 112
2.6.2 StartSession method .................................................................................................................................... 112
2.6.3 ListSessions method..................................................................................................................................... 114
2.6.4 GetSessionState method.............................................................................................................................. 115
2.6.5 StopSession method..................................................................................................................................... 115
2.6.6 DownloadFile method .................................................................................................................................. 115
2.6.7 DestroySession method................................................................................................................................ 116
2.7 Examples of gRPC API methods ................................................................................................... 116
2.7.1 Bearer authorization..................................................................................................................................... 116
2.7.1.1 Receive a token ............................................................................................................................................. 116
2.7.1.2 Renew a token............................................................................................................................................... 117
2.7.1.3 Close a token ................................................................................................................................................. 117
2.7.2 Time synchronization of Server and video cameras ................................................................................... 117
2.7.3 Get video cameras list and their parameters using gRPC API methods (DomainService)........................ 118
2.7.4 Manage devices using gRPC API methods (ConfigurationService) ............................................................ 128
2.7.4.1 Get information about device ...................................................................................................................... 128
2.7.4.2 Get information about device child objects ................................................................................................ 133
2.7.4.3 Change the configuration............................................................................................................................. 137
2.7.4.3.1 Adding the device.......................................................................................................................................... 137
2.7.4.3.2 Creating the object tracker........................................................................................................................... 139
2.7.4.3.3 Creating the motion in area detection tool under the object tracker........................................................ 140
2.7.4.3.4 Changing a video folder for a virtual camera .............................................................................................. 141
2.7.4.3.5 Enabling/disabling the object ...................................................................................................................... 141
2.7.4.3.6 Removing the device..................................................................................................................................... 141

 –  5
 Integration SDK

2.7.5 Change detection tool mask using gRPC API (ConfigurationService)........................................................ 142
2.7.6 Manage groups of video cameras using gRPC API methods....................................................................... 143
2.7.7 Manage alerts using gRPC API methods ...................................................................................................... 145
2.7.7.1 Alert initiation ............................................................................................................................................... 145
2.7.7.2 Proceed to alert handling............................................................................................................................. 146
2.7.7.3 Cancel alert handling.................................................................................................................................... 146
2.7.7.4 Continue alert handling................................................................................................................................ 146
2.7.7.5 Review the alert ............................................................................................................................................ 146
2.7.7.6 Review the alert with a comment ................................................................................................................ 147
2.7.8 Manage macros using gRPC API methods ................................................................................................... 149
2.7.8.1 Get list of all macros ..................................................................................................................................... 149
2.7.8.2 Get complete information on one/several macros ..................................................................................... 150
2.7.8.3 Create/Remove/Change macro.................................................................................................................... 150
2.7.8.4 Launch a macro............................................................................................................................................. 152
2.7.8.5 Examples ....................................................................................................................................................... 153
2.7.9 Get info about archives using gRPC API (DomainService) .......................................................................... 157
2.7.10 Manage archives using gRPC API (ConfigurationService)........................................................................... 159
2.7.10.1 Get info about archives using gRPC API methods ....................................................................................... 159
2.7.10.2 Create archive using gRPC API methods ..................................................................................................... 166
2.7.10.2.1 Creating an archive entity ............................................................................................................................ 166
2.7.10.2.2 Adding an archive file ................................................................................................................................... 167
2.7.10.2.3 Linking a camera to archive ......................................................................................................................... 167
2.7.10.2.4 Changing a stream linked to the archive ..................................................................................................... 169
2.7.10.3 Remove archive using gRPC API methods................................................................................................... 169
2.7.10.3.1 Remove entire archive .................................................................................................................................. 169
2.7.10.3.2 Removing the archive and archive file......................................................................................................... 170
2.7.10.3.3 Remove the camera linking.......................................................................................................................... 170
2.7.10.3.4 Remove the archive volume ......................................................................................................................... 170
2.7.11 Search in archive using gRPC API methods ................................................................................................. 171
2.7.11.1 gRPC API Face search.................................................................................................................................... 171
2.7.11.2 gRPC API License plate search ..................................................................................................................... 173
2.7.11.3 gRPC API MomentQuest smart search (VMDA) ............................................................................................ 178
2.7.12 Manage layouts using gRPC API methods ................................................................................................... 179
2.7.13 Manage users using gRPC API methods....................................................................................................... 181
2.7.13.1 Get list of all roles and users......................................................................................................................... 181

 –  6
 Integration SDK

2.7.13.2 Create roles and users .................................................................................................................................. 182


2.7.13.2.1 Create a role .................................................................................................................................................. 182
2.7.13.2.2 Creater a user ................................................................................................................................................ 183
2.7.13.2.3 Add a user to the role.................................................................................................................................... 183
2.7.13.2.4 Block and unblock the users ........................................................................................................................ 184
2.7.13.2.5 Check username availability ........................................................................................................................ 184
2.7.13.3 Edit roles and users....................................................................................................................................... 185
2.7.13.3.1 Edit a role....................................................................................................................................................... 185
2.7.13.3.2 Edit a user...................................................................................................................................................... 186
2.7.13.3.3 Assign a password to a user ......................................................................................................................... 186
2.7.13.4 Remove roles and users................................................................................................................................ 187
2.7.13.4.1 Unlink a user from a role .............................................................................................................................. 187
2.7.13.4.2 Remove a user............................................................................................................................................... 187
2.7.13.4.3 Remove a role................................................................................................................................................ 187
2.7.13.5 Global access settings................................................................................................................................... 188
2.7.13.5.1 Get global role parameters........................................................................................................................... 188
2.7.13.5.2 Edit global role parameters.......................................................................................................................... 190
2.7.13.6 Device access settings .................................................................................................................................. 190
2.7.13.6.1 Get device access settings ............................................................................................................................ 191
2.7.13.6.2 Edit device access settings ........................................................................................................................... 191
2.7.13.6.3 Edit PTZ control priority for multiple devices ............................................................................................. 192
2.7.13.7 User security policy and IP-address filtering............................................................................................... 192
2.7.13.7.1 User Security Policy Framework .................................................................................................................. 192
2.7.13.7.2 Edit the Security Policy................................................................................................................................. 193
2.7.13.7.3 Reset the Security Policy .............................................................................................................................. 193
2.7.13.7.4 Change the IP filtering .................................................................................................................................. 194
2.7.13.7.5 Reset the IP filtering...................................................................................................................................... 194
2.7.13.8 LDAP directories............................................................................................................................................ 194
2.7.13.8.1 Get a list of added LDAP directories............................................................................................................. 195
2.7.13.8.2 Add a LDAP directory .................................................................................................................................... 196
2.7.13.8.3 Edit a LDAP directory .................................................................................................................................... 196
2.7.13.8.4 Remove a LDAP directory ............................................................................................................................. 197
2.7.13.8.5 Get a list of LDAP directory users ................................................................................................................. 197
2.7.14 Get heatmap using gRPC API methods........................................................................................................ 198
2.7.15 Manage control panels using gRPC API methods ....................................................................................... 202

 –  7
 Integration SDK

2.7.16 Get water level using gRPC API methods..................................................................................................... 207


2.7.17 Manage events using gRPC API methods..................................................................................................... 207
2.7.17.1 Get all events within a given interval ........................................................................................................... 207
2.7.17.2 Get events by filter ........................................................................................................................................ 208
2.7.17.3 Search by text in event ................................................................................................................................. 209
2.7.17.4 Get all alerts .................................................................................................................................................. 209
2.7.17.5 Get alerts by filter.......................................................................................................................................... 209
2.7.17.6 Search for LPR events ................................................................................................................................... 210
2.7.17.6.1 Search for a specific number........................................................................................................................ 210
2.7.17.6.2 Search by part of a number .......................................................................................................................... 211
2.7.18 Manage device templates using gRPC API methods ................................................................................... 211
2.7.18.1 Get list of created templates ........................................................................................................................ 212
2.7.18.2 Create a template ......................................................................................................................................... 213
2.7.18.2.1 Template example with a specified device manufacturer, model, username and password.................. 213
2.7.18.2.2 Template example with a specified device geodata................................................................................... 214
2.7.18.3 Edit a template.............................................................................................................................................. 215
2.7.18.4 Assign a template to a device....................................................................................................................... 216
2.7.18.5 Get information on selected templates ....................................................................................................... 216
2.7.18.6 Delete templates........................................................................................................................................... 217
2.7.19 Configure PTZ mode for Tag & Track Pro using gRPC API methods........................................................... 217
2.7.19.1 Get current mode .......................................................................................................................................... 217
2.7.19.2 Change PTZ mode......................................................................................................................................... 217
3 Embeddable video component for working with Web server .......................................219
3.1 General information about video component ............................................................................ 219
3.2 API for video component operation............................................................................................. 219
3.3 Examples of commands ............................................................................................................... 220

 –  8
    Integration SDK

1 HTTP API

1.1 General agreements


HTTP server NGP responds to method calls in the form of JSON.

Note
Configuring the web server.
By default the Web-server port is 80, prefix is / (empty).

Authorization is needed for requests. Two types of authorization are supported: Basic and Bearer.
With the Basic authorization type, it is necessary to add user data to all HTTP requests in the following form:

http://[username]:[password]@[IP-address]:[port]/[prefix]

With the Bearer authorization type, the token received from the web server is used (see Bearer authorization).
POST requests must have JSON body.
The number of active requests and requests in queue is limited.
The 503 error (Search query rejected. Too many requests) returns when there are too many requests.

1.2 Infrastructure

1.2.1 Server HTTP API

1.2.1.1 Get unique identifier


(UUID) is generated for every GET request to http://IP-Address:port/prefix/uuid.
Unique identifier is used to get in last frame info from archive video or to control archived stream.
Response sample:
{
"uuid": "2736652d-af5f-4107-a772-a9d78dfaa27e"
}

1.2.1.2 Servers

1.2.1.2.1 Get Server list

On page:

• List of Axxon domain Servers


• Server info

1.2.1.2.1.1 List of Axxon domain Servers


GET http://IP-Address:port/prefix/hosts/
Sample request:

HTTP API  –  9


    Integration SDK

GET http://127.0.0.1:80/hosts/
Sample response:

[
"SERVER1",
"SERVER2"
]

1.2.1.2.1.2 Server info


GET http://IP-Address:port/prefix/hosts/{NODENAME}

{NODENAME} - Server or node name.

Sample request:
GET http://127.0.0.1:80/hosts/NODE2
Sample response:

{
"nodeName": "NODE2",
"domainInfo": {
"domainName": "c79912ff-bb42-431c-9b2e-3adb14966f43",
"domainFriendlyName": "Default"
},
"platformInfo": {
"hostName": "SERVER2",
"machine": "x64 6",
"os": "Win32"
},
"licenseStatus": "OK",
"timeZone": 240,
"nodes": [
"NODE1",
"NODE2"
]
}

Parameter Description

nodeName Server/node name

domainName Axxon domain ID

domainFriendlyName Axxon domain name

hostName Host name

machine Server Architecture

os OS

licenseStatus License type

timeZone Time zone (minutes)

HTTP API  –  10


    Integration SDK

Parameter Description

nodes List of nodes of Axxon domain

1.2.1.2.2 Get info about Server usage


GET http://IP-address:port/prefix/statistics/hardware - get information about usage of network and CP of a specific Server.
GET http://IP-address:port/prefix/statistics/hardware/domain - get information about usage of network and CP of all Servers
within Axxon Domain.
Sample request:
GET http://127.0.0.1:80/statistics/hardware
Sample response:

[
{
"drives": [
{
"capacity": 523920994304,
"freeSpace": 203887943680,
"name": "C:\\"
},
{
"capacity": 475912990720,
"freeSpace": 148696813568,
"name": "D:\\"
},
{
"capacity": 0,
"freeSpace": 0,
"name": "E:\\"
}
],
"name": "SERVER1",
"netMaxUsage": "0,0062719999999999998",
"totalCPU": "16,978111368301985"
}
]

1.2.1.2.3 Get info about Server version


GET http://IP-adress:port/prefix/product/version
Sample request:
GET http://127.0.0.1:80/product/version
Sample response:

{
"version": "AxxonNext 4.0.2.4483"
}

HTTP API  –  11


    Integration SDK

1.2.1.2.4 Statistics for Server


GET http://IP-Address:port/prefix/statistics/webserver
Request example:
GET http://127.0.0.1:80/statistics/webserver
Response example:

{
"now": "20200601T115707.888290",
"requests": 3,
"requestsPerSecond": 0,
"bytesOut": 134,
"bytesOutPerSecond": 0,
"streams": 0,
"uptime": 349290
}

1.2.1.3 Cameras

1.2.1.3.1 Get list of video sources (cameras)

Axxon Next 4.1.1.7773 and higher versions.


For older versions, see Get list of video sources (cameras).

GET http://IP-address:port/prefix/camera/list - get all available original sources (cameras) of Axxon-domain. 


The returned VIDEOSOURCEID identifiers will have the format as follows "HOSTNAME/ObjectType.Id/Endpoint.Name". Friendly
name and other related meta data will also be received.

Para Req Description


mete uir
r ed

limit No Determines the maximum number of returned results, the default value is 1000.

next_ No The value of the nextPageToken parameter, which will be in the response if the request returns not all the results. It is used to get the
page following values.

filter No Allows getitng a subset of the results in accordance with the filter. Currently it can have the HOSTNAME or VIDEOSOURCEID values.

Attention!
If Office is specified as the Server name, then the GET http://IP-address:port/prefix/camera/list?filter=Office request will receive
all video cameras of Office Server.

group No List of the group identifiers to which the cameras should belong (see Get list of groups and their contents). It is possible to specify several
_ids identifiers using the separator "|". For example:

http://localhost:80/camera/list?group_ids=6af92229-43ff-0347-9dae-081bf9835733|
b48111eb-64c5-294c-a69c-4adb07c954d1

In this case, the response will contain all the cameras that belong at least to one of the specified groups.

Sample request:

HTTP API  –  12


    Integration SDK

GET http://127.0.0.1:80/camera/list?filter=Server1
Sample response:
Click to expand...

HTTP API  –  13


    Integration SDK

{
"cameras": [
{
"archives": [
{
"accessPoint": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"default": true,
"isEmbedded": false,
"storage": "hosts/Server1/MultimediaStorage.AliceBlue/
MultimediaStorage",
"storageDisplayName": "AliceBlue"
}
],
"audioStreams": [
{
"accessPoint": "hosts/Server1/DeviceIpint.1/SourceEndpoint.audio:0",
"isActivated": false
}
],
"azimuth": "0,000000",
"comment": "",
"detectors": [
{
"accessPoint": "hosts/Server1/AVDetector.1/EventSupplier",
"displayName": "Motion detection",
"events": [
"MotionDetected",
"MotionMask",
"TargetList"
],
"parentDetector": "",
"type": "unknown"
}
],
"displayId": "1",
"displayName": "Camera 1",
"groups": [
"e2f20843-7ce5-d04c-8a4f-826e8b16d39c"
],
"ipAddress": "0.0.0.0",
"isActivated": true,
"latitude": "0,000000",
"longitude": "0,000000",
"model": "Virtual several streams",
"offlineDetectors": [],
"ptzs": [],
"textSources": [],
"vendor": "AxxonSoft",
"videoStreams": [
{
"accessPoint": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0"
},
{
"accessPoint": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:1"
}

HTTP API  –  14


    Integration SDK

]
},
{

Parameter Description

archives List of archives to which the camera is connected.

audioStreams Audio stream.

comment Commentary.

detectors List of created detection tools.

displayId Friendly name.

displayName Name.

groups List of groups to which the camera belongs. The parameter is available in the response, starting with version 4.3.0.8402.

ipAddress IP-address.

isActivated True - the object is enabled, False - the object is disabled. The parameter is available in the response, starting with version
4.3.0.8402.

azimuth, The coordinates of the camera. Parameters are available in the response, starting with version 4.3.3.8923. Depending on
latitude, longitude the Server localization, the parameter values can be separated by either a period or a comma.

model Model.

ptzs PTZ devices where:


is_active - indicates whether the PTZ object is activated,
pointMove - Point&Click support,
areaZoom - Areazoom support.

textSources Event sources.

vendor Vendor.

videoStreams Video streams.

1.2.1.3.2 Get camera live stream

On page:

• General information
• HLS video
• RTSP video
• HTTP video
• Tunneling RTSP over HTTP
• H.264 and H.265 video

HTTP API  –  15


    Integration SDK

Important!
You can get audio from x64 Server only.
You can't get audio in MJPEG format.

1.2.1.3.2.1 General information


GET http://IP-Address:port/prefix/live/media/{VIDEOSOURCEID}

{VIDEOSOURCEID} - three-component source endpoint ID (see Get list of video sources (cameras)).  For instance,
"SERVER1/DeviceIpint.3/SourceEndpoint.video:0:0".

Important!
If no parameters are specified in the request, then the video will be received in the MJPEG format.

Paramet Require Description


er d

format No Parameter values are "mp4", "hls".


Video can be received in the original format (without recompression) via HLS protocols. HLS protocol supports only H.264
format.
The "mp4" player allows to receive the original video in H.264 and H.265. In all other cases the server recompresses it to MJPEG
format. 

Important!
If video is requested in the format that differs from the original one, then recompression will be performed, therefore,
Server load will increase.

w, h No w – frame width, h – frame height.

Note
If h and w values are more than size of original video, the video will be received with original size.
Zooming out of width and height is available only discretely - in 2, 4, 8 times, etc. If specified sizes are not
corresponding to 1/2, 1/4 etc. of original video size, the video will be received with size divisible by the original video
size close to specified values.

Important!
The mp4 video is transferred without scaling.

fr No fps.

Important!
This parameter is relevant only for MJPEG video.

enable_t No Get signed links to video streams.


oken_aut
h  enable_token_auth - enable authorization by token =1.
valid_token_hours - signature validation time (in hours). The maximum value is a week. The default value is 12 hours.

HTTP API  –  16


    Integration SDK

Paramet Require Description


er d

valid_tok No
en_hours

Sample request:
GET http://IP-Address:port/prefix/live/media/Server1/DeviceIpint.23/SourceEndpoint.video:0:0?
w=640&h=480&enable_token_auth=1&valid_token_hours=1

1.2.1.3.2.2 HLS video


HLS protocol video can be received in the original format only. The following parameters are in use when receiving HLS protocol
video:

Paramet Require Description


er d

keep_aliv No Time in seconds in which the stream is to be kept alive. 


e

hls_time No The segment length in seconds. 

hls_list_si No The maximum number of playlist entries. If set to 0 the list file will contain all the segments.
ze

hls_wrap No The number after which the segment filename number wraps. If set to 0 the number will be never wrapped.

Sample request:
GET http://127.0.0.1:80/live/media/SERVER1/DeviceIpint.23/SourceEndpoint.video:0:0?format=hls&keep_alive=60
Sample response:

{
"keep_alive_seconds": 60,
"keep_alive_url": "/live/media/hls/keep?stream_id=7e9d8c93-80e2-4521-9a54-cb854fe3cd2d",
"stop_url": "/live/media/hls/stop?stream_id=7e9d8c93-80e2-4521-9a54-cb854fe3cd2d",
"stream_url": "/hls/7e9d8c93-80e2-4521-9a54-cb854fe3cd2d/playout.m3u8"
}

Parameter Description

keep_alive_seconds Time in seconds in which the stream is to be kept alive. 

keep_alive_url  The url to keep the stream alive.

stop_url The url to stop the stream.

stream_url The url to access the list of segments.

Important!
HLS protocol video becomes available in several seconds after getting the response.

To playback video via HLS protocol use the stream_url parameter from the response as follows:
ffplay "http://root:root@10.0.12.65:80/hls/c83b48d5-2ab7-49eb-91ef-593f808d4e51/playout.m3u8"

1.2.1.3.2.3 RTSP video


RTSP protocol video is sent in the original format only.

HTTP API  –  17


    Integration SDK

Request to get the structure of the RTSP link: http://login:password@IP-address:Port/live/media/Server1/DeviceIpint.23/


SourceEndpoint.video:0:0?format=rtsp
Sample response:

{
"http": {
"description": "RTP/RTSP/HTTP/TCP",
"path": "hosts/Server1/DeviceIpint.23/SourceEndpoint.video:0:0",
"port": "8554"
},
"rtsp": {
"description": "RTP/UDP or RTP/RTSP/TCP",
"path": "hosts/Server1/DeviceIpint.23/SourceEndpoint.video:0:0",
"port": "554"
}
}

Request to get video: GET rtsp://login:password@IP-address:554/hosts/Server1/DeviceIpint.23/SourceEndpoint.video:0:0

Important!
In some cases, the RTSP video can be streamed with artifacts. To fix this, change the TCP/IP settings using this reg file.

RTSP stream information:


GET http://IP-Address:port/prefix/rtsp/stat

1.2.1.3.2.4 HTTP video


ffplay.exe -v debug "http://login:password@IP-address:8001/live/media/Server1/DeviceIpint.23/SourceEndpoint.video:0:0?
w=1600&h=0"

Important!
HTTP sends video in mjpeg only, w and h parameters are mandatory.

1.2.1.3.2.5 Tunneling RTSP over HTTP


see Configure tunneling RTSP over HTTP in VLC
Video is sent over the tunnel in the original format.
Sample request:
ffplay -rtsp_transport http "rtsp://login:password@IP-Address:80/rtspproxy/hosts/Server1/DeviceIpint.23/
SourceEndpoint.video:0:0"
GET for VLC: rtsp://login:password@IP-Address:80/rtspproxy/hosts/Server1/DeviceIpint.23/SourceEndpoint.video:0:0

1.2.1.3.2.6 H.264 and H.265 video


To get live video in the original H.264/H.265 format use mp4 format.
Sample request:
ffplay.exe "http://root:root@192.168.25.112:8001/live/media/Server1/DeviceIpint.61/
SourceEndpoint.video:0:0?format=mp4"

HTTP API  –  18


    Integration SDK

1.2.1.3.2.7 Get high and low quality streams

Get list of video sources (cameras)


Get camera live stream

General case:
• GET http://IP-Address:port/prefix/live/media/SERVER1/DeviceIpint.3/SourceEndpoint.video:0:0?w=1600&h=0 – high
quality stream
• GET http://IP-Address:port/prefix/live/media/SERVER1/DeviceIpint.3/SourceEndpoint.video:0:1?w=1600&h=0 –low quality
stream
RTSP:
• GET rtsp://login:password@IP-Address:554/hosts/SERVER1/DeviceIpint.3/SourceEndpoint.video:0:0 - high quality stream
• GET rtsp://login:password@IP-Address:554/hosts/SERVER1/DeviceIpint.3/SourceEndpoint.video:0:1 - low quality stream
Tunneling RTSP over HTTP:
• GET rtsp://login:password@IP-Address:80/rtspproxy/hosts/SERVER1/DeviceIpint.3/SourceEndpoint.video:0:0 - high
quality stream
• GET rtsp://login:password@IP-Address:80/rtspproxy/hosts/SERVER1/DeviceIpint.3/SourceEndpoint.video:0:1 - low
quality stream

1.2.1.3.2.8 Configure tunneling RTSP over HTTP in VLC


To configure tunneling in VLC set the Tunnel RTSP and RTP over HTTP checkbox (1) checked and the web-server port (2, see
Configuring the web server).

1.2.1.3.3 Get camera snapshot


GET http://IP-Address:port/prefix/live/media/snapshot/{VIDEOSOURCEID}

HTTP API  –  19


    Integration SDK

{VIDEOSOURCEID} - three-component source endpoint ID (see Get list of video sources (cameras)).  For instance,
"SERVER1/DeviceIpint.3/SourceEndpoint.video:0:0".

Para Req Description


mete uir
r ed

w No w – frame width, h – frame height.


h
Note
If h and w values are more than size of original frame, the frame will be received with original size.
Zooming out of width and height is available only discretely - in 2, 4, 8 times, etc. If specified sizes are not corresponding to 1/2,
1/4 etc. of original frame size, the frame will be received with size divisible by the original frame size close to specified values.

crop_ No Available from Axxon Next 4.4.1.9115.


x
crop_x – horizontal indent from the upper left corner. Possible values are 0 to 1. The default is 0.
crop_
y crop_y – vertical indent from the upper left corner. Possible values are 0 to 1. The default is 0.

crop_ crop_width – the ratio of the original image width. Possible values are 0 to 1. The default is 1.
width crop_height – the ratio of the original image hight. Possible values are 0 to 1. The default is 1.
crop_
heigh
t

Note
By default, the snapshot update period is 30 seconds. To change this value, create the NGP_SNAPSHOT_TIMEOUT
system variable and set the required value in milliseconds (see Appendix 10. Creating system variable).

Sample request:
To get a snapshot in the original resolution: GET http://IP-Address:port/prefix/live/media/snapshot/Server1/DeviceIpint.23/
SourceEndpoint.video:0:0
To get a snapshot in 640*480 resolution: GET http://IP-Address:port/prefix/live/media/snapshot/Server1/DeviceIpint.23/
SourceEndpoint.video:0:0?w=640&h=480
To get the right lower particle of a snapshot: GET http://IP-Address:port/prefix/live/media/snapshot/Server1/DeviceIpint.23/
SourceEndpoint.video:0:0?crop_x=0.5&crop_y=0.5&crop_width=0.5&crop_height=0.5
To get the right lower particle of a snapshot in 640*480 resolution: GET http://IP-Address:port/prefix/live/media/snapshot/
Server1/DeviceIpint.23/SourceEndpoint.video:0:0?w=640&h=480&crop_x=0.5&crop_y=0.5&crop_width=0.5&crop_height=0.5

1.2.1.3.4 Get list of groups and their contents

1.2.1.3.4.1 Get list of all available groups


GET http://IP-Address:port/prefix/group
Sample request:
GET http://127.0.0.1:80/group
Sample response:

HTTP API  –  20


    Integration SDK

{
"groups" : [
{
"Brief" : "Group1",
"Description" : "",
"Id" : "35fc84a0-2280-4b30-acd2-cc8419a2dc68",
"groups" : [
{
"Brief" : "Group2",
"Description" : "",
"Id" : "dac24803-313c-43ab-aa9a-276922a55cb6",
"groups" : []
},
{
"Brief" : "Group3",
"Description" : "",
"Id" : "13764152-6910-44b6-99b5-f74641ad4a14",
"groups" : [
{
"Brief" : "Group4",
"Description" : "Group4",
"Id" : "9a64e2a0-eb92-4adc-bc4f-81d30ceb6c2f",
"groups" : []
}
]
}
]
}
]
}

Get group contents.


GET http://IP-Address:port/prefix/group/{GROUPID}.

GROUPID – value of the Id field received using the previous request.

Sample request:
GET http://127.0.0.1:80/group/9a64e2a0-eb92-4adc-bc4f-81d30ceb6c2f
Sample response:

{
"members" : [ "hosts/SERVER1/DeviceIpint.1/SourceEndpoint.video:0:0" ]
}

1.2.1.3.4.2 Get list of groups containing specified camera


GET http://IP-Address:port/prefix/group/contains/{VIDEOSOURCEID}

{VIDEOSOURCEID} - three-component source endpoint ID (see Get list of video sources (cameras)).  For instance,
"SERVER1/DeviceIpint.3/SourceEndpoint.video:0:0".

Sample request:

HTTP API  –  21


    Integration SDK

GET http://127.0.0.1:80/group/contains/SERVER1/DeviceIpint.1/SourceEndpoint.video:0:0
Sample response:

{
"groups" : [
"35fc84a0-2280-4b30-acd2-cc8419a2dc68",
"13764152-6910-44b6-99b5-f74641ad4a14",
"dac24803-313c-43ab-aa9a-276922a55cb6"
]
}

1.2.1.3.5 PTZ cameras

1.2.1.3.5.1 Get list of telemetry devices for specified video source


GET http:/IP-Address:port/prefix/control/telemetry/list/{VIDEOSOURCEID}

{VIDEOSOURCEID} - first 2 parts of three-component source endpoint ID (see Get list of video sources (cameras)).  For
instance, "SERVER1/DeviceIpint.1".

Sample request:
GET http://127.0.0.1:80/control/telemetry/list/SERVER1/DeviceIpint.1
Sample response:

[
"SERVER1/DeviceIpint.2/TelemetryControl.0"
]

{TELEMETRYCONTROLID} template will be used to define telemetry devices of the HOSTNAME/DeviceIpint.Id/TelemetryContol.n


type hereinafter.

1.2.1.3.5.2 Acquire telemetry control session


GET http://IP address:port/prefix/control/telemetry/session/acquire/{TELEMETRYCONTROLID}

TELEMETRYCONTROLID - template from Get list of telemetry devices for specified video source;

Pa Re Description
ra qu
me ir
te ed
r

ses No Telemetry control priority from 1 (maximum) to 5 (minimum). 


sio
n_p
rior
ity

Sample request:
GET http://127.0.0.1:80/control/telemetry/session/acquire/Server1/DeviceIpint.2/TelemetryControl.0?session_priority=2
If a telemetry device is not in use or a user with lower priority controls it , then telemetry control is taken over and Server sends
the response:

HTTP API  –  22


    Integration SDK

{
"session_id" : [id]
}

where id is the session id.

1.2.1.3.5.3 Keep session alive


GET http://IP address:port/prefix/control/telemetry/session/keepalive/{TELEMETRYCONTROLID}

TELEMETRYCONTROLID - template from Get list of telemetry devices for specified video source.

Pa Re Description
ra qu
me ir
te ed
r

ses Ye id of captured session (see Acquire telemetry control session).


sio s
n_i
d

Such request is to be sent not less than once in 10 seconds in order to keep the session alive. Otherwise telemetry control fails.
Sample request:
GET http://127.0.0.1:80/control/telemetry/session/keepalive/Server1/DeviceIpint.2/TelemetryControl.0?session_id=1

1.2.1.3.5.4 Release session


GET http://IP address:port/prefix/control/telemetry/session/release/{TELEMETRYCONTROLID}

TELEMETRYCONTROLID - template from Get list of telemetry devices for specified video source.

Pa Re Description
ra qu
me ir
te ed
r

ses Ye id of captured session (see Acquire telemetry control session).


sio s
n_i
d

Sample request:
GET http://127.0.0.1:80/control/telemetry/session/release/Server1/DeviceIpint.2/TelemetryControl.0?session_id=1

HTTP API  –  23


    Integration SDK

1.2.1.3.5.5 Control degrees of freedom

On page:

• Get info of degrees of freedom


• Edit tilt and pan
• Edit degree of freedom
• Capture screen point
• Zoom image area
• Auto focus and iris

Get info of degrees of freedom


GET http://IP-Address:port/prefix/control/telemetry/info/{TELEMETRYCONTROLID} - Gets info about supported controllable
degrees of freedom and the ways of controlling them (continuous, relative, discrete) and their max values.

TELEMETRYCONTROLID - template from Get list of telemetry devices for specified video source.

Sample request:
GET http://127.0.0.1:80/control/telemetry/info/Server1/DeviceIpint.2/TelemetryControl.0
Sample response:

HTTP API  –  24


    Integration SDK

{
"degrees" : {
"focus" : {
"continuous" : {
"max" : "7",
"min" : "0"
}
},
"pan" : {
"absolute" : {
"max" : "3600",
"min" : "0"
},
"continuous" : {
"max" : "100",
"min" : "0"
}
},
"tilt" : {
"absolute" : {
"max" : "2700",
"min" : "-900"
},
"continuous" : {
"max" : "100",
"min" : "0"
}
},
"zoom" : {
"absolute" : {
"max" : "1000",
"min" : "0"
},
"continuous" : {
"max" : "100",
"min" : "0"
}
}
},
"feature" : []
}

Par Description
ame
ter

deg Information about degrees of freedom. (tilt, pan, zoom, focus, iris). Every degree of freedom contains the list of supported ways of control (absolute,
rees relative, continuous).

feat List of supported functions (autoFocus, autoIris, areaZoom, pointMove).


ure

Edit tilt and pan


GET http://IP-Address:port/prefix/control/telemetry/move/{TELEMETRYCONTROLID} – changes tilt, pan.

TELEMETRYCONTROLID - template from Get list of telemetry devices for specified video source.

HTTP API  –  25


    Integration SDK

Pa Re Description
ra qu
me ir
te ed
r

mo Ye Way of control (absolute, relative, continuous).


de s

pan Ye Values for corresponding degrees of freedom.


s
tilt
Note
For the absolute telemetry, the values are normalized and are in the range of 0,0 to 1.0.  Moreover, for the absolute telemetry, it is
possible to change the tilt without pan, and vice versa, the pan without tilt.

ses Ye Session id (see Acquire telemetry control session).


sio s
n_i
d

Sample request: 
GET http://127.0.0.1:80/control/telemetry/move/Server1/DeviceIpint.25/TelemetryControl.0?
mode=absolute&pan=0.0277&session_id=8
Edit degree of freedom
GET http://IP-Address:port/prefix/control/telemetry/{zoom|focus|iris}/{TELEMETRYCONTROLID} – changes one of degrees (zoom,
focus, iris).  

TELEMETRYCONTROLID - template from Get list of telemetry devices for specified video source.

Pa Re Description
ra qu
me ir
te ed
r

mo Ye Way of control (absolute, relative, continuous).


de s

val Ye Value.
ue s

ses Ye Session id (see Acquire telemetry control session).


sio s
n_i
d

Sample requests:
GET http://127.0.0.1:80/control/telemetry/zoom/HOSTNAME/DeviceIpint.25/TelemetryControl.0?
mode=absolute&value=6&session_id=1 - zoom change;  
GET http://127.0.0.1:80/control/telemetry/focus/HOSTNAME/DeviceIpint.25/TelemetryControl.0?
mode=relative&value=3&session_id=1 - focus change;  
GET http://127.0.0.1:80/control/telemetry/iris/HOSTNAME/DeviceIpint.25/TelemetryControl.0?
mode=continuous&value=1&session_id=1 - iris change.
Capture screen point
GET http://IP-Address:port/prefix/control/telemetry/move/point/{TELEMETRYCONTROLID} – captures the screen point.

TELEMETRYCONTROLID - template from Get list of telemetry devices for specified video source.

HTTP API  –  26


    Integration SDK

Pa Re Description
ra qu
me ir
te ed
r

x Ye Values of vertical and horizontal coordinates, specified in relation to image size.


s
y

ses Ye Session id (see Acquire telemetry control session).


sio s
n_i
d

Sample request:  
GET http://127.0.0.1:80/control/telemetry/move/point/Server1/DeviceIpint.23/TelemetryControl.0?x=0.14&y=0.32&session_id=1
Zoom image area
GET http://IP-Address:port/prefix/control/telemetry/zoom/area/{TELEMETRYCONTROLID} – zooms selected image area.

TELEMETRYCONTROLID - template from Get list of telemetry devices for specified video source.

Pa Re Description
ra qu
me ir
te ed
r

x Ye Left upper corner of selected area;


s
y
Note
Coordinates and dimensions are specified in relation to image size.

w Ye Width and height of area.


s
h

ses Ye Session id (see Acquire telemetry control session).


sio s
n_i
d

Sample request:
GET http://127.0.0.1:80/control/telemetry/zoom/area/Server1/DeviceIpint.24/TelemetryControl.0?
x=0.23&y=0.089&w=0.25&h=0.25&session_id=1
Auto focus and iris
GET http://IP-Address:port/prefix/control/telemetry/auto/{TELEMETRYCONTROLID} – auto focus/iris.

TELEMETRYCONTROLID - template from Get list of telemetry devices for specified video source.

Pa Re Description
ra qu
me ir
te ed
r

deg Yes focus or iris.


ree

HTTP API  –  27


    Integration SDK

Pa Re Description
ra qu
me ir
te ed
r

ses Yes Session id (see Acquire telemetry control session).


sio
n_i
d

Sample request:
GET http://127.0.0.1:80/control/telemetry/auto/Server1/DeviceIpint.24/TelemetryControl.0?degree=iris&session_id=1

1.2.1.3.5.6 Preset control

On page:

• Get list of presets


• Create and edit preset
• Go to preset and delete preset

Get list of presets


GET http://IP-Address:port/prefix/control/telemetry/preset/info/{TELEMETRYCONTROLID} - gets the list of existing presets.

TELEMETRYCONTROLID - template from Get list of telemetry devices for specified video source.

Sample request:
GET http://127.0.0.1:80/control/telemetry/preset/info/Server1/DeviceIpint.2/TelemetryControl.0
Sample response:

{
"0": "Preset1",
"1": "Preset2",
"4": "Preset3"
}

Create and edit preset


GET http://IP-Address:port/prefix/control/telemetry/preset/set/{TELEMETRYCONTROLID} - create/edit preset.

Pa Re Description
ra qu
me ir
te ed
r

pos Ye Position. If a preset with specified position already exists, its label will be deleted.
s

lab Ye Preset name.


el s

ses Ye Session id (see Acquire telemetry control session).


sio s
n_i
d

HTTP API  –  28


    Integration SDK

Sample request:
GET http://127.0.0.1:80/control/telemetry/preset/set/Server1/DeviceIpint.2/TelemetryControl.0?pos=0&label=Exit&session_id=0
Go to preset and delete preset
GET http://IP-Address:port/prefix/control/telemetry/preset/{go|remove}/{TELEMETRYCONTROLID} - go to preset or delete it.

Pa Re Description
ra qu
me ir
te ed
r

pos Ye Preset position.


s

ses Ye Session id (see Acquire telemetry control session).


sio s
n_i
d

Sample request:
Going to preset with pos 1:
GET http://127.0.0.1:80/control/telemetry/preset/go/Server1/DeviceIpint.2/TelemetryControl.0?pos=1&session_id=0
Deleting of preset with position 2:
GET http://127.0.0.1:80/control/telemetry/preset/remove/Server1/DeviceIpint.2/TelemetryControl.0?pos=2&session_id=0

1.2.1.3.5.7 Get information about errors


If errors occur during PTZ requests, a response like this will be received — {"error_code": [numeric error code]}

Error code Description

1 The PTZ control session is not available.

2 General error, see details in the Server logs.

3 Error while managing presets.

1.2.1.3.5.8 Get coordinates


GET http://IP-address:port/prefix/control/telemetry/position/TELEMETRYCONTROLID

TELEMETRYCONTROLID - template from Get list of telemetry devices for specified video source.

Sample request:
GET http://127.0.0.1:80/control/telemetry/position/Server1/DeviceIpint.25/TelemetryControl.0
Sample response:

{
"pan": 2000
,"tilt": 5100
,"zoom": 0
,"mask": 7
}

The mask value should be converted to binary.


The first bit of the binary number will refer to pan, the second to tilt, the third to zoom.

HTTP API  –  29


    Integration SDK

The 1 value means that the corresponding component of the video camera works, 0 means it does not work.
For example, if mask = 6, then in the binary system it is 110, which means that pan and tilt work on the camera, and zoom does
not.
For a camera with absolute telemetry, the coordinates will be relative.

{
"pan": 5.53611111111111109e-02,
"tilt": 1.31111111111111116e-02,
"zoom": 0.00000000000000000e+00,
"mask": 7
}

1.2.1.3.6 Camera statistics


GET http://IP-Address:port/prefix/statistics/{VIDEOSOURCEID} - statistics for the certain camera.

{VIDEOSOURCEID} - three-component source endpoint ID (see Get list of video sources (cameras)). For instance,
"SERVER1/DeviceIpint.3/SourceEndpoint.video:0:0".

Statistics for the several cameras: POST http://IP-Address:port/prefix/statistics/ + request body in the following format:

[
"hosts/SERVER1/DeviceIpint.1/SourceEndpoint.video:0:0",
"hosts/SERVER1/DeviceIpint.2/SourceEndpoint.video:0:0"
]

Pa Requ Description
ra ired
me
te
r

wat No waterlevel=1 - the response will contain the current water level value, if the water level detection is created for the camera (see Configuring
erle water level detection).
vel

Request example:
GET http://127.0.0.1:80/statistics/Server1/DeviceIpint.1/SourceEndpoint.video:0:0
Response example:

{
"bitrate": 592831,
"fps": 2.278942490e+01,
"width": 1280,
"height": 720,
"mediaType": 2,
"streamType": 877088845
}

HTTP API  –  30


    Integration SDK

1.2.1.4 Archives

1.2.1.4.1 Get archive contents


Get list of archives the recording is performed to:
GET http://P-Address:port/prefix/archive/list/{VIDEOSOURCEID}

{VIDEOSOURCEID} - three-component source endpoint ID (see Get list of video sources (cameras)). For instance,
"SERVER1/DeviceIpint.3/SourceEndpoint.video:0:0".

Sample request:
GET http://127.0.0.1:80/archive/list/SERVER1/DeviceIpint.1/SourceEndpoint.video:0:0
Sample response:

{
"archives" : [
{
"default" : true,
"name" : "hosts/SERVER1/MultimediaStorage.AliceBlue/MultimediaStorage"
},
{
"default" : false,
"name" : "hosts/SERVER1/MultimediaStorage.AntiqueWhite/MultimediaStorage"
}
]
}

Parameter Description

default true - default archive.


false - not a default archive.

name Archive name

1.2.1.4.1.1 Get archive contents:


GET http://IP-Address:port/prefix/archive/contents/intervals/{VIDEOSOURCEID}/{ENDTIME}/{BEGINTIME} – get archive contents
starting at BEGINTIME and ending at ENDTIME.

{VIDEOSOURCEID} - three-component source endpoint ID (see Get list of video sources (cameras)). For instance,
"SERVER1/DeviceIpint.3/SourceEndpoint.video:0:0".

If BEGINTIME is not specified, infinite future is considered. If ENDTIME is not specified too, infinite past is considered.
The words "past" and "future" can be used to set infinite past and infinite future as well.
Interval sequence corresponds to the ratio between specified BEGINTIME and ENDTIME (in ascending order if
BEGINTIME<ENDTIME, and in descending order if ENDTIME<BEGINTIME). Start and end points of interval are returned in
its common order, i.e. the interval start time is less than the interval end time or equal to it.
Set time in the YYYYMMDDTHHMMSS format in the timezone UTC+0.

HTTP API  –  31


    Integration SDK

Parameter Required Description

limit No The number of intervals in the response, the default value is 100.

scale No The minimum time separation between two intervals at which they will be treated
as two different intervals (not merged), the default value is 0.

archive No The name of the archive from which the intervals are to be retrieved. If not
specified, the intervals are retrieved from the default archive.

Sample request:
GET http://127.0.0.1:80/archive/contents/intervals/SERVER1/DeviceIpint.1/SourceEndpoint.video:0:0/past/future
Sample response:

{
"intervals": [
{
"begin": "20200512T105111.089000",
"end": "20200521T121106.032000"
},
{
"begin": "20200430T052909.842000",
"end": "20200430T063733.242000"
}
],
"more": true
}

Parameter Description

intervals An array containing intervals.

Note
Time is returned in the UTC format

more true - the server returned all intervals from the specified time interval.
false - the server did not return all intervals because the limit was exceeded (limit parameter).

1.2.1.4.2 Get info about archive

1.2.1.4.2.1 Archive depth


GET http://IP-Address:port/prefix/archive/statistics/depth/{VIDEOSOURCEID}/{ENDTIME}/{BEGINTIME} - getting information
about the archive depth starting at BEGINTIME and ending at ENDTIME.

{VIDEOSOURCEID} - three-component source endpoint ID (see Get list of video sources (cameras)). For instance,
"SERVER1/DeviceIpint.3/SourceEndpoint.video:0:0".

Note
The ENDTIME and BEGINTIME syntax is described in Get archive contents section.

HTTP API  –  32


    Integration SDK

Parameter Required Description

threshold No The threshold value (in days) at which the interval merging procedure will be
completed. The default value is 1 day.

Sample request:
GET http://127.0.0.1:80/archive/statistics/depth/SERVER1/DeviceIpint.23/SourceEndpoint.video:0:0?threshold=2
Sample response:

{
"start": "20160823T141333.778000"
,"end": "20160824T065142"
}

Parameter Description

start Interval start

end Interval end

1.2.1.4.2.2 Recording capacity to specific camera archive


GET http://IP-Address:port/prefix/archive/statistics/capacity/{VIDEOSOURCEID}/{ENDTIME}/{BEGINTIME} - getting information
about the recording capacity to specific camera archive starting at BEGINTIME and ending at ENDTIME.
Sample request:
GET http://127.0.0.1:80/archive/statistics/capacity/SERVER1/DeviceIpint.23/SourceEndpoint.video:0:0/past/future
Sample response:

{
"size": 520093696
,"duration": 32345
}

Par Description
ame
ter

size Archive size (in bytes) within the specified period

dur Archive duration (in milliseconds) within the specified period


atio
n

1.2.1.4.3 Get info about archive damage


GET http://IP-address:port/prefix/archive/health/{HOSTNAME}/{ENDTIME}/{BEGINTIME}

{HOSTNAME} - Server name.

Note
The ENDTIME and BEGINTIME syntax is described in Get MM archive contents section.

HTTP API  –  33


    Integration SDK

Pa Re Description
ra qu
me ir
tr ed

arc No Archive name from the request to get the list of archives (see Get archive contents).
hiv
e

he No 0 — there is an archive damage,  1 — no archive damage.


alt
h

Important!
If the request does not contain the archive or health parameters, then the response will contain all values of these
parameters.

Sample request:
GET http://127.0.0.1:80/archive/health/SERVER/past/future?archive=hosts/SERVER/MultimediaStorage.AliceBlue/
MultimediaStorage&health=0
Sample response:

{
"events" : [
{
"data" : {
"archive" : "D:/archiveAliceBlue.afs",
"health" : 0
},
"timestamp" : "20180907T101637.361014"
},
{
"data" : {
"archive" : "D:/archiveAliceBlue.afs",
"health" : 0
},
"timestamp" : "20180907T102726.750134"
}
]
}

where,
timestamp — the time of archive damage detection (UTC +0).

HTTP API  –  34


    Integration SDK

1.2.1.4.4 Get archive stream

On page:

• Get archive stream from default


archive
• Assign ID to the stream
• RTSP archive video
• HTTP archive video
• Tunneling RTSP over HTTP
• H.264 archive video

Important!
You can get audio from x64 Server only.
You can't get audio in MJPEG format.

1.2.1.4.4.1 Get archive stream from default archive


GET http://IP-Address:port/prefix/archive/media/{VIDEOSOURCEID}/{STARTTIME}

{VIDEOSOURCEID} - three-component source endpoint ID (see Get list of video sources (cameras)).  For instance,
"SERVER1/DeviceIpint.3/SourceEndpoint.video:0:0".

{STARTTIME} - time in ISO format. Set the timezone to UTC+0. 

Pa R Description
ra e
me q
te u
r i
r
e
d

sp N Playback speed, values can be negative.


ee o

for N Parameter values are 'mjpeg', 'rtsp', 'mp4', 'hls'. If the format is not specified, 'rtsp' is selected or it is not recognized, then the native format is
ma o selected by server to prevent additional encoding. If the native format is not supported by client, server selects WebM.
t

id N Unique identifier of archive stream (optional). It is used to get stream info or control the stream.
o

w N w – frame width, h – frame height.


o
h

HTTP API  –  35


    Integration SDK

Pa R Description
ra e
me q
te u
r i
r
e
d

fr N fps.
o
Important!
This parameter is relevant only for MJPEG video.

arc N The archive name from the Get list of archives request (see Get archive contents). If not specified, the default archive is used.
hiv o
e

en N Get signed links to video streams.


abl o
e_t enable_token_auth - enable authorization by token =1.
ok valid_token_hours - signature validation time (in hours). The maximum value is a week. The default value is 12 hours.
en
_a
uth 

val N
id_ o
tok
en
_h
our
s

Sample request:
GET http://127.0.0.1:80/archive/media/Server1/DeviceIpint.1/SourceEndpoint.video:0:0/20110608T060141.375?
format=rtsp&speed=1&w=640&h=480&enable_token_auth=1&valid_token_hours=1

Important!
HLS archive video becomes available in 30 seconds after getting the response

Sample response:

HTTP API  –  36


    Integration SDK

{
"http": {
"description": "RTP/RTSP/HTTP/TCP",
"path": "archive/hosts/Server1/DeviceIpint.1/SourceEndpoint.video:
0:0/20110608T060141.375000?speed=1&id=a865fcea-cfe6-44a1-
bf7b-9e6a94c44a53&exp=20200525T171234&nonce=1&hmac=wVlyHvZkB2TnqftTfYugtwmZ7g8=",
"port": "8554"
},
"httpproxy": {
"description": "RTP/RTSP/HTTP/TCP Current Http Port",
"path": "rtspproxy/archive/hosts/Server1/DeviceIpint.1/SourceEndpoint.video:
0:0/20110608T060141.375000?speed=1&id=a865fcea-cfe6-44a1-
bf7b-9e6a94c44a53&exp=20200525T171234&nonce=2&hmac=BVICx8NVV4yijwqc0Q6Xzji41Rg="
},
"rtsp": {
"description": "RTP/UDP or RTP/RTSP/TCP",
"path": "archive/hosts/Server1/DeviceIpint.1/SourceEndpoint.video:
0:0/20110608T060141.375000?speed=1&id=a865fcea-cfe6-44a1-
bf7b-9e6a94c44a53&exp=20200525T171234&nonce=1&hmac=wVlyHvZkB2TnqftTfYugtwmZ7g8=",
"port": "554"
}
}

1.2.1.4.4.2 Assign ID to the stream


Assign ID to the stream to receive information about this stream.
http://IP-Address:port/prefix/archive/media/VIDEOSOURCEID/STARTTIME/20140723T120000.000?
format=rtsp&speed=1&w=640&h=480&id=f03c6ccf-b181-4844-b09c-9a19e6920fd3
It is possible to use other values consisting of latin letters and digits. It is recommended to use the UUID function (see Get unique
identifier).

1.2.1.4.4.3 RTSP archive video


GET rtsp://login:password@IP-Address:554/archive/hosts/SERVER1/DeviceIpint.0/SourceEndpoint.video:
0:0/20160907T050548.723000Z?speed=1
Speed parametr is mandatory: playback speed.
Examples:
• speed=1 - forward playback, normal speed;
• speed=-1 - back playback, normal speed;
• speed=4 - fast playback, speed 4х;
• speed=-8 - fast-rewind playback, speed 8x.

1.2.1.4.4.4 HTTP archive video


ffplay.exe -v debug "http://login:password@IP-Address:80/archive/media/SERVER1/DeviceIpint.4/SourceEndpoint.video:
0:0/20170112T113526?w=1600&h=0&speed=1"

1.2.1.4.4.5 Tunneling RTSP over HTTP


see Configure tunneling RTSP over HTTP in VLC.
ffplay -rtsp_transport http "rtsp://login:password@IP-Address:8554/rtspproxy/archive/hosts/SERVER1/DeviceIpint.4/
SourceEndpoint.video:0:0/20170115T113526"
For VLC: GET rtsp://login:password@IP-Address:8554/rtspproxy/archive/hosts/SERVER1/DeviceIpint.4/SourceEndpoint.video:
0:0/20170115T113526

HTTP API  –  37


    Integration SDK

1.2.1.4.4.6 H.264 archive video


To get H.264 archive video use RTSP protocol:
GET rtsp://login:password@IP-Address:554/archive/hosts/SERVER1/DeviceIpint.4/SourceEndpoint.video:0:0/20170112T113526
or tunneling RTSP over HTTP:
GET rtsp://login:password@IP-Address:80/rtspproxy/archive/hosts/SERVER1/DeviceIpint.4/SourceEndpoint.video:
0:0/20170115T113526

1.2.1.4.4.7 Get archive stream info


GET http://IP-Address:port/prefix/archive/media/rendered-info/{UUID} -gets info of the frame last displayed.

{UUID} is a unique identifier of the requested archive stream (stream must be signed, see Get archive stream).

Sample request:
GET http://127.0.0.1:80/archive/media/rendered-info/22996cea31-91c4-9a46-9269-48b998fd2f29
Sample response:

{
   "timestamp": "20110408T103627.048"
}

timestamp – frame time token.

1.2.1.4.4.8 Control archive stream


GET http://IP-Address:port/prefix/archive/media/stop/{UUID} - stops archive stream that has the specified UUID.

{UUID} is a unique identifier of the requested archive stream (stream must be signed, see Get archive stream).

When completed, the last frame info is received.

Note
The archive stream stop command is not applied to video in rtsp format.

1.2.1.4.4.9 Review video footage by frame

On page:

• Get frame by timestamp


• Get frame registration time

Get frame by timestamp


GET http://IP-adress:port/prefix/archive/media/{VIDEOSOURCEID}/{STARTTIME} - gets frame by its STARTTIME. Frame is returned
in JPEG format.

HTTP API  –  38


    Integration SDK

{VIDEOSOURCEID} - three-component source endpoint ID (see Get list of video sources (cameras)). For instance,
"SERVER1/DeviceIpint.3/SourceEndpoint.video:0:0".

{STARTTIME} - time in ISO format. Set the timezone to UTC+0. 

Para Req Description


mete uir
r ed

thres No Available from Axxon Next 4.4.1.9245.


hold
If there is no frame at a given time, then the first frame from the [STARTTIME; STARTTIME + threshold] range is returned, where threshold is
specified in milliseconds.
If there is no frame in the specified range, then there will be a 404 Not Found error in the response.

w No w – frame width, h – frame height.


h
Note
If h and w values are more than size of original frame, the frame will be received with original size.
Zooming out of width and height is available only discretely - in 2, 4, 8 times, etc. If specified sizes are not corresponding to 1/2,
1/4 etc. of original frame size, the frame will be received with size divisible by the original frame size close to specified values.

crop_ No Available from Axxon Next 4.4.1.9115.


x
crop_x – horizontal indent from the upper left corner. Possible values are 0 to 1. The default is 0.
crop_
y crop_y – vertical indent from the upper left corner. Possible values are 0 to 1. The default is 0.

crop_ crop_width – the ratio of the original image width. Possible values are 0 to 1. The default is 1.
width crop_height – the ratio of the original image hight. Possible values are 0 to 1. The default is 1.
crop_
heigh
t

Get frame registration time


GET http://IP-Address:port/prefix/archive/contents/frames/{VIDEOSOURCEID}/{ENDTIME}/{BEGINTIME} – getting the time of
frames registration in the archive.

Note
The ENDTIME and BEGINTIME syntax is described in Get archive contents section.

Para Req Description


mete uir
r ed

limit No The default value of limit parameter is 250. This parameter is optional for server and it can return fewer search results.

Sample request:
GET http://127.0.0.1:80/archive/contents/frames/SERVER1/DeviceIpint.2/SourceEndpoint.video:0:0/past/future?limit=3
Sample response:

HTTP API  –  39


    Integration SDK

{
"frames": [
"20200525T113229.649000",
"20200525T113229.100000",
"20200525T113228.588000"
],
"more": true
}

Parameter Description

frames An array containing the timestamps of the stored frames.

Note
Time is returned in the UTC format

more true - the server returned all frames from the specified range.
false - the server did not return all frames because the limit was exceeded (limit parameter).

1.2.1.4.5 Working with bookmarks


A bookmark is either a regular comment in the archive (see Operator comments) or a protected video (see Protecting video
footage from FIFO overwriting).

1.2.1.4.5.1 Get bookmarks from archive

Axxon Next 4.1.1.7766 or later

GET http://IP-address:port/prefix/archive/contents/bookmarks/{HOSTNAME}/{ENDTIME}/{BEGINTIME}

{HOSTNAME} - Server name.

Note
The ENDTIME and BEGINTIME syntax is described in Get MM archive contents section.

Pa Re Description
ra qu
me ir
te ed
r

thr No Results offset by the specified number. For example, if a query with offset=0 returned 100 results, then in order to get the next results, it is
esh necessary to run a query with offset=100. If the second query returned 250 results, then in order to get the next results, it is necessary to run a
old query with offset=350, etc.

limi No Received bookmarks limit. The default value is 100.


t

Sample request:
GET http://127.0.0.1:80/archive/contents/bookmarks/Server1/future/past

HTTP API  –  40


    Integration SDK

Sample response: 

{
"archives": [
{
"friendly_name": "AliceBlue",
"storage": "hosts/Server1/MultimediaStorage.AliceBlue/MultimediaStorage"
}
],
"cameras": [
{
"endpoint": "hosts/Server1/DeviceIpint.7/SourceEndpoint.video:0:0",
"friendly_name": "Camera"
}
],
"events": [
{
"archBegin": "2019-03-19T10:06:54.295Z",
"archEnd": "2019-03-19T13:02:41.243Z",
"begins_at": "20190319T114843.000",
"boundary": "((0.4989775;0.4169492);(75.49898;13.41695))",
"comment": "comment",
"endpoint": "hosts/Server1/DeviceIpint.7/SourceEndpoint.video:0:0",
"ends_at": "20190319T115638.000",
"geometry": "f49fa526-c320-404a-9da2-7a090759a717;None;147",
"group_id": "b686e57c-a4e8-44dd-b17e-8c1b805a1b6e",
"id": "7843d488-67e2-4140-ab17-0016e4ba22bc",
"is_protected": false,
"storage_id": "hosts/Server1/MultimediaStorage.AliceBlue/MultimediaStorage",
"timestamp": "20190319T130332.110491",
"user_id": "root"
},
{
"begins_at": "20190319T121747.999",
"boundary": "((0.4989775;0.4169492);(75.49898;13.41695))",
"comment": "protected",
"endpoint": "hosts/Server1/DeviceIpint.7/SourceEndpoint.video:0:0",
"ends_at": "20190319T123101.145",
"geometry": "4cbf8979-4234-4a9a-9838-3026bd4ec496;None;147",
"group_id": "2e184409-ed77-41bb-85d1-92d78d35c882",
"id": "a792a895-00fd-48f9-9bd4-99e572f1579d",
"is_protected": true,
"storage_id": "hosts/Server1/MultimediaStorage.AliceBlue/MultimediaStorage",
"timestamp": "20190319T130339.722000",
"user_id": "root"
}
]

Par Description
ame
ter

arch Array of archives that contain the bookmarks.


ives

cam Array of bookmarked cameras.


eras

HTTP API  –  41


    Integration SDK

Par Description
ame
ter

begi Correspond to the bookmark beggining and ending.


ns_a
t

end
s_at

com Commentary.
men
t

end Source.
poin
t

is_p If the value is true then the record is proteced from overwriting (see Protecting video footage from FIFO overwriting).
rote
cted

stor Archive.
age
_id

time Date of the bookmark adding.


sta
mp

user User who added the bookmark.


id

1.2.1.4.5.2 Edit bookmarks


POST http://IP-address:port/prefix/archive/contents/bookmarks/
The request body must contain the data from the GET request (see Get bookmarks from archive), and the hostname parameter:

[
{
"archBegin": "2019-03-19T10:06:54.295Z",
"archEnd": "2019-03-19T13:02:41.243Z",
"begins_at": "20190319T114843.000",
"boundary": "((0.4989775;0.4169492);(75.49898;13.41695))",
"comment": "comment_new",
"endpoint": "hosts/Server1/DeviceIpint.7/SourceEndpoint.video:0:0",
"ends_at": "20190319T115638.000",
"geometry": "f49fa526-c320-404a-9da2-7a090759a717;None;147",
"group_id": "b686e57c-a4e8-44dd-b17e-8c1b805a1b6e",
"id": "7843d488-67e2-4140-ab17-0016e4ba22bc",
"is_protected": false,
"storage_id": "hosts/Server1/MultimediaStorage.AliceBlue/MultimediaStorage",
"timestamp": "20190319T130332.110491",
"user_id": "root",
"hostname": "Server1"
}
]

You can edit the following parameters:


• begins_at

HTTP API  –  42


    Integration SDK

• ends_at
• comment
• is_protected
• endpoint
• storage_id
To delete a comment or a bookmark, it is necessary to clear the endpoint and storage_id parameter values.

[
{
"archBegin": "2019-03-19T10:06:54.295Z",
"archEnd": "2019-03-19T13:02:41.243Z",
"begins_at": "20190319T114843.000",
"boundary": "((0.4989775;0.4169492);(75.49898;13.41695))",
"comment": "comment_new",
"endpoint": "",
"ends_at": "20190319T115638.000",
"geometry": "f49fa526-c320-404a-9da2-7a090759a717;None;147",
"group_id": "b686e57c-a4e8-44dd-b17e-8c1b805a1b6e",
"id": "7843d488-67e2-4140-ab17-0016e4ba22bc",
"is_protected": false,
"storage_id": "",
"timestamp": "20190319T130332.110491",
"user_id": "root",
"hostname": "Server1"
}
]

1.2.1.4.5.3 Create bookmarks


POST http://IP-address:port/prefix/archive/contents/bookmarks/create
The request body must contain the JSON with the begins_at, ends_at, comment, is_protected, endpoint
and storage_id parameters (see Get bookmarks from archive):

[
{
"begins_at":"20190226T102523.000",
"comment":"text",
"ends_at":"20190226T102646.000",
"is_protected":true,
"endpoint":"hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"storage_id":"hosts/Server1/MultimediaStorage.AliceBlue/MultimediaStorage"
}
]

JSON for creating a group bookmark:

HTTP API  –  43


    Integration SDK

[
{
"begins_at":"20190226T102523.000",
"comment":"text",
"ends_at":"20190226T102646.000",
"is_protected":true,
"endpoint":"hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"storage_id":"hosts/Server1/MultimediaStorage.AliceBlue/MultimediaStorage"
},
{ "endpoint":"hosts/Server1/DeviceIpint.2/SourceEndpoint.video:0:0",
"storage_id":"hosts/Server1/MultimediaStorage.AliceBlue/MultimediaStorage"
}
]

A group bookmark will be linked to several cameras, however the begins_at, ends_at, comment and is_protected parameters


are taken from the first array of elements.

Attention!
A group bookmark in a GET request (see Get bookmarks from archive) will look like several bookmarks with different
endpoint and storage_id parameters.
To edit a group bookmark (see Edit bookmarks), it is necessary to edit all single bookmarks at the same time, and make
sure that all their other parameters except endpoint and storage_id match.

1.2.1.4.5.4 Delete video from archive


DELETE http://IP-address:port/prefix/archive/contents/bookmarks/

Pa Re Description
ra qu
me ir
tr ed

be Yes Parameters must strictly match the created bookmark (see Get bookmarks from archive).
gin
s_a
t

en Yes
ds
_at

sto Yes
rag
e_i
d

en Yes
dp
oin
t

The bookmark itself will not be deleted.


Sample request:
DELETE http://127.0.0.1:80/archive/contents/bookmarks/?
begins_at=20190320T114213.645&ends_at=20190320T114700.481&storage_id=hosts/Server1/MultimediaStorage.AliceBlue/
MultimediaStorage&endpoint=hosts/Server1/DeviceIpint.7/SourceEndpoint.video:0:0

HTTP API  –  44


    Integration SDK

1.2.1.4.6 Archive search

1.2.1.4.6.1 General interface


Search request
Search by one source
Method: POST http://IP-Address:port/prefix/search/{auto|face|vmda|stranger|heatmap}/{DETECTORID}/{BEGINTIME/ENDTIME}

auto|face|vmda|stranger|heatmap – search type.


The request body must include the "query" function if "vmda" search type is used (see Forensic Search MomentQuest
(VMDA) API).

DETECTORID – endpoint detection tool ternary ID (HOSTNAME/AVDetector.ID/EventSupplier for auto and face search,
HOSTNAME/AVDetector.ID/SourceEndpoint.vmda for vmda, see Get list of detection tools).

Note
The ENDTIME and BEGINTIME syntax is described in Get archive contents section.

A request for search on a single computer is also supported for auto and face search, the request structure is as follows:
http://localhost/prefix/search/(auto|face)/{HOSTNAME}/{BEGINTIME}/{ENDTIME}

HOSTNAME – Server name.

Search by multiple sources


Method: POST http://IP-Address:port/prefix/search/{auto|face|vmda|stranger|heatmap}/{BEGINTIME/ENDTIME}
This search type always accepts JSON in the POST body that is to include at least one section of the form:

"sources": [
"hosts/Server1/AVDetector.1/EventSupplier"
]

When the search request is performed, JSON is to include image in base64 format.

{
"sources": [
"hosts/Server1/AVDetector.1/EventSupplier",
"hosts/Server1/AVDetector.2/EventSupplier"
],
"image" : "base64 encoded image"
}

Result
The request will return either error or response like:

HTTP/1.1 202 Accepted


Connection: Close
Location: /search/(auto|face|vmda|stranger|heatmap)/GUID
Cache-Control: no-cache

HTTP API  –  45


    Integration SDK

Receiving the Accepted code does not guarantee successful execution of the search. This code only shows that the command
has been taken to process.

P Description
a
r
a
m
e
t
e
r

Lo identifier for future access to search results. Example: /search/vmda/3dc15b75-6463-4eb1-ab2d-0eb0a8f54bd3


ca
tio
n

Error codes:

Er Description
ro
r
co
de

400 Incorrect request.

500 Internal Server error.

Search results request


GET http://IP-Address:port/search/{auto|face|vmda|stranger|heatmap}/{GUID}/result

The /search/(auto|face|vmda)/GUID part is a result of the POST command (see Search request).

Pa Re Description
ra qu
me ir
te ed
r

limi No Maximum number of events returned by the request.  uint32_t::max() by default.


t

offs No Results offset by the specified number. For example, if a query with offset=0 returned 100 results, then in order to get the next results, it is
et necessary to run a query with offset=100. If the second query returned 250 results, then in order to get the next results, it is necessary to run a
query with offset=350, etc.

Sample request:
http://127.0.0.1:80/search/face/49ded146-3912-4a2f-8e70-6ecfbcdacdea/result?offset=0&limit=10
Returned result depends on the search type.
The request can return two successful statuses:

S Description
t
a
t
u
s

2 Search is not over. Repeat search results requests until status code 200 is returned. Set delays between repeated requests in order to reduce
0 computational burden.
6

HTTP API  –  46


    Integration SDK

S Description
t
a
t
u
s

2 Search is over.
0
0

Error codes:

E Description
r
r
o
r

4 Incorrect request
0
0

4 The offset value is greater than current quantity of results or requested search ID (GUID) not found.
0
4

Search completion
Method: DELETE http://IP-adress:port/search/(auto|face|vmda)/GUID

The /search/(auto|face|vmda)/GUID part is a result of the POST command (see Search request).

The command terminates the search operation and deallocates resources. Search results are not available after it is executed.
Error codes:

E Description
r
r
o
r

4 Incorrect request
0
0

1.2.1.4.6.2 Face search API


The POST request (see Search request) used for search start must contain binary data of searched face in jpеg format.

Note
All face detection triggerings are stored in the t_json_event database table.
The t_face_vector table stores the vectors of faces recognized by the detection tool.
The t_face_listed table stores the face images added to the list of people.

HTTP API  –  47


    Integration SDK

Pa Re Description
ra qu
me ir
te ed
r

acc No The accuracy parameter is a recognition rate from range [0, 1] (1 – complete match).  This parameter is specified additionally in the search line
ura or in the request body (starting from the 4.3.0.7914 version). Otherwise, the default value 0.9 will be used.
cy
Attention!
The parameter value specified in the request body has higher priority.

Attention!
If the body of the POST request is empty, then the search will return all the results for the recognized faces.
The accuracy parameter value in this case will be 0.

Sample request:
POST http://127.0.0.1:80/search/face/SERVER1/AVDetector.2/EventSupplier/past/future?accuracy=0.7
GET http://127.0.0.1:80/search/face/2e69ba76-23f1-4d07-a812-fee86e994b8e/result
Sample response:

{
"events" : [
{
"accuracy" : 0.90591877698898315,
"origin" : "hosts/SERVER1/DeviceIpint.2/SourceEndpoint.video:0:0", "position" : {
"bottom" : 0.10694444444444445, "left" : 0.69687500000000002, "right" :
0.74687500000000007, "top" : 0.018055555555555554
},
"timestamp" : "20160914T085307.499000"
},
{
"accuracy" : 0.90591877698898315,
"origin" : "hosts/SERVER1/DeviceIpint.2/SourceEndpoint.video:0:0", "position" : {
"bottom" : 0.10694444444444445, "left" : 0.69687500000000002, "right" :
0.74687500000000007, "top" : 0.018055555555555554
},
"timestamp" : "20160914T085830.392000"
}
]
}

P Description
a
r
a
m
e
t
e
r

o Сamera channel to take analyzed video stream from.


ri
gi
n

HTTP API  –  48


    Integration SDK

P Description
a
r
a
m
e
t
e
r

ti Time stamp of a video frame with a face detected by the detection tool.
m
e
st
a
m
p

a Recognition accuracy ranged [0,1], with 1 corresponding to full match.


c
c
u
r
a
c
y

p Coordinates of a frame border enclosing face on a video frame.


o
si
ti
o
n

1.2.1.4.6.3 LPR search API


The POST request (see Search request) used for search start must contain the following JSON:

{
"plate": "mask"
}

The plate parameter sets a search mask. The mask format corresponds to the one used in GUI (see LPR search).

Attention!
If the body of POST request is empty, then the search will return all the results for the recognized license plates.

Pa Re Description
ra qu
me ir
te ed
r

res No result_type=full  - detailed response


ult_
typ
e

Sample request:
POST http://127.0.0.1:80/search/auto/SERVER1/AVDetector.2/EventSupplier/past/future?result_type=full or POST http://
127.0.0.1:80/search/auto/SERVER1/AVDetector.2/EventSupplier/past/future
GET http://127.0.0.1:80/search/auto/2e69ba76-23f1-4d07-a812-fee86e994b8e/result
Sample response:

HTTP API  –  49


    Integration SDK

{
"origin": "hosts/SERVER1/DeviceIpint.3/SourceEndpoint.video:0:0",
"plates": [
"О035КО97"
],
"position": {
"bottom": 0.86805555555555558,
"left": 0.31805555555555554,
"right": 0.49027777777777776,
"top": 0.81944444444444442
},
"timestamp": "20190912T105500.925000"
}

P Description
a
r
a
m
e
t
e
r

o Сamera channel to take analyzed video stream from.


ri
gi
n

ti Time stamp of a frame with a license plate detected by the detection tool.
m
e
st
a
m
p

pl List of supposed hypotheses


a
t
e
s

p Coordinates of the recognized LP frame. This parameter is available in the response starting from Axxon Next 4.4.1.9153.
o
si
ti
o
n

Detailed response:

HTTP API  –  50


    Integration SDK

{
"events" : [
{
"Direction" : 0,
"Hypotheses" : [
{
"OCRQuality" : 50,
"PlateCountry" : "us",
"PlateFull" : "Е733ХА97",
"PlateRectangle" : [
0.40104166666666669,
0.52941176470588236,
0.45000000000000001,
0.55147058823529416
],
"TimeBest" : "20180730T094220.010000"
},
{
"OCRQuality" : 32,
"PlateCountry" : "us",
"PlateFull" : "*Е733Х*9",
"PlateRectangle" : [
0.40104166666666669,
0.52941176470588236,
0.45000000000000001,
0.55147058823529416
],
"TimeBest" : "20180730T094220.010000"
},
{
"OCRQuality" : 38,
"PlateCountry" : "us",
"PlateFull" : "Е733ХА***",
"PlateRectangle" : [
0.40104166666666669,
0.52941176470588236,
0.45000000000000001,
0.55147058823529416
],
"TimeBest" : "20180730T094220.010000"
}
],
"TimeBegin" : "20180730T094219.610000",
"TimeEnd" : "20180730T094220.050000",
"detector_type" : "plateRecognized",
"origin_id" : "hosts/Server1/DeviceIpint.2/SourceEndpoint.video:0:0",
"phase" : 0,
"timestamp" : "20180730T094220.010000",
"ts_vector_body" : "E733XA97 EZERZER 7ONEZER 3TWOZER 3THRZER XFOUZER AFIVZER
9SIXZER 7SEVZER 8LENGTHZER *E733X*9 *ZERONE EONEONE 7TWOONE 3THRONE 3FOUONE XFIVONE *SIXONE
9SEVONE 8LENGTHONE E733XA*** EZERTWO 7ONETWO 3TWOTWO 3THRTWO XFOUTWO AFIVTWO *SIXTWO *SEVTWO
*EIGTWO 9LENGTHTWO"
},

HTTP API  –  51


    Integration SDK

1.2.1.4.6.4 Forensic Search MomentQuest (VMDA) API


The POST request (see Search request) for search start must contain JSON of one of the following types:
1. Constructor describing parameters for metadata database request.
There are three logical parts of the search request:
a. Request type (queryType, see Types of requests and their parameters)
b. Parameters specific for the specified type of request (figures, queryProperties, see Additional conditions)
c. Additional filter conditions (objectProperties, conditions, see Additional conditions)
2. Direct request in metadata database language.

{
"query": "figure
fZone=polygon(0.4647676,0.3973333,0.7946027,0.5493333,0.8650675,0.7946666,0.4647676,0.7946
666); figure fDir=(ellipses(-10000, -10000, 10000, 10000) - ellipses(-0, -0, 0,
0));set r = group[obj=vmda_object] { res = or(fZone((obj.left + obj.right) / 2,
obj.bottom)) }; result = r.res;"
}

Important!
If input JSON has both the constructor and the direct request sections, the direct request has higher priority.

Important!
If the body of POST request is empty, then the search will return all alarm intervals.

Note
To perform search in offline analytics data, use the following request:

POST /search/vmda/SERVER-NAME/OfflineAnalytics.c95ad5a581094845995ee28a7f097797/
SourceEndpoint.vmda:AVDetector:1/past/future

This request will be performed even if AxxonNext archive is removed, but VMDA metadata is saved.
Object ID is to be specified without the hosts/ prefix.
Valid request: /search/vmda/SERVER-NAME/OfflineAnalytics...
Invalid request: /search/vmda/hosts/SERVER-NAME/OfflineAnalytics...

The search result is the following JSON response:

HTTP API  –  52


    Integration SDK

{
"intervals" : [
{
"endTime" : "20210228T124302.313000",
"positions" : [
{
"bottom" : 0.60026908397674561,
"left" : 0.42527302742004397,
"right" : 0.48125132560729983,
"top" : 0.50307014942169193
}
],
"startTime" : "20210228T124256.673000"
},
{
"endTime" : "20210228T124259.513000",
"positions" : [
{
"bottom" : 0.45109353065490726,
"left" : 0.41891927719116212,
"right" : 0.4565316200256348,
"top" : 0.34989043235778811 }
],
"startTime" : "20210228T124256.673000"
}
]
}

where Intervals is a set of time intervals for which the search condition is fulfilled
.
Additional conditions

On page:

• Object type (objectProperties/
category)
• Object size (objectProperties/
size)
• Object color (objectProperties/
color)
• Velocity (conditions/velocity)
• Directions (conditions/
directions)
• Duration  (conditions/duration)
• Object number (condtions/
count)

Additional conditions match all kinds of requests. Conditions are always joined with logical “AND”. For instance, the “object of
height not more than a quarter of the frame that is in the camera field of view for 5 seconds” request looks like this:

HTTP API  –  53


    Integration SDK

 {
"queryType": "zone",
"figures": [
{
"shape": [
[0.3, 0.3],
[0.7, 0.3],
[0.7, 0.7],
[0.3, 0.7]
]
}
],
"objectProperties": {
"size": {
"height": [0, 0.25]
}
},
"conditions": {
"duration": 5
}
}

Object type (objectProperties/category)
An object can be abandoned or moving (face, human, group, vehicle). In the request abandoned type cannot be mixed with other
object types (otherwise the abandoned requirement will be ignored).
Search for objects abandoned in any point of the frame looks like this:

 {
"queryType": "zone",
"figures": [
{
"shape": [
[0, 0],
[1, 0],
[1, 1],
[0, 1]
]
}
],
"objectProperties": {
"category": ["abandoned"],
}
}

The search for a human or a small group of people crossing the line looks like this:

HTTP API  –  54


    Integration SDK

 {
"queryType": "line",
"figures": [
{
"shape": [
[0.5, 0.8],
[0.5, 0.2]
]
}
]
"objectProperties": {
"category": ["human", "group"],
}
}

Object size (objectProperties/size)
It sets minimum and maximum width and height of an object.

Attention!
The minimal values must be strictly less that 1, the maximum values must be strictly greater than 0.

For instance, to find objects that are not bigger than a quarter of the frame in height one can use this request:
:

{
"queryType": "zone",
"figures": [
{
"shape": [
[0.3, 0.3],
[0.7, 0.3],
[0.7, 0.7],
[0.3, 0.7]
]
}
],
"objectProperties": {
"size": {
"width": [0, 1],
"height": [0, 0.25]
}
}
}

As both dimensions are not necessary to be set, this request will be similar to the previous one:

HTTP API  –  55


    Integration SDK

 {
"queryType": "zone",
"figures": [
{
"shape": [
[0.3, 0.3],
[0.7, 0.3],
[0.7, 0.7],
[0.3, 0.7]
]
}
],
"objectProperties": {
"size": {
"height": [0, 0.25]
}
}
}

Object color (objectProperties/color)
It sets minimum and maximum coordinates of the object color in HSV space. hue is measured in degrees (from 0 to 360),
saturation and brightness – in fractions from 0 to 1.
The request to get bright green objects in the zone looks like this:

 {
"queryType": "zone",
"figures": [
{
"shape": [
[0.3, 0.3],
[0.7, 0.3],
[0.7, 0.7],
[0.3, 0.7]
]
}
],
"objectProperties": {
"color": {
"hue": [75, 135],
"saturation": [0.5, 1],
"brightness": [0.5, 1]
}
}
}

In HSV space dark almost black colors can have any hue and saturation. So to search black objects the request should look like
this:

HTTP API  –  56


    Integration SDK

{
"queryType": "zone",
"figures": [
{
"shape": [
[0.3, 0.3],
[0.7, 0.3],
[0.7, 0.7],
[0.3, 0.7]
]
}
],
"objectProperties": {
"color": {
"hue": [0, 360],
"saturation": [0, 1],
"brightness": [0, 0.2]
}
}
}

Here is the same request for white objects:

 {
"queryType": "zone",
"figures": [
{
"shape": [
[0.3, 0.3],
[0.7, 0.3],
[0.7, 0.7],
[0.3, 0.7]
]
}
],
"objectProperties": {
"color": {
"hue": [0, 360],
"saturation": [0, 0.1],
"brightness": [0.8, 1]
}
}
}

Velocity (conditions/velocity)
It sets minimum and maximum velocity of the object.
It is measured in frame rates per second – i.e. the velocity of the object moving from the left edge of the frame to the right one
over 1 second is 1.
.

HTTP API  –  57


    Integration SDK

 {
"queryType": "zone",
"figures": [
{
"shape": [
[0.3, 0.3],
[0.7, 0.3],
[0.7, 0.7],
[0.3, 0.7]
]
}
],
"conditions": {
"velocity": [0.25, 1]
}
}

Directions (conditions/directions)
It sets the direction for the object as an array of angles. Angles are measured in radians and are counted from the axis directed to
the right clockwise.
So the request to get objects moving to the right ±45° looks like this:
:

{
"queryType": "zone",
"figures": [
{
"shape": [
[0.3, 0.3],
[0.7, 0.3],
[0.7, 0.7],
[0.3, 0.7]
]
}
],
"conditions": {
"directions": [
[315, 45]
]
}
}

Pay attention that 45° -- 315° angle covers all directions except “to the right”.
If one needs to find objects moving mainly horizontally, then two angles are to be set:

HTTP API  –  58


    Integration SDK

 {
"queryType": "zone",
"figures": [
{
"shape": [
[0.3, 0.3],
[0.7, 0.3],
[0.7, 0.7],
[0.3, 0.7]
]
}
],
"conditions": {
"directions": [
[315, 45],
[135, 225]
]
}
}

Duration  (conditions/duration)
It sets time (in seconds) during which the object is to continuously meet all conditions.
Using this condition one can make the “long presence in the zone” request:
:

 {
"queryType": "zone",
"figures": [
{
"shape": [
[0.3, 0.3],
[0.7, 0.3],
[0.7, 0.7],
[0.3, 0.7]
]
}
],
"conditions": {
"duration": 5
}
}

Object number (condtions/count)


It sets the minimum required number of objects that simultaneously meet other request conditions.
It is usually used for search of a big number of objects in the zone. For instance:

HTTP API  –  59


    Integration SDK

 {
"queryType": "zone",
"figures": [
{
"shape": [
[0.3, 0.3],
[0.7, 0.3],
[0.7, 0.7],
[0.3, 0.7]
]
}
],
"conditions": {
"count": 3
}
}

Types of requests and their parameters

On page:

• Object in the zone


(queryType="zone")
• Object transition from one zone
to another
(queryType="transition")
• Line crossing (queryType="line")

Object in the zone (queryType="zone")


figures/shape is a required parameter. It sets the zone the object to be within as the list of polygon apexes. Coordinates are set
in fractions of frame width/height (values from 0 to 1). It allows not to be tied to specific camera resolution.
The simplest request looks like this:

{
"queryType": "zone",
"figures": [
{
"shape": [
[0.3, 0.3],
[0.7, 0.3],
[0.7, 0.7],
[0.3, 0.7]
]
}
]
}

Here the zone describes the rectangular in the centre of camera field of view.
queryProperties/action is an optional parameter of the request:
• If this parameter is not set, then objects in the zone are searched.
• queryProperties/action="enter" - objects entering the zone are searched.
• queryProperties/action="exit" - objects exiting the zone are searched.

HTTP API  –  60


    Integration SDK

Here is an example of request for objects entering the zone:

{
"queryType": "zone",
"figures": [
{
"shape": [
[0.3, 0.3],
[0.7, 0.3],
[0.7, 0.7],
[0.3, 0.7]
]
}
],
"queryProperties": {
"action": "enter"
}
}

Object transition from one zone to another (queryType="transition")


There is one required parameter — figures. It has to contain two zones describing start and end zones.
There are no optional parameters.
Search for objects that moved from the left part of the frame to the right one:

 {
"queryType": "transition",
"figures": [
{
"shape": [
[0, 0],
[0.45, 0],
[0.45, 1],
[0, 1]
]
},
{
"shape": [
[0.55, 0],
[1, 0],
[1, 1],
[0.55, 1]
]
}
]
}

Line crossing (queryType="line")


Required parameter figures defines a segment crossing of which triggers the condition. The segment is to be set by two points.

HTTP API  –  61


    Integration SDK

 {
"queryType": "line",
"figures": [
{
"shape": [
[0.5, 0.8],
[0.5, 0.2]
]
}
]
}

Optional parameter queryProperties/direction sets direction of line crossing.


• If this parameter is not set, then objects crossing the line in any direction will be in results.
• queryProperties/direction="left" means that the object is to cross the line from the right to the left if look from the right
point of the segment.
• queryProperties/direction="right" means that the object is to cross the line from the left to the right if look from the right
point of the segment.
.

 {
"queryType": "line",
"figures": [
{
"shape": [
[0.5, 0.8],
[0.5, 0.2]
]
}
],
"queryProperties": {
"direction": "left"
}
}

1.2.1.4.6.5 'Familiar face'-'stranger' face search API


This search type compares every recognized face with all faces in the camera database over 30 days (or for the current archive
depth if it is less than 30 days) and sets the number of days over which this face was recognized by the camera. The search
decides if this is a “familiar face” or a “stranger” by the specified criteria.
The POST request is used for search start (see Search request), search type is stranger, request body is empty.
The following parameters are available:

HTTP API  –  62


    Integration SDK

Pa Re Description
ra qu
me ir
te ed
r

acc No Sets face similarity level in the range [0,1] (1 means complete match). If this parameter is not set, then the default value (0.9) is in use. If the
ura compared face was in the camera field of view on a specific day and it was recognized with accuracy that is not less than specified one, then
cy this face is considered to be present on that day. Otherwise, the algorithm considers this face was absent on that day. 

Important!
The accuracy parameter value can also be specified in the request body (starting from the 4.3.0.7914 version). In this case, it has
higher priority over the value specified in the search line.

thr No Defines the threshold value to recognize a face as a “stranger”. The value is set in the range from 0 to 1 and it defines the number of days
esh within which the face was absent to be considered as a “stranger”: 30-30*threshold. For instance, the value 0.8 means “the required object
old appeared in the search area within (30 - 30 * 0.8 = 6) days”. All faces that appeared within 6 and more days will be defined as “familiar faces”,
others – as “strangers”.

Important!
The threshold and op parameters should only be used together. If any of parameters is not set or has incorrect value, then both
parameters will be ignored.

op No Defines search direction.


Allowable values:
lt – “familiar face” search (based on treshold parameter).
gt – “stranger” search.

Sample request:
POST http://127.0.0.1:80/search/stranger/SERVER1/AVDetector.2/EventSupplier/past/future?accuracy=0.7
GET http://127.0.0.1:80/search/stranger/2e69ba76-23f1-4d07-a812-fee86e994b8e/result
Sample response:

HTTP API  –  63


    Integration SDK

{
"events" : [
{
"rate" : 0.90591877698898315,
"origin" : "hosts/SERVER1/DeviceIpint.2/SourceEndpoint.video:0:0",
"position" : {
"bottom" : 0.10694444444444445,
"left" : 0.69687500000000002,
"right" : 0.74687500000000007,
"top" : 0.018055555555555554
},
"timestamp" : "20160914T085307.499000"
},
{
"rate" : 0.90591877698898315,
"origin" : "hosts/SERVER1/DeviceIpint.2/SourceEndpoint.video:0:0",
"position" : {
"bottom" : 0.10694444444444445,
"left" : 0.69687500000000002,
"right" : 0.74687500000000007,
"top" : 0.018055555555555554
},
"timestamp" : "20160914T085830.392000"
}
}

P Description
a
r
a
m
e
t
e
r

o Camera channel to take analyzed video stream from.


ri
gi
n

ti Time stamp of a frame with a face detected by the detection tool.


m
e
st
a
m
p

r Rate of identifying a face as a “stranger”, the value in the [0,1] range. 1 means a complete stranger.
a
t
e

p Coordinates of a frame border enclosing face on a video frame.


o
si
ti
o
n

HTTP API  –  64


    Integration SDK

1.2.1.4.6.6 Define 'familiar face'-'stranger' attribute from image

'Familiar face'-'stranger' face search API

The body of POST request used for search start must contain binary data of searched face in jpеg format. The request itself can
be represented in two ways:
1. POST http://IP-Address:port/prefix/faceAppearanceRate/{DETECTORID}/{BEGINTIME}/{ENDTIME}

DETECTORID – endpoint detection tool ternary ID (HOSTNAME/AVDetector.ID/EventSupplier for auto and face
search, HOSTNAME/AVDetector.ID/SourceEndpoint.vmda for vmda, see Get list of detection tools).

Note
The ENDTIME and BEGINTIME syntax is described in Get archive contents section.

2. POST http://IP-Address:port/prefix/faceAppearanceRate/{HOSTNAME}/{BEGINTIME}/{ENDTIME}

HOSTNAME – Server name.

Pa R Description
ra e
me q
te u
r i
r
e
d

acc N Detection accuracy in the range [0,1] (1 means complete match). If this parameter is not set, then the default value (0.9) is in use.
ura o
cy

Sample request:
POST http://127.0.0.1:80/faceAppearanceRate/SERVER1/AVDetector.2/EventSupplier/past/future?accuracy=0.7
Sample response:

{
"rate": 0.13333334028720856
}

P Description
a
r
a
m
e
t
e
r

r Rate of identifying a face as a “stranger”, the value in the [0,1] range. 1 means a complete stranger.
a
t
e

HTTP API  –  65


    Integration SDK

1.2.1.4.6.7 Heat Map API


POST http://IP-address:port/prefix/search/heatmap/{DETECTORID}/{BEGINTIME}/{ENDTIME}

DETECTORID – endpoint detection tool ternary ID (HOSTNAME/AVDetector.ID/EventSupplier for auto and face search,
HOSTNAME/AVDetector.ID/SourceEndpoint.vmda for vmda, see Get list of detection tools).

Note
ENDTIME, BEGINTIME is the time in ISO format; it specifies the Heat Map interval.
The ENDTIME and BEGINTIME syntax is described in Get archive contents section.

The request body may contain the size of the searched image:

"mask_size":{
"height":1080,
"width":1920
}

Sample request:
POST http://127.0.0.1:80/search/heatmap/SERVER1/AVDetector.2/EventSupplier/past/future
GET http://127.0.0.1:80/search/heatmap/35ff5989-42ee-4446-bfde-f91375df67d3/result
where 35ff5989-42ee-4446-bfde-f91375df67d3 is the GUID from the Location field of the response.
Sample response:

Access-Control-Allow-Origin →*
Cache-Control →no-cache
Connection →Close
Location →/search/heatmap/35ff5989-42ee-4446-bfde-f91375df67d3

1.2.1.5 Events, triggerings of detection tools and alarms

1.2.1.5.1 Triggerings of detection tools

1.2.1.5.1.1 Get list of detection tools


GET http://IP-adress:port/prefix/detectors/{VIDEOSOURCEID}

{VIDEOSOURCEID} - first 2 parts of three-component source endpoint ID (see Get list of video sources (cameras)).  For
instance, "SERVER1/DeviceIpint.1".

Sample request:
GET http://127.0.0.1:80/detectors/SERVER1/DeviceIpint.1
Sample response:

HTTP API  –  66


    Integration SDK

{
"detectors": [
{
"name": "hosts/SERVER1/AVDetector.1/EventSupplier",
"type": "SceneDescription"
},
{
"name": "hosts/SERVER1/AVDetector.12/EventSupplier",
"type": "NullAudioDetection"
}
]
}

Attention!
Starting with Axxon Next 4.5.0, the type field is deprecated. To get up-to-date information on detection tools, it is
recommended to use the /camera/list request (see Get list of video sources (cameras)).

Available values of type parameter:

type Detection tool

SceneDescription Situation Analysis Detection Tools 

CrossOneLine Line crossing

moveInZone Motion in area

StopInZone Stop in area

ComeInZone Appearance in area

OutOfZone Disappearance in area

LongInZone Loitering

lostObject Multiple objects

LprDetector_Vit Number Plate Recognition

TvaFaceDetector Face detection

PeopleCounter Visitors counter

QueueDetector Queue detection

FireDetector Fire detection

SmokeDetector Smoke detection

NeuroCounter Neural counting

SceneChange Position change

QualityDegradation_v2 Image Noise Detection

HTTP API  –  67


    Integration SDK

type Detection tool

QualityDegradation Loss of quality

BlurredDegradation Blurred Image Detection

CompressedDegradation Compression Artifacts Detection

MotionDetection Motion detection

NullAudioDetection No signal

SignalAudioDetection Signal

NoiseAudioDetection Noise

PoseDetector Pose detection

RecumbentDetector Man down detection

SitDownDetector Sitting person detection

HandsUpDetector Hands up detection

ActiveShooterDetector Active shooter detection

WaterLevelDetector Water level detection

HandRailDetector Handrail holding detection

PeopleCountDetectorBySkeleton People counter

PeopleDistanceDetector Close-standing people detection

PoseMaskingDetector People masking

Functions of Service Video Detection Tools


Functions of Service Audio Detection Tools
Configuring Scene Analytics Detection Tools

1.2.1.5.1.2 Get list of detection tools events


GET http://IP-Address:port/prefix/archive/events/detectors/{ENDTIME}/{BEGINTIME} - get detections from all Axxon domain
Servers.

Note
The ENDTIME and BEGINTIME syntax is described in Get archive contents section.

HTTP API  –  68


    Integration SDK

Attention!
If ENDTIME < BEGINTIME in the request, then the events in the response will be sorted by time in ascending order.
If ENDTIME > BEGINTIME, then the events will be sorted in descending order.

GET http://IP-Address:port/prefix/archive/events/detectors/{HOSTNAME}/{ENDTIME}/{BEGINTIME} -  get detections from a


certain Server.

{HOSTNAME} - Server name (see Get Server list).

GET http://IP-Address:port/prefix/archive/events/detectors/{VIDEOSOURCEID}/{ENDTIME}/{BEGINTIME} - get detections from a


certain camera.

{VIDEOSOURCEID} - three-component source endpoint ID (see Get list of video sources (cameras)). For instance,
"SERVER1/DeviceIpint.3/SourceEndpoint.video:0:0".

Para Requ Description


mete ired
r

limit No Limit of detections in the response. If not specified, it is equal to 100.

offset No The results offset by the specified number. For example, if a query with offset=0 returned 100 results, then in order to get the next
results, it is necessary to run a query with offset=100. If the second query returned 250 results, then in order to get the next results, it is
necessary to run a query with offset=350, etc.

type No Get detections from a certain detection tool. The parameter values are listed in the table below.

join No If join=1, then in the response, the two-phase events will be merged together, and the duration parameter will be returned which
corresponds to the event duration.
If join=0, then in the response, the two-phase events will not be merged together.

limit_ No Is available starting with Axxon Next 4.4.1.9150.


to_arc
hive If limit_to_archive=1, then the response will return the events only from the accessible part of the archive (see Configuring access
restrictions to older footage).

archiv No Is available starting with Axxon Next 4.4.1.9150.


e
The name of the archive from the request to receive the list of archives (see Get archive contents).

Sample requests:
http://127.0.0.1:80/archive/events/detectors/Server1/DeviceIpint.2/SourceEndpoint.video:0:0/past/future?limit=10&offset=0 -
get detections from a certain camera, sorted in descending order. The maximum limit is 10.
http://127.0.0.1:80/archive/events/detectors/Server1/past/future?limit=5&offset=0 - get detections from all detection tools of
Server1. The maximum limit for each detection tool is 5.
http://127.0.0.1:80/archive/events/detectors/Server1/past/future?limit=5&offset=0&type=Ray - get detections from all sensors of
Server1. The maximum limit for each sensor is 5.
http://127.0.0.1:80/archive/events/detectors/past/future?limit=1&type=Ray - get the current state of all sensors of the Axxon
domain.
Sample response:
Click to expand
1) join=1

HTTP API  –  69


    Integration SDK

{
"events": [
{
"duration": "000000.467000",
"id": "09b8729a-a6fc-4ffa-8a83-aebc5c19d171",
"origin": "hosts/Server1/AppDataDetector.1/EventSupplier",
"rectangles": [
{
"bottom": "0.20831976890563964",
"index": "0",
"left": "0.57320795059204099",
"right": "0.6804207420349121",
"top": "0.09125151634216308"
}
],
"source": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"timestamp": "20190618T112815.527000",
"type": "moveInZone"
},
{
"duration": "000004.154000",
"id": "90c5d09e-c0bb-4c49-bf8b-22d3afffe8c1",
"origin": "hosts/Server1/AppDataDetector.1/EventSupplier",
"rectangles": [
{
"bottom": "0.72451157569885249",
"index": "0",
"left": "0.092941055297851571",
"right": "0.24284084320068361",
"top": "0.4965816402435303"
}
],
"source": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"timestamp": "20190618T112814.426000",
"type": "moveInZone"
},
{
"duration": "000005.155000",
"id": "dc953fad-bb08-4bae-bdce-62a09ab2dbd9",
"origin": "hosts/Server1/AppDataDetector.1/EventSupplier",
"rectangles": [
{
"bottom": "0.37916545867919921",
"index": "0",
"left": "0.10621988296508789",
"right": "0.2311831474304199",
"top": "0.11115360260009766"
}
],
"source": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"timestamp": "20190618T112814.293000",
"type": "moveInZone"
},
{
"duration": "000003.170000",

HTTP API  –  70


    Integration SDK

"id": "f00875f0-bad7-4e74-879c-0a564baa9d36",
"origin": "hosts/Server1/AppDataDetector.1/EventSupplier",
"rectangles": [
{
"bottom": "0.2848846626281738",
"index": "0",
"left": "0.11811468601226806",
"right": "0.18662774562835693",
"top": "0.11245393753051756"
}
],
"source": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"timestamp": "20190618T112813.358000",
"type": "moveInZone"
}
],
"more": true
}

2) join=0

HTTP API  –  71


    Integration SDK

1) join=1
 
{
"events": [
{
"duration": "000000.467000",
"id": "09b8729a-a6fc-4ffa-8a83-aebc5c19d171",
"origin": "hosts/Server1/AppDataDetector.1/EventSupplier",
"rectangles": [
{
"bottom": "0.20831976890563964",
"index": "0",
"left": "0.57320795059204099",
"right": "0.6804207420349121",
"top": "0.09125151634216308"
}
],
"source": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"timestamp": "20190618T112815.527000",
"type": "moveInZone"
},
{
"duration": "000004.154000",
"id": "90c5d09e-c0bb-4c49-bf8b-22d3afffe8c1",
"origin": "hosts/Server1/AppDataDetector.1/EventSupplier",
"rectangles": [
{
"bottom": "0.72451157569885249",
"index": "0",
"left": "0.092941055297851571",
"right": "0.24284084320068361",
"top": "0.4965816402435303"
}
],
"source": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"timestamp": "20190618T112814.426000",
"type": "moveInZone"
},
{
"duration": "000005.155000",
"id": "dc953fad-bb08-4bae-bdce-62a09ab2dbd9",
"origin": "hosts/Server1/AppDataDetector.1/EventSupplier",
"rectangles": [
{
"bottom": "0.37916545867919921",
"index": "0",
"left": "0.10621988296508789",
"right": "0.2311831474304199",
"top": "0.11115360260009766"
}
],
"source": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"timestamp": "20190618T112814.293000",
"type": "moveInZone"
},

HTTP API  –  72


    Integration SDK

{
"duration": "000003.170000",
"id": "f00875f0-bad7-4e74-879c-0a564baa9d36",
"origin": "hosts/Server1/AppDataDetector.1/EventSupplier",
"rectangles": [
{
"bottom": "0.2848846626281738",
"index": "0",
"left": "0.11811468601226806",
"right": "0.18662774562835693",
"top": "0.11245393753051756"
}
],
"source": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"timestamp": "20190618T112813.358000",
"type": "moveInZone"
}
],
"more": true
}
2) join=0
 
{
"events": [
{
"alertState": "ended",
"id": "cd3571bb-73c1-45cb-8965-a01e167836db",
"multiPhaseSyncId": "6d72973d-7188-4fa7-9bf9-e3ba6013f2e3",
"origin": "hosts/Server1/AppDataDetector.1/EventSupplier",
"rectangles": [],
"source": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"timestamp": "20190618T125142.417000",
"type": "moveInZone"
},
{
"alertState": "began",
"id": "310ce582-5f0d-4c27-a1d5-b14ccc5a877d",
"multiPhaseSyncId": "6d72973d-7188-4fa7-9bf9-e3ba6013f2e3",
"origin": "hosts/Server1/AppDataDetector.1/EventSupplier",
"rectangles": [
{
"bottom": "0.46943313598632813",
"index": "0",
"left": "0.14642228603363036",
"right": "0.23025640964508054",
"top": "0.027766456604003897"
}
],
"source": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"timestamp": "20190618T125142.200000",
"type": "moveInZone"
},
{
"alertState": "began",
"id": "aa193bbc-89e8-4204-8805-ac8c915b323c",
"multiPhaseSyncId": "807248bf-4cee-431e-a29f-18ee0ed911ce",

HTTP API  –  73


    Integration SDK

"origin": "hosts/Server1/AppDataDetector.1/EventSupplier",
"rectangles": [
{
"bottom": "0.36835212707519532",
"index": "0",
"left": "0.072501201629638662",
"right": "0.19335731506347656",
"top": "0.03212909698486327"
}
],
"source": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"timestamp": "20190618T125141.966000",
"type": "moveInZone"
},
{
"alertState": "ended",
"id": "5b15234d-2a7f-415f-af57-2ac1ce5aa75a",
"multiPhaseSyncId": "17fca913-f7a3-4f29-997f-d02a575d9fc4",
"origin": "hosts/Server1/AppDataDetector.1/EventSupplier",
"rectangles": [],
"source": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"timestamp": "20190618T125136.978000",
"type": "moveInZone"
},
{
"alertState": "ended",
"id": "48882f92-a809-424c-b7a7-55ac56b05061",
"multiPhaseSyncId": "8bb9edbe-4391-4c26-8c7a-7faf620a62eb",
"origin": "hosts/Server1/AppDataDetector.1/EventSupplier",
"rectangles": [],
"source": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"timestamp": "20190618T125136.661000",
"type": "moveInZone"
},
{
"alertState": "ended",
"id": "6e98f979-c4f4-4c78-bbf4-6fc268219d79",
"multiPhaseSyncId": "92534e2f-0f88-4698-a1a2-4e70d10cb00a",
"origin": "hosts/Server1/AppDataDetector.1/EventSupplier",
"rectangles": [],
"source": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"timestamp": "20190618T125136.477000",
"type": "moveInZone"
},
{
"alertState": "ended",
"id": "c9dff8bc-423b-414b-8dee-0a0b119a43df",
"multiPhaseSyncId": "c8785151-f344-4c21-88de-6c339139afdf",
"origin": "hosts/Server1/AppDataDetector.1/EventSupplier",
"rectangles": [],
"source": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"timestamp": "20190618T125135.843000",
"type": "moveInZone"
},
{
"alertState": "ended",

HTTP API  –  74


    Integration SDK

"id": "db1f1147-ed50-46ff-84b7-8f06676d8f8e",
"multiPhaseSyncId": "7eceb0b4-c04d-4e17-a405-3aff419fd94a",
"origin": "hosts/Server1/AppDataDetector.1/EventSupplier",
"rectangles": [],
"source": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"timestamp": "20190618T125135.677000",
"type": "moveInZone"
},
{
"alertState": "began",
"id": "f9ccceda-9e16-4832-9f1f-1270fd0be365",
"multiPhaseSyncId": "17fca913-f7a3-4f29-997f-d02a575d9fc4",
"origin": "hosts/Server1/AppDataDetector.1/EventSupplier",
"rectangles": [
{
"bottom": "0.30296741485595702",
"index": "0",
"left": "0.14849423646926879",
"right": "0.21262614011764525",
"top": "0.092105445861816404"
}
],
"source": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"timestamp": "20190618T125135.677000",
"type": "moveInZone"
},
{
"alertState": "began",
"id": "87ca4e1e-4a8c-433a-8b67-6e73f65fa0e2",
"multiPhaseSyncId": "7eceb0b4-c04d-4e17-a405-3aff419fd94a",
"origin": "hosts/Server1/AppDataDetector.1/EventSupplier",
"rectangles": [
{
"bottom": "0.22597263336181642",
"index": "0",
"left": "0.080717468261718744",
"right": "0.19577339172363281",
"top": "0.014194698333740235"
}
],
"source": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"timestamp": "20190618T125134.909000",
"type": "moveInZone"
}
],
"more": true
}

HTTP API  –  75


    Integration SDK

Attention!
By default, the request timeout is 10 seconds.
If the Server fails to return all events (the quantity is set in the limit parameter) in 10 seconds, the response will be as
follows:

{
"events": [],
"more": false
}

In this case, it is necessary to repeat the request and reduce the value of the limit parameter.

Note
The multiPhaseSyncId parameter will be in the response only for two-phase alarms with alertState parameter.
Field timestamp is not unique so it might be necessary to skip the previously received alarms starting from the search
interval.

When requesting the queue detection tool triggerings, the response includes an additional extra parameter that contains the
queue length estimate expressed by the minimum and maximum values.

{
"alertState": "happened",
"extra": [
{
"queueMax": "4"
},
{
"queueMin": "4"
}
],
"id": "b17129b2-1588-794b-94f6-d078a226efb2",
"origin": "hosts/Server1/AVDetector.4/EventSupplier",
"rectangles": [],
"source": "hosts/Server1/DeviceIpint.2/SourceEndpoint.video:0:0",
"timestamp": "20181206T075621.621000",
"type": "QueueDetected"
}
}

Available values of type parameter:

Detection tool type

Situation Analysis Detection Tools  -

Line crossing oneLine

Motion in area moveInZone

Stop in area stopInZone

HTTP API  –  76


    Integration SDK

Detection tool type

Appearance in area comeInZone

Disappearance in area outOfZone

Loitering longInZone

Multiple objects lostObject

Number Plate Recognition plateRecognized

Face detection faceAppeared

Visitors counter PeopleIn, PeopleOut

Queue detection QueueDetected

Fire detection FireDetected

Smoke detection SmokeDetected

Neural counting lotsObjects

Position change SceneChangeDetected

Image Noise Detection CameraBlindDetected

Loss of quality ImageDegradation

Blurred Image Detection BlurredDegradation

Compression Artifacts Detection CompressedDegradation

Motion detection MotionDetected

No signal NullAudio

Signal NoiseAudio

Noise SignalAudio

Pose detection -

Man down detection recumbent

Sitting person detection sitDown

Hands up detection handsUp

Active shooter detection activeShooter

Water level detection LevelOut

Handrail holding detection handRail

People counter lotsObjects

Close-standing people detection peopleDistance

People masking enabledMaskEvents

HTTP API  –  77


    Integration SDK

Note
If the non-included in the list value is received, then an embedded detection tool triggered.

Important!
Case sensitivity of detector triggering types is not guaranteed. For instance, 'ComeInZone', 'comeInZone' and
'COMEINZOne' values are to be considered as the same ones.

1.2.1.5.2 Get audit events from system log


GET http://IP-address:port/prefix/audit/{HOSTNAME}/{ENDTIME}/{BEGINTIME}

{HOSTNAME} - Server name.

Note
The ENDTIME and BEGINTIME syntax is described in Get MM archive contents section.

Attention!
If ENDTIME < BEGINTIME in the request, then the events in the response will be sorted by time in ascending order.
If ENDTIME > BEGINTIME, then the events will be sorted in descending order.

Pa Re Description
ra qu
me ir
tr ed

filt No List of events that can be represented both as a range separated with <-> and <:> and a simple code.
er
The list of event types:

HTTP API  –  78


    Integration SDK

Pa Re Description
ra qu
me ir
tr ed
1 - not shown in the event log
2 - violation of BOT of audit events (e.g., it is edged manually)
3 - violation of EOT of audit events (e.g., it is edged manually)
4 - some audit events are absent (e.g., they are deleted manually)
5 - table entry is changed
6 - inactive log (no events or log update mark)
/// External events
7 - user is added
8 - user is deleted
9 - user parameters are changed
10 - role is added
11 - role is deleted
12 - role parameters are changed
13 - user login
14 - user logout
15 - device is added
16 - device is deleted
17 - device parameters are changed
18 - detection is added
19 - detection is deleted
20 - detection parameters are changed
21 - archive is added
22 - archive is deleted
23 - archive parameters are changed
24 - detection rule (macro) is created
25 - detection rule (macro) is deleted
26 - detection rule (macro) parameters are changed
27 - alarm is triggered
28 - zone is armed
29 - zone is disarmed
30 - export from archive is performed
31 - notification sender (sound-, email-, sms-) is added
32 - notification sender is deleted
33 - notification sender parameters are changed
34 - general parameter is changed
35 - recording to the archive parameters are changed
36 - agent of export is added
37 - agent of export is deleted
38 - agent of export parameters are changed
39 - macro is created
40 - macro is deleted
41 - macro parameters are changed
42 - alarm is processed by user
43 - dangerous alarm
44 - suspicious alarm
45 - false alarm
46 - skipped alarm
47 - Server is included into Axxon-domain
48 - Server is excluded from Axxon-domain
49 - view archive
50 - view camera
51 - view layout
52 - forensic search in the archive
53 - area search by faces in the archive
54 - area search by license plates in the archive
55 - system log export
56 - LDAP folder is added
57 - LDAP folder is deleted
58 - LDAP folder parameters are changed
59 - layout created
60 - layout removed
61 - layout changed
62 - user login failed
63 - PTZ control
64 - archive comment added
65 - archive comment changed
66 - license expired
67 - logout due to user inaction
68 - client blocked due to user inaction
69 - client unlocked by user
70 - client blocked by user
71 - unexpected client shut-down

HTTP API  –  79


    Integration SDK

Sample request:
GET http://127.0.0.1:80/audit/SERVER1/past/future?filter=17-20,6,1:4
Sample response:

{
"events": [
{
"data": {
"component": "Camera3",
"componentType": "camera",
"device": "Camera3",
"host": "SERVER1",
"property": "vstream-virtual/folder",
"setting": "Directory",
"value": "D:/Movies/Spirit"
},
"eventType": 17,
"timestamp": "20161205T120410.698000"
},
{
"data": {
"detector": "Face detection",
"device": "Camera1",
"host": "SERVER1"
},
"eventType": 18,
"timestamp": "20161205T120459.319000"
}
]
}

1.2.1.5.3 Get list of alarms


GET http://IP-Address:port/prefix/archive/events/alerts/{ENDTIME}/{BEGINTIME} - get alarms from all Axxon domain Servers.

Note
The ENDTIME and BEGINTIME syntax is described in Get archive contents section.

Attention!
If ENDTIME < BEGINTIME in the request, then the events in the response will be sorted by time in ascending order.
If ENDTIME > BEGINTIME, then the events will be sorted in descending order.

GET http://IP-Address:port/prefix/archive/events/alerts/{HOSTNAME}/{ENDTIME}/{BEGINTIME} - get alarms from a certain Server.

{HOSTNAME} - Server name (see Get Server list).

GET http://IP-Address:port/prefix/archive/events/alerts/{VIDEOSOURCEID}/{ENDTIME}/{BEGINTIME} - get alarms from a certain


camera.

HTTP API  –  80


    Integration SDK

{VIDEOSOURCEID} - three-component source endpoint ID (see Get list of video sources (cameras)). For instance,
"SERVER1/DeviceIpint.3/SourceEndpoint.video:0:0".

Para Requ Description


mete ired
r

limit No The limit of alarms in the response. If not specified, it is equal to 100 by default.

offset No The results offset by the specified number. For example, if a query with offset=0 returned 100 results, then in order to get the next
results, it is necessary to run a query with offset=100. If the second query returned 250 results, then in order to get the next results, it is
necessary to run a query with offset=350, etc.

limit_ No Is available starting with Axxon Next 4.4.1.9150.


to_arc
hive If limit_to_archive=1, then the response will return the events only from the accessible part of the archive (see Configuring access
restrictions to older footage).

archiv No Is available starting with Axxon Next 4.4.1.9150.


e
The name of the archive from the request to receive the list of archives (see Get archive contents).

Sample request:
GET http://127.0.0.1:80/archive/events/alerts/Server1/past/future?limit=50&offset=0
Sample response:

HTTP API  –  81


    Integration SDK

{
"events": [
{
"type": "alert",
"id": "2bb7f765-eb57-604d-a38c-d1d26d22e4d9",
"raisedAt": "20181219T151437.312808",
"zone": "hosts/DESKTOP-O0P0IBQ/DeviceIpint.1/SourceEndpoint.video:0:0",
"reasons": [
"ruleAlert",
"videoDetector"
],
"initiator": "faceAppeared",
"reaction": {
"user": "",
"reactedAt": "20181219T151937.342036",
"severity": "unclassified"
},
"detectorName": "1.Face detection",
"rectangles": [
{
"index": "47",
"left": "0,85343749999999996",
"top": "0,37958333333333333",
"right": "1",
"bottom": "0,58083333333333331"
}
]
},
{
"type": "alert",
"id": "03c0d49f-5475-684e-a622-2aaeac303508",
"raisedAt": "20181219T151005.933417",
"zone": "hosts/DESKTOP-O0P0IBQ/DeviceIpint.1/SourceEndpoint.video:0:0",
"reasons": [
"ruleAlert",
"videoDetector"
],
"initiator": "faceAppeared",
"reaction": {
"user": "root",
"reactedAt": "20181219T151013.109256",
"severity": "alarm"
},
"detectorName": "1.Face detection",
"rectangles": [
{
"index": "9",
"left": "0,83406249999999993",
"top": "0,36416666666666664",
"right": "1",
"bottom": "0,58583333333333332"
}
]
},
{
"type": "alert",

HTTP API  –  82


    Integration SDK

"id": "6d396f93-4acf-c54b-a26e-c1ab178bdb06",
"raisedAt": "20181219T150911.101417",
"zone": "hosts/DESKTOP-O0P0IBQ/DeviceIpint.1/SourceEndpoint.video:0:0",
"reasons": [
"userAlert"
],
"initiator": "root",
"reaction": {
"user": "root",
"reactedAt": "20181219T150916.264631",
"severity": "alarm"
},
"detectorName": "",
"rectangles": []
}
],
"more": false
}

Parameter Description

raisedAt Field raisedAt is not unique so it might be necessary to skip the previously received alarms starting from
the search interval.

reasons Possible values of the reasons array: armed, disarmed, userAlert, ruleAlert, videoDetector, audioDetector,
ray.

severity Possible values of the severity field: unclassified, false, notice, warning, alarm.

initiator Possible values of the initiator field:

1. Name of the user initiated the alarm.


2. Id of the macro (see Using macros) if the alarm is initiated by macro that was
started NOT by the detector (even if this macro has already been removed from
the configuration).
3. Type of detector that triggered macro that initiated the alarm (see Get list of
detection tools events).

1.2.1.6 Export

On page:

• Export start
• Get export status
• Download file
• Export completion

1.2.1.6.1 Export start


Export is initiated using one of the following POST requests:
POST http://IP-Address:port/prefix/export/archive/{VIDEOSOURCEID}/{BEGINTIME}/{ENDTIME} - archive export.
POST http://IP-Address:port/prefix/export/live/{VIDEOSOURCEID}/{BEGINTIME}/{ENDTIME} - live video export.

HTTP API  –  83


    Integration SDK

{VIDEOSOURCEID} - three-component source endpoint ID (see Get list of video sources (cameras)).  For instance,
"SERVER1/DeviceIpint.3/SourceEndpoint.video:0:0".

Note
BEGINTIME and ENDTIME set time in the YYYYMMDDTHHMMSS format in the UTC+0 time zone. If BEGINTIME is greater
than ENDTIME, then the values will swap. BEGINTIME must be equal to ENDTIME for snapshot export.  
The ENDTIME and BEGINTIME syntax is described in Get archive contents section.

Pa Re Description
ra qu
me ir
te ed
r

wai No Wait timeout in milliseconds required for a frame to arrive. The default value is 10. If the parameter value is less than the reference frames
tti interval, then the export will not be performed.
me
out It is recommended to set the value not less than 30.

arc No Name of the archive in the hosts/SERVER1/MultimediaStorage.AliceBlue/MultimediaStorage format (see Get archive contents).
hiv
e

BEGINTIME and ENDTIME set time in the YYYYMMDDTHHMMSS format. If BEGINTIME is greater than ENDTIME, then the values
will swap. BEGINTIME must be equal to ENDTIME for snapshot export.  
Sample request:
POST http://127.0.0.1:80/export/archive/Server1/DeviceIpint.1/SourceEndpoint.video:
0:0/20200415T085456.908/20200415T085501.908?waittimeout=30
Supported parameters that are sent in the body of initial POST request:

Parame Format Description Example


ter

format String Mandatory parameter. Available values are mp4, mkv, avi, exe, jpg and pdf. It sets the format
of output export container. 

maxfiles Number Maximum export file size (in bytes). A new file will be created when the size limit is exceeded. "maxfilesize":
ize Export results in the collection of files. Default value is 0 (as a result, a single file).
1e+6
"maxfilesize":
1000000

vc, ac Number A compression quality level for video and audio respectively. Allowed values are from 0 to 6 (6
means the worst). Default value is 0

freq  Number Frame rate of the output stream. Default value is 0. Available values:

1. 0 – original
2. 1 – half of original
3. 2 - quarter of original
4. 3 – one-eighth of original

HTTP API  –  84


    Integration SDK

Parame Format Description Example


ter

tsformat String A time stamp format template. Any string can be generated on the basis of http:// "tsformat": "%B %Y",
www.boost.org/doc/libs/1_55_0/doc/html/date_time/date_time_io.html. Default value is
%Y-%b-%d %H:%M:%S.
Attention! The Server does not check the format of the input string.

cropare Area A snapshot area for export (default value is [[0, 0], [1,1]] – the entire snapshot).
a
Image example:
"croparea": [
[

0.3,

0.3
],
[

0.8,

0.8
]
]

HTTP API  –  85


    Integration SDK

Parame Format Description Example


ter

masksp Area A snapshot area for masking, set in coordinates. By default a snapshot is not masked.
ace
The area is specified by at least 3 nodal points + 1 terminal point (coincides with one of the
nodal points). The reference point is the upper left corner. You can specify multiple polygons. "maskspace":
Image example: [
[
[

0.2,

0.2
],
[

0.3,

0.7
],
[

0.5,

0.5
],
[

0.2,

0.2
]
]
]

color String Text color of a comment and a time stamp. It is set in the #FFFFFF web format. "color": "#e31e1e",

comme String A comment.


nt 

Parameters relevant to PDF export format only:

snapsho Area Snapshot location on the page.


tplace

comme Area Comment location on the page.


ntplace

tsplace Area Time stamp location on the page.

layout Number Page layout. Available values are 0 (portrait), 1 (landscape).

Sample JSON:

HTTP API  –  86


    Integration SDK

{
"format": "mp4",
"vc": 4,
"comment": "сomment"
}

Sample response:

HTTP/1.1 202 Accepted


Connection: Close
Location: /export/3dc15b75-6463-4eb1-ab2d-0eb0a8f54bd3
Cache-Control: no-cache

Possible error codes:

Er Description
ro
r
co
de

400 Incorrect request.

500 Server internal error.

1.2.1.6.2 Get export status


GET http://IP-Address:port/export/{id}/status

 id is the value from the Location field (here 3dc15b75-6463-4eb1-ab2d-0eb0a8f54bd3)

Sample request:
GET http://127.0.0.1:80/export/3dc15b75-6463-4eb1-ab2d-0eb0a8f54bd3/status
Sample response:

{
"id": "38e3e286-c07c-490f-a452-e4b541b958c4",
"state": 2,
"progress": 1.000000000e+00,
"error": "",
"files": [
"Server1_DeviceIpint.10[20190903T050000-20190903T050100].mp4"
],
"filesFriendly": [
"Server1_10.RHCP[20190903T050000-20190903T050100].mp4"
]
}

HTTP API  –  87


    Integration SDK

P Description
a
r
a
m
e
t
e
r

s Current state of export. Available values:


t 1 – export is performed;
a 2 – export is completed;
t 3 – export error;
e 4 – not enough space to complete the operation.

p Progress of export session in the range from 0 to 1.


r
o
g
r
e
s
s

e Description of error (if any).


rr
o
r

fi List of files created as the export result.


le
s

1.2.1.6.3 Download file


GET http://IP- Address:port/prefix/export/{id}/file

 id is the value from the Location field (here 3dc15b75-6463-4eb1-ab2d-0eb0a8f54bd3)

Pa Re Description
ra qu
me ir
te ed
r

na Yes Name of file from the files field.


me

Sample request:
GET http://127.0.0.1:80/export/3dc15b75-6463-4eb1-ab2d-0eb0a8f54bd3/file?name=Server1_DeviceIpint.
10[20190903T050000-20190903T050100].mp4

Note
On the Server, the exported file is saved to the folder C:\ProgramData\AxxonSoft\AxxonNext\Export\{ID}

1.2.1.6.4 Export completion


This request deletes the created file on the Server.
DELETE http://IP-Address:port/prefix/export/{id}

HTTP API  –  88


    Integration SDK

 id is the value from the Location field (here 3dc15b75-6463-4eb1-ab2d-0eb0a8f54bd3)

Sample request:
DELETE http://127.0.0.1:80/export/3dc15b75-6463-4eb1-ab2d-0eb0a8f54bd3

1.2.1.7 Macros

On page:

• Getting the list of macros


• Executing macro

1.2.1.7.1 Getting the list of macros


GET http://IP-Address:port/prefix/macro/list/

Pa Re Description
ra qu
me ir
te ed
r

excl No Getting the list of macros without Automatic Rules.


ude
_au Axxon Next 4.4.1.9131 and higher versions.
to

Sample request:
GET http://127.0.0.1:80/macro/list/?exclude_auto
Sample response:

{
"macroCommands" : [
{
"id" : "04eb71b0-e2e0-445e-ae7a-a036951fb595",
"name" : "MacroName1"
},
{
"id" : "3fd3bfb0-3a6e-467a-8ff2-88f7b165cf5b",
"name" : "MacroName2"
},
{
"id" : "941f88d1-b512-4189-84a6-7d274892dd95",
"name" : "MacroName3"
}
]
}

1.2.1.7.2 Executing macro


GET http://IP-Address:port/prefix/macro/execute/{id}

HTTP API  –  89


    Integration SDK

id is an id form the list of macros. 

Possiblе error codes when executing macros:

Err Description
or
cod
e

400 Incorrect request.

500 Server internal error.

404 Incorrect id (only for execute macro).

1.2.1.8 Switch between virtual IP-device states (HttpListener)


POST http:/IP-address:port/device/di/{id}

{id} - sensor id (0, 1, 2, 3).

Note
port - HttpListener port.

JSON body:

{"state": "closed"}

where state - opened or closed.


Sample request:

http://127.0.0.1:8080/device/di/0
{"state": "opened"}

1.2.1.9 Get current web-client user


GET http://IP-adress:port/prefix/currentuser
Sample response:

{
"currentuser": "root"
}

1.2.1.10 gRPC API method calls


POST http://IP-address:port/prefix/grpc
The request body must contain the gRPC API method (see gRPC API).
The gRPC API can also be proxied via the web server. The requests are described in the proto-files (see gRPC API).

HTTP API  –  90


    Integration SDK

1.2.1.11 Get camera events using WebSocket

Axxon Next 4.3.0.8031 and higher versions.

To get the camera events using WebSocket, do the following:


1. Connect to ws://[user_name]:[password]@[IP-address]:[port]/[prefix]/events.
2. Send a JSON command to subscribe on events generated by the specified cameras (see Get list of video sources
(cameras)). This subscription allows you to receive all the events shown in the table below.

{
"include":
["hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0", "hosts/Server1/DeviceIpint.6/
SourceEndpoint.video:0:0"],
"exclude":[]
}

include - subscribe to the events receiving;


exclude - disable the events receiving.
The response will contain the following JSON:

{
objecs: [
{type: "devicestatechanged", name: "hosts/Server1/DeviceIpint.1", state: "signal restored"}
]
}

List of event types and camera states:

Event type Description States

devicestatechanged Camera state signal restored - connected, signal restored


signal lost - signal lost

alert Alarm No states

alert_state Alarm state processing - the alarm is being processed


closed - alarm processed
reaction - alarm initiated

detector_event Detection tool triggering No states

camera_record_state Archive record state on - the camera is recording to the archive


off - the camera is not linked to the archive
gray - the camera is linked to the archive, but is not recording

Note
If the camera is disabled in Axxon Next, no events are received from it using WebSocket, including the signal lost event.

Example of message:

HTTP API  –  91


    Integration SDK

objects: [{name: "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0", state: "signal


restored",…},…]
0: {name: "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0", state: "signal restored",…}
name: "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0"
state: "signal restored"
type: "devicestatechanged"

1.2.2 Client HTTP API

1.2.2.1 Working with layouts and videowalls

1.2.2.1.1 Sequence of actions


Before one starts working with layouts and videowalls HTTP API, run this command in the command prompt:

netsh http add urlacl url=http://IP-Adress:8888/ user=DOMAIN\username

Note
On Linux, no additional commands are required.

where DOMAIN\username relates to Windows (whoami command in the command prompt). Port 8888 is to be vacant, antivirus
and/or firewall are to be disabled.

Attention!
All requests for working with layouts and videowalls are performed on the Client that is to be run as administrator.
The Client's IP-Adress is to be specified in the requests.

Attention!
If there are any errors, run the command prompt as administrator and then run the command once again.

When the command is successfully executed, one can make requests listed below.

1.2.2.1.2 Getting the list of layouts


GET http://IP-adress:8888/GetLayouts -  getting available layouts for current logged user.
Sample response:

HTTP API  –  92


    Integration SDK

{
"Description": "",
"Status": "OK",
"LayoutInfo": [
{
"Id": "102",
"Name": "Layout name 2"
},
{
"Id": "103",
"Name": "Layout name 3"
}
]
}

Here is an example of an error message:

 {
\"result\":\"no layouts\"
}

Note
An error can occur while requesting the list of Server layouts if the UAC is enabled on the Server.  Disable this function in
order to eliminate the error.

1.2.2.1.3 Switching the layout on the screen


GET http://IP address:8888/SwitchLayout

Pa Re Description
ra qu
me ir
tr ed

lay Yes Layout id (see Getting the list of layouts).


out
Id

dis Yes Monitor id (see Getting the list of displays).


pla
yId

Sample request:
GET http://127.0.0.1:8888/SwitchLayout?layoutId=102&displayId=\\.\DISPLAY1
Sample response:

{
"Description": "",
"Status": "OK"
}

Here is an example of an error message:

HTTP API  –  93


    Integration SDK

{
\"result\":\"error\"
}

Note
An error can occur if a layout with non-existent ID is specified.

1.2.2.1.4 Getting the list of cameras displayed on the layout


GET http://IP-address:8888/GetCameras

Pa Re Description
ra qu
me ir
tr ed

lay Yes Layout id (see Getting the list of layouts).


out
Id If the layout with specified id will not be found, then the query will return the list of cameras of the current layout for the specified display.

dis Yes Monitor id (see Getting the list of displays).


pla
yId

Sample request:
GET http://127.0.0.1:8888/GetCameras?layoutId=102&displayId=\\.\DISPLAY1
Sample response:

{
"Description": "",
"Status": "OK",
"CameraInfo": [
{
"DisplayName": "1.Camera",
"Id": "1",
"Name": "host/HOSTNAME/DeviceIpint1/SourceEndPoint.video:0:0"
},
{
"DisplayName": "2.Camera",
"Id": "2",
"Name": " host/HOSTNAME/DeviceIpint2/SourceEndPoint.video:0:0"
}
]
}

HTTP API  –  94


    Integration SDK

1.2.2.1.5 Adding and removing cameras

On page:

• Removing a camera from the


current layout
• Removing all cameras from the
current layout
• Adding a camera to the current
layout

1.2.2.1.5.1 Removing a camera from the current layout


GET http://IP-address:8888/RemoveCamera

Pa Re Description
ra qu
me ir
tr ed

dis Yes Monitor id (see Getting the list of displays).


pla
yId

ca Yes Camera name from the response to Getting the list of cameras displayed on the layout request.
me
ra
Na
me

Sample request:
GET http://127.0.0.1:8888/RemoveCamera?displayId=\\.\DISPLAY1&cameraName=host/HOSTNAME/DeviceIpint1/
SourceEndPoint.video:0:0
Sample responce:

{
"Description": "",
"Status": "OK"
}

Here is an example of an error message:

{
"Description": "Error description",
"Status": "ERROR"
}

1.2.2.1.5.2 Removing all cameras from the current layout


GET http://IP-address:8888/RemoveAllCameras

HTTP API  –  95


    Integration SDK

Pa Re Description
ra qu
me ir
tr ed

dis Yes Monitor id (see Getting the list of displays).


pla
yId

Sample request:
GET http://127.0.0.1:8888/RemoveAllCameras?displayId=\\.\DISPLAY1

1.2.2.1.5.3 Adding a camera to the current layout


GET http://IP-address:8888/AddCamera

Pa Re Description
ra qu
me ir
tr ed

dis Yes Monitor id (see Getting the list of displays).


pla
yId

ca Yes Camera name from the response to Getting the list of cameras displayed on the layout request.
me
ra
Na
me

Sample request:
GET http://127.0.0.1:8888/AddCamera?displayId=\\.\DISPLAY1&cameraName=host/HOSTNAME/DeviceIpint1/
SourceEndPoint.video:0:0

1.2.2.1.6 Getting the list of displays


GET http://IP-address:8888/GetDisplays - getting available displays for current logged user.
Sample response:

{
"Description": "",
"Status": "OK",
"DisplayInfo": [
{
"Id": "\\\\.\\DISPLAY1",
"IsMainForm": true
},
{
"Id": "\\\\.\\DISPLAY2",
"IsMainForm": false
}
]
}

HTTP API  –  96


    Integration SDK

Pa Description
ra
me
tr

id Display ID.

IsM The 'true' value corresponds to the main display.


ain
For Attention! In other requests, use the monitor Id in the following format: \\.\DISPLAY1
m

Here is an example of an error message:

{
"{\"result\":\"no displays\"}"
}

1.2.2.1.7 Selecting active display


GET http://IP-address:8888/SelectDisplay

Pa Re Description
ra qu
me ir
tr ed

dis Yes Monitor id (see Getting the list of displays).


pla
yId

Sample request:
GET http://127.0.0.1:8888/SelectDisplay?displayId=\\.\DISPLAY1
Sample responce:

{
"Description": "",
"Status": "OK"
}

Here is an example of an error message:

{
\"result\":\"error\"
}

1.2.2.1.8 Switching camera to archive mode


GET http://IP address:8888/GotoArchive

Pa Re Description
ra qu
me ir
tr ed

dis Yes Monitor id (see Getting the list of displays).


pla
yId

HTTP API  –  97


    Integration SDK

Pa Re Description
ra qu
me ir
tr ed

ca Yes Camera name from the response to Getting the list of cameras displayed on the layout request.
me
ra
Na
me

tim Yes Time in ISO format.


est
am
p

Sample request:
GET http://127.0.0.1:8888/GotoArchive?displayId=\\.\DISPLAY2&cameraName=hosts/SERVER1/DeviceIpint.1/
SourceEndpoint.video:0:0&timestamp=2017-04-07T00:00:00.000

Note
Use the following query to get the list of groups:
GET http://IP-address:8888/GetGroups.
Sample responce:

Id "4308f2e2-e57c-4cd0-8a4f-826e8b16d39c"
Name "Default"

1.2.2.1.9 Switching to layout with camera in forensic search mode


GET http://IP-address:8888/SearchArchive

Par Re Description
ame qu
tr ir
ed

displ Ye Monitor id (see Getting the list of displays).


ayId s

cam Ye Camera name from the response to Getting the list of cameras displayed on the layout request.
eraN s
ame

time Ye Time in ISO format.


stam s
p

Sample request:
GET http://127.0.0.1:8888/GoToArchive?displayId=\\.\DISPLAY2&cameraName=hosts/SERVER1/DeviceIpint.1/
SourceEndpoint.video:0:0×tamp=2017-04-07T00:00:00.000

1.2.2.1.10 Switching to layout with camera in immersion mode


GET http://IP-address:8888/GotoImmersion

HTTP API  –  98


    Integration SDK

Pa Re Description
ra qu
me ir
tr ed

dis Yes Monitor id (see Getting the list of displays).


pla
yId

ca Yes Camera name from the response to Getting the list of cameras displayed on the layout request.
me
ra
Na
me

Sample request:
GET http://127.0.0.1:8888/GotoImmersion?displayId=\\.\DISPLAY1&cameraName=hosts/SERVER1/DeviceIpint.1/
SourceEndpoint.video:0:0

1.2.2.1.11 Switching to saved forensic search results


GET http://IP-address:8888/SearchArchive

Par Re Description
ame qu
tr ir
ed

displ Ye Monitor id (see Getting the list of displays).


ayId s

cam Ye Camera name from the response to Getting the list of cameras displayed on the layout request.
eraN s
ame

quer Ye Name of the saved search query (see Saving search queries).
y s

Sample request:
GET http://127.0.0.1:8888/SearchArchive?displayId=\\.\DISPLAY1&cameraName=host/HOSTNAME/DeviceIpint1/
SourceEndPoint.video:0:0&query=query1

HTTP API  –  99


    Integration SDK

2 gRPC API

2.1 gRPC API general information


The gRPC protocol (https://grpc.io/) is used to support the transport layer between the Axxon Next services. 
The gRPC API allows to simplify the large-scale systems configuration.
The gRPC protocol uses special proto-files to generate the code base.
The proto-files contain some strict syntax that defines the interface for the various program modules interaction.

Attention!
To obtain the Axxon Next proto-files and their use-cases, contact the technical support service.

You can call gRPC API methods using a POST request (see gRPC API method calls).

2.2 Roles and Users


Configuring user permissions
Manage users using gRPC API methods

Roles and users operation is described by three proto-files.


1. SecuriteService.proto contains the objects definition, their properties and methods.
2. GlobalPermissioins.proto contains the properties of the global access parameters.
3. ObjectsPermissioins.proto contains the parameters properties to access the specific objects.
Methods in SecuriteService.proto:
• message ListConfigRequest - request the configuration.
• message ChangeConfigRequest - create/edit/delete the configuration.
• message ListGlobalPermissionsRequest - request the global access parameters.
• message SetGlobalPermissionsRequest - set the global access parameters.
• message ListObjectPermissionsRequest - request the parameters to access the specific objects.
• message SetObjectPermissionsRequest - set the parameters to access the specific objects.
Properties in SecuriteService.proto:
Expand...
The Role object (message Role):

Property Description

index GUID

name Role name

comment Comment

timezone_id The ID of the role operation time zone

The simultaneous connections limit (message ConnectionRestrictions):

Property Description

web_count Maximum number of web app connections

gRPC API  –  100


    Integration SDK

Property Description

mobile_count Maximum number of mobile app connections

The User object (message User):

Property Description

index GUID

login User name


name

comment Comment

date_created Date of creation

date_expires Sertificate expiration date

enabled Is activated

ldap_server_id LDAP Server ID

ldap_domain_name LDAP Server Name

ConnectionRestrictions restrictions  A set of message ConnectionRestrictions properties (see above)

The user and role connection (message UserAssignment):

Property Description

user_id User id

role_id Role id

The LDAP object (message LDAPServer):

Property Description

index GUID

server_name Server name or IP adress

friendly_name Name

port Port

base_dn Base DN

login User

password Password

use_ssl Use secure connection (SSL)

search_filter Search filter

login_attribute Login attribute

dn_attribute DN attribute

Properties in GlobalPermissioins.proto:
Expand...

gRPC API  –  101


    Integration SDK

The PTZ control priority (enum ETelemetryPriority):

Property Description

TELEMETRY_PRIORITY_UNSPECIFIED The PTZ control priority is not


specified

TELEMETRY_PRIORITY_NO_ACCESS No access

TELEMETRY_PRIORITY_LOWEST Minimum level

TELEMETRY_PRIORITY_LOW Low level

TELEMETRY_PRIORITY_NORMAL Medium level

TELEMETRY_PRIORITY_HIGH High level

TELEMETRY_PRIORITY_HIGHEST Maximum level

The map access (enum EMapAccess):

Property Description

MAP_ACCESS_UNSPECIFIED The map access is not specified

MAP_ACCESS_FORBID The map access is forbidden

MAP_ACCESS_VIEW_ONLY You can only view maps

MAP_ACCESS_VIEW_SCALE You can move and scale maps

MAP_ACCESS_FULL All options available

The features access (enum EFeatureAccess):

Attention!
In Axxon Next versions below 4.4.0.9338, the property descriptions contain FUTURE instead of FEATURE.
For example, FUTURE_ACCESS_FORBID_ALL.

Property Description

FEATURE_ACCESS_FORBID_ALL All features are forbidden

FEATURE_ACCESS_DEVICES_SETUP Device settings (see Hardware configuration)

FEATURE_ACCESS_ARCHIVES_SETUP Acrhive settings (see Configuring Archives)

FEATURE_ACCESS_DETECTORS_SETUP Detection settings (see Configuring detection tools)

FEATURE_ACCESS_USERS_RIGHTS_SETUP User permission settings (see Configuring user permissions)

FEATURE_ACCESS_CHANGING_LAYOUTS Editing layouts (see Configuring Layouts)

FEATURE_ACCESS_EXPORT Exporting snapshots and video recordings (see Exporting Frames and Video Recordings)

FEATURE_ACCESS_LAYOUTS_TAB Access to Layouts tab (see Layouts Management)

FEATURE_ACCESS_SETTINGS_SETUP Options settings (see System preferences)

gRPC API  –  102


    Integration SDK

Property Description

FEATURE_ACCESS_MINMAX_BUTTON_ALLOWED Minimizing the Client to the system tray (see Interface of the Axxon Next Software
Package)

FEATURE_ACCESS_SYSTEM_JOURNAL Viewing the system log (see The System Log)

FEATURE_ACCESS_DOMAIN_MANAGING_OPS Managing an Axxon domain  (see Axxon Domain operations)

FEATURE_ACCESS_ADD_CAMERA_TO_LAYOUT_IN_MONIT Adding a camera to a layout in live video mode (see Adding cameras to cells)
ORING

FEATURE_ACCESS_SEARCH Archive search (see Video surveillance in Archive Search mode)

FEATURE_ACCESS_EDIT_PTZ_PRESETS Adding and editing presets for PTZ cameras  (see Control Using the Presets List)

FEATURE_ACCESS_PROGRAMMING_SETUP Programming setup (see Configuring Macros)

FEATURE_ACCESS_WEB_UI_LOGIN Access to the Web server  (see Working with Axxon Next Through the Web Client)

FEATURE_ACCESS_COMMENT User comments for recorded video  (see Operator comments)

FEATURE_ACCESS_ALLOW_BUTTON_MENU_CAMERA Context menu of a video camera in a viewing tile (see Viewing Tile Context Menu)

FEATURE_ACCESS_ALLOW_SHOW_TITLES Displaying captions (see Viewing titles from POS terminals)

FEATURE_ACCESS_SHOW_ERROR_MESSAGES Show error messages (see Event Control)

Alarms Management (enum EAlertAccess):

Property Description

ALLERT_ACCESS_UNSPECIFIED The alarms access is not specified

ALLERT_ACCESS_FORBID Users have no access to alarm videos

ALLERT_ACCESS_VIEW_ONLY Users can view alarm videos but they can't evaluate alarms

ALLERT_ACCESS_FULL Users can view alarm videos and evaluate alarms

Unlimited access to all features (enum EUnrestrictedAccess):

Property Description

UNRESTRICTED_ACCESS_UNSPECIFIED Unlimited access is not specified

UNRESTRICTED_ACCESS_NO Unlimited access is forbidden

UNRESTRICTED_ACCESS_YES Unlimited access to all features

Properties in ObjectsPermissioins.proto:
Expand...
The video camera access (enum ECameraAccess):

Property Description

CAMERA_ACCESS_UNSPECIFIED The video camera access is not specified

CAMERA_ACCESS_FORBID You cannot access the device.

CAMERA_ACCESS_MONITORING_ON_PROTECTION You can view video from the camera only when the camera is armed.

gRPC API  –  103


    Integration SDK

Property Description

CAMERA_ACCESS_MONITORING You can live video from the camera. Other functions and device configuration are not available.

CAMERA_ACCESS_ARCHIVE You can view live and recorded video from the camera. You cannot arm/disarm/configure the
camera.

CAMERA_ACCESS_MONITORING_ARCHIVE_MANAGE All functions available. You cannot configure the device.

CAMERA_ACCESS_FULL All functions and settings available.

The microphone access (enum EMicrophoneAccess):

Property Description

MICROPHONE_ACCESS_UNSPECIFI The microphone access is not specified


ED

MICROPHONE_ACCESS_FORBID The user is unable to listen to live sound from the video camera. The user is unable to listen to sound recordings
from the archive.

MICROPHONE_ACCESS_MONITORI The user is able to listen to live sound from the video camera (the microphone must be turned on). The user is
NG unable to listen to sound recordings from the archive.

MICROPHONE_ACCESS_FULL All functions are accessible

The PTZ access (enum ETelemetryAccess):

Property Description

TELEMETRY_ACCESS_UNSPECIFIED The PTZ access is not specified

TELEMETRY_ACCESS_FORBID The user cannot control pan/tilt/zoom

TELEMETRY_ACCESS_CONTROL The user can control pan/tilt/zoom

The archive access (enum EArchiveAccess):

Property Description

ARCHIVE_ACCESS_UNSPECIFIED The archive access is not specified

ARCHIVE_ACCESS_FORBID Access is not provided to this archive

ARCHIVE_ACCESS_FULL Archive is available for all functions

The video walls access (EVideowallAccess):

Property Description

VIDEOWALL_ACCESS_UNSPECIFIED The video walls access is not specified

VIDEOWALL_ACCESS_FORBID The access is forbidden

VIDEOWALL_ACCESS_FULL The access is granted

2.3 Recognition lists


The configuration of recognition lists and data is described in the RealtimeRecognizer.proto file.
The following 4 methods are used:
1. ChangeLists
2. ChangeItems

gRPC API  –  104


    Integration SDK

3. GetLists
4. GetItems

2.3.1 ChangeLists method


This method is used to add, edit and delete lists.
Input data
As an argument, the ChangeListsRequest structure is passed, in which 3 input data vectors are filled:
1. added_lists - a vector of lists to add;
2. changed_lists - a vector of lists to edit;
3. removed_list_ids - a vector of list IDs to delete.
The lists themselves are a data structure with fields:
1. id - a list id;
2. name - a list name;
3. description - comments to a list;
4. score - minimum recognition level, the default is 0.85;
5. item_ids - a list of image IDs, which are used for recognition;
6. type - recognition type, ELT_Face - for faces, ELT_LPR - for license plate numbers, ELT_Food - for food (dishes).
Outputs
In response to the method, you will receive a summary of list IDs that could not be added, edited or deleted.

2.3.2 ChangeItems method
This method is used to add, edit and delete the source data for the recognizer.
Input data
As an argument, the ChangeItemsRequest structure is passed, in which 3 input data vectors are filled:
1. added_items - a data vector to add;
2. changed_items - a data vector to edit;
3. removed_item_ids - a vector of data IDs to delete. 
The data are a data structure with fields:
1. id - data id;
2. name - data name;
3. description - comments to data;
4. type - data type,  DT_ImageFace - for faces, DT_Plate - for license plate numbers, DT_ImagesFood - for food (dishes);
5. data - the data themself, depending on the type. For faces it is a single image, for food it is an array of images, for license
plate numbers it is a number in the form of text.
6. data_vectors - vector of images (not specified).
The image has 2 fields: the id of the image and the image itself.
If you fill in only the id of the image during the editing, i.e. when the changed_items vector is formed, this will mean that the
image with this id should be removed from the configuration.
Outputs
In response to the method, you will receive a summary of data IDs and image IDs that could not be added, edited or deleted.

2.3.3 GetLists method
This method displays the information about the lists in the configuration.
Input data
As an argument, the GetListsRequest structure is passed, in which 2 fields are filled:

gRPC API  –  105


    Integration SDK

1. list_ids - an array of list IDs, which should be received;


2. type - the type of lists: ELT_Face, ELT_LPR, ELT_Food.
These fields work as filters and can be passed together or separately.
Outputs
In response to the method, you will receive an array of lists.

2.3.4 GetItems method
This method displays the information about the data in the configuration.
Input data
As an argument, the GetItemsRequest structure is passed, in which 3 fields are filled:
1. item_ids - an array of data IDs, which should be received;
2. load_images - the flag indicating the need to display an image with the response;
3. load_vectors - the flag indicating the need to display the images vector.
Outputs
In response to the method, you will receive an array of data.

2.4 Axxon Next configuration settings


Manage devices using gRPC API methods (ConfigurationService)

Axxon Next configuration settings are described in the ConfigurationService.proto proto file.
There are 2 methods used:
1. Changeconfig
2. ListConfig

2.4.1 ChangeConfig method


The ChangeConfig method allows to create, edit and delete any system objects.
Hereinafter, any system object or element will be called a unit.
Input data
1. added - an array of units that should be added
2. changed - an array of units that should be changed
3. remove - an array of units that should be removed.
Unit structure
The type field determines what a unit is.
A unit can contain subunits (the units field). For example, a VideoChannel.0 unit may have a child unit Streaming.0.
Each unit has a uid field - it is a unit identifier, which consists of all the "parents" of the unit, separated by the "/" symbol. For
example, the uid field of the Streaming.0 unit will be as follows: hosts/Node1/DeviceIpint.1/VideoChannel.0/Streaming.0.
Where
• uid starts with "hosts",
• Node1 is the node name,
• DeviceIpint.1 is the device name,
• VideoChannel.0 is the first video channel of the camera,
• Streaming.0 is the first video stream of the channel.
In addition, a unit can contain any number of settings in the properties field.

gRPC API  –  106


    Integration SDK

Output data
In response to the method, the following data will be received:
1. failed - the units that could not be added.
2. added - the uid of the successfully added unit.

2.4.2 ListConfig method


The method allows to get a list of units.
Input data
unit_uids is an array of the units' uids to be obtained.
Output data
1. units is a list of successfully found units.
2. unreachable_objects is a list of temporarily unavailable units.
3. not_found_objects is a list of not found units.
The units field is of UnitDescriptor type.
uid is a unit identifier, which consists of all the "parents" of the unit, separated by the "/" symbol. For example, the uid field of
the Streaming.0 unit will be as follows: hosts/Node1/DeviceIpint.1/VideoChannel.0/Streaming.0.
display_id is a short id, which is usually unique in a parent scope. For example, for a DeviceIpint.1 unit, the field display_id == 1
(sometimes type can go together with it).
type is a unit type. For example, for a DeviceIpint.1 unit, the field type == DeviceIpint.
properties is a list of unit settings.
units are included units that can have either a full description or a short one. In this case, the field stripped == true, and the only
fields that are available from the description are: display_id, type, uid.
factory are included units that can be created for a given unit. The available fields are:
• type - a type of subunit that can be created.
• properties - a list of subunit properties.

2.5 Macros configuration

On this page:

• Operation modes
• Launch conditions
• Actions

Manage macros using gRPC API methods

Macros configuration is described in the LogicService.proto file.


Each macro consists of:
• guid - an id;
• name - a name;
• mode - operation mode;
• conditions - launch conditions;
• rules - rules.

gRPC API  –  107


    Integration SDK

2.5.1 Operation modes


 mode contains the general information:
• enabled or disabled - whether the macro is enabled or disabled;
• user_role - a role for which the macro will be available in the layout menu; 
• is_add_to_menu - add macros to the layout menu;
• time_zone - time zone id, if the macro should be launched on time; 

"time_zone": {
"timezone_id": "6fb68cf4-ca6a-46a1-b2e3-ab4cfdaa0444"
}

• autorule

Note
Contains the general information for launching the automatic rules:
• zone_ap - a camera under which the rule is created;
• only_if_armed - operate only in armed mode;
• timezone_id - id of the time zone;

"autorule": {
                    "zone_ap": "hosts/Server1/DeviceIpint.30/SourceEndpoint.video:
0:0",
                    "only_if_armed": false,
                    "timezone_id": "00000000-0000-0000-0000-000000000000"
                }

• continuous

Note
Contains the general information for launching the continuous macros:
• server - a Server;
• timezone_id - id of the time zone;
• heartbeat_ms - launch cycle in millisecond;
• random - random launch of a macro.

 "continuous": {
"server": "Server1",
"timezone_id": "00000000-0000-0000-0000-000000000000",
"heartbeat_ms": 3600000,
"random": true
}

2.5.2 Launch conditions


The following are available (see Configuring filters for event-driven macros, Triggering macros by statistical data):
• detector

gRPC API  –  108


    Integration SDK

"detector": {
"event_type": "sitDown",
"source_ap": "hosts/Server1/HumanBoneDetector.1/EventSupplier",
"state": "BEGAN",
"details": []
}

• timezone

"timezone": {
"timezone_id": "6fb68cf4-ca6a-46a1-b2e3-ab4cfdaa0444",
"boundary_case": "TB_BEGINING"
}

• alert

"alert": {
"zone_ap": "hosts/Server1/DeviceIpint.10/SourceEndpoint.video:0:0",
"alert_case": "AC_ALERT_DANGEROUS"
}

• device

"device": {
"device": "hosts/Server1/DeviceIpint.69",
"state": "IPDS_CONNECTED",
"threshold": 0
}

• archive_write

"archive_write": {
"camera": "hosts/Server1/DeviceIpint.28/SourceEndpoint.video:0:0",
"state": "ON"
}

• relay

"relay": {
"relay": "hosts/Server1/DeviceIpint.10/StateControl.relay0:0",
"state": "ON"
}

• volume_health

"volume_health": {
"storage": "hosts/Server1/MultimediaStorage.AliceBlue/MultimediaStorage",
"volume": "",
"health": "VH_CORRUPTED"
}

• server_state

gRPC API  –  109


    Integration SDK

Note
observer - a server from which the macro is launched;
subject - a server from which the state should be received.

"server_state": {
"observer": "Server1",
"subject": "Server2",
"state": "SS_OFFLINE"
}

• text

Note
The Event Source object should be created (see Event Source Object).

"text": {
"source": "hosts/Server1/DeviceIpint.110/SourceEndpoint.textEvent:0",
"text": "Cash"
}

• arm

Note
Arming the camera.

"arm": {
"zone": "hosts/Server1/DeviceIpint.10/SourceEndpoint.video:0:0",
"state": "CS_ArmPrivate"
}

• recognition

"recognition": {
"camera": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"list": "797703ea-6917-4341-888b-b6f0579f5d91",
"type": "DT_Plate",
"objects": [
"53502573-a985-4198-a5b6-69db476cc755"
]
}

• statistics

gRPC API  –  110


    Integration SDK

"statistics": {
"point": "archive_usage",
"item": "hosts/Server1/MultimediaStorage.AntiqueWhite/MultimediaStorage",
"value": 100,
"delta": 0,
"trend": "ET_RISING"
}

2.5.3 Actions
rules contains the actions that should be run in the macro (see Settings specific to actions). 
• action

"action": {
"timeout_ms": 0,
"cancel_conditions": {},
"action": {
"goto_ptz": {
"telemetry": "hosts/Server1/DeviceIpint.71/TelemetryControl.0",
"preset_number": 1,
"speed": 1
}
}
}

• wait

"wait": {
"timeout_ms": 30000,
"cancel_conditions": {
"0": {
"path": "/E:0/C:0",
"server_state": {
"observer": "Server1",
"subject": "Server2",
"state": "SS_ONLINE"
}
}
},

• timeout

"timeout": {
"timeout_ms": 5000
}

• check

gRPC API  –  111


    Integration SDK

"check": {
"check": {
"camera": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"archive": "hosts/Server1/MultimediaStorage.AntiqueWhite/MultimediaStorage",
"depth_ms": 60000,
"type": "CT_CHECK_RECORD_SAFETY"
},
"success_rules": {},
"failure_rules": {}
}

2.6 Data export

На странице:

• General information
• StartSession method
• ListSessions method
• GetSessionState method
• StopSession method
• DownloadFile method
• DestroySession method

2.6.1 General information


The export is described in the proto files ExportService.proto and Export.proto.
The following 6 methods are used for export:
1. ListSessions - is used to get a list of all export operations.
2. StartSession - to start a new export operation.
3. GetSessionState - to get the status of a specific operation.
4. StopSession - to stop the operation.
5. DestroySession - to delete the operation along with the export results.
6. DownloadFile - to download the export results.
Export tasks are performed not by NativeBL, but by the export agent. Currently, it is impossible to create an export agent via
NativeBL, only manually in the Client.
When at least one export agent is created, it can be used to perform operations. If there are several export agents and none of
them is explicitly specified in the StartSession method, then the agent with index 1 will be used.
The export operation starts on the node where the camera is located. If the export is started for several cameras, then the first
node is used. Note that it is not necessary to connect to each node - the tasks will be forwarded to them automatically.
Export results are generated on the local Axxon Next Server and can be passed by downloading the files using the DownloadFile
method, which supports downloading from an arbitrary location in the file.

2.6.2 StartSession method


The method passes the export options, which are described in the Options message.
Click to expand...

gRPC API  –  112


    Integration SDK

message Options
{
oneof mode
{
LiveMode live = 1;
ArchiveMode archive = 2;
}
oneof output_type
{
SnapshotType snapshot = 3;
StreamType stream = 4;
}
repeated CommonSetting settings = 5;
// Maximum size of output file.
// New file will be created on reaching this value.
uint64 max_file_size = 6;
string export_agent_access_point = 100;
}

where,
• oneof - implies the selection of one property that can be set in this operation.
• export_agent_access_point - export agent id.
Using the combination of mode and output_type, you can create 4 export types:
1. LiveMode + SnapshotType - export a frame from live video.
2. LiveMode + StreamType - export a video clip from live video.
3. ArchiveMode + SnapshotType - export a frame from archive.
4. ArchiveMode + StreamType - export a video clip from archive.
The LiveMode, ArchiveMode, SnapshotType and StreamType messages contain the parameters for this export type. The
CommonSetting message is used to pass general settings for the export operation.
The list of main export parameters:
Click to expand...

Parameter Export type Description

Options max_file_size Export a video clip Maximum file size (see Configuring export options).

Options export_agent_access_point All Export agent id.

StreamType format Export a video clip Output file format.

SnapshotType format Export a frame Output file format.

ArchiveMode/LiveMode Source origin All Video source (see Get video cameras list and their parameters using gRPC API
methods (DomainService)).

ArchiveMode Source storages Export from archive Archive (see Get video cameras list and their parameters using gRPC API methods
(DomainService)).

ArchiveMode start_timestamp Export from archive Timestamp of the export interval start.

ArchiveMode end_timestamp Export from archive Timestamp of the export interval end.

CommonSetting comment All Comment.

CommonSetting timestamp_format All Timestamp format.

gRPC API  –  113


    Integration SDK

Parameter Export type Description

CommonSetting text_place All Place for comment.

CommonSetting text_color All Comment text color.

CommonSetting burn_subtitle All Text overlay (yes or no).

CommonSetting apply_mask All Mask overlay (yes or no).

StreamSetting video_quality Export a video clip Video stream quality.

StreamSetting video_codec Export a video clip Video codec.

StreamSetting audio_quality Export a video clip Audio stream quality.

StreamSetting audio_codec Export a video clip Audio codec.

StreamSetting frame_frequency Export a video clip Frame frequency.

SnapshotSetting pdf_layout Export a frame PDF file orientation.

SnapshotSetting snapshot_place Export a frame Frame location in the PDF file.

SnapshotSetting comment_place Export a frame Comment location in the PDF file.

SnapshotSetting timestamp_place Export a frame Timestamp location in the PDF file.

SourceSetting crop_area All Export area (see Configuring export area and masks).

SourceSetting mask_space All Mask.

SourceSetting text_place All Place for comment.

SourceSetting text_color All Comment text color.

For each export type, there are timeouts after which the operation is stopped if the GetSessionState method was not executed.
The timeout is counted from the moment the export operation was started and/or from the moment the GetSessionState
method was last executed.
The timeout for exporting a video clip from live video is 5 minutes, for all other export types - 30 minutes.
The id of the export operation will be received as the response to this method.

2.6.3 ListSessions method


The SessionInfo message for each export operation will be received as the response to this method. If one response does not fit
all the operations, then there will also be the next_page_token for the next page.
The SessionInfo message contains:
1. id of the export operation and its properties.
2. export status.

gRPC API  –  114


    Integration SDK

enum EState
{
S_NONE = 0;
S_RUNNING = 1;
S_COMPLETED = 2;
S_REMOVED = 3;
}

where the S_COMPLETED status does not guarantee that the export was successful.
3. If there are export operation results, then a Result message will be received.

message Result
{
message File
{
string path = 1;
uint64 size = 2;
string min_timestamp = 3;
string max_timestamp = 4;
string mime_type = 5;
}
repeated File files = 1;
bool succeeded = 2;
}

where,
a. succeeded - indicates that the export was successful;
b. message File - describes the list of files ready for download, including the conditional path to be used in the
DownloadFile method and size.
After the export operation status changes to S_COMPLETED, you have 1 hour to download the files from the Server. Note that the
timeout is reset to zero after the GetSessionState and DownloadFile methods are executed.
If the timeout is exceeded, the files will be deleted from the Server.

2.6.4 GetSessionState method


The id of the export operation is passed in the method.
Its EState status will be received in response to this method.
If there are export operation results, then a Result message will be received.

2.6.5 StopSession method


The id of the export operation is passed in the method.
Its updated EState status will be received in response to this method.

2.6.6 DownloadFile method


The method can be used only after the export operation is completed.
The following data is passed in the method:
1. export operation id;
2. path to the file;
3. chunk_size_kb - data block size;
4. start_from_chunk_index - serial number of the data block.

gRPC API  –  115


    Integration SDK

In response to this method, FileChunk messages will be received with file data blocks, which will be coming until the entire file is
downloaded.

2.6.7 DestroySession method


The id of the export operation is passed in the method. 

2.7 Examples of gRPC API methods

2.7.1 Bearer authorization

2.7.1.1 Receive a token

Attention!
A direct gRPC request to NativeBL can be anonymous. If an HTTP request is made to a web server, then it is necessary to
use the Basic authorization type, since the anonymous requests to the web server are prohibited.

Request body:

{
"method": "axxonsoft.bl.auth.AuthenticationService.AuthenticateEx",
"data": {
"user_name" : "root",
"password" : "root"
}
}

Response example:

{
"token_name": "auth_token",
"token_value":
"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiIqLioiLCJleHAiOjE2MDUxOTIxMDcsImlhdCI6MTYwNTE3N
zcwNywiaXNzIjoiVi1CRUxZQUtPViIsImxnbiI6InJvb3QiLCJybHMiOlsiOTc0NWI5MDItMmEzNi00MDM1LWJkZDYtMDEy
ZTBkYWU2NmMwIl0sInNpZCI6Ijk3YjA3ZWQ0LTEzOTctNGFiNC1iZjZiLWQwNTUwYmM1YjcwMSIsInN1YiI6IjMyOGUzODc
0LTRhMzMtOWRkMS0yOWViLTQ0YzM3YTQ0MTIxYyJ9.nkqap2aosAafD41vPIICJjIaVCWwGnC1nZRFrPWkt8JpgUnQsxAaZ
Ma1UwIdsTicnH9vWeq6laQgmRJagVnWcunjoJ6wHWptwfk-
pGT49YE9V1_PMT_1f3wQoc8Hl5a118DXECQc2lcu56U0H74C9PBc2Xmh-8fbvaWws65y0Ly4rDbwEWdMd-0ocnnErpSiFOr
-
XEnok9PIVXo_mjgWsg1zxBlgijWqA4jVoQdfBvKzGpTFLxXgguDvCDZQyF3LfpxtjB1jNsZgaFHzxPkloLeq2eQ8TY2Y1g4
BDDNW2QU-Ee-DhWoKIMrRWWhsbHLDMNC2sNpNVw0MMMEYSjDyng",
"expires_at": "20201112T144147",
"is_unrestricted": true,
"user_id": "328e3874-4a33-9dd1-29eb-44c37a44121c",
"roles_ids": [
"9745b902-2a36-4035-bdd6-012e0dae66c0"
],
"error_code": "AUTHENTICATE_CODE_OK"
}

where

gRPC API  –  116


    Integration SDK

token_value - a Bearer token. The received token should be used in the metadata of the gRPC request. The HTTP requests
should be made with the Bearer authorization type using the received token.
expires_at - token expiration date and time in the UTC time zone.

2.7.1.2 Renew a token


Request body:

{
"method": "axxonsoft.bl.auth.AuthenticationService.RenewSession",
"data":
{
}
}

The response will be the same as the response to the receive token request.

Attention!
The token should be active at the time of the request.

2.7.1.3 Close a token


Request body:

{
"method": "axxonsoft.bl.auth.AuthenticationService.CloseSession",
"data":
{
}
}

Response example:

{
"error_code": "OK"
}

2.7.2 Time synchronization of Server and video cameras


POST http://IP-address:port/prefix/grpc
Request body:

gRPC API  –  117


    Integration SDK

{
"method":"axxonsoft.bl.tz.TimeZoneManager.SetNTP",
"data":{
 
"ntp": {
"ntp_url": "time.windows.com",
"sync_ip_devices": true
}
}
}

where
• ntp_url - NTP server of the correct time;
• sync_ip_devices - if true, then the time is also synchronized on all video cameras of the Server.

2.7.3 Get video cameras list and their parameters using gRPC API methods (DomainService)
POST http://IP-address:port/prefix/grpc
Get list of all cameras
Request body:

{
"method": "axxonsoft.bl.domain.DomainService.ListCameras",
"data": {
"view" : "VIEW_MODE_FULL"
}
}

Response example:
Click to expand

gRPC API  –  118


    Integration SDK

--ngpboundary
Content-Type: application/json; charset=utf-8
Content-Length: 4567
 
{
"items": [
{
"access_point": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"display_name": "Camera",
"display_id": "1",
"version": "",
"ip_address": "0.0.0.0",
"camera_access": "CAMERA_ACCESS_FULL",
"vendor": "AxxonSoft",
"model": "Virtual",
"comment": "",
"armed": true,
"video_streams": [
{
"stream_acess_point": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"decoder_acess_point": "hosts/Server1/VideoDecoder.1/SourceEndpoint.video",
"enabled": false,
"display_name": "Camera",
"display_id": "0",
"is_activated": true
}
],
"microphones": [
{
"access_point": "hosts/Server1/DeviceIpint.1/SourceEndpoint.audio:0",
"display_name": "",
"display_id": "0",
"microphone_access": "MICROPHONE_ACCESS_FULL",
"is_activated": false
}
],
"ptzs": [],
"archive_bindings": [
{
"name": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"storage": "hosts/Server1/DeviceIpint.1/MultimediaStorage.0",
"archive": {
"access_point": "hosts/Server1/DeviceIpint.1/MultimediaStorage.0",
"display_name": "",
"display_id": "DeviceIpint.1",
"is_embedded": true,
"archive_access": "ARCHIVE_ACCESS_FULL",
"bindings": [],
"is_activated": false
},
"is_default": false,
"sources": [
{
"access_point": "hosts/Server1/DeviceIpint.1/Sources/src.0",

gRPC API  –  119


    Integration SDK

"storage": "hosts/Server1/DeviceIpint.1/MultimediaStorage.0",
"binding": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"media_source": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"origin": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"mimetype": "video/h264",
"origin_storage": "",
"origin_storage_source": ""
}
]
},
{
"name": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"storage": "hosts/Server1/MultimediaStorage.AliceBlue/MultimediaStorage",
"archive": {
"access_point": "hosts/Server1/MultimediaStorage.AliceBlue/MultimediaStorage",
"display_name": "AliceBlue",
"display_id": "MultimediaStorage.AliceBlue",
"is_embedded": false,
"archive_access": "ARCHIVE_ACCESS_FULL",
"bindings": [],
"is_activated": true
},
"is_default": true,
"sources": [
{
"access_point": "hosts/Server1/MultimediaStorage.AliceBlue/Sources/src.
47A57090-40B8-7604-A7A1-8E9E9D1421D2",
"storage": "hosts/Server1/MultimediaStorage.AliceBlue/MultimediaStorage",
"binding": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"media_source": "hosts/Server1/AVDetector.13/SourceEndpoint.vmda",
"origin": "hosts/Server1/AVDetector.13/SourceEndpoint.vmda",
"mimetype": "application/vmda",
"origin_storage": "",
"origin_storage_source": ""
},
{
"access_point": "hosts/Server1/MultimediaStorage.AliceBlue/Sources/src.1A00AA71-A796-
A96C-80BD-8ADAAD59938E",
"storage": "hosts/Server1/MultimediaStorage.AliceBlue/MultimediaStorage",
"binding": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"media_source": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"origin": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"mimetype": "video/vc-raw",
"origin_storage": "",
"origin_storage_source": ""
},
{
"access_point": "hosts/Server1/MultimediaStorage.AliceBlue/Sources/src.875C1A55-
D315-4DE1-B7F8-F0CB2F2F6B97",
"storage": "hosts/Server1/MultimediaStorage.AliceBlue/MultimediaStorage",
"binding": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"media_source": "hosts/Server1/DeviceIpint.1/SourceEndpoint.audio:0",
"origin": "hosts/Server1/DeviceIpint.1/SourceEndpoint.audio:0",
"mimetype": "application/audio",
"origin_storage": "",
"origin_storage_source": ""

gRPC API  –  120


    Integration SDK

}
]
}
],
"ray": [],
"relay": [],
"detectors": [
{
"access_point": "hosts/Server1/AVDetector.13/EventSupplier",
"display_name": "",
"display_id": "13",
"parent_detector": "",
"scene_descriptions": [
{
"access_point": "hosts/Server1/AVDetector.13/SourceEndpoint.vmda"
}
],
"events": []
}
],
"offline_detectors": [],
"group_ids": [
"e2f20843-7ce5-d04c-8a4f-826e8b16d39c"
],
"is_activated": true,
"text_sources": [],
"speakers": []
}
],
"next_page_token": ""
}
 
--ngpboundary
Content-Type: application/json; charset=utf-8
Content-Length: 41
 
{
"items": [],
"next_page_token": ""
}

Get info about a particular camera


Request body:

{
"method": "axxonsoft.bl.domain.DomainService.BatchGetCameras",
"data": {
"items":[{
"access_point":"hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0"
}]
}
}

Response example:
Click to expand

gRPC API  –  121


    Integration SDK

--ngpboundary
Content-Type: application/json; charset=utf-8
Content-Length: 9038
 
{
"items": [
{
"access_point": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"display_name": "Server1-Auto",
"display_id": "1",
"version": "",
"ip_address": "0.0.0.0",
"camera_access": "CAMERA_ACCESS_FULL",
"vendor": "AxxonSoft",
"model": "Virtual",
"comment": "",
"armed": true,
"video_streams": [
{
"stream_acess_point": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"decoder_acess_point": "hosts/Server1/VideoDecoder.1/SourceEndpoint.video",
"enabled": false,
"display_name": "Server1-Auto",
"display_id": "0",
"is_activated": true
}
],
"microphones": [],
"ptzs": [],
"archive_bindings": [
{
"name": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"storage": "hosts/Server1/DeviceIpint.1/MultimediaStorage.0",
"archive": {
"access_point": "hosts/Server1/DeviceIpint.1/MultimediaStorage.0",
"display_name": "",
"display_id": "DeviceIpint.1",
"is_embedded": true,
"archive_access": "ARCHIVE_ACCESS_FULL",
"bindings": [],
"is_activated": false
},
"is_default": false,
"sources": [
{
"access_point": "hosts/Server1/DeviceIpint.1/Sources/src.0",
"storage": "hosts/Server1/DeviceIpint.1/MultimediaStorage.0",
"binding": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"media_source": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"origin": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"mimetype": "video/h264",
"origin_storage": "",
"origin_storage_source": ""
}

gRPC API  –  122


    Integration SDK

]
},
{
"name": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"storage": "hosts/Server1/MultimediaStorage.AntiqueWhite/MultimediaStorage",
"archive": {
"access_point": "hosts/Server1/MultimediaStorage.AntiqueWhite/MultimediaStorage",
"display_name": "1",
"display_id": "MultimediaStorage.AntiqueWhite",
"is_embedded": false,
"archive_access": "ARCHIVE_ACCESS_FULL",
"bindings": [],
"is_activated": true
},
"is_default": true,
"sources": [
{
"access_point": "hosts/Server1/MultimediaStorage.AntiqueWhite/Sources/src.9287FD97-
D0FE-4675-B3E4-3E859ABC92B8",
"storage": "hosts/Server1/MultimediaStorage.AntiqueWhite/MultimediaStorage",
"binding": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"media_source": "hosts/Server1/AVDetector.14/SourceEndpoint.vmda",
"origin": "hosts/Server1/AVDetector.14/SourceEndpoint.vmda",
"mimetype": "application/vmda",
"origin_storage": "",
"origin_storage_source": ""
},
{
"access_point": "hosts/Server1/MultimediaStorage.AntiqueWhite/Sources/src.
19C6698F-5674-7A0A-8C6F-2253D21F86D2",
"storage": "hosts/Server1/MultimediaStorage.AntiqueWhite/MultimediaStorage",
"binding": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"media_source": "hosts/Server1/AVDetector.35/SourceEndpoint.vmda",
"origin": "hosts/Server1/AVDetector.35/SourceEndpoint.vmda",
"mimetype": "application/vmda",
"origin_storage": "",
"origin_storage_source": ""
},
{
"access_point": "hosts/Server1/MultimediaStorage.AntiqueWhite/Sources/src.D208E3CC-
E717-BC96-DA01-3F420784A1D0",
"storage": "hosts/Server1/MultimediaStorage.AntiqueWhite/MultimediaStorage",
"binding": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"media_source": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"origin": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"mimetype": "video/vc-raw",
"origin_storage": "",
"origin_storage_source": ""
},
{
"access_point": "hosts/Server1/MultimediaStorage.AntiqueWhite/Sources/
src.A7CC6732-57F5-0FF0-C48C-7ADA7ECD779D",
"storage": "hosts/Server1/MultimediaStorage.AntiqueWhite/MultimediaStorage",
"binding": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"media_source": "hosts/Server1/DeviceIpint.10/SourceEndpoint.audio:0",
"origin": "hosts/Server1/DeviceIpint.10/SourceEndpoint.audio:0",

gRPC API  –  123


    Integration SDK

"mimetype": "application/audio",
"origin_storage": "",
"origin_storage_source": ""
}
]
},
{
"name": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"storage": "hosts/Server1/MultimediaStorage.Aquamarine/MultimediaStorage",
"archive": {
"access_point": "hosts/Server1/MultimediaStorage.Aquamarine/MultimediaStorage",
"display_name": "Aquamarine",
"display_id": "MultimediaStorage.Aquamarine",
"is_embedded": false,
"archive_access": "ARCHIVE_ACCESS_FULL",
"bindings": [],
"is_activated": true
},
"is_default": false,
"sources": [
{
"access_point": "hosts/Server1/MultimediaStorage.Aquamarine/Sources/src.9287FD97-
D0FE-4675-B3E4-3E859ABC92B8",
"storage": "hosts/Server1/MultimediaStorage.Aquamarine/MultimediaStorage",
"binding": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"media_source": "hosts/Server1/AVDetector.14/SourceEndpoint.vmda",
"origin": "hosts/Server1/AVDetector.14/SourceEndpoint.vmda",
"mimetype": "application/vmda",
"origin_storage": "",
"origin_storage_source": ""
},
{
"access_point": "hosts/Server1/MultimediaStorage.Aquamarine/Sources/src.
19C6698F-5674-7A0A-8C6F-2253D21F86D2",
"storage": "hosts/Server1/MultimediaStorage.Aquamarine/MultimediaStorage",
"binding": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"media_source": "hosts/Server1/AVDetector.35/SourceEndpoint.vmda",
"origin": "hosts/Server1/AVDetector.35/SourceEndpoint.vmda",
"mimetype": "application/vmda",
"origin_storage": "",
"origin_storage_source": ""
},
{
"access_point": "hosts/Server1/MultimediaStorage.Aquamarine/Sources/src.D208E3CC-
E717-BC96-DA01-3F420784A1D0",
"storage": "hosts/Server1/MultimediaStorage.Aquamarine/MultimediaStorage",
"binding": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"media_source": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"origin": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"mimetype": "video/vc-raw",
"origin_storage": "",
"origin_storage_source": ""
}
]
}
],

gRPC API  –  124


    Integration SDK

"ray": [],
"relay": [],
"detectors": [
{
"access_point": "hosts/Server1/AVDetector.14/EventSupplier",
"display_name": "",
"display_id": "14",
"parent_detector": "",
"is_activated": true,
"scene_descriptions": [
{
"access_point": "hosts/Server1/AVDetector.14/SourceEndpoint.vmda"
}
],
"events": [
{
"id": "TargetList",
"name": "",
"event_type": "PERIODICAL_EVENT_TYPE"
},
{
"id": "plateRecognized",
"name": "",
"event_type": "ONE_PHASE_EVENT_TYPE"
}
]
},
{
"access_point": "hosts/Server1/AVDetector.39/EventSupplier",
"display_name": "",
"display_id": "39",
"parent_detector": "",
"is_activated": false,
"scene_descriptions": [],
"events": [
{
"id": "SmokeDetected",
"name": "",
"event_type": "TWO_PHASE_EVENT_TYPE"
},
{
"id": "MotionMask",
"name": "",
"event_type": "ONE_PHASE_EVENT_TYPE"
}
]
},
{
"access_point": "hosts/Server1/AVDetector.40/EventSupplier",
"display_name": "",
"display_id": "40",
"parent_detector": "",
"is_activated": false,
"scene_descriptions": [],
"events": [
{

gRPC API  –  125


    Integration SDK

"id": "FireDetected",
"name": "",
"event_type": "TWO_PHASE_EVENT_TYPE"
},
{
"id": "MotionMask",
"name": "",
"event_type": "ONE_PHASE_EVENT_TYPE"
}
]
},
{
"access_point": "hosts/Server1/AVDetector.35/EventSupplier",
"display_name": "",
"display_id": "35",
"parent_detector": "",
"is_activated": true,
"scene_descriptions": [
{
"access_point": "hosts/Server1/AVDetector.35/SourceEndpoint.vmda"
}
],
"events": [
{
"id": "TargetList",
"name": "",
"event_type": "PERIODICAL_EVENT_TYPE"
},
{
"id": "faceAppeared",
"name": "",
"event_type": "ONE_PHASE_EVENT_TYPE"
}
]
}
],
"offline_detectors": [],
"group_ids": [
"e2f20843-7ce5-d04c-8a4f-826e8b16d39c"
],
"is_activated": true,
"text_sources": [],
"speakers": []
}
],
"not_found_objects": [],
"unreachable_objects": []
}
 
--ngpboundary
Content-Type: application/json; charset=utf-8
Content-Length: 71
 
{
"items": [],
"not_found_objects": [],

gRPC API  –  126


    Integration SDK

"unreachable_objects": []
}
 
 
}
 
--ngpboundary
Content-Type: application/json; charset=utf-8
Content-Length: 71
 
{
"items": [],
"not_found_objects": [],
"unreachable_objects": []
}

Get list of all cameras of all nodes of this Server


Request body:

{
"method": "axxonsoft.bl.domain.DomainService.ListCameras",
"data":
{
"view": "VIEW_MODE_NO_CHILD_OBJECTS"
}
}

Get list of all cameras of a particular node


Request body:

{
"method": "axxonsoft.bl.domain.DomainService.ListCameras",
"data":
{
"filter": "hosts/Node1/",
"view": "VIEW_MODE_NO_CHILD_OBJECTS"
}
}

gRPC API  –  127


    Integration SDK

2.7.4 Manage devices using gRPC API methods (ConfigurationService)

On this page:

• Get information about device


• Get information about
device child objects
• Change the configuration
• Adding the device
• Creating the object
tracker
• Creating the motion in
area detection tool under
the object tracker
• Changing a video folder
for a virtual camera
• Enabling/disabling the
object
• Removing the device

Axxon Next configuration settings

2.7.4.1 Get information about device

{
"method": "axxonsoft.bl.config.ConfigurationService.ListUnits",
"data": {
"unit_uids": [
"hosts/Server1/DeviceIpint.10"
]
}
}

Response example:
Click to expand...

gRPC API  –  128


    Integration SDK

{
"units": [
{
"uid": "hosts/Server1/DeviceIpint.10",
"display_id": "10",
"type": "DeviceIpint",
"display_name": "",
"access_point": "",
"properties": [
{
"id": "display_name",
"name": "Display name",
"type": "string",
"readonly": false,
"value_string": "axis"
},
{
"id": "driverName",
"name": "Driver Name",
"type": "string",
"readonly": true,
"value_string": "Axis"
},
{
"id": "driverVersion",
"name": "Driver Version",
"type": "string",
"readonly": true,
"value_string": "3.0.0"
},
{
"id": "vendor",
"name": "Device Vendor",
"type": "string",
"readonly": false,
"enum_constraint": {},
"value_string": "Axis"
},
{
"id": "model",
"name": "Device Model",
"type": "string",
"readonly": false,
"value_string": "P1343"
},
{
"id": "firmware",
"name": "Firmware version",
"type": "string",
"readonly": false,
"value_string": "5.06"
},
{
"id": "address",
"name": "IP Address of device",

gRPC API  –  129


    Integration SDK

"type": "string",
"readonly": false,
"value_string": "192.168.0.181"
},
{
"id": "port",
"name": "Port number",
"type": "int32",
"readonly": false,
"value_int32": 80
},
{
"id": "useDefaultAuthentication",
"name": "Use default device credentials",
"type": "bool",
"readonly": false,
"value_bool": false
},
{
"id": "user",
"name": "Login",
"type": "string",
"readonly": false,
"value_string": "root"
},
{
"id": "password",
"name": "Password",
"type": "string",
"readonly": false,
"value_string": "pass"
},
{
"id": "blockingConfiguration",
"name": "Preserve device settings",
"type": "bool",
"readonly": false,
"value_bool": false
},
{
"id": "geoLocationLatitude",
"name": "Geolocation Latitude",
"type": "double",
"readonly": false,
"value_double": 35
},
{
"id": "geoLocationLongitude",
"name": "Geolocation Longitude",
"type": "double",
"readonly": false,
"value_double": 45
},
{
"id": "geoLocationAzimuth",
"name": "Geolocation Azimuth",

gRPC API  –  130


    Integration SDK

"type": "double",
"readonly": false,
"value_double": 0
}
],
"units": [
{
"uid": "hosts/Server1/DeviceIpint.10/VideoChannel.0",
"display_id": "0",
"type": "VideoChannel",
"display_name": "",
"access_point": "",
"properties": [],
"units": [],
"factory": [],
"destruction_args": [],
"discoverable": false,
"status": "UNIT_STATUS_ACTIVE",
"stripped": false,
"opaque_params": [],
"assigned_templates": []
},
{
"uid": "hosts/Server1/DeviceIpint.10/Microphone.0",
"display_id": "0",
"type": "Microphone",
"display_name": "",
"access_point": "",
"properties": [],
"units": [],
"factory": [],
"destruction_args": [],
"discoverable": false,
"status": "UNIT_STATUS_INACTIVE",
"stripped": false,
"opaque_params": [],
"assigned_templates": []
},
{
"uid": "hosts/Server1/DeviceIpint.10/Telemetry.0",
"display_id": "0",
"type": "Telemetry",
"display_name": "",
"access_point": "",
"properties": [],
"units": [],
"factory": [],
"destruction_args": [],
"discoverable": false,
"status": "UNIT_STATUS_ACTIVE",
"stripped": false,
"opaque_params": [],
"assigned_templates": []
},
{
"uid": "hosts/Server1/DeviceIpint.10/IO.0",

gRPC API  –  131


    Integration SDK

"display_id": "0",
"type": "IO",
"display_name": "",
"access_point": "",
"properties": [],
"units": [],
"factory": [],
"destruction_args": [],
"discoverable": false,
"status": "UNIT_STATUS_INACTIVE",
"stripped": false,
"opaque_params": [],
"assigned_templates": []
},
{
"uid": "hosts/Server1/DeviceIpint.10/Speaker.0",
"display_id": "0",
"type": "Speaker",
"display_name": "",
"access_point": "",
"properties": [],
"units": [],
"factory": [],
"destruction_args": [],
"discoverable": false,
"status": "UNIT_STATUS_INACTIVE",
"stripped": false,
"opaque_params": [],
"assigned_templates": []
}
],
"factory": [],
"destruction_args": [],
"discoverable": false,
"status": "UNIT_STATUS_ACTIVE",
"stripped": false,
"opaque_params": [],
"assigned_templates": [
"502f5739-0b18-4852-891a-35aefbd85d7c"
]
}
],
"unreachable_objects": [],
"not_found_objects": []
}

The units field properties contain the following information:


• device name,
• manufacturer,
• device model,
• IP address,
• port,
• firmware,
• login and password,
• geolocation data.

gRPC API  –  132


    Integration SDK

The child objects of the device (video channels, streams, microphones, speakers, telemetry, sensors and relays) will be indicated
in child units.

2.7.4.2 Get information about device child objects


Request example for getting information about a video channel:

{
"method":"axxonsoft.bl.config.ConfigurationService.ListUnits",
"data":{
"unit_uids":["hosts/Server1/DeviceIpint.10/VideoChannel.0"]
}
}

Response:
Click to expand...

gRPC API  –  133


    Integration SDK

{
"uid": "hosts/Server1/DeviceIpint.10/VideoChannel.0",
"display_id": "0",
"type": "VideoChannel",
"display_name": "",
"access_point": "",
"properties": [
{
"id": "channel_id",
"name": "",
"type": "int32",
"readonly": true,
"value_int32": 0
},
{
"id": "display_name",
"name": "Display name",
"type": "string",
"readonly": false,
"value_string": "axis"
},
{
"id": "comment",
"name": "Comment",
"type": "string",
"readonly": false,
"value_string": ""
},
{
"id": "enabled",
"name": "Enable VideoChannel",
"type": "bool",
"readonly": false,
"value_bool": true
},
{
"id": "brightness",
"name": "",
"type": "int32",
"readonly": false,
"range_constraint": {},
"value_int32": 50
},
{
"id": "contrast",
"name": "",
"type": "int32",
"readonly": false,
"range_constraint": {},
"value_int32": 50
},
{
"id": "digitalPtz",
"name": "",
"type": "bool",

gRPC API  –  134


    Integration SDK

"readonly": false,
"value_bool": false
},
{
"id": "flickerfree",
"name": "",
"type": "string",
"readonly": false,
"enum_constraint": {},
"value_string": "auto"
},
{
"id": "imageFlip",
"name": "",
"type": "int32",
"readonly": false,
"enum_constraint": {},
"value_int32": 0
},
{
"id": "maxZoom",
"name": "",
"type": "int32",
"readonly": false,
"enum_constraint": {},
"value_int32": 250
},
{
"id": "saturation",
"name": "",
"type": "int32",
"readonly": false,
"range_constraint": {},
"value_int32": 50
},
{
"id": "sharpness",
"name": "",
"type": "int32",
"readonly": false,
"range_constraint": {},
"value_int32": 50
}
],
"units": [
{
"uid": "hosts/Server1/DeviceIpint.10/VideoChannel.0/Streaming.
0",
"display_id": "0",
"type": "Streaming",
"display_name": "",
"access_point": "",
"properties": [],
"units": [],
"factory": [],
"destruction_args": [],

gRPC API  –  135


    Integration SDK

"discoverable": false,
"status": "UNIT_STATUS_ACTIVE",
"stripped": false,
"opaque_params": [],
"assigned_templates": []
},
{
"uid": "hosts/Server1/DeviceIpint.10/VideoChannel.0/Streaming.
1",
"display_id": "1",
"type": "Streaming",
"display_name": "",
"access_point": "",
"properties": [],
"units": [],
"factory": [],
"destruction_args": [],
"discoverable": false,
"status": "UNIT_STATUS_ACTIVE",
"stripped": false,
"opaque_params": [],
"assigned_templates": []
},
{
"uid": "hosts/Server1/DeviceIpint.10/VideoChannel.0/
Detector.motion_detection",
"display_id": "motion_detection",
"type": "Detector",
"display_name": "",
"access_point": "",
"properties": [],
"units": [],
"factory": [],
"destruction_args": [],
"discoverable": false,
"status": "UNIT_STATUS_INACTIVE",
"stripped": false,
"opaque_params": [],
"assigned_templates": []
},
{
"uid": "hosts/Server1/DeviceIpint.10/VideoChannel.0/
Detector.tampering_detection",
"display_id": "tampering_detection",
"type": "Detector",
"display_name": "",
"access_point": "",
"properties": [],
"units": [],
"factory": [],
"destruction_args": [],
"discoverable": false,
"status": "UNIT_STATUS_INACTIVE",
"stripped": false,
"opaque_params": [],
"assigned_templates": []

gRPC API  –  136


    Integration SDK

},
{
"uid": "hosts/Server1/DeviceIpint.10/VideoChannel.0/
Detector.audio_detection",
"display_id": "audio_detection",
"type": "Detector",
"display_name": "",
"access_point": "",
"properties": [],
"units": [],
"factory": [],
"destruction_args": [],
"discoverable": false,
"status": "UNIT_STATUS_INACTIVE",
"stripped": false,
"opaque_params": [],
"assigned_templates": []
}
],
"factory": [],
"destruction_args": [],
"discoverable": false,
"status": "UNIT_STATUS_ACTIVE",
"stripped": false,
"opaque_params": [],
"assigned_templates": []
}

The properties contain the video parameters, the child ones contain streams and detection tools, if created.

2.7.4.3 Change the configuration

2.7.4.3.1 Adding the device


Adding a virtual video camera without settings:

gRPC API  –  137


    Integration SDK

{
"method": "axxonsoft.bl.config.ConfigurationService.ChangeConfig",
"data": {
"added": [
{
"uid": "hosts/Server1",
"units": [
{
"type": "DeviceIpint",
"units": [],
"properties": [
{
"id": "vendor",
"value_string": "AxxonSoft",
"properties": [
{
"id": "model",
"value_string": "Virtual",
"properties": []
}
]
},
{
"id": "display_name",
"value_string": "newOrder2",
"properties": []
},
{
"id": "blockingConfiguration",
"value_bool": false,
"properties": []
},
{
"id": "display_id",
"value_string": "199"
}
]
}
]
}
]
}
}

where uid is the Server where the device is created.


As a result, a camera with a child microphone, an embedded archive and a sensor will be created. All child objects except the
video channel will be turned off.

{
"failed": [],
"added": ["hosts/Server1/DeviceIpint.199"]
}

where 199 is the id of the created device.

gRPC API  –  138


    Integration SDK

Note
In some cases, the id of the created device may not coincide with the specified value of display_id in the request.

2.7.4.3.2 Creating the object tracker

{
"method":"axxonsoft.bl.config.ConfigurationService.ChangeConfig",
"data":{
"added": {
"uid": "hosts/Server1",
"units": {
"type": "AVDetector",
"properties": [
{
"id": "display_name",
"value_string": "Object tracker"
},
{
"id": "input",
"value_string": "Video",
"properties": [
{
"id": "camera_ref",
"value_string": "hosts/Server1/DeviceIpint.200/
SourceEndpoint.video:0:0",
"properties": [
{
"id": "streaming_id",
"value_string": "hosts/Server1/DeviceIpint.200/
SourceEndpoint.video:0:0"
}
]
},
{
"id": "detector",
"value_string": "SceneDescription"
}
]
}
]
}
}
}
}

gRPC API  –  139


    Integration SDK

2.7.4.3.3 Creating the motion in area detection tool under the object tracker

{
"method":"axxonsoft.bl.config.ConfigurationService.ChangeConfig",
"data":{
"added": {
"uid": "hosts/Server1",
"units": {
"type": "AppDataDetector",
"properties": [
{
"id": "display_name",
"value_string": "AppDataDetectorMoveInZone"
},
{
"id": "input",
"value_string": "TargetList",
"properties": [
{
"id": "camera_ref",
"value_string": "hosts/Server1/DeviceIpint.200/
SourceEndpoint.video:0:0",
"properties": [
{
"id": "streaming_id",
"value_string": "hosts/Server1/AVDetector.1/
SourceEndpoint.vmda"
}
]
},
{
"id": "detector",
"value_string": "MoveInZone"
}
]
}
]
}
}
}
}

gRPC API  –  140


    Integration SDK

2.7.4.3.4 Changing a video folder for a virtual camera

{
"method": "axxonsoft.bl.config.ConfigurationService.ChangeConfig",
"data": {
"changed": [
{
"uid": "hosts/Server1/DeviceIpint.199/VideoChannel.0/Streaming.0",
"type": "Streaming",
"properties": [
{
"id": "folder",
"value_string": "D:/Video"
}
],
"opaque_params": []
}
]
}

2.7.4.3.5 Enabling/disabling the object


Each unit contains an enabled property.
Enabling the microphone:

{
"method":"axxonsoft.bl.config.ConfigurationService.ChangeConfig",
"data":{
"changed":[{
"uid": "hosts/Server1/DeviceIpint.10/Microphone.0",
"type": "Microphone",
"properties": [ {
"id": "enabled",
"value_bool": true
} ],
"units":[]
}]
}
}

2.7.4.3.6 Removing the device

{
"method": "axxonsoft.bl.config.ConfigurationService.ChangeConfig",
"data": {
"removed": [
{
"uid": "hosts/Server1/DeviceIpint.199"
}
]
}
}

gRPC API  –  141


    Integration SDK

2.7.5 Change detection tool mask using gRPC API (ConfigurationService)


To get the identifier of the detection tool mask, it is necessary to run a query of the following type:

{
"method":"axxonsoft.bl.config.ConfigurationService.ListUnits",
"data":{
"unit_uids": ["hosts/Server1/AppDataDetector.1"]
}
}

where unit_uids is the name of the required detection tool (see Manage devices using gRPC API methods (ConfigurationService)).
Find the units parameter group in the query response:

"units": [
{
"uid": "hosts/Server1/AppDataDetector.1/VisualElement.76c7fadf-7f96-4f30-
b57a-e3ba585fbc6f",
"display_id": "76c7fadf-7f96-4f30-b57a-e3ba585fbc6f",
"type": "VisualElement",
"display_name": "Polyline",
"access_point": "",
"properties": [
{
"id": "polyline",
"name": "Polyline",
"description": "Polyline.",
"type": "SimplePolygon",
"readonly": false,
"internal": false,
"value_simple_polygon": {
"points": [
{
"x": 0.01,
"y": 0.01
},
{
"x": 0.01,
"y": 0.99
},
{
"x": 0.99,
"y": 0.99
},
{
"x": 0.99,
"y": 0.01
}
]
}
}

where 
• uid - the mask identifier.
• x, y - the coordinates of the point apex.

gRPC API  –  142


    Integration SDK

To change the points of the mask, it is necessary to run a query using the obtained mask uid:

{
"method": "axxonsoft.bl.config.ConfigurationService.ChangeConfig",
"data": {
"changed": [
{
"uid": "hosts/Server1/AppDataDetector.1/VisualElement.76c7fadf-7f96-4f30-b57a-
e3ba585fbc6f",
"type": "VisualElement",
"properties": [
{
"id": "polyline",
"value_simple_polygon": {
"points": [
{
"x": 0.01,
"y": 0.01
},
{
"x": 0.01,
"y": 0.99
},
{
"x": 0.99,
"y": 0.99
},
{
"x": 0.99,
"y": 0.01
}
]
}

}
]
}
]
}

You can also add and remove the polygon points of the mask using this query.

2.7.6 Manage groups of video cameras using gRPC API methods


POST http://IP-address:port/prefix/grpc
Get list of all groups
Request body:

{
"method": "axxonsoft.bl.groups.GroupManager.ListGroups",
"data": {
"view": "VIEW_MODE_TREE"
}
}

gRPC API  –  143


    Integration SDK

• "view": "VIEW_MODE_TREE" - the object tree view.


• "view": "VIEW_MODE_DEFAULT" - not the object tree view.
Get info about certain group

{
"method": "axxonsoft.bl.groups.GroupManager.BatchGetGroups",
"data": {
"group_ids": ["5229f799-b8d8-9045-90e8-7e0e78bcd719"],
"with_sub_groups": true
}
}

• "with_sub_groups": true - including the child groups.


• "with_sub_groups": false - without the child groups.
Create a group

{
"method": "axxonsoft.bl.groups.GroupManager.ChangeGroups",
"data": {
"added_groups": {
"group_id":"01e42aac-30f9-3d4b-8bb1-6ef60e215a6d",
"name":"Edited group",
"description":"postman"
}
}
}

Edit a group

{
"method": "axxonsoft.bl.groups.GroupManager.ChangeGroups",
"data": {
"changed_groups_info": {
"group_id":"01e42aac-30f9-3d4b-8bb1-6ef60e215a7d",
"parent":"e2f20843-7ce5-d04c-8a4f-826e8b16d39c"
}
}
}

Delete a group

{
"method": "axxonsoft.bl.groups.GroupManager.ChangeGroups",
"data": {
"removed_groups":"b7d2fc67-6125-b341-800f-5f1747946788"
}
}

Add a camera to the group

gRPC API  –  144


    Integration SDK

{
"method": "axxonsoft.bl.groups.GroupManager.SetObjectsMembership",
"data": {
"added_objects":{
"group_id":"01e42aac-30f9-3d4b-8bb1-6ef60e215a6d",
"object":"hosts/Server1/DeviceIpint.10/SourceEndpoint.video:0:0"
}
}
}

Delete a camera from the group

{
"method": "axxonsoft.bl.groups.GroupManager.SetObjectsMembership",
"data": {
"removed_objects":{
"group_id":"01e42aac-30f9-3d4b-8bb1-6ef60e215a6d",
"object":"hosts/Server1/DeviceIpint.10/SourceEndpoint.video:0:0"
}
}
}

2.7.7 Manage alerts using gRPC API methods

On this page:

• Alert initiation
• Proceed to alert handling
• Cancel alert handling
• Continue alert handling
• Review the alert
• Review the alert with a
comment

2.7.7.1 Alert initiation


POST http://IP-address:port/prefix/grpc
Request body:

{
"method":"axxonsoft.bl.logic.LogicService.RaiseAlert",
"data": {
"camera_ap" : "hosts/Server1/DeviceIpint.10/SourceEndpoint.video:0:0"
}
}

The response contains the alert id and the result.

gRPC API  –  145


    Integration SDK

{
"result": true,
"alert_id": "ddb5ab56-627e-4761-a1eb-f497ef2f7745"
}

2.7.7.2 Proceed to alert handling

{
"method":"axxonsoft.bl.logic.LogicService.BeginAlertReview",
"data":{
"camera_ap" : "hosts/Server1/DeviceIpint.10/SourceEndpoint.video:0:0",
"alert_id" : "ddb5ab56-627e-4761-a1eb-f497ef2f7745"
}
}

2.7.7.3 Cancel alert handling

{
"method":"axxonsoft.bl.logic.LogicService.CancelAlertReview",
"data":{
"camera_ap" : "hosts/Server1/DeviceIpint.10/SourceEndpoint.video:0:0",
"alert_id" : "ddb5ab56-627e-4761-a1eb-f497ef2f7745"
}
}

2.7.7.4 Continue alert handling

{
"method":"axxonsoft.bl.logic.LogicService.ContinueAlertReview",
"data":{
"camera_ap" : "hosts/Server1/DeviceIpint.10/SourceEndpoint.video:0:0",
"alert_id" : "ddb5ab56-627e-4761-a1eb-f497ef2f7745"
}
}

2.7.7.5 Review the alert

Attention!
To review the alert, it should be in the handling state.

gRPC API  –  146


    Integration SDK

{
"method":"axxonsoft.bl.logic.LogicService.CompleteAlertReview",
"data":{
"severity" : "SV_WARNING",
"bookmark" : {},
"camera_ap" : "hosts/Server1/DeviceIpint.10/SourceEndpoint.video:0:0",
"alert_id" : "ddb5ab56-627e-4761-a1eb-f497ef2f7745"
}
}

Note
The severity parameter determines the alert type:
SV_UNCLASSIFIED - missed;
SV_FALSE - false;
SV_WARNING - suspicious;
SV_ALARM - confirmed.

2.7.7.6 Review the alert with a comment

Attention!
To review the alert, it should be in the handling state.

Expand...

gRPC API  –  147


    Integration SDK

{
"method": "axxonsoft.bl.logic.LogicService.RaiseAlert",
"data": {
"camera_ap": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0"
}
}
 
{
"method": "axxonsoft.bl.logic.LogicService.BeginAlertReview",
"data": {
"camera_ap": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"alert_id": "eb683ba7-f30c-44cc-b762-71465f8d7015"
}
}
 
{
"method": "axxonsoft.bl.logic.LogicService.CompleteAlertReview",
"data": {
"severity": "SV_ALARM",
"bookmark": {
"guid": "b6ba95f2-b7c9-4bd4-93ef-f26040bc93e4",
"timestamp": "20201001T072442.364",
"node_info": {
"name": "Server1"
},
"is_protected": false,
"camera": {
"access_point":"hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0"
},
"archive": {
"accessPoint": "hosts/Server1/MultimediaStorage.AliceBlue/MultimediaStorage"
},
"alert_id": "eb683ba7-f30c-44cc-b762-71465f8d7015",
"group_id": "",
"boundary": {
"x": 0.5002633,
"y": 0.4734651,
"w": 75.50027,
"h": 13.47346,
"index": 0
},
"user": "root",
"range": {
"begin_time": "20201001T072442.364",
"end_time": "20201001T072442.364"
},
"geometry": {
"guid": "46486492-34ea-4e48-92ce-2cb43dfd7695",
"alpha": 147,
"type": "PT_NONE"
},
"message": "TEST"
},
"camera_ap": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"alert_id": "eb683ba7-f30c-44cc-b762-71465f8d7015"

gRPC API  –  148


    Integration SDK

}
}

where in the bookmark parameter group:


• guid - the value should be user-defined and unique for each comment.
• range: begin_time and end_time - the time interval for which the comment will be saved. The interval should
correspond to the alarm time.
• message - a comment.

2.7.8 Manage macros using gRPC API methods

On this page:

• Get list of all macros


• Get complete information on
one/several macros
• Create/Remove/Change macro
• Launch a macro
• Examples

Macros configuration

2.7.8.1 Get list of all macros


POST http://IP-address:port/prefix/grpc
Request body:

{
"method":"axxonsoft.bl.logic.LogicService.ListMacros",
"data": {
"view": "VIEW_MODE_FULL"
}
}

Note
VIEW_MODE_FULL - complete information;
VIEW_MODE_STRIPPED - only basic information about macros without the launch and operation conditions.

gRPC API  –  149


    Integration SDK

2.7.8.2 Get complete information on one/several macros

{
"method":"axxonsoft.bl.logic.LogicService.BatchGetMacros",
"data":{
"macros_ids" : ["cfd41b18-c983-4a48-aaa1-ca7e666e6e49"]
}
}

2.7.8.3 Create/Remove/Change macro

Attention!
Requests for creating and changing a macro should contain its entire structure.

Creating:

gRPC API  –  150


    Integration SDK

{
"method": "axxonsoft.bl.logic.LogicService.ChangeMacros",
"data": {
"added_macros": {
"guid": "3303abb2-181e-4183-8987-8a06c309a741",
"name": "TEST_MACRO",
"mode": {
"enabled": true,
"user_role": "",
"is_add_to_menu": true,
"common": {}
},
"conditions": {
"0": {
"path": "/C:0",
"archive_write": {
"camera": "hosts/SERVER1/DeviceIpint.1/SourceEndpoint.video:0:0",
"state": "ON"
}
},
"1": {
"path": "/C:0",
"archive_write": {
"camera": "hosts/SERVER1/DeviceIpint.1/SourceEndpoint.video:0:0",
"state": "ON"
}
}
},
"rules": {
"0": {
"path": "/E:0",
"action": {
"timeout_ms": 60000,
"cancel_conditions": {},
"action": {
"raise_alert": {
"zone": "",
"archive": "",
"offset_ms": 0,
"mode": "RAM_AlwaysIfNoActiveAlert"
}
}
}
},
"1": {
"path": "/E:0",
"action": {
"timeout_ms": 60000,
"cancel_conditions": {},
"action": {
"raise_alert": {
"zone": "",
"archive": "",
"offset_ms": 0,
"mode": "RAM_AlwaysIfNoActiveAlert"
}

gRPC API  –  151


    Integration SDK

}
}
}
}
}
}
}

Changing (removing conditions and rules):

Note
Leave empty curly brackets { } in the conditions and rules groups.

{
"method": "axxonsoft.bl.logic.LogicService.ChangeMacros",
"data": {
"modified_macros": {
"guid": "3303abb2-181e-4183-8987-8a06c309a741",
"mode": {
"common": {}
},
"conditions": {
"0": {}
},
"rules": {
"1": {}
}
}
}
}

Removing:

{
"method":"axxonsoft.bl.logic.LogicService.ChangeMacros",
"data":{
"removed_macros" : ["3303abb2-181e-4183-8987-8a06c309a741"]
}
}

2.7.8.4 Launch a macro

{
"method":"axxonsoft.bl.logic.LogicService.LaunchMacro",
"data":{
"macro_id" : "caef76f0-37e9-43b0-aba6-c2a2f32ccd2f"
}
}

gRPC API  –  152


    Integration SDK

2.7.8.5 Examples
1. Get information on automatic rule

Response:

gRPC API  –  153


    Integration SDK

{
"items": [
{
"guid": "4932bbc7-c702-4a18-b050-2898b1b61738",
"name": "534k_1.Camera. Motion detection",
"mode": {
"enabled": true,
"user_role": "",
"is_add_to_menu": false,
"autorule": {
"zone_ap": "hosts/Server1/DeviceIpint.6/SourceEndpoint.video:0:0",
"only_if_armed": false,
"timezone_id": "00000000-0000-0000-0000-000000000000"
}
},
"conditions": {
"0": {
"path": "/C:0",
"detector": {
"event_type": "MotionDetected",
"source_ap": "hosts/Server1/AVDetector.4/EventSupplier",
"state": "BEGAN",
"details": []
}
}
},
"rules": {
"1": {
"path": "/E:1",
"action": {
"timeout_ms": 0,
"cancel_conditions": {
"0": {
"path": "/E:1/C:0",
"detector": {
"event_type": "MotionDetected",
"source_ap": "hosts/Server1/AVDetector.4/
EventSupplier",
"state": "ENDED",
"details": []
}
}
},
"action": {
"raise_alert": {
"zone": "hosts/Server1/DeviceIpint.1/
SourceEndpoint.video:0:0",
"archive": "hosts/Server1/MultimediaStorage.AliceBlue/
MultimediaStorage",
"offset_ms": 0,
"mode": "RAM_AlwaysIfNoActiveAlert"
}
}
}
},

gRPC API  –  154


    Integration SDK

"0": {
"path": "/E:0",
"action": {
"timeout_ms": 0,
"cancel_conditions": {
"0": {
"path": "/E:0/C:0",
"detector": {
"event_type": "MotionDetected",
"source_ap": "hosts/Server1/AVDetector.6/
EventSupplier",
"state": "BEGAN",
"details": []
}
}
},
"action": {
"write_archive": {
"camera": "hosts/Server1/DeviceIpint.1/
SourceEndpoint.video:0:0",
"archive": "hosts/Server1/MultimediaStorage.AliceBlue/
MultimediaStorage",
"min_prerecord_ms": 0,
"post_event_timeout_ms": 0
}
}
}
}
}
}
]
}

2. Create a macro.

gRPC API  –  155


    Integration SDK

{
"method":"axxonsoft.bl.logic.LogicService.ChangeMacros",
"data":{
"added_macros" : {
"guid": "b55c118a-f902-43ec-b55a-67ee062640b2",
"name": "MacroEmail",
"mode": {
"enabled": true,
"user_role": "",
"is_add_to_menu": false,
"continuous": {
"server": "Server1",
"timezone_id": "00000000-0000-0000-0000-000000000000",
"heartbeat_ms": 0,
"random": true
}
},
"conditions": {},
"rules": {
"0": {
"path": "/E:0",
"check": {
"check": {
"camera": "99f72952-d8b8-4590-90e8-7e0e78bcd719",
"archive": "",
"depth_ms": 5400000,
"type": "CT_CHECK_RECORD"
},
"success_rules": {},
"failure_rules": {
"0": {
"path": "/E:0/T:0",
"action": {
"timeout_ms": 0,
"cancel_conditions": {},
"action": {
"email_notification": {
"notifier": "hosts/Server1/EMailModule.1",
"recipients": [
"mail@server.com"
],
"subject": "Notification: Attention, automatic
rule is triggered.",
"msg_text": "On server: {cameraNode} by camera
{cameraName} problems with archiving.\nDate: {dateTime}",
"atach_video": false,
"export_agent": "",
"span_ms": 0,
"camera": "",
"archive": ""
}
}
}
}
}

gRPC API  –  156


    Integration SDK

}
}
}
}
}
}

Note
"camera": "99f72952-d8b8-4590-90e8-7e0e78bcd719" is the camera group id.

2.7.9 Get info about archives using gRPC API (DomainService)


Get a list of Axxon domain archives.
POST http://IP-address:port/prefix/grpc
Request body:

{
"method": "axxonsoft.bl.domain.DomainService.ListArchives",
"data": { "filter": "", "view": "VIEW_MODE_FULL", "page_token": "", "page_size": 1000}
}

The response will contain a list of archives. Take the value of the access_point parameter for the required archive
 "access_point": "hosts/Server1/MultimediaStorage.AliceBlue/MultimediaStorage"

Note
The response will contain the page_token parameter if the number of archives (including the built-in ones) is greater
than the value of the page_size parameter.

gRPC API  –  157


    Integration SDK

Get the archive occupation percentage.


POST http://IP-address:port/prefix/grpc
Request body:

{"method": "axxonsoft.bl.statistics.StatisticService.GetStatistics","data": { "keys": {


"type": "SPT_ArchiveUsage", "name": "hosts/Server1/MultimediaStorage.AliceBlue/
MultimediaStorage" }}}

where "name" is the value of the access_point parameter from the first request.
Response:

{
"stats": [
{
"hint": "",
"key": {
"type": "SPT_ArchiveUsage",
"name": "hosts/Server1/MultimediaStorage.AliceBlue/MultimediaStorage"
},
"labels": [],
"value_double": 27.851564407348633
}
],
"fails": []
}

value_double is the the archive occupation percentage.


Get information about the archive contents.
POST http://IP-address:port/prefix/grpc
Request body:

{
"method": "axxonsoft.bl.archive.ArchiveService.GetRecordingInfo",
"data": { "update_cache": false, "access_point": "hosts/Server1/MultimediaStorage.AliceBlue/
MultimediaStorage"}
}

where "access_point" is taken from the first request.


Response:

{
"recording_info": {
"system_size": "292",
"recording_size": "30134",
"recording_rate": "303597",
"capacity": "30720",
"last_update": "1551865173"
}
}

gRPC API  –  158


    Integration SDK

where "capacity" is the archive size in megabytes.

2.7.10 Manage archives using gRPC API (ConfigurationService)

2.7.10.1 Get info about archives using gRPC API methods

{
"method":"axxonsoft.bl.config.ConfigurationService.ListUnits",
"data":{
"unit_uids":["hosts/Server1/MultimediaStorage.Aqua"]
}
}

Response example (local archive):


Click to expand...

gRPC API  –  159


    Integration SDK

{
"units": [
{
"uid": "hosts/Server1/MultimediaStorage.Aqua",
"display_id": "Aqua",
"type": "MultimediaStorage",
"display_name": "Archive Aqua",
"access_point": "",
"properties": [
{
"id": "display_name",
"name": "Display Name",
"type": "string",
"readonly": false,
"value_string": "Archive Aqua"
},
{
"id": "enabled",
"name": "Enabled",
"type": "bool",
"readonly": false,
"value_bool": true
}
],
"units": [
{
"uid": "hosts/Server1/MultimediaStorage.Aqua/ArchiveVolume/H:/
archiveAqua.afs",
"display_id": "H:/archiveAqua.afs",
"type": "ArchiveVolume",
"display_name": "",
"access_point": "",
"properties": [
{
"id": "file_size",
"name": "Volume size(GB)",
"type": "int32",
"readonly": true,
"value_int32": 1
}
],
"units": [],
"factory": [],
"destruction_args": [
{
"id": "remove_file",
"name": "Remove volume file",
"type": "bool",
"readonly": false,
"value_bool": false
}
],
"discoverable": false,
"status": "UNIT_STATUS_ACTIVE",
"stripped": false,

gRPC API  –  160


    Integration SDK

"opaque_params": [],
"assigned_templates": []
},
{
"uid": "hosts/Server1/MultimediaStorage.Aqua/ArchiveContext/
b73f4b6c-2962-5d51-e9ee-ceb5420b4cd2",
"display_id": "hosts/Server1/DeviceIpint.10/SourceEndpoint.video:0:0",
"type": "ArchiveContext",
"display_name": "",
"access_point": "",
"properties": [
{
"id": "streaming_id",
"name": "Archive Streaming ID",
"type": "string",
"readonly": false,
"enum_constraint": {
"items": [
{
"name": "axis",
"properties": [],
"value_string": "hosts/Server1/DeviceIpint.10/
SourceEndpoint.video:0:0"
},
{
"name": "axis",
"properties": [],
"value_string": "hosts/Server1/DeviceIpint.10/
SourceEndpoint.video:0:1"
}
]
},
"value_string": "hosts/Server1/DeviceIpint.10/
SourceEndpoint.video:0:0"
},
{
"id": "constant_recording",
"name": "Constant recording",
"type": "bool",
"readonly": false,
"value_bool": true
},
{
"id": "prerecord_sec",
"name": "Prerecording, seconds",
"type": "int32",
"readonly": false,
"value_int32": 0
},
{
"id": "specific_fps",
"name": "Specific FPS",
"type": "double",
"readonly": false,
"value_double": 0
},

gRPC API  –  161


    Integration SDK

{
"id": "archive_name",
"name": "Archive display name",
"type": "string",
"readonly": true,
"value_string": "Archive Aqua"
}
],
"units": [],
"factory": [],
"destruction_args": [],
"discoverable": false,
"status": "UNIT_STATUS_ACTIVE",
"stripped": false,
"opaque_params": [],
"assigned_templates": []
}
],
"destruction_args": [],
"discoverable": false,
"status": "UNIT_STATUS_ACTIVE",
"stripped": false,
"opaque_params": [],
"assigned_templates": []
}
],
"unreachable_objects": [],
"not_found_objects": []
}

Response example (network archive):


Click to expand...

gRPC API  –  162


    Integration SDK

"units": [
{
"uid": "hosts/Server1/MultimediaStorage.Lime",
"display_id": "Lime",
"type": "MultimediaStorage",
"display_name": "mr.Lime",
"access_point": "",
"properties": [
{
"id": "display_name",
"name": "Display Name",
"type": "string",
"readonly": false,
"value_string": "mr.Lime"
},
{
"id": "enabled",
"name": "Enabled",
"type": "bool",
"readonly": false,
"value_bool": true
}
],
"units": [
{
"uid": "hosts/Server1/MultimediaStorage.Lime/ArchiveVolume/\\\
\192.168.25.112\\1\\archiveLime.afs",
"display_id": "\\\\192.168.25.112\\1\\archiveLime.afs",
"type": "ArchiveVolume",
"display_name": "",
"access_point": "",
"properties": [
{
"id": "user",
"name": "Login",
"type": "string",
"readonly": false,
"value_string": "Tester"
},
{
"id": "password",
"name": "Password",
"type": "string",
"readonly": false,
"value_string": "123456"
},
{
"id": "file_size",
"name": "Volume size(GB)",
"type": "int32",
"readonly": true,
"value_int32": 2
}
],
"units": [],

gRPC API  –  163


    Integration SDK

"factory": [],
"destruction_args": [
{
"id": "remove_file",
"name": "Remove volume file",
"type": "bool",
"readonly": false,
"value_bool": false
}
],
"discoverable": false,
"status": "UNIT_STATUS_ACTIVE",
"stripped": false,
"opaque_params": [],
"assigned_templates": []
}
],
"factory": [],
"destruction_args": [],
"discoverable": false,
"status": "UNIT_STATUS_ACTIVE",
"stripped": false,
"opaque_params": [],
"assigned_templates": []
}
],
"unreachable_objects": [],
"not_found_objects": []
}

where units contains:


• file/section of the archive (ArchiveVolume);
• linked cameras (ArchiveContext).
Get info about linked cameras:

{
"method":"axxonsoft.bl.config.ConfigurationService.ListUnits",
"data":{
"unit_uids":["hosts/Server1/MultimediaStorage.Aqua/ArchiveContext/b73f4b6c-2962-5d51-
e9ee-ceb5420b4cd2"]
}
}

Response example:
Click to expand...

gRPC API  –  164


    Integration SDK

{
"units": [
{
"uid": "hosts/Server1/MultimediaStorage.Aqua/ArchiveContext/b73f4b6c-2962-5d51-
e9ee-ceb5420b4cd2",
"display_id": "hosts/Server1/DeviceIpint.10/SourceEndpoint.video:0:0",
"type": "ArchiveContext",
"display_name": "",
"access_point": "",
"properties": [
{
"id": "streaming_id",
"name": "Archive Streaming ID",
"type": "string",
"readonly": false,
"enum_constraint": {},
"value_string": "hosts/Server1/DeviceIpint.10/SourceEndpoint.video:0:1"
},
{
"id": "constant_recording",
"name": "Constant recording",
"type": "bool",
"readonly": false,
"value_bool": false
},
{
"id": "prerecord_sec",
"name": "Prerecording, seconds",
"type": "int32",
"readonly": false,
"value_int32": 2
},
{
"id": "specific_fps",
"name": "Specific FPS",
"type": "double",
"readonly": false,
"value_double": 0
},
{
"id": "archive_name",
"name": "Archive display name",
"type": "string",
"readonly": true,
"value_string": "Archive Aqua"
}
],
"units": [],
"factory": [],
"destruction_args": [],
"discoverable": false,
"status": "UNIT_STATUS_INACTIVE",
"stripped": false,
"opaque_params": [],
"assigned_templates": []

gRPC API  –  165


    Integration SDK

}
],
"unreachable_objects": [],
"not_found_objects": []
}

2.7.10.2 Create archive using gRPC API methods

On this page:

• Creating an archive entity


• Adding an archive file
• Linking a camera to archive
• Changing a stream linked to the
archive

2.7.10.2.1 Creating an archive entity

{
"method": "axxonsoft.bl.config.ConfigurationService.ChangeConfig",
"data": {
"added": [
{
"uid": "hosts/Server1",
"units": [
{
"type": "MultimediaStorage",
"properties": [
{
"id": "color",
"value_string": "Pink",
"properties": []
},
{
"id": "display_name",
"value_string": "Pink",
"properties": []
}
],
"units": [],
"opaque_params": []
}
],
"opaque_params": []
}
]
}
}

where
• uid - Server on which the archive is created;

gRPC API  –  166


    Integration SDK

• units - properties.

2.7.10.2.2 Adding an archive file

{
"method": "axxonsoft.bl.config.ConfigurationService.ChangeConfig",
"data": {
"added": [
{
"uid": "hosts/Server1/MultimediaStorage.Red",
"units": [
{
"type": "ArchiveVolume",
"properties": [
{
"id": "volume_type",
"properties": [
{
"id": "file_name",
"value_string": "D:/archiveRed.afs"
}
],
"value_string": "local"
},
{
"id": "file_size",
"value_int32": 2
},
{
"id": "format",
"value_bool": true
}
]
}
]
}
]
}
}

2.7.10.2.3 Linking a camera to archive


Creating an ArchiveContext with constant recording:

gRPC API  –  167


    Integration SDK

{
"method": "axxonsoft.bl.config.ConfigurationService.ChangeConfig",
"data": {
"added": [
{
"uid": "hosts/Server1/MultimediaStorage.Yellow",
"units": [
{
"type": "ArchiveContext",
"properties": [
{
"id": "camera_ref",
"value_string": "hosts/Server1/DeviceIpint.10/
SourceEndpoint.video:0:0"
},
{
"id": "constant_recording",
"value_bool": true
},
{
"id": "prerecord_sec",
"value_int32": 0
},
{
"id": "specific_fps",
"value_double": 0
}
]
}
]
}
]
}
}

The response will contain uid of the added ArchiveContext:

{
"failed": [],
"added": [
"hosts/Server1/MultimediaStorage.Yellow/ArchiveContext/b73f4b6c-2962-5d51-e9ee-
ceb5420b4cd2"
]
}

gRPC API  –  168


    Integration SDK

2.7.10.2.4 Changing a stream linked to the archive

{
"method":"axxonsoft.bl.config.ConfigurationService.ChangeConfig",
"data":{
"changed":[{
"uid": "hosts/Server1/MultimediaStorage.Aqua/ArchiveContext/b73f4b6c-2962-5d51-
e9ee-ceb5420b4cd2",
"type": "ArchiveContext",
"properties": [
{
"id": "streaming_id",
"value_string": "hosts/Server1/DeviceIpint.10/SourceEndpoint.video:0:0"
}]
}
]
}
}

2.7.10.3 Remove archive using gRPC API methods

On this page:

• Remove entire archive


• Removing the archive and
archive file
• Remove the camera linking
• Remove the archive volume

2.7.10.3.1 Remove entire archive

{
"method":"axxonsoft.bl.config.ConfigurationService.ChangeConfig",
"data":{
"removed":[
{
"uid": "hosts/Server1/MultimediaStorage.Aqua",
"type": "MultimediaStorage",
"properties": [],
"units": [],
"opaque_params": []
}]
}
}

gRPC API  –  169


    Integration SDK

2.7.10.3.2 Removing the archive and archive file

{
"method":"axxonsoft.bl.config.ConfigurationService.ChangeConfig",
"data":{
"removed" : [
{
"uid" : "hosts/Server1/MultimediaStorage.AliceBlue/ArchiveVolume/E:/
archiveAliceBlue.afs",
"properties": [
{
"id": "remove_file",
"value_bool": true
}]
},
{
"uid": "hosts/Server1/MultimediaStorage.AliceBlue"
}]
}
}

2.7.10.3.3 Remove the camera linking

{
"method": "axxonsoft.bl.config.ConfigurationService.ChangeConfig",
"data": {
"removed": [
{
"uid": "hosts/Server1/MultimediaStorage.AliceBlue/ArchiveContext/580063c3-71d6-
a265-0ae1-4a1fef231f5c",
"type": "ArchiveContext",
"properties": [],
"units": [],
"opaque_params": []
}
]
}
}

2.7.10.3.4 Remove the archive volume

{
"method": "axxonsoft.bl.config.ConfigurationService.ChangeConfig",
"data": {
"removed": [
{
"uid": "hosts/Server1/MultimediaStorage.Red/ArchiveVolume/D:/archiveRed.afs"
}
]
}
}

gRPC API  –  170


    Integration SDK

2.7.11 Search in archive using gRPC API methods

2.7.11.1 gRPC API Face search


POST http://IP-address:port/prefix/grpc
Request body:

"method": "axxonsoft.bl.events.EventHistoryService.FindSimilarObjects",
"data": {
"session": 0,
"is_face": true,
"minimal_score": 0.75,
"jpeg_image": "",
"range": {
"begin_time": "20200916T104305.137",
"end_time": "20200918T105305.137"
},
"origin_ids":
[
"hosts/DESKTOP-FQETIKR/DeviceIpint.2/SourceEndpoint.video:0:0"
],
"limit": 1000,
"offset": 0
}
}

where jpeg_image is a picture with a byte-serial face in the format: /9j/4AAQSkZJRgABAQEAYABgAAD/


4REGRXhpZgAATU0AKgAA etc.
Response example:
Click to expand...

gRPC API  –  171


    Integration SDK

{
"items": [
{
"event": {
"guid": "f136d184-9101-417d-a24c-edb46aad113f",
"timestamp": "20200917T071919.869000",
"state": "SPECIFIED",
"origin_deprecated": "hosts/DESKTOP-FQETIKR/DeviceIpint.2/SourceEndpoint.video:0:0",
"origin_ext": {
"access_point": "hosts/DESKTOP-FQETIKR/DeviceIpint.2/SourceEndpoint.video:0:0",
"friendly_name": "Camera"
},
"offline_analytics_source": "",
"detector_deprecated": "hosts/DESKTOP-FQETIKR/AVDetector.2/EventSupplier",
"detector_ext": {
"access_point": "hosts/DESKTOP-FQETIKR/AVDetector.2/EventSupplier",
"friendly_name": "Face detection"
},
"node_info": {
"name": "DESKTOP-FQETIKR",
"friendly_name": ""
},
"event_type": "faceAppeared",
"multi_phase_id": "",
"detectors_group": [
"DG_FACE_DETECTOR",
"DG_TEMPERATURE_DETECTOR"
],
"details": [
{
"rectangle": {
"x": 0.2397222222222222,
"y": 0.135,
"w": 0.12541666666666665,
"h": 0.21518518518518515,
"index": 3203
}
},
{
"face_recognition_result": {
"begin_time": "1600327157949",
"best_quality": 0.618347704410553,
"age": 0,
"gender": "UNKNOWN",
"temperature": {
"value": -1000,
"unit": "CELSIUS"
}
}
},
{
"byte_vector": {
"data": "sEYKPSAwkj0iwZu9yl/
Tu5kP4L01KsW7Z6KVPUd6zr2SdYy9s91iveWm7jxi3BQ9MWaCPCcnlL1WbKU8z/
PEvMO58bxJp5q9TmdNPYn8AL1GGso8j8A4vHdw4zybxvc8HdeUPaF4Yj1AZp69dx8OvEgE3L1aKM89ARirPePB1jrVqQ
29ongXvX6lKz5QYyK9uMpVvX+Yeb2E58Q9WciRPV2noL21kaG7zEKavNElXr0T3yK97HV5vYU3kD1p08c9zxMPPXQM8T
y1hE89YXCBPIuhyz23vQM+QuGqvPBjVT0lV9U5m0TKPESvOT1iM8w9ZzebvU4Eiz3ZD/

gRPC API  –  172


    Integration SDK

+9HvhCvfkMyryHlKO7dAooO+zbCz2NJiw8OMyxunfPar28Uh2+cqiXPV6I273IQHU8O5GVvfDPbTzWkw6+eYX+vYTAij
0kAIy9wXKFPDKGHb3mhnk9CXMCPSdEV7z52ms9vcI1vZrSbTxs0Wm9RyQXvXv8273RKMw8eyxjPOWyIr4MzkE98sjLPX
FnEz6CkTg9cyyHvVlwJry7s3E9JOgEPRcYYrreLLw7cYQcvENyJ70+8K88P+iZPGhTUjxOpGW84rJEPbpDmb3zL9W8gu
GDPGiXiz0Z5IM91zFlPYnRl7yXnTI8oLTfvfCUOz3IJ1C976yNPfCMg7xRczA8kM+4vf5S5L0G3t28ZiEzPFFzmb3Ouo
G78SMCPblR47zD0SA9WRzJveoSirwH5nm9XRBMPW3G1z2zrH89VvizPP2a2b2BUCC9KAmUvc52cj3XlU08zoJbvfY4fj
2vRy092im+PS+FvTyydnc9iCouvXPY4T3i5jm8ynIovNCd0jwiFS69Hs7IPfpBxbxt0SI90CJzPYNpgr0SW7491eQ3vZ
fuvTyUnM09ZEQ2vZgG1rxbS2E9dnmVPZZXuLwPdN69JBiSvFggoLvnZeG77tyWvVSFVTxVBxo9seqbvbLuXj2CBk89CE
pqvTt2M71VjBW9WAHdvHFg8T2myWS9uSAWPWPgM7mv5hK9dUvJvUuWrTx2EK09DYDCu5KVCj5Ekfm7OFAHvR6c07wkKn
c8WpXQvXrzrrzPpFG965MJPmlNRbykeN89SzjNPWzS9bu2UoG9p//Tu2UhVT2PpD49zNOHvX9M3LxaC2G9Z/
oNvXahjLyTNhg9FQWOvKtXW71VDA69il/
5PVlOcr1XDk494iowvbGY9jwXYLO9YhIjPv8Wubth8RO9MUt8PdAOSD1io+e7bwzYPXQsvj02Go06cleBvO+Vyjz21hU
7CFOnuzN1+z3tg8i9yN+nO9KgAb70sHg8fik9vSdd/Dzjd/k8pfSbO3poOjwj65Q9rujnu0cY8ztHdmc97YeavQ==",
"type": -1,
"subtype": "",
"version": 0
}
}
],
"params": []
},
"score": 0.994738
}
],
"offset": "1"
}
 
--ngpboundary
Content-Type: application/json; charset=utf-8
Content-Length: 33
 
{
"items": [],
"offset": "0"
}

2.7.11.2 gRPC API License plate search


POST http://IP-address:port/prefix/grpc
Request body:

gRPC API  –  173


    Integration SDK

{
"method": "axxonsoft.bl.events.EventHistoryService.ReadLprEvents",
"data": {
"range": {
"begin_time": "20200916T104305.137",
"end_time": "20200918T105305.137"
},
"filters": {
"filters": [
{
"subjects": "hosts/DESKTOP-FQETIKR/DeviceIpint.1/SourceEndpoint.video:0:0"
}
]
},
"limit":2,
"offset":0,
"search_predicate":"Н829МУ97"
}
}

Response example:
Click to expand...

gRPC API  –  174


    Integration SDK

{
"items": [
{
"event_type": "ET_DetectorEvent",
"subject": "hosts/DESKTOP-FQETIKR/DeviceIpint.1/SourceEndpoint.video:0:0",
"body": {
"@type": "type.googleapis.com/axxonsoft.bl.events.DetectorEvent",
"guid": "825bd3c9-adef-4ec3-ae23-2e8b6a7d2e8e",
"timestamp": "20200917T073828.069000",
"state": "HAPPENED",
"origin_deprecated": "hosts/DESKTOP-FQETIKR/DeviceIpint.1/SourceEndpoint.video:0:0",
"origin_ext": {
"access_point": "hosts/DESKTOP-FQETIKR/DeviceIpint.1/SourceEndpoint.video:0:0",
"friendly_name": "Camera"
},
"offline_analytics_source": "",
"detector_deprecated": "hosts/DESKTOP-FQETIKR/AVDetector.1/EventSupplier",
"detector_ext": {
"access_point": "hosts/DESKTOP-FQETIKR/AVDetector.1/EventSupplier",
"friendly_name": "License plate recognition (VT)"
},
"node_info": {
"name": "DESKTOP-FQETIKR",
"friendly_name": ""
},
"event_type": "plateRecognized",
"multi_phase_id": "",
"detectors_group": [
"DG_LPR_DETECTOR"
],
"details": [
{
"auto_recognition_result": {
"direction": 1,
"time_begin": "20200917T073827.309000",
"time_end": "20200917T073828.349000",
"hypotheses": [
{
"ocr_quality": 81,
"plate_full": "Н829МУ97",
"plate_rectangle": {
"x": 0.36388888888888887,
"y": 0.65625,
"w": 0.19722222222222224,
"h": 0.04340277777777779,
"index": 0
},
"time_best": "20200917T073828.069000",
"country": "ru"
},
{
"ocr_quality": 39,
"plate_full": "НН299У97",
"plate_rectangle": {
"x": 0.36388888888888887,

gRPC API  –  175


    Integration SDK

"y": 0.65625,
"w": 0.19722222222222224,
"h": 0.04340277777777779,
"index": 0
},
"time_best": "20200917T073828.069000",
"country": "ru"
},
{
"ocr_quality": 51,
"plate_full": "Н829МУ*7*",
"plate_rectangle": {
"x": 0.36388888888888887,
"y": 0.65625,
"w": 0.19722222222222224,
"h": 0.04340277777777779,
"index": 0
},
"time_best": "20200917T073828.069000",
"country": "ru"
}
]
}
}
],
"params": []
},
"subjects": [
"hosts/DESKTOP-FQETIKR/DeviceIpint.1/SourceEndpoint.video:0:0",
"hosts/DESKTOP-FQETIKR/AVDetector.1/EventSupplier"
],
"localization": {
"text": "Camera \"Camera\". License plate recognition detection triggered, number
\"Н829МУ97\""
}
},
{
"event_type": "ET_DetectorEvent",
"subject": "hosts/DESKTOP-FQETIKR/DeviceIpint.1/SourceEndpoint.video:0:0",
"body": {
"@type": "type.googleapis.com/axxonsoft.bl.events.DetectorEvent",
"guid": "adc555c5-850a-44fb-9ee3-26978799f3ab",
"timestamp": "20200917T073705.291000",
"state": "HAPPENED",
"origin_deprecated": "hosts/DESKTOP-FQETIKR/DeviceIpint.1/SourceEndpoint.video:0:0",
"origin_ext": {
"access_point": "hosts/DESKTOP-FQETIKR/DeviceIpint.1/SourceEndpoint.video:0:0",
"friendly_name": "Camera"
},
"offline_analytics_source": "",
"detector_deprecated": "hosts/DESKTOP-FQETIKR/AVDetector.1/EventSupplier",
"detector_ext": {
"access_point": "hosts/DESKTOP-FQETIKR/AVDetector.1/EventSupplier",
"friendly_name": "License plate recognition (VT)"
},
"node_info": {

gRPC API  –  176


    Integration SDK

"name": "DESKTOP-FQETIKR",
"friendly_name": ""
},
"event_type": "plateRecognized",
"multi_phase_id": "",
"detectors_group": [
"DG_LPR_DETECTOR"
],
"details": [
{
"auto_recognition_result": {
"direction": 1,
"time_begin": "20200917T073704.531000",
"time_end": "20200917T073705.571000",
"hypotheses": [
{
"ocr_quality": 81,
"plate_full": "Н829МУ97",
"plate_rectangle": {
"x": 0.36388888888888887,
"y": 0.65625,
"w": 0.19722222222222224,
"h": 0.04340277777777779,
"index": 0
},
"time_best": "20200917T073705.291000",
"country": "ru"
},
{
"ocr_quality": 39,
"plate_full": "НН299У97",
"plate_rectangle": {
"x": 0.36388888888888887,
"y": 0.65625,
"w": 0.19722222222222224,
"h": 0.04340277777777779,
"index": 0
},
"time_best": "20200917T073705.291000",
"country": "ru"
},
{
"ocr_quality": 51,
"plate_full": "Н829МУ*7*",
"plate_rectangle": {
"x": 0.36388888888888887,
"y": 0.65625,
"w": 0.19722222222222224,
"h": 0.04340277777777779,
"index": 0
},
"time_best": "20200917T073705.291000",
"country": "ru"
}
]
}

gRPC API  –  177


    Integration SDK

}
],
"params": []
},
"subjects": [
"hosts/DESKTOP-FQETIKR/DeviceIpint.1/SourceEndpoint.video:0:0",
"hosts/DESKTOP-FQETIKR/AVDetector.1/EventSupplier"
],
"localization": {
"text": "Camera \"Camera\". License plate recognition detection triggered, number
\"Н829МУ97\""
}
}
],
"unreachable_subjects": []
}
 
--ngpboundary
Content-Type: application/json; charset=utf-8
Content-Length: 46
 
{
"items": [],
"unreachable_subjects": []
}

2.7.11.3 gRPC API MomentQuest smart search (VMDA)


POST http://IP-address:port/prefix/grpc
Request body:

{
"method": "axxonsoft.bl.vmda.VMDAService.ExecuteQuery",
"data": {
"access_point": "hosts/DESKTOP-FQETIKR/VMDA_DB.0/Database",
"camera_ID": "AVDetector.1/SourceEndpoint.vmda",
"schema_ID": "vmda_schema",
"dt_posix_start_time": "20200916T114345.368",
"dt_posix_end_time": "20200918T134347.240",
"query": "figure fZone=polygon(0.3,0.3,0.7,0.3,0.7,0.7,0.3,0.7); figure
fDir=(ellipses(-10000, -10000, 10000, 10000) - ellipses(-0, -0, 0, 0));set r =
group[obj=vmda_object] { res = or(fZone((obj.left + obj.right) / 2, obj.bottom)) }; result =
r.res;",
"language": "EVENT_BASIC"
}
}

Response example:
Click to expand...

gRPC API  –  178


    Integration SDK

--ngpboundary
Content-Type: application/json; charset=utf-8
Content-Length: 6271
 
{
"intervals": [
{
"limit": {
"begin_time": "20200917T065039.101000",
"end_time": "20200917T065041.181000"
},
"objects": [
{
"id": "11",
"left": 0.60833333333333328,
"top": 0.28125,
"right": 0.72777777777777775,
"bottom": 0.328125
}
]
},
{
"limit": {
"begin_time": "20200917T065041.181000",
"end_time": "20200917T065041.541000"
},
"objects": [
{
"id": "20",
"left": 0.56111111111111112,
"top": 0.34722222222222221,
"right": 0.67777777777777781,
"bottom": 0.38541666666666663
}
]
},
{
"limit": {
"begin_time": "20200917T065047.741000",
"end_time": "20200917T065047.821000"
}

2.7.12 Manage layouts using gRPC API methods


Create a new layout named "Layout" without specifying the id.
POST http://IP-address:port/prefix/grpc
Request body:

gRPC API  –  179


    Integration SDK

{
"method": "axxonsoft.bl.layout.LayoutManager.Update",
"data": {
"created":{
"display_name":"Layout"
}
}
}

The response will contain the id

{
"created_layouts": [
"b0bd2b36-064a-4cc4-9a6f-382de02be7ef"
]
}

Get a list of layouts.


POST http://IP-address:port/prefix/grpc
Request body:

{
"method": "axxonsoft.bl.layout.LayoutManager.ListLayouts",
"data": {
"view": "VIEW_MODE_FULL"
}
}

Response:

gRPC API  –  180


    Integration SDK

{
"current": "",
"items": [
{
"meta": {
"layout_id": "b0bd2b36-064a-4cc4-9a6f-382de02be7ef",
"owned_by_user": true,
"shared_with": [],
"etag": "63F1DF706EE001985D858352029DB0BDBCF257FC"
},
"body": {
"id": "b0bd2b36-064a-4cc4-9a6f-382de02be7ef",
"display_name": "my",
"is_user_defined": false,
"is_for_alarm": false,
"alarm_mode": false,
"map_id": "",
"map_view_mode": "MAP_VIEW_MODE_LAYOUT_ONLY",
"cells": {}
}
}
],
"special_layouts": {
"favorite": {
"id": "",
"enabled": false
},
"alarm": {
"id": "",
"enabled": false
}
}
}

2.7.13 Manage users using gRPC API methods


Roles and Users

2.7.13.1 Get list of all roles and users

{
"method":"axxonsoft.bl.security.SecurityService.ListConfig",
"data":{
}
}

The response will contain:


• roles;
• users;
• user_assignments (correspondance of roles and users);

gRPC API  –  181


    Integration SDK

• ldap_servers (LDAP servers);


• pwd_policy (security policy);
• ip_filters (IP-address filtering).

2.7.13.2 Create roles and users

On this page:

• Create a role
• Creater a user
• Add a user to the role
• Block and unblock the users
• Check username availability

2.7.13.2.1 Create a role

{
"method": "axxonsoft.bl.security.SecurityService.ChangeConfig",
"data": {
"added_roles": [
{
"index": "60c60ed4-47e3-4d5e-9737-0f00b684f535",
"name": "newRole",
"comment": "comment",
"timezone_id": "00000000-0000-0000-0000-000000000000",
"supervisor": "00000000-0000-0000-0000-000000000000"
}
]
}
}

Attention!
timezone_id - id of the time zone. If 00000000-0000-0000-0000-000000000000, then the time zone is Always.
supervisor - id of the role that will be a supervisor (see Creating and configuring roles). If
00000000-0000-0000-0000-000000000000, then the supervisor is not defined.

gRPC API  –  182


    Integration SDK

2.7.13.2.2 Creater a user

{
"method": "axxonsoft.bl.security.SecurityService.ChangeConfig",
"data": {
"added_users": [
{
"index": "393b06f3-d419-441d-8834-b5d1824c135a",
"login": "user",
"name": "user",
"comment": "comment",
"date_created": "",
"date_expires": "",
"enabled": true,
"ldap_link": {
"server_id": "",
"username": "",
"dn": ""
},
"restrictions": {
"web_count": 0,
"mobile_count": 0
},
"email": "",
"cloud_id": 160,
"extra_fields": {
"SocialId": "test",
"IpAddress": "160.85.208.94",
"CompanyId": "test"
},
],
"locked_till": ""
}
]
}
}

2.7.13.2.3 Add a user to the role

{
"method": "axxonsoft.bl.security.SecurityService.ChangeConfig",
"data": {
"added_users_assignments": [
{
"user_id": "52537c93-3efc-4465-b553-1c1ccf42faef",
"role_id": "75863211-6fe5-4a79-9abf-f8137b1e767c"
}
]
}
}

gRPC API  –  183


    Integration SDK

2.7.13.2.4 Block and unblock the users

{
"method":"axxonsoft.bl.security.SecurityService.ChangeConfig",
"data":{
"modified_users": [
{
"index": "fa00ea14-0ff5-4586-b6c8-ea449391a3a8",
"login": "user1",
"name": "user1",
"comment": "",
"enabled": true,
"ldap_server_id": "00000000-0000-0000-0000-000000000000",
"ldap_domain_name": "",
"restrictions": {
"web_count": 2147483647,
"mobile_count": 2147483647
},
"email": "",
"cloud_id": "0",
"extra_fields": {
"SocialId": "test",
"IpAddress": "160.85.208.94",
"CompanyId": "test"
},
],
"locked_till": "29990101T000000"
}
]
}
}

where the locked_till parameter specifies the date and time in the YYYYMMDDTHHMMSS format until which the user will be
blocked.
To unblock a user, set the date and time less than the current one.

2.7.13.2.5 Check username availability

{
"method": "axxonsoft.bl.security.SecurityService.CheckLogin",
"data": {
"login": "user"
}
}

The response will contain the following information:


• "result": "TAKEN" - a user with that name already exists in the system;
• "result": "FREE" - thare is no user with this name in the system.

gRPC API  –  184


    Integration SDK

2.7.13.3 Edit roles and users

On this page:

• Edit a role
• Edit a user
• Assign a password to a user

2.7.13.3.1 Edit a role

{
"method": "axxonsoft.bl.security.SecurityService.ChangeConfig",
"data": {
"modified_roles": [
{
"index": "21b8907c-bee4-4729-acf1-eeab31354b8b",
"name": "57",
"comment": "1581664337",
"timezone_id": "00000000-0000-0000-0000-000000000000",
"cloud_id": 11648,
"supervisor": "2b74c26e-eb61-4499-b763-9df13148fb81"
}
]
}
}

gRPC API  –  185


    Integration SDK

2.7.13.3.2 Edit a user

{
"method": "axxonsoft.bl.security.SecurityService.ChangeConfig",
"data": {
"modified_users": [
{
"index": "26248a39-584f-4efb-8ad6-ccfb026b4c26",
"login": "usr",
"name": "usr_lab",
"comment": "now 1581664730",
"date_created": "20200213T114440",
"date_expires": "",
"enabled": false,
"ldap_server_id": "00000000-0000-0000-0000-000000000000",
"ldap_domain_name": "",
"restrictions": {
"web_count": 0,
"mobile_count": 500
},
"email": "",
"cloud_id": 158,
"extra_fields": {
"SocialId": "test",
"IpAddress": "160.85.208.94",
"CompanyId": "test"
},
],
"locked_till": "19700101T000000"
}
]
}
}

2.7.13.3.3 Assign a password to a user

{
"method": "axxonsoft.bl.security.SecurityService.ChangeConfig",
"data": {
"modified_user_passwords": [
{
"user_index": "b7ecfde8-b080-45b9-9cb8-76ad85992666",
"password": "BLekX1kJElmI9g",
"expire_date": ""
}
]
}
}

gRPC API  –  186


    Integration SDK

2.7.13.4 Remove roles and users

On this page:

• Unlink a user from a role


• Remove a user
• Remove a role

2.7.13.4.1 Unlink a user from a role

{
"method": "axxonsoft.bl.security.SecurityService.ChangeConfig",
"data": {
"removed_users_assignments": [
{
"user_id": "26248a39-584f-4efb-8ad6-ccfb026b4c26",
"role_id": "2b74c26e-eb61-4499-b763-9df13148fb81"
}
]
}
}

2.7.13.4.2 Remove a user

{
"method": "axxonsoft.bl.security.SecurityService.ChangeConfig",
"data": {
"removed_users": ["52537c93-3efc-4465-b553-1c1ccf42faef"]
}
}

2.7.13.4.3 Remove a role

{
"method": "axxonsoft.bl.security.SecurityService.ChangeConfig",
"data": {
"removed_roles": ["75863211-6fe5-4a79-9abf-f8137b1e767c"]
}
}

gRPC API  –  187


    Integration SDK

2.7.13.5 Global access settings

On this page:

• Get global role parameters


• Edit global role parameters

2.7.13.5.1 Get global role parameters

{
"method":"axxonsoft.bl.security.SecurityService.ListGlobalPermissions",
"data":{
"role_ids":"356e84ea-8b66-4cc7-a330-feaa34fff83d"
}
}

Response example:

gRPC API  –  188


    Integration SDK

{
"permissions": {
"21b8907c-bee4-4729-acf1-eeab31354b8b": {
"unrestricted_access": "UNRESTRICTED_ACCESS_NO",
"maps_access": "MAP_ACCESS_FULL",
"feature_access": [
"FEATURE_ACCESS_SEARCH",
"FEATURE_ACCESS_MINMAX_BUTTON_ALLOWED",
"FEATURE_ACCESS_ADD_CAMERA_TO_LAYOUT_IN_MONITORING",
"FEATURE_ACCESS_ALLOW_SHOW_TITLES",
"FEATURE_ACCESS_ARCHIVES_SETUP",
"FEATURE_ACCESS_ALLOW_SHOW_PRIVACY_VIDEO_IN_ARCHIVE",
"FEATURE_ACCESS_SYSTEM_JOURNAL",
"FEATURE_ACCESS_LAYOUTS_TAB",
"FEATURE_ACCESS_ALLOW_DELETE_RECORDS",
"FEATURE_ACCESS_EXPORT",
"FEATURE_ACCESS_EDIT_PTZ_PRESETS",
"FEATURE_ACCESS_ALLOW_SHOW_FACES_IN_LIVE",
"FEATURE_ACCESS_DEVICES_SETUP",
"FEATURE_ACCESS_PROGRAMMING_SETUP",
"FEATURE_ACCESS_DOMAIN_MANAGING_OPS",
"FEATURE_ACCESS_USERS_RIGHTS_SETUP",
"FEATURE_ACCESS_SETTINGS_SETUP",
"FEATURE_ACCESS_ALLOW_BUTTON_MENU_CAMERA",
"FEATURE_ACCESS_DETECTORS_SETUP",
"FEATURE_ACCESS_ALLOW_UNPROTECTED_EXPORT",
"FEATURE_ACCESS_WEB_UI_LOGIN",
"FEATURE_ACCESS_CHANGING_LAYOUTS"
],
"alert_access": "ALERT_ACCESS_FULL",
"bookmark_access": "BOOKMARK_ACCESS_CREATE_PROTECT_EDIT_DELETE",
"default_camera_access": "CAMERA_ACCESS_FORBID",
"default_microphone_access": "MICROPHONE_ACCESS_FORBID",
"default_archive_access": "ARCHIVE_ACCESS_FORBID",
"default_videowall_access": "VIDEOWALL_ACCESS_FORBID"
}
}
}

gRPC API  –  189


    Integration SDK

2.7.13.5.2 Edit global role parameters

{
"method": "axxonsoft.bl.security.SecurityService.SetGlobalPermissions",
"data": {
"permissions": {
"21b8907c-bee4-4729-acf1-eeab31354b8b": {
"unrestricted_access": "UNRESTRICTED_ACCESS_NO",
"maps_access": "MAP_ACCESS_FULL",
"feature_access": [
"FEATURE_ACCESS_EDIT_PTZ_PRESETS",
"FEATURE_ACCESS_ALLOW_SHOW_FACES_IN_LIVE",
"FEATURE_ACCESS_ALLOW_UNPROTECTED_EXPORT",
"FEATURE_ACCESS_WEB_UI_LOGIN",
"FEATURE_ACCESS_CHANGING_LAYOUTS"
],
"alert_access": "ALERT_ACCESS_VIEW_ONLY"
}
}
}
}

Attention!
Only the parameters that are specified in the request will be edited.

2.7.13.6 Device access settings

On this page:

• Get device access settings


• Edit device access settings
• Edit PTZ control priority for
multiple devices

gRPC API  –  190


    Integration SDK

2.7.13.6.1 Get device access settings

{
"method": "axxonsoft.bl.security.SecurityService.ListObjectPermissions",
"data": {
"role_id": "b9060002-c7fc-48d9-9c5c-a16b9f5c4a82",
"camera_ids": [
"hosts/Server1/DeviceIpint.10/SourceEndpoint.video:0:0"
],
"microphone_ids": [
"hosts/Server1/DeviceIpint.10/SourceEndpoint.audio:0"
],
"telemetry_ids": [
"hosts/Server1/DeviceIpint.10/TelemetryControl.0"
],
"archive_ids": [
"hosts/Server1/MultimediaStorage.AliceBlue/MultimediaStorage"
],
"videowall_ids": []
}
}

2.7.13.6.2 Edit device access settings

{
"method": "axxonsoft.bl.security.SecurityService.SetObjectPermissions",
"data": {
"role_id": "b9060002-c7fc-48d9-9c5c-a16b9f5c4a82",
"permissions": {
"camera_access": {
"hosts/Server1/DeviceIpint.10/SourceEndpoint.video:0:0":
"CAMERA_ACCESS_ARCHIVE"
},
"microphone_access": {
"hosts/Server1/DeviceIpint.10/SourceEndpoint.audio:0":
"MICROPHONE_ACCESS_MONITORING"
},
"telemetry_priority": {
"hosts/Server1/DeviceIpint.10/TelemetryControl.0": "TELEMETRY_PRIORITY_LOW"
},
"archive_access": {
"hosts/Server1/MultimediaStorage.AliceBlue/MultimediaStorage":
"ARCHIVE_ACCESS_FULL"
},
"videowall_access": {}
}
}
}

gRPC API  –  191


    Integration SDK

2.7.13.6.3 Edit PTZ control priority for multiple devices

{
"method": "axxonsoft.bl.security.SecurityService.SetObjectPermissions",
"data": {
"role_id": "e99602c3-0730-44a0-9f7c-0ef242a6314f",
"permissions": {
"telemetry_priority": {
"hosts/Server1/DeviceIpint.6/TelemetryControl.0":
"TELEMETRY_PRIORITY_NO_ACCESS",
"hosts/Server1/DeviceIpint.7/TelemetryControl.0":
"TELEMETRY_PRIORITY_NO_ACCESS",
"hosts/Server1/DeviceIpint.8/TelemetryControl.0":
"TELEMETRY_PRIORITY_NO_ACCESS",
"hosts/Server1/DeviceIpint.9/TelemetryControl.0":
"TELEMETRY_PRIORITY_NO_ACCESS",
"hosts/Server1/DeviceIpint.10/TelemetryControl.0":
"TELEMETRY_PRIORITY_NO_ACCESS",
"hosts/Server1/DeviceIpint.11/TelemetryControl.0":
"TELEMETRY_PRIORITY_NO_ACCESS"
}
}
}
}

2.7.13.7 User security policy and IP-address filtering

On this page:

• User Security Policy Framework


• Edit the Security Policy
• Reset the Security Policy
• Change the IP filtering
• Reset the IP filtering

2.7.13.7.1 User Security Policy Framework

Configuring the user security policy

gRPC API  –  192


    Integration SDK

"pwd_policy": [
{
"policy_name": "",
"guid": "00000000-0000-0000-0000-000000000000",
"minimum_password_length": "0",
"maximum_password_age_days": "0",
"password_history_count": "0",
"maximum_failed_logon_attempts": "0",
"account_lockout_duration_minutes": "0",
"password_must_meet_complexity_requirements": false,
"forbid_multiple_user_sessions": false
}
],

2.7.13.7.2 Edit the Security Policy

{
"method": "axxonsoft.bl.security.SecurityService.ChangeConfig",
"data": {
"modified_pwd_policy": {
"method": "MM_OVERWRITE_DATA",
"data": [
{
"policy_name": "111",
"guid": "48fc6637-2077-4f06-9c43-f214b1735ef8",
"minimum_password_length": "1",
"maximum_password_age_days": "365",
"password_history_count": "10",
"maximum_failed_logon_attempts": "0",
"account_lockout_duration_minutes": "0",
"password_must_meet_complexity_requirements": true,
"forbid_multiple_user_sessions": false
}
]
}
}
}

2.7.13.7.3 Reset the Security Policy

{
"method": "axxonsoft.bl.security.SecurityService.ChangeConfig",
"data": {
"modified_pwd_policy": {
"method": "MM_OVERWRITE_DATA",
"data": []
}
}
}

gRPC API  –  193


    Integration SDK

2.7.13.7.4 Change the IP filtering

IP address filtering configuration

{
"method": "axxonsoft.bl.security.SecurityService.ChangeConfig",
"data": {
"modified_trusted_ip_list": {
"method": "MM_OVERWRITE_DATA",
"data": [
{
"guid": "b037d6b8-d826-483d-8893-54cbcad5030e",
"ipAddress": "10.0.37.159",
"prefix": 24
}
]
}
}
}

2.7.13.7.5 Reset the IP filtering

{
"method": "axxonsoft.bl.security.SecurityService.ChangeConfig",
"data": {
"modified_trusted_ip_list": {
"method": "MM_OVERWRITE_DATA",
"data": []
}
}
}

2.7.13.8 LDAP directories

On this page:

• Get a list of added LDAP


directories
• Add a LDAP directory
• Edit a LDAP directory
• Remove a LDAP directory
• Get a list of LDAP directory users

gRPC API  –  194


    Integration SDK

2.7.13.8.1 Get a list of added LDAP directories

{
"method":"axxonsoft.bl.security.SecurityService.ListConfig",
"data":{
}
}

Response example:

"ldap_servers": [
{
"index": "6b5769e8-1322-4666-9567-14d129a8548a",
"server_name": "qa.test",
"friendly_name": "QA.TEST",
"port": 389,
"base_dn": "ou=LOAD,dc=qa,dc=test",
"login": "cn=Tester QA-T. Tester,ou=LOAD,dc=qa,dc=test",
"password": "Zz123456",
"use_ssl": false,
"search_filter": "(objectClass=person)",
"login_attribute": "cn",
"dn_attribute": "distinguishedname",
"roles_assignments_for_new_users": [
"00000000-0000-0000-0000-000000000000"
]
},
{
"index": "d3231030-b7ce-4435-af85-ded1eb9b4622",
"server_name": "192.168.33.80",
"friendly_name": "ldap",
"port": 389,
"base_dn": "ou=Address,dc=itvgroup,dc=ru",
"login": "cn=admin,dc=axxondomain,dc=com",
"password": "jwxWWf4f",
"use_ssl": false,
"search_filter": "(objectClass=person)",
"login_attribute": "cn",
"dn_attribute": "entrydn",
"roles_assignments_for_new_users": [
"00000000-0000-0000-0000-000000000000"
]
}
],

gRPC API  –  195


    Integration SDK

2.7.13.8.2 Add a LDAP directory

{
"method": "axxonsoft.bl.security.SecurityService.ChangeConfig",
"data": {
"added_ldap_servers": {
"index": "d3231030-b7ce-4435-af85-ded1eb9b4622",
"server_name": "192.168.33.80",
"friendly_name": "ldap",
"port": 389,
"base_dn": "ou=Address,dc=itvgroup,dc=ru",
"login": "cn=admin,dc=axxondomain,dc=com",
"password": "jwxWWf4f",
"use_ssl": false,
"search_filter": "(objectClass=person)",
"login_attribute": "cn",
"dn_attribute": "entrydn",
"roles_assignments_for_new_users": [
"00000000-0000-0000-0000-000000000000"
]
}
}

2.7.13.8.3 Edit a LDAP directory

{
"method": "axxonsoft.bl.security.SecurityService.ChangeConfig",
"data": {
"modified_ldap_servers": [
{
"index": "d3231030-b7ce-4435-af85-ded1eb9b4622",
"server_name": "192.168.33.80",
"friendly_name": "ldap",
"port": 636,
"base_dn": "ou=Address,dc=itvgroup,dc=ru",
"login": "cn=admin,dc=axxondomain,dc=com",
"password": "jwxWWf4f",
"use_ssl": true,
"search_filter": "(objectClass=person)",
"login_attribute": "cn",
"dn_attribute": "entrydn",
"roles_assignments_for_new_users": [
"d4451805-13f2-4414-b0c5-6ae9f081e3e1"
]
}
]
}
}

gRPC API  –  196


    Integration SDK

2.7.13.8.4 Remove a LDAP directory

{
"method": "axxonsoft.bl.security.SecurityService.ChangeConfig",
"data": {
"removed_ldap_servers": ["d3231030-b7ce-4435-af85-ded1eb9b4622"]
}
}

2.7.13.8.5 Get a list of LDAP directory users

Attention!
LDAP directory must be available.

{
"method": "axxonsoft.bl.security.SecurityService.SearchLDAP",
"data": {
"ldap_server_id": "6b5769e8-1322-4666-9567-14d129a8548a"
}
}

Response example:

{
"entries": [
{
"login": "User1",
"dn": "CN=User1,OU=LOAD,DC=qa,DC=test"
},
{
"login": "User2",
"dn": "CN=User2,OU=LOAD,DC=qa,DC=test"
},
{
"login": "User3",
"dn": "CN=User3,OU=LOAD,DC=qa,DC=test"
},
{
"login": "User4",
"dn": "User4,OU=LOAD,DC=qa,DC=test"
},
{
"login": "User5",
"dn": "User5,OU=LOAD,DC=qa,DC=test"
}
]
}

gRPC API  –  197


    Integration SDK

2.7.14 Get heatmap using gRPC API methods


POST http://IP-address:port/prefix/grpc
Request body:

{
"method":"axxonsoft.bl.heatmap.HeatMapService.BuildHeatmap",
"data":
{
"access_point":"hosts/Server1/HeatMapBuilder.0/HeatMapBuilder",
"camera_ID":"hosts/Server1/AVDetector.13/SourceEndpoint.vmda",
"dt_posix_start_time":"20190320T200000.001",
"dt_posix_end_time":"20190321T200000.001",
"mask_size":{"width":320,"height":240},
"image_size":{"width":640,"height":480},
"result_type":"RESULT_TYPE_IMAGE"
},
"result_type":"RESULT_TYPE_IMAGE"
}

where 
• dt_posix_end_time and dt_posix_start_time specify the interval,
• image_size is the image size.

Note
To get the coordinates of the objects movement, it is necessary to specify the RESULT_TYPE_DATA value for the
result_type parameter in the request body.

Response:
{
"result": true,
"heatmap": [],
"image_data":
"iVBORw0KGgoAAAANSUhEUgAAAUAAAADwCAYAAABxLb1rAABD30lEQVR4AezUTY8cRx3H8V9V9dP07O7s7Hp37JA4OA9OeHAAYXHggIQQEreIh/
Me8KvgHfA6VlxB8oETsXJBAqScMFaIV5bIQhzv88zu7Ew/VRX/
npm1NyHkglC35d9HrumemaraKUv9BRERERERERERERERERERERERERE9t1TTP4CI/
tPWu9vwQCxPaOyUHniFnldqNurP6jkeKvmitQo+ky9z5f1oPjB6eg/
k23e3mj5eazCARC1Tx88ptem0um4Dc7sKzI+K0Py8DI0a92LI55AgylBPn2CJ5fxWbiR00M5jaZQjsB5haT8KKnsvKO09Y9197d2eRPGUIWQAiVr
lIn51+CR6P8s60Z2jjQ6KNMA01fi4K49s7IDA4cpKgVhKFsioOXmcp07hcBQDhUacKXz13EJPPZJJhbWDiU/
y8tcSxN8ba+8zgvLf2PQPIKK5On5eYcUZ/WYdv0k3vnNwLcX+WoD4xgQ/XBvipwnwctejK09upAEjPdRqvt5JBysZmQXGJbA7Vvh4EuL3u+t4/
SBCGRm18eT8V51JEUfe58a6+7Isb/
rcTWIAiVpC2hV7pXrW6FtFHN45HKTYvRLi9teO8L21Kb59xePmaoa+sQicg5biKb9YOaPgJIZOilgZjb08xMMTj9eWnuD9w2Uc/31Z5qcYPHa/
lPj9TdbvSnT3t+9uNX30xjCARC3ilBrUAcwjgyrVGNwY4/
Zahu9ftfjWygTL5yXC0kMXJXB+DoxGgLXzBkr00F8FlpZhQ4NOWuHq1RJp2JUvz7B9I8DyNEYRmdUo198MKvVHeL/f9JmbxAAStYVCDKVip/
WbZ6sx9roGP+md4Vbf41ZvipWzAtFoAny4g/LhPuxJAXfu4Ov+eQVtJIxLGuGNFZiX17Dy9bcRdxy+s64wyrv4wfkYf047SPoJ0klxU5b0pJux/
OW86aM3hQEkahEJUuK0GlijMEw8eqHDamIRVTIK+f7BR8j/
9AnGnxoM9xJkmUJV+dnCIFBIOh79T8ZYun42K1v4zjcQy9p+4jCISxwkwED2lsher2Pb9HmbxgAStck8SrHXCjByI2MjqWCsFG58Brd/hsm+wf4/
Y5ycVDjYr1CWbh7AUGFzEMJWMYJoivDgFDovYJxBGjgkxsye+Nne9d+Q2DZ93KYxgERtpTzqVmm5hnXkyhL2cIrJyCDLPI4OK0wnFpXce/
k6SNTss6Ulg6rQ8Fk5W6N8B73Iyj6hbOabPlWr6KZ/ABF9OWlg3UIhL15i59XiKh9J+Or41fdPr4uBizUXm1zekGYYQKLnnG/
6BzzHGECi54BX9au8KCX//OKK2ROs9ewt1OJpnt2r+fTFC/0XQdM/gIi+nL+4qUtnFJIliyAwMhTCUM0nyAii+ftA5mhTf1DPn1fR+8U+/
vKGxAAStZWEysmwXqEINZIohNnsInw0RKcDbA5CTKcGo2E1C9xqP0CaanRSj7DjoNMYiBJ4pTDMzWwvedP0qVqFASRqIbWIlZXrscTrekfC1elCr
3URbwyxXuUIwghFHmB9ff4YB0Z6J+HrX8sQXQug1pbhjOyhFfJKo7AyyS72BnLZMWv6nE1jAInaxPt8cQUqKZSM89KgWlKo5GkN3ngVcWWhHx4i3
chgpx7eqtkSHXjorkZ4YxnmK2vAG6+hDBXKQGNcaJxXCnGpoJ2XCPoXPn41BpCoZSROI+2A1ULhqAhwkpU49QHC1GMJfZjvvoPo9SFweAyUJSBBm
zEaSCJgcwPoraIIgXEa4HEWYl9y92jawUuZg7azAO4/
je0LjAEkapk6TsY6DKYW98ddvDocYSXq4J11wC4rBB2DJN2EurYhcz+71ivpoVaYJgZloPG4iPDgKMaHQ4W/
PO7hrcxjZZhBO78rU7Omz9o0BpCoRSR+I+X83vIox7Qb4NG/
unjQkWApeV+lWEssXuqWSJccIqlfcKmADgqlFDCzCp9OQozyAE8mwIMThfeOVvHKsUI4rRCWDtq6HXjkEsG86TM3iQEkaot5kDLj/
E5YWB9PrXpLovXeo3Xsv3KKg2yMXhQgDQJcSTyMTK7Hs+WAdUAhY2+qcFYC/5gkeP+TVbx0rNE7tegfTiWA9g/
a+d06tk0fuWkMIFGL1FHS1u1Epf1t/

gRPC API  –  198


    Integration SDK

2j6i2Od4m0J2sl4Bb9JVwAJX9rL0TMOia4j6KFlnUyB9wqFjFOrMBrGUkKNjQnw1sQhmFboH0yR5NXHQWXvaed2FXzW9HmbxgAStYQCcqnYqI5TH
akkU70re+c/ziODqJ9gOZBkGRkqBLRcF4tqZrFHIB92ZVxzEkZbwVQeYemwcpJBovrXsKh+Zyr7gXZ+VzbIt+9uNX3sRjGARG0iUdLe78G6+/
BVLjHcCUt7u5NVN51Wq17VAcQifosIXjLrofdQ8oXsAwnd0Fj3UMYHMu5r63aMcw+VhHYW3BecavoHENEzW+9u11GLJXQ9r9WmU2pQX2fv6wEks4
kKcX2R1MWf30OymNchlYc7m4WuHs7v12G9uK/
jt313q+njNo4BJGqZiwjWkZPAJZevl+c9jeEXqOO3mCQh9Nlnr4zfBQaQqIXqCNZmIbzscxH8UhK7Z8ue3TN+zzCARC13EcP/
BaNHRERERERERERERERERERERERERERERERERERERERERERERERERP9H/
2avbpIc1ZUwDCuJirDv5FSPume1pdqBF+cd1JZq1mfmmZk4b6ZSEpIQYOqPY/
t7IyqwQQhBN48RQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIoe
+Otl7Ao3V4Pa4af3w7bL1khO42APhDrYWvFTBE6GsDgN9YjR47t1s7h/wD9fl3IIjQ1/
W09QJuuRq4uhF4tAJANvjiHDWECKHPR1sv4BbL4bsGOXa0nzoWBiTcyPF56nhE8Ph22PoRIHQXPW29gFstwSeoJeBiFXSLAApsET7m4TcpYajnZU
gihL4m2noBt9bh9ei3CiATPUfUCgQz6GRcwI92xXc/zJ1FvN62A4I5dvU+Geu3x7fD1o8CoZvvaesF3GKKn0dO/
jx8fjvAFrELYycBlHSfgrYT6E7MZOBFQAU9nT8hiBD60gDgB/PwaRE/
Aa7CbYxegC2ippAKeQKffBIIieRYRDCOZw9k+Rkh9CUBwE+kkI3wC+jZ8TF88XuETseIe/
3SdRKKCKEvq9t6AXfVlfjFbdo3OjfbjxD6tgDgf6EMP4TQz/W09QIePnI7x+78VdMdXo+rxh/fDls/AYQ2CwDeURE/
doKqRmFbx663w66P5wBC9IgBwDupwE/
gY0d7v6ONYE+Oz36sYJhDqAFD9CgBwG9IYNlvdN2EHxM9+50TALqIH7Fjtp1k+12OYR5gRPcWAPxIFSoePKLd1suytQT8PIS2rhxkQe4sowQ62pH
jEzPJEBkhGHpAi9s0EGNTMGrAEd1iAHBFUwAoKszCR0DQf4/oCCyKkWAj+2g/OlmPMxfQ6NgPrUthDn+KYAtAZ8j1Yeuyz319XQ8ilwhO3H8/
h+NSwBNtFQB007C14gGOxkGBLEMwjN9HRIjkGyuOtI/YxHE1guFidt4VIOq6dF77c/YnCHoMM3hl/zORXJPdKeyRa/g19zLuuXGt/oqnMr+
+CUQpzN16/kAR/US09QK2bA18WsJPURFcPCzhczi+nzw5wJiP8fgJfLol5pNCUQBUA+iPD5hEJPQ+PIC6po5+X4j+
+M8JwHJddl2ZS66Zru3nLxFOOF/3cKpzGyi2xmT76Cpsh4Ak+mwPCeC18CXwNLLPCb20FVwCblfMNwIyRzAMKtGr96XPAxZ+nQFij1/
XBQSdAEgDgHoP8fyAX0J3hFOGXwVj836zMbPnpnsu72kEJs9jeA2WABIt9VAAXgPfWvRq1AbIOEJ1LsY0zqvPGe23E/oRFhGJsDYFkDsy/
GTrvwuCckyBHNbA7ixz9DaXATx33eIBpWcydd/
D+BbiaWxEP20bCLauPzNvNn9/9X+KRoDzcXoIAFfDp+XgKSTywutWATMAMxxdeCkzUFqwpHPrzwuNwGB3yjHM16n4XbruxQAU/
GztAiCV12I+eygihu2HkhAPzyi/b3teCisPYKa5avDKaw/oMZ+K+wvHR/c/WhPP76uOLTzfT4GpAc3b7O4BXMKvBZ/
tJw9eQsSDQhGUBEE2kb3MilPjpbZzBjyHeXIUszlrQCJ8/hp86pj/
RgCH9cpau+63Iqjrla1HMOBXrtfjZ+fmAOjzKEDIcFPsMkztOck+yscU5zZAitcL8MZ7yu+lvv/
0DGzOvv7eAnI4r1rDBIhNPK84r7inDwQ4t+1uAVwNnz2NhJ9+9pAIVJeue6lAURj3xanyIusLLzD9Sxf50xdbXyp9cRS8MGeET7b/5Djp/
sYq7WVXYAKuOn93ubzbNWxfGh2QngOwAmv+pa0BS2v164/r3bXmqlB08drDMcNPrxGeVW8IummIcvwCSOkZp3/
CHENuI7p0zP4TrIZ0EtEZPK+BE0h+X3cJ4Bx+TfjsSRT4eag8fvSiANqWXtijkgBML7++1AKSR6m78PsIJ4Eozhk/uwBf+J7PF+b0L1ScW+ZT/
Pjd/i7v8ToDsgJT1/02uGVOBdHRLkPQ5WueeERzx3P8dtWal17k+rn7+/
P46T3o+TwByOifKlxLn4vLIBuhNQav3JchOtq3dC5PoJtjzJ9GtbjflQHO5Z62XsBP1YSPyn0JP9l6TCKCgl4OoRzT/fbjQTa5buRF/iMo/
WXiZ906e7HDtQb8ZI4//nOYh/3J8jqkZemc/D/STzo3M3fs/srAPfHlLPOf4lz6IhYviH4nfSFp5zzAvA+L7Cefg60vArnwspH9UGT4hR+D/
cxJ+Tk2i2An3xX35/BD0Td+j3czcw7QcAZQ+a8+NSYAagD55xeOJ1BrCO05n8tjXH0fxtp3Kr7rgBxLZiqxjLc/
grDxw8DLKB5ej6vgfEQw7w5A+Ucf7Ru99C34wv6EYAAm2xqCRL8ULPnugk8BLOcEqV+Kmmw9DgKWB1CBKOcb5khbFyfyc/
2fvXJZjitJ0nP4QRYyEwQBjGQG9kbUqqWVltrNO7RpL+uHaz3BPICeQLObWdXsuBJpJutKkAQyUYUT8nt4xImTFxSr26aYQSZO3C/u/
n9Ogo37wjimdwOK06CcGWzVI3aKZAOfjbBwM90J3yW8hvJ+gReKUecHSB1TFH5t8f0rUBIkNXFkXor3gsQQTDV4lwGWZa8A2QiSI4tAKTtMtM37T
MYKMLPVHZqecLCfgRkByLADrR8LSrSDOZ/6DoGyjpUu5GjeJO5n50p/
Tzu98nsC5e8GgKeCz6EX+iP8UKj8ReDd5wHeObgGSGMAoJ4jfwRaOCG9TwMBMNUATAxAoD0iAH0P2hNBBLY/
74eok11B1ufV5F3Vo1lUCD1QCJJ4Ms0nYeq67MAnURAQ9Ths5z5YDoOxhZ73GfjiW7FJ71ljY81MNAIXQHqCSUp275eyPhgUUC1YW5faKdXtaiwH
AO0UjAGKbV+uYWqQ1PkTSLqfeqCE40GpnZNkID69LWYI0AwQtP4qng5Akso+UP494HgMuOfuBb/VgX+v8iroaVuFyuBDBdyOw/D+ZYA/
jhfDf3m5GP7bOMAdthMDjNeA6wsFwcYcRvziD78kog0JhYAwB792n7gXi5LqWfYdcv7p4mX8cXgZ/wW//
3ox5h9hHD8ZaOM7HOL8pgbw1CfntuNLrK9m7UrvAH4HicvsVMNO4FeDj/vDOwOY5J3h9WFOhJ+vOz0e5pfFO4R7QDtm/
jCfSN8+SHagmSuAWqIxUIJClADUA5+NSTtX7WpOWFevbfbq7df0d8ea8XDO7pAvXgPHY1gz0fyBu8V7wLe6xFGXg/
0XPXHjeYMfgJ73QyXUAECEH8A7hNU9QvCPBD/8/VeC33gBFbyeri95v6svzwwqhR/BiuqubIZfBN+gwo5Q0MswK2jpCQCkQO3CXL/
lnR0YdsZrUwsYFYIMPYGfgTAV6CkAHX5qJ3pn0vdPfdkHoN6phuChApP463VXm0Fzl95c6I3nGuBQ9xkgDYZJ6rPQTAGSCsMASdm7AqWOTcB3CJj
zgJ2HZLXPvv5mLNh4d4z7euUQQyqNV2dO72v3MAgu4oJDoDtE2m5hkRVh7rvw4a3Cg6A8Ko7tBV51h6RtaGBBghZxIwQRgAhCBKLAy8Sc0qOCL6s
aqH31+Zm1yvNoIgJArqn3VQicJOg0Ee/
ukH1IenJwNjGZHXZ8KAMvcx3nLfGuBr5dIQYEX+eV7EM2IgDwjWgPAtotAVrtEBNKF365l3IDFA14EwimkmxiWWPiSXvGjy2+D+jrwsGg72CnxnG
fB1NAUsbDbbG9Tmax3PhzAkkQkQYIRniGsRRgWWKiA0yNi10FPwcdnAhKm49nQ4EkvqJeD9M9J+zIe4C4D3I9hnTm0/445zYwY0d1diHWiXUEwcX
J0IPjIRgvzXX+CmzSKwqHljqDtyUnFENOYdfcdwK9WNc7CuwQgAPcZ4Yfg/CdiBeKOFOBXzhLgtxAR4DIfrb/
9hlblmXfDsLW0Aa41Lfs5JgMmEhpS++RubkAUG2F/RuxAWA9bwiCEIPLLm5gTAxNmp8EgvV+3C+ddXLrwM8g1zzdHzQHvGhv0En7oNf6B/
YYf24fAmPJCU3i6gASQnwYxSMcU/DpQUhmlWsKMDoIxmo8jDXA7MCSQSn1CQBLXUDSnzMFpMFR5vqdixEsbme4UjOksCPHOOvxJELb7pPTRt+
+MQgugq/
moQQzcDlUIvgIKvqA3Ipkz3mVkeSxbvTsD8tKe+2fMc7EgFHwamC+J8CNfvGXbimqo3YcSqGThFLIOFVa1KKIRYWTDSbcqPbGIPYvTcT6BusbCda
SyT0oywGVGJL6VqCncAOFYCaosbiXBEE1cQwyg+Vt2Y9JT1C8Zcijnfhe0r9UH697rjX45Y5hqC+CaJJg4j4dGJ6yZq60kNwH2Mr3+q4KYgb83HT
Uz+aL9SFZEdfsua7Xlpip4KkHR3BGaEYY9vvzFKw4j4FpsIwQNEgGQMYYpTrf1GK2a4jWGVGryo3AFB9rl/
GbwXUBGSjO6T4rimW1DUNw4eCDeQBW0Nszr7dGAbI0mMTLT9fMgBHqxylAGH6Zv0J5FenEgNXeZkCvN8YN4KMvzlqaJjQrc+3q83N9LweVisjqHo
tqFQWdDET1Z98fwn76fcLfJ/kxBB9AHOiZuEoSfl8MNrK1BjG927O8JzzL0AiuBpjSFtvguo0S2/zLa/
A9S4NgOrUYILR5DGy6cQNTcL22zIF1X+ndm6DocROBr8/2toTTBGJHmi5NMkjsQf6BgTMHcFaQTVWcGq0DOKkYJA2QTTvHfknQFKM9MCqYjnigAk
540YEgJtoZXgRAY3zSXVAzCL6Ma8bR3ka62C0mh81cZHZ8zwP80gEo/JsH3UG4hsDhxxUDgxq4nV/
Du4CwGFPnsUEn8ANZDx4bhLBcZXrfngJpzBFcMQMjRIC6AkeyJ/kCQDlLobdR4Nn30zCOH4acP3o/
ZTh9NxSAma2WMdggKDqr0q2P2ryebMSAhiUnG74vlL2As+hWgAmUdGh/s/
HukPPk7bpnED9VCRoRJi2ADE77wHQqCCPwjl3frumtfy3MyQZWTtkjroPmotV1zeiTfl9r3euwZm3zLbnHWE0a55143aQIRYWS7sXanRoQAm9q2H
EMij4x3mReDhBUCCcBMrMB9cGQ3sCYPg0SgDu8Pt+L5i30AIXCFEAtQI51yCz8qN6hNz+uNkQLyTguhsMshA/dRNpXRg3GjAbVd/kd1LBUx/
saBM3Q7uQ0MPqyJdA64Aq4DH5PqWRKGsMgwLV0Tp5GXsyonrEks27knWmD4PuEgP3EABzHTxxM+oMOfKivsqsA7HQfetIw23UT2NJ8ROPZXzZfJK
kEG+KfKxTy3LoWCFH0rym036nA5Gvqmn0g7NrziPmPb6fQy5Yk95SvN/NuhTZgD7yrvXPsJ5tPQEiey2mN5+Av/
WEoGvipgeI2xnQAMcfuHAOIGQQ802ZSneosWyNg5TOAdUdsIAjSvsOQ0jimNABqAvKt6CulBQOuQGEa2EEwM4HfsSREIeAPVi0Im0fYwpbq2obuu
fLIBhT4+OSZoHrHqjJy2TOcCXanZTAsZzhaQF72rFdtnSIADXzq8AJBt2KAVQgKnmuwg/
KmXcyu3I5BlfL0rd1g6vi4SX4GPPc1JzBOWJqJNQCpHhOa1FdWZ1OxMdhiE6CBmZSnQGMaHe+86erz89Tuk4cfSTQ8983nedj2DohzXwvPfaULOp
ieLXNP2Rn6deg8LIz1/Pb5jsIl+9s99hV6BMjB2mO+w/odFCA+xdhNnaTdKUvVv8QixVlKEmN6dX8RBhX2quaS6Ih/sBmRfgI/
XrvEyyxp8cLXBiFMHBPBpwLZ60idX4sk3Y4A9yn06RwHkcHHH2znhse2DmmNGoDYB0MF3fKWCN0WuAQgNO6qkasbXedsFHQ7vcu2cxdxOIOaYIdO
wnH87vQMWUtQywrRpGsVhDI3V1+1zdQvM9DzPq8r7KqvwrEFnyQJCqJVgN+91dHH62zwMxEpCLvECsCakeneQJvMPxaArFpot6k3y53jdI3DGI66

gRPC API  –  199


    Integration SDK

XgXMFl5z4JuHHnTP7r58bg7MX9zPmYFgHPAkQJDDzy//gCEzCvAG/F4hEL2d8xrra4TiH0i3ibXST+DBNs6CrIk1z8UTT0hr3HNNj8DvO/
y7wXt8HNKQRvxHmuKYxdgGhOCied2yMdarwBdFxKIx6A3wTsRiUAygw7vbo/
IB8UTq4yI1av4DfjN+PxLxg3H3ZZnljMHLs3GPLHZHUOU4f2fjcpZlHobw1jPcPtgFoDEsvS+AUB7sb/C+pr/
1X5vQpu0Au8Znh8DHPis+vB3Jr4nrwH5T/
82BL4pqmlCafgUadBbHOTC3XsYDZYvyczO5EnsLR9d8rt+VO2ubo2iMQGB1gqHEmsdYDcEGPDUwoTtnDsQt8GbhFuA6mQP7/FPWsYDZF/
hvlHc93K0IfAxBShoX+MX/1GZQwaGLRw7MscHu43Egd8H9CSp3I+S7YcjvLl7SinWVxw0u/YSLPzIALeDD2avGk/
NjnXkmHBMIgu8eRfJ+HIb32Hc/AoMQoki8Hh75iIFizvAAaZxBRn6DhqVsgz98G4PwHYEQ1xiYqOwDoYGugV/CPh6jtfS2aq8APYeggY+/
0n7oAY+/BMu5sQ78ppduE9Zx0Iv1HvSa/h74av8C3FXBCUFEqQ+H1pXsyyqIO31RfAo1tlvjA/OR9vV8LzYo/
tZ2FdvLOF4n6dxNzhPYGLwVlJy4sUEgMGE/aYxPIHhK2ZNgZsHH7dpPk/GYxI4onmZYl3IogY+ETvr8crvkL+uV3wxh0b73FeghS5wLbK/2/
hYjFDNYJ1sTgPHcO2z+o449DCN8oNhdTB6xD3DzFwyiMpGIQBB29xnBhwB8h78/4m+NffyQCDeD4OPbyyKkOCcYwo+VTJI+o2EvXtCwDxLnA3WP6
R1ORRhluhsNrII4rFTCCILxYIQZANWCy/IVoBn8AuB6sCvQ01CsALjf3jFZvRJ6OqcHPnz7DfatsL7sgU/aDj/0Zw2/
mLW7pQ16BR0FbQW9Us8zoNt1/
IC2Fz+SL5L6HG9X2ZTArjZY6RW0HaDnQASrMxQ5IRRA1nC0wIwxq5fxrwGRYPjl2QU9B8GyMa3RBsEFgjmjLtK8/bvwgwhv+
+o41HtX+8wEp99JQQgjVkeNEQLhzZK1OuTytn0YtNiKbBiZoE2yhRBP/MNg+A8rhi7x4XpDkkv/iO2P45g/
4PfDYs+5h0sPfCKgW4TXPX7vFXzvEXrvx4sBRoXaqBd/CjT37xC+0RnBWWAPRcOmFxn6ioa9JghiPx6DEZnpTiIsFAMFcYCgCyKAL/
bNgE+EVuoOvC0UAfK3QA3HaI5EhoOPx+UdVX1PbM1ArgM99c8UgH3oaf/ySPDRHPpC8dk0oU1lYcqIbc3WYs8KfNj/ZPaNtu4lnYn9OzY+3p6t/
fbbJgUYyvtjXy6A5NjNRbQgjLr6/
OxakBlgjOrFn9o26xei7n0NQ5BsPZOEToYfzEZlf44CkFIX6Rhe5Mz8Iv2kVQITJYC4pC0tH5gfQ8MIvytUbEiaUAdkxAsC8OEfVunmr1sYcv7vw
8v4r8QoBiAFCedYdDQFjgfAvtKBH0LtHX5vcON3Cr/3DECAu/
EC+PIEPiK5E9yc0QMgtYdg3FZYozx3VOJTdvEgoLUZgVdBrYZfC74wngxy3bW4LoquglxWkbIATYjzgvR2P7CWVdDuAd9EtLEe558IvtSFIKzNb+
4nu6P5CDpRraALNi3ACxAk8GnCkERSQ29j9p/ae4/
t95Ror6rvUOKgZDC1XRIb0Z48R+2WvY5RKskDY3sETtZswwhC1kSe1Z5LwjAoSlBH2Eco6GMiceECmO6UkXmfgfaVCpKQXqD2L8IGH8mxJ7el5qB
6xa5Hhr7FTsc3IJcmOxH4RoNfgGAiRgxyj1Hj8UIBTL8XPH/8heYO6fPdMi3+3/ifx4vhj/ll/D+LmTfVEMQgisFRB0mAHxI1gA9/wx/
owi9K7a8KPhFOeZwLx/qHkIGGRlA2P8sYG3WM+5XImQn8CfwK3HKoF3A68OTRFfRMYC5GrxfoyV2y173dN/
7R0Cs+gJl6I1oJ0lPAh4JNBr1b3R8MeMVnJZnF4IgaifBz8CUHXgU+hpwCztst9OYSToRhsPmcvck+EC9d2TlP7Dxjx6MSi9hSwIk6eJcz3KM51w
ZCi/
k3BEI1XK516W2DpIAMxKagOFQI+gR7m1GRwMH2hxqCti7pWDpQqmwm8HtRCNkwgWhhkMbDWKt0vmo2vjDruvaM0RNtiTeDIIPvAtLjAtIW6zus49
bcvRhz+gG3X7+gA4Yx4Sf98jKkXy6G9APyifyw2PO2rTt+MhiczILB32DgGxR+cGfgGxV+XI+C0Qel6GyDYgs/
6Bg+dxzRXlVAZ2DbRfCpGLcBfAq5DvCkXkEviqwS4QkCbIsDThbNQy/
6ofVJmN8VpYw14MM2+lHq3ndb6ijU4CdPXtA3ftGdgi8HEGq9B74CQPbJRiFHsHuoE43avZNwyli0f0ho1T3zA9sh1TGFmF9a2yGpfQK83LE92Tb
3k4/OQbvdkF2HET4QBIGEaCAkgLEmhEh5T2y/
edhViYeAyHeDBoi5QNIdMdo6S0rgzCwmCD0wo7Vct+3sUe9kezOn3Olhn7BvBT+oj+COkCCyxR0zAp2O0Pt6kdJPCzz7Qt7ti3Hy9S8p/
UecuBrHNC6ER3jePcU7NvOWRMFfoxGUgKCg6kJQA0GcykKh332EH4PvZqkHCrFzBF+T4ZIRPghtFn71RY7piwJQ4OUAQRw38B0Lvar/
9eD71dDTea3gfJ2BrwM9XKjfCnzWvtW9oPYJdE3M8azAKwAssOO6jc+AT2EmdYUg21baR9m9B76//NOf97lg9+c//
aV1yk6vvwyxwHbG9ga1olBEe2ZGyUofG+xewIgzHIqmF8jwCX8b0g2C8J3YO9MYEyzaehLaCgKrExAjNA2KBYjZ65aBwPQGkohkHTiXICCyODjNt
HNCqKPW8ZsEgqcUuR+EBzZBlATquQ04XPMzQvArQnC8wFEC4KBr+HE5fcE5lyM64ufELHp8e5nW2585thfubKiy4C6KT/owCFRUPgYqkgI/
cuLd2MBvHCL0zOjtI6HTV72/Ns5cydUEeofCjo28Le1s/VPwBZHpdb45+E6Fnrf3QU/
nVtCTeaeCT7574GduYuCRT9VHEHzUwM4ASG4m0G0L+PKnAj/0Qc4P3J+4vpm1ucZqBT7vKwnvAPz2zkEw7hrHaXsKRQk/
8SF0wOj+Y73k2xHhRwAcCYAIQ9MSzl8qJFczAc97EShdU0lAFiHoUMT6o8PQfiDgMygm1aTC0daB7sn+n4CpLgOefMGbGEaRR7jIeOQ/
0ynHQ21cr/HFagbq1gJC308cMFrWpcMG3UfPoN8WAZkGgb++n/
20iMdbALkQIxirbEaCwkxmQmPHsUNu6SLo0JSHAjqpGwDDM6Ph037jHiwmMqvbdgq5o+BHwtsLtT743HYH4Hcq9Pr1Aj2ffzT0eGAWfBp4XfjN2h
wUgiF+IfiAISi+eRLYpY36Q+HnENwECO4MgHvtbTE6sf9p8NtXjgKjQ5EbBYzsuix2RTCyXbBtoEPbbUZ68yBfgiL5i+BHfqJNzG+WxMVH7j/
XXQpQNI0xRFjwkK4RhtyHWhQYZtFlKlBU5nA/
rQPVrIA1hIE8JCTF5PC5wIdc4LoXJdsFfcYadjB6TKT1l2dJpPh7wnv5EarlbGeNAmsiPo9kI6LwbujlCSh+eKFr1KHMfllY8HBeVlFxO4q1jnkR
H//
ABCfOSJy1+BQ28qAgtIdEgyUF4mtLLkJL4WHmC1JlgV6BHwusBR8FbSW6Aj4Tn+5dhKiB3wqxvmJjw98IerrnsoEeO1nEAn3IORQLDMP+0I0nDUx
xYZOlNTAdgOSDlBrQqQ9K30M1bja2+oydqyQTbP8t4bevHAXG6m4KRrIx9QH98m4YhpRHfAsAtuETQVB8mevYCQCcJjcBYaqTGmmR5hFUiRtpJKA
hSBiGCjeHIRSgGVv4N8xpNhexgcKWJg4ydhGDgiGoseHwS+nN52dp6xRq23RzpoFxRI7YXLA/dE/c9wfspwfv+MIC2wI/uciFXi1ci/
2xUGcs3VkzEDTRmRgl25CR2dCcgZJlH8scycAHR8OvgPwIOqohQb0mX62jeFRU/KUA1CzK4qrAl0yUU/
AVEdbgMxvVQW7XqgHX63N7dusBlGzvBorig2VHDEmDn6HHezTCiH1SL+v8/HmnePLnMtZp1xNPKnYu4Juvx+RT+UFtW8GuY+8IPSu/
Jfz2lYNg5LsbDIlKqGCEIGKQwnaFUtlgzeNB1jSxZzHRxsMEjKRR0aZC8hYh+A7rkBEoI256vdkV8BkU315qPXufzFF/a270/
gBLAp3B1P3DAMxpeMGnvuB3LD/XLgMtO7sMYNS+QjDSnbgT5Ay6O90v4TsW2F7ivkzdURcbABW+Cyd77ZfFnCMj/
KI4GX4KPTE6tw2GYjDbA8r3GPjtZV4O4w30KDMMWQwF1tcILc2Aj4OL5vTAlyVQZ8FX7r2ctR80YNkDvbhmZvwk6En9OPBVdxTRcVTCnC9ovLjNg
KdfAZnbvtQfIug4MbH9A/zUzr3k0gNdW/5e4Dv2XghCfQe/
b8k+43ezYul9S6xtCIby5joufUOOjVzHTpNcfYy1yvFy6yAcGITUT32QTLv4vflpp1ATSD5dXwYtG1mCvocCy3EQR7UaZ40ipC70d/
2wqwAoooaaT86TzNr+enOJ+wh/Rfc4RvkD91li/Qrrj2NZq/HDl7kcC/yUDxxfi71eUyHyjzIJGZh/nG2WCj01KhvTzlNDNQ/qwa/
Ys18a8PlcMt5Y4CdfzSw5P+EjP6noPqGBtwo5AZ8KzoW2D3yVABvwVdeMCeNE6PUC1+0vmV3HO9DjiaHOAd+ZMwGf9wVXbIPZVwS52BeK2CcAL1U
AZLhtJ+BTIDrsJsknN/b+9wu8ffclCOo79cdxx0nakhjaYuOLQpIIfewjlkaEYdsOMWY6xt8NMgv1DCvTb9K4cT0rGCkAfvjrVmDkjlFdBygSKB/
fXjIMqR5hxk2F3RsE34XCUABYEmliDCffOwsTeb8BwfoGIfjlZil7EbNB9qQo/QH7LnHi46h0tF1xbEBO/
DDKxlCOY60vTHx6ARViMZjAzoBXMogAMbTFuHxxyhieBbSvWyB8SxKQu+NFwYCZw3TNGA4/Neabh2epjznj7wP+PhL8RHgktuPA50GWa/EZ/
CrQNXbT69WQ04BsoDabrfUMhl42QAm0FGC0D4Q6lwi37lgYP6bsInwsW/
pYdiFOoed1AZ5DzvocftEHBXzx3H9vcDu1aEwtyVmIq1t9e5WUPBlbouA+tZXFHcMQVkVmuZuEY6yJflPV5xqXREu6XkU46uYxvgSaCsvLn7es11
E1nxWColuBlWo0DTk/iT4llni/nHk/1bneM8FAUCXoJVnPcDUIIgcy/
i6RAVf4+wX7viRlDp2Hv2scXzoAU7r68pzs3IWcFQUZRGLG4h9o9tAMEX5qCM4WzCcoFFcnFCD2Sq7roHsIBJs5+giwLMLwC1kl5w8Kvk8gEHyow
Od1DawD4CvHR7s0wFNbdQNO5/v6TtDp/r8Gem1gplZIM/
CrIV+Dzsf7wKO+bDDcKdS2IH110jkAvu8Jem5rfDP7mt5PAU0BT7HQ+sATQ7BZGfM69m+qGM1+jlZy0bfFIPcXMOqyVUzS/
YQeYlbaLRvute4xLFeQpOjJMYkGdXQpa1KMe4LxCgF3xw9BuL35/Jy+vr30x+UX7mbYvv2Z9J/
SGvte9OEXtAEB8JcxAc19EQBj2ZE9F7Wta5FapvDHtW3/cVvIDHKywW4WesFJxUClG5oxnzOGTIKPuaAf10eC30/Y/
4F+BL9BQLhpwVdgdxh8IWLrIIjBo/U2SOrEEqBXxgv0AsgKxI6DXjOn6p99zgzs1A8t8LReQ4/EygFNgRxs3Np8Dnwaw/z9XsBnb/3zn/
6SCvzUnj2/RQCGdq9ABZTJPjKHQOg6ozjKTUJvYlYW1cm00YD1EQc4rp0XEt/
NPbbxrkUDeQkc11njn4G4Er5gHCFUIY1rCvTrh116GSB9vVn6u5BxGI4pvUEevBmat9Mgwm9ACBIviBvDOH4gmy4K6evMII/
hyy3Lo+CmIb391gQ+gp38+tTrQy3X2SrHrNU4j8bwlTAqAPFHxlAI/nTxMv7Ywq+IL8Avi/

gRPC API  –  200


    Integration SDK

H3wq8KijnI1VmzG0DTzOpBEcD3LaBXjU1tPwEeFbFDAF6Yuyv9e6BndpW+7STZxP7vHHxtIRtkj/
3cByCVEJ8QEtWrSrVXfuAYDLqEIsYGetDGWlxUxX6V7FvNtPPxL/
FE5uegkbxSfShj8kfI8A5GeJ8HgAEBePPTNn1BCA4jpJcXxOMF3h77cwNA5gUxAgF489MuLV7GJ2z/
iJz4tNh3cQPdCPCO4Tfw974AkCifcFzBh3s9XV8WV6UaelmN64ALYCN8TwCYg/m1Hy/
N9TefnwWCL+Ne+JEAZ8HXOKR2+Dz0Sv0E6Mn8VYAeFc92PF+AFgB3FPRSO2emVML5JtDjbwO87tgUfFS+Z/
jZ2//8p78Uv+RfCbdm7yOLn4l3SXN3IVjO7pAlmUd4OjAr2MV2w5oCP/zmaT/
yBkGH7IEfR+ZQuicu3f51Cy8IPexLX28uSTPCIijsoS+x4vphl374eUyLX17+98U4/hty4iP8z//xv/
5TNsqGSzng6DvwwfS71cMVgHDH8NML4IXS49tLJjHVicR8B3CkqcFyBTmGWwRgFshRWX95FvAFSBIEB33UMI7/F7//
hr+P2P9hFn5ybsyk23CFkJ2mwKvbtXPnwDiBnsxhwBWIQahrYBwHveUpge1Pm4FeGWugx0DMmy70FGqz4PNxn3cG3+
+8VADVkmOsRhg29QqIPDfoTgFYuAQ3rCup3xOT8PeeeMTwk/V6AWdGvhjzjxcv4z9f/PLyz/j9F/
ot6AIRgPT1AxF0CLL7zNCLANSD8BADYFb4+QX09nyP7D0KMoGctQ14VwQ7G+tBscx/
wt8nhh4Bj79pE+HXzaZkVIUgv7N2VAXBCLOp006HnpxJcyHUvxn0dr3OADyfo9Dj9hz08IH4RTsp4AoE+9CTJ3fAJ8Y6w+87KT3fIhRLbGIskC44
tko875QTpE3RGRXIfa35l/XWwvGm0p4Wi2niwzCOH5Ab+Bs/
UFwvCHKyOAkEw2YGPoFeukcYvsM+wK+AjsCX5Pt4fel94WBmn0GMMZJr6K0VeoO2EWY+ht/
sAlTBCuDSRoW7MeBZfQI+MlgAcCqw8SxTGzoAT9tzWUnnLZPCig3fwKyADO9RoNYF34nQk+BpyiHolTkFfGq3CnoFcPPg468Gts0Rk8W6fM/
g+z5L9DvC0OOhgSEVjnVsb1h7KlmniQMx6jcFPUINzKZ4zEZm4F0WDAgDH/8chAo++SL07ghuo4EPpP5k4DMogh4H4QEz8Lsi+DHwFICl/
lRBLcCP6viQLY81gm1evHTuReg1cyqjRoPKuqbNWUegFDNNAFkEHq+toXYM+JZHxpa/t4Gej0XwtdBjG2pmdDtKUHShVwWRztGAresa3Dr/
DL9z8WJxQCCkAjGBKxClP08SOzMEGJibqm8ybap1j0s9J8blQuhJwkZBI/wQdPco6NsAv/
fYt8ZvigB8RPBRH72C7kEAtHrBtlyShnqX5TGdbnBU+H2qSB1FG8CnR9XwM0jROPSzgYFOrzALOzWoA0/
Hl2kWYBPolXNqCL8WfFVgBPAFGOaq7xD4yJ4Rai34+MuXPR18FmTnci6xxJgwGFKBJr4nJR8Y5z3ywyl3WMi+KE4EAIsdhYpivc0KQYJfDvAj6D2
+veQ2g0+/Br3IOdA/
mSFI83IYwZaO2brITRDYbSfC7b5awZPD6bPwgyn8ZP488GSdQ60FHs87DL1m7Gj4Td7cgq8PPT7l14FPE8trwBeD7FzOZa60MRKB+Lc4b+HwIBiI
KFng+LulOgPMf5Ceri/5O2o72bdTGEcIJRoWwCkstUUgffP5OcGYyxk5rYDvQPBgAZJYqWzLvrAE6kTh1RCDPvRigQChI2Dncxvo9QCW+
+dP4HYk/CqYBOj5WARfhF6YPwEfQy7nzV7wid92Z/Cdy9+6/K1jZ7FvkOCS5StFIUVf/hPgl/
sMLNBDsiWfA7orQvBaIBhAS2i7FSHbgmz7YF9ekuAyTQS/2Z43wBQwAUBz0GuBV/
dFME6gt9x7nxp+VHZhzUHoST8DKICugZ7YuwIfjm0i1FrwqVe2Z/Cdy/dUFhz8MEOvmcLYCUscftBOkjHmFJ6REYJ0VPbJmcdH/
A3UPwgs85jWSSAYN0VIkDjjPgifGhLT0oMd91fg6kKvgdWroRfstJoZOgg+hV5oC/
jC3F0LvQi4FnzqgTCmXzHULsLuDL5z+b2WhVUo+JErW6y4wBAyJKi1oMr+KLoqNs0X0DV1p34zwyQ9XV+mq8/PhEOGIY0PCe6SQG8pQMob/
O4Ye9jOJni5XA3BHvQ6wOPxCkoT8J0EvT2AO6ocAl8Zd/AJiI4FnxikA7wyT8yXZ+pn8J3L76swACnIEWg7hMmOIAgZtlkgRWJaM/
jwR7AhoOW53fLhA42bPBW0DvrTjjykNI4MOoLvCs9d4bn0QwgyeDYIhg1dKOOFoQPiBnwt2JLBzufX8NL5h6HXWTspDdj2FQeMgm9Xrw/
gUzAeAp/5N47pugaCCsm4Rvv9HC1n8J3L76UsSAAKv23hF4kEihhTgFbSCijKCEAklw6EIAIxS6OehuuUrE/Xl+nqyzNPGPHPMOg5tH1Od4nhk/
EHG7kf3pmvIBCcHu7wWgqgoAPBqjjcjgHfIeidUFroeZ/ALkcIfjPwlXo79wy+c/
l+yqJqCQhFWCg0Eh0QYHgsM5DWCKmvN0uGWxZ2FR7SNCXcYfjVhdY9EgQ/
PzPxGIKyc9IT1jqT4HxrFzYIdkoAHigEa5AZ6Oith6D3WuApuGLZTef8huAT+8/
Ua+Cd4Xcu31tZsCAAtlngR9+tkoqCn4SXiTMEGermH3Vp2+GoEDoJfAZP3gd0X60nOTbOwP8rPOdWgbEUsOX6TDvagVXgFyDXgjA2vwn41BYRfhX
4AvR8rMxHn/zG4Ivzp/
Uz+M7l+yiLmf5arMkRpH+0zYBjNjLsWg7BkZdwxOGfp+vLdPX5uT8RSY3gUKDBTkCB0u0REMHHe9fwi30yS0CznNypD77lMfYK+1bjDfRCfwd83M
zbveAT4+0aePF4vx5gF9dqXeed4Xcu300RAJKgIG2RYfTdZYIaiY5+0r9mSuGPYEe8IfYZ4Bg/
cDzwks73hS06IfbXXzx3hZe4VZgQDPE+05MDwBx+PajNgC6W5alGDfBzmAT47abzHHwy/
q3BF+drXcaq9Wfwnct3VxZHzCFhrAkxjCCi4Zfn9Pj2EuEhUEJcMhC5nEDBHKeD7MSQC1s1aET24aE5K8wAwYHz58/
swW8588bJ2iNtU+5WIOZjLfjqOUeCj6cq/A6BL84VI/fBV7XP8DuX77MsSCgImduql0TLcHOBMPiIRsQf4w1/
pVunpwLCtsB8f9Z9bMrT9WW6QsjSXrKvoRDkHimtQKB2q6tWATTlGXvgR2NhjfXv4pwDZQ5+3q/
7N+DLLQgL+MQONfx+BfhkLM+CUNee4Xcu321ZzA+RuIBFTIxD8IFhiGGVFXZOQcEXGNCOKb6hVrxtUKXNcrWfApGOJ4BRg4GVjcB1mcBPoZhivQP
CfWUOfD4W9guw64NPX7/7LcHXb5/Bdy7nMgUgCURZwvADYHEha9ZMomwQ4vFAvCwMxD/CqLil/
ukwqu3OBbMOPvANs0BXWgQrvB+BkMVv8NpZPcIvgu+VZQ583n8E+GQuznMAHQKf+uRbgU/Xn+F3LueSIgBJZIBASemWBZIZLjuwb0prAh4oBK+
+PKfH68uURoWgc8tAaBuDAzPPQJDHdI0NP+HedAb34EJfCt5eYR3vp+clh8wEfs1Rsc0gIDgGeKV23F9SoFeN9cHHO+9eAz6xWlYINuCbQLABXa/
P2/V7/kbw+//s1NuO5LgNBmCxIcC1SJDK1e77v17uagJkynvRDA+SLOpgu/
o4Pc0fM2WLomS7AX0ezy8bAZAPE8NXEORDW+OHeKO2hSj74wmTefRTEGSORCiVKCOG+RcVOKB5g2AFHhQw59kQLJszZhm9tUIvJ2EIl719W8C2em
hRXJv+qrahV40tfBk9/RgLX6m9PXxpXbl3+DweTZRDAvlg4YJ6+H5QndFYnp4Fr/vzUwj07/r8HP5NVxrQMSME//
Hfv9UiUJN+CogJvPQQAkjNwiQe5pkc1YyrhItg+AfhKmWs5mx73vvSgHSUDYUGvga8BsMeyQl62pP6DXwFqHeGz9Tsdzh+Hs+WKL96yOg/
8AG8iTAYltQjcwThSm79CYD3Z4S/
WB6GDVkruWrzP3+sCUToYOQeXiPCBa3XqNX4QR4Hbc9zuZbfLcHUAUbPumx1HH17j1Yw0JVau3cGb7Se4SvoVPD1sCX0tO9V8Jm6qTl+Hs9eoh4c
YOyWUKCgo/PM2tABAjqA9J/cuhF29B8IwXCjjr8w4JXGwAoY9OS+qkGCMd3/jzDkYCXZDL6Q4QsGwZ+hwq9DSNfyfUb8Pvj2FrwO0Ql05jkhre/
Q0/sCWw2Z/M0LaG8EX1d3/Dyeo8R0aOg/HVIQkRKEIIeL7u40/
EECLAQYgScQXgHhPzymdVQPF15HY7nyJrTuQvgJgwyd4sf3oBhyUwWmPLmCr8JONkvzvNWtgW+tEAv6LSbLqL6BdgI5fXaZM7ikNR16uiYBmNAbz
Kf93gy+7v2C4+fxzBL5Rw8TLKgA3RgmRZAxpAMLhBuGCyT8qIuww2tI4CmAQNAIdhWGMr6m8fUZ4I+MIEvGD+sAtPhhAmHdQW+1cGELoO4/
w83i2eGx9W3roX5GgapBL83J37bu6aB7P/g4jp/HM08sd3yYFC89xIIgH0o5oAvDuCEYrnT/
g1RZGEPBC1DWkluL7FHhyPjxGmA8Af6ke4JQeOS+9HzBN8P3MyhytwyePgKr+/
JuYRtLhrgVHCyEaW6MpolBqNpjDzABcAbdAXwz9Jo5821VHD6P5zixHvBhRIaIUOKr1BKENLokKBY52CBXRkzRBBD4uE/
HCUcBkMDc8Lun+6v0QkgCdvDdevDkCc04w6ZIGAxSTwFuhtjZYAWuQbDHq4Zuit5o7azWvH/3rVUcP4/
nXOJhBx9awi0fWnaxQCiBDBBPcN9NYOMhjelyFYie2DlFVY4u70EIyjrdi+G7J/huOuZnVuigQWsM3wQ9ef8KsEczQis95949J/3d3gQ+R8/
jebcIgBjgEhQrusLSdWU4GgillKGh9YwP7yWHlPejJghwI7kYQUJN9r4phAVErvGeAt6Gn1xb9DgbAAP8hvClbzAAPZqT6O2PB3sc7L3Ve/gcPY/
ndYkCVxOBcBQ+0AnIAmHuzRiAyohI9FETI0hVnrvTIroyCjJm8AK1SRJ0uX5vaqN3sZjhDm4Z8K13Q/
soHw1fV3f4PJ73Ssw3AhnhZvBL2L1ZGC2Aq2xN90hCJi85BF9GANdd/N7sfWj/
GYIHOD2Kn9nj3P4On8fzzlEAWwR24DNAmjXbHhjgMlufYFsQBMHACGpdEMjw7QcbTPT5l3Bmbf9BU2TfAr7ZPt2c6bc9Dp/
H8z6JjJWgRuiZ6ywtllVm8CkKSOtgRTncSNDR0VcE+bDzngk/zAgqAiPsdkLvsNDO62v/
MBOYHsLPwNftNUbR8fN4Pi4x31gEN+RmqB1mBKUCR0DRMRcQ+bADXxMGBb80PIcfvfPSwiHPx6Z26rV7mB6Fb7bP0Zzj5/
F8bKJAQfDV+Bn0RpC9JHTQgXQLCDeGTtGCNUFYRxE4iZ8J0PvXgJY6fV/
CaryseVYLn77PVqv2avE7DV8zX+Pn8Hk8H5PIPwyfwS+hJ7UHYsBo1vMcUoERRCT6qIBc4DUA9jkvwW8vNX57KFmQ7vXa+bheM9trDl/ay/
HzeD4hsSBV4bfVYDm9E8FwCkw6/AVBwY/wVQg/NC+Fz9Z03Wyvbq5/lul1/
Dyej02U3wzdAL8j1AoG3F8hcRSCgcDkNeEOoDV61vJeHyrvuQNW+Q6pjfFr4Zvt1dWbubSX4+fxfHLiBh1s0FHNwAcVTM1B5r4pghnWk2EUXoJgw
QQrxKa9OEBsBh0OeuaIds+Yzjt+Hs+vkMg/GTu51vjBAKO2hoKWRbDJFNM3SItJ/

gRPC API  –  201


    Integration SDK

V7yTjXI1VxaWyE2xq+FT2sn8TuAj+P4eTyfl1juGKaMX0IKA0yxooO+lnUtgikGvtxb5sZ710jQ+mU21wX12eW97Lq7gohyLTVZN4bP1o7xM/
Vmbvbujp/H87mJNXgSui84QQNYDmGTewScCsFhP1jI9mC1y3bAa96nvIuO14N9d/EzkBcwx/B1c8387BscP4/n8xPzDeOl/
wknkPshUnKgM4wJwoKg1rYDD/0eHX4zZI+CFVKhx08QI9D0GlZBSq5aLz2yBmuw7u13zPDbg6/8rZo4fB7Pr5MYABZC6SJXgH8V/
AAyTBksOcyIKIMaQkRItQrCJh18uuBx/Gbw6ZzBL9fO4FfGZp85cI6fx/
P1E+WX0CLWLg1+BOIGFKh7q8wh3jHBWCAkmBg5A1KYwKcLH8OvgU+32MfPoGbWTfCbAdfhtjfn8Hk8XyWR4Uv4LT1+GS9ceZwQpDKkskJYH/
opeHVeid8UPn2nCsKwClZyVRinQJ7Az9SbubSf4+fxfKHEfCNwDfHj8H1B8D7cidfM5uqeR3ICPq2/
Ar+TwO3POXwez1dMpNPL8C0Zp4wfNlgBFcIGEOO4CpiId6SxILCH4CP4DfYo+B3Bl3oyfl1vOIEfWtD25xw/
j+erJvIPAZZxWhr8FLpH0iL4CHz6Mga/Ap/OWeikhmsLWo2fzCUgp732+S/Gz+HzeL5WIgYQoFCxq7NU18cRfEkq/
EbwaT0DhhZD6ilYNfiZq5mf47c/1/89HD+P5+sl1gMkuFDxWg7WKQDYIPHSVPBxRvjtwZfWVBBuvRm/fr/
q3dGC5vh5PN8jCiAQeACXegLTGN4KuVkq/Hbhk1qPXw2fncMNwlx/FL9uzo4dPo/naycKfiXA9ws2GA7zFjCexW8AX1rT49f1thCOgTP1Zi7t5/
h5PL9ZIv9ggu81G2Fa30Kxs6DHr4VPaj1+Q/iGvT2qo/EefqPvcfw8nt8jsR4ghMtrN8QK0imGZ/AbwJf6H8JPxpO1pra9m+Pn8XyTxEeaQeFaX/
XEhF+BT2vvh19+9yP80H5Xi5/D5/H8fhEAGSMMsDJwCGEBrGAgCBS+Giwz3wVmSLb4GYxo7lH49F1O4dk/z/
HzeL57Yjn8jBowdnAjBC+5IeOnV+qt8JtC1wY3sFr8juCa4ocbyKf32N7B8fN4PCEKBggrEH6EAeGHV6hQgA0vwe80epwKPtnrM/
EbYej4eTzfOpERAMQbXRctQd9Vw9egdiYtfOkpBa4jtNr+Wa2Mu/d3/DweT5/
IaAgcGG6swjAJvQKZmYKlrY36NoQmaE3wM6jt4Dd+Fu6CWO3l+Hk83zCRAQHCj+i7EAUroXEbdjZoSCAsQ+wGa0aQvQS/
YxBne9lxtc7x83i+aSLDgYQCXQk+YjDAwhMKosagkyLzIxSbnIFPa46fx+P52ESGBAAICFwEP8Q749biIAHFUW4bFNOaDsohVLrA4mRqL8fvbBw/
j8cT5VdAAQZhJRmWjAqjZroreGoMZdjidwCf1t8ev7JnC6zpcfw8Hg8ByIgQdFceMBaIoDMVhJxdDCfpUZxD1fWfxc88z/HzeDznE/
knYbIQcosgGOAiaBCCuTGD00E4yCn4uvoL8ZtgZ56zrXP8PB5PyZMZoQWiG4cBbs3cp+I3Sulx/
Dwej018yaI9BEsaPD8Ev7bm+Hk8np0cA8iIQFge2tUAhxbLD8avjePneUX+304d3LYNgwEYJQsB9nbdIMNlg47WW3piRdmyLZOSKEtp0fS9Q2D/
JH8DOXx8MdUA5oikEM+3QWsEn6JTC9Rl3hK5Y+LXv719Fj/gUdd88yluaw6P32RHWg7i/a34AbO+zR3UgtIiv/
ur8bvNxA9Y1i0djmFJIZ7X7hTmwjecLcdvOhM/
4HOUAcwRieH0OJqNXM1DsC5vy8C1zyvxWw2i+AFt7gHsIxRjn5QQzs8R22oSsevu6tnDvDwbg5aWgzi5K35Au+4Sjz5EMZ7zoIjXKxbDtnA2nK9F
bi6I+6IN/H+6/OcaoVNKaffCMmjtwbucp01BvO6c7Hj/8fZn/4vAP6nLUUkp5rj87L//CjGeNm14CtyoCN1wNxR3i+BV7rWGLxM/
oFWXgxJjCkME+6L0Hz5e2lSJW1YN3ML92TdFFKffhQ/YqsuxGeIXUg7KaffGrSHctKM+Fz/gFV2OzRC/
2McvhY9Dt8+ErNVc8EbCB+zRjZFJ6ZiFa9HaS/SAo/S9CuHt+/un/
5BwAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX9JvujkvPBQT6VIAAAAASUVORK5CYII="
}

where image_data is the received image in the base64 format. 

2.7.15 Manage control panels using gRPC API methods


POST http://IP-address:port/prefix/grpc
Get list of control panels
Request body:

ListControlPanels(
ListControlPanelsRequest(
view=VIEW_MODE_FULL
)
)

Response:
Click to expand

gRPC API  –  202


    Integration SDK

items {
access_point: "hosts/Server1/DeviceIpint.4/EventSupplier.ioDevice:0"
display_id: "4"
vendor: "Pelco-joystick"
model: "KBD5000"
properties {
axes {
key: "jog"
value: "supportsContinuousJog"
}
axes {
key: "pan"
value: "supportsContinuousPan"
}
axes {
key: "shuttle"
value: "supportsContinuousShuttle"
}
axes {
key: "tilt"
value: "supportsContinuousTilt"
}
axes {
key: "zoom"
value: "supportsContinuousZoom"
}
buttons {
value: "buttonFourPoint"
}
buttons {
key: 1
value: "buttonIris"
}
buttons {
key: 2
value: "buttonVision"
}
buttons {
key: 3
value: "buttonAbout"
}
buttons {
key: 4
value: "buttonInfo"
}
buttons {
key: 5
value: "buttonJoystickButton"
}
buttons {
key: 8
value: "buttonLeftFolder"
}
buttons {
key: 9

gRPC API  –  203


    Integration SDK

value: "buttonRightFolder"
}
buttons {
key: 10
value: "buttonPlayPause"
}
buttons {
key: 11
value: "buttonStop"
}
buttons {
key: 12
value: "buttonDelay"
}
buttons {
key: 13
value: "buttonOnePoint"
}
buttons {
key: 14
value: "buttonTwoPoint"
}
buttons {
key: 15
value: "buttonThreePoint"
}
buttons {
key: 16
value: "buttonNine"
}
buttons {
key: 17
value: "buttonZero"
}
buttons {
key: 18
value: "buttonVideo"
}
buttons {
key: 19
value: "buttonOneWindow"
}
buttons {
key: 20
value: "buttonFourWindow"
}
buttons {
key: 21
value: "buttonNineWindow"
}
buttons {
key: 22
value: "buttonSixteenWindow"
}
buttons {
key: 23

gRPC API  –  204


    Integration SDK

value: "buttonComputer"
}
buttons {
key: 24
value: "buttonOne"
}
buttons {
key: 25
value: "buttonTwo"
}
buttons {
key: 26
value: "buttonThree"
}
buttons {
key: 27
value: "buttonFour"
}
buttons {
key: 28
value: "buttonFive"
}
buttons {
key: 29
value: "buttonSix"
}
buttons {
key: 30
value: "buttonSeven"
}
buttons {
key: 31
value: "buttonEight"
}
}

Get list of events


Request body:

PullEvents(PullEventsRequest(filters=EventFilters(include=[EventFilter(subject="hosts/Server1/
DeviceIpint.4/EventSupplier.ioDevice:0",event_type=ET_ControlPanelStateEvent)])))

Response:
Click to expand

gRPC API  –  205


    Integration SDK

items {
event_type: ET_ControlPanelStateEvent
subject: "hosts/Server1/DeviceIpint.4/EventSupplier.ioDevice:0"
body {
[type.googleapis.com/axxonsoft.bl.events.ControlPanelStateEvent] {
guid: "c95204e2-1e63-47d4-ad43-c12ea7a4e928"
object_id: "hosts/Server1/DeviceIpint.4/EventSupplier.ioDevice:0"
axes {
name: "pan"
value: -0.302052795887
}
}
}
subjects: "hosts/Server1/DeviceIpint.4/EventSupplier.ioDevice:0"
}
 
items {
event_type: ET_ControlPanelStateEvent
subject: "hosts/Server1/DeviceIpint.4/EventSupplier.ioDevice:0"
body {
[type.googleapis.com/axxonsoft.bl.events.ControlPanelStateEvent] {
guid: "9a27d338-5280-4ae6-a686-a94181859cb9"
object_id: "hosts/Server1/DeviceIpint.4/EventSupplier.ioDevice:0"
axes {
name: "pan"
value: -0.302052795887
}
axes {
name: "tilt"
value: 0.564027428627
}
}
}
subjects: "hosts/Server1/DeviceIpint.4/EventSupplier.ioDevice:0"
}
 
items {
event_type: ET_ControlPanelStateEvent
subject: "hosts/Server1/DeviceIpint.4/EventSupplier.ioDevice:0"
body {
[type.googleapis.com/axxonsoft.bl.events.ControlPanelStateEvent] {
guid: "d8cec48a-99d9-4ee5-a24e-7aa59802760b"
object_id: "hosts/Server1/DeviceIpint.4/EventSupplier.ioDevice:0"
axes {
name: "pan"
value: -0.726295232773
}
axes {
name: "tilt"
value: 0.564027428627
}
}
}
subjects: "hosts/Server1/DeviceIpint.4/EventSupplier.ioDevice:0"
}

gRPC API  –  206


    Integration SDK

2.7.16 Get water level using gRPC API methods


POST http://IP-address:port/prefix/grpc
Request body:

{
"method":"axxonsoft.bl.statistics.StatisticService.GetStatistics",
"data":{
"keys": [
{
"type":"SPT_WaterLevel",
"name":"hosts/SERVER1/AVDetector.93/EventSupplier"
}
]
}
}

2.7.17 Manage events using gRPC API methods

On this page:

• Get all events within a given


interval
• Get events by filter
• Search by text in event
• Get all alerts
• Get alerts by filter
• Search for LPR events
• Search for a specific
number
• Search by part of a
number

2.7.17.1 Get all events within a given interval

{
"method": "axxonsoft.bl.events.EventHistoryService.ReadEvents",
"data": {
"range": {
"begin_time": "20200225T125548.340",
"end_time": "20200225T130548.341"
},
"limit": 30,
"offset": 0,
"descending": false
}
}

If descending = false, then the events in the response will be sorted by time in ascending order. If descending = true, then the
events will be sorted in descending order.

gRPC API  –  207


    Integration SDK

2.7.17.2 Get events by filter


The following parameters can be set as a filter:
• type - type of event; the actual types of events are given in the axxonsoft\bl\events.proto file;
• subjects - subject of event (server, device, archive, detector, etc.);
• values - exact value of event;
• texts - brief description of event.
Get events about status change of a specific camera:

{
"method": "axxonsoft.bl.events.EventHistoryService.ReadEvents",
"data": {
"range": {
"begin_time": "20200225T152806.572",
"end_time": "20200225T153806.572"
},
"filters": {
"filters": [
{
"type": "ET_IpDeviceStateChangedEvent",
"subjects": "hosts/Server1/DeviceIpint.10"
}
]
},
"limit": 300,
"offset": 0,
"descending": false
}
}

Get events about disconnection of all cameras::

{
"method": "axxonsoft.bl.events.EventHistoryService.ReadEvents",
"data": {
"range": {
"begin_time": "20200226T074425.274",
"end_time": "20200226T075425.274"
},
"filters": {
"filters": [
{
"type": "ET_IpDeviceStateChangedEvent",
"values": "IPDS_DISCONNECTED"
}
]
},
"limit": 300,
"offset": 0,
"descending": false
}
}

gRPC API  –  208


    Integration SDK

2.7.17.3 Search by text in event


The subject and the text of event are specified in filter.
Search by a specific camera for all events that contain the word tracker (2 events limit):

{
"method": "axxonsoft.bl.events.EventHistoryService.ReadTextEvents",
"data": {
"range": {
"begin_time": "20200226T082741.159",
"end_time": "20200226T083741.160"
},
"filters": {
"filters": [
{
"subjects": "hosts/Server1/DeviceIpint.7/SourceEndpoint.video:0:0",
"texts": "tracker"
}
]
},
"limit": 2,
"offset": 0,
"descending": false
}
}

2.7.17.4 Get all alerts

{
"method": "axxonsoft.bl.events.EventHistoryService.ReadAlerts",
"data": {
"range": {
"begin_time": "20200225T150142.437",
"end_time": "20200225T151142.437"
},
"limit":100,
"offset":0,
"descending": false
}
}

Note
If an operator’s comment was specified for the alarm, it will be in the response with the frame coordinates.

2.7.17.5 Get alerts by filter


Start of alarms for a specific camera:

gRPC API  –  209


    Integration SDK

{
"method": "axxonsoft.bl.events.EventHistoryService.ReadAlerts",
"data": {
"range": {
"begin_time": "20200225T150845.757",
"end_time": "20200225T151845.758"
},
"filters": {
"filters": [
{
"subjects": "hosts/Server1/DeviceIpint.7/SourceEndpoint.video:0:0",
"values": "BEGAN"
}
]
},
"limit":100,
"offset":0,
"descending": false
}
}

2.7.17.6 Search for LPR events

2.7.17.6.1 Search for a specific number

{
"method": "axxonsoft.bl.events.EventHistoryService.ReadLprEvents",
"data": {
"range": {
"begin_time": "20200226T104305.137",
"end_time": "20200226T105305.137"
},
"filters": {
"filters": [
{
"subjects": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0",
"values":"Н829М7"
}
]
},
"limit":50,
"offset":0,
"descending": false
}
}

gRPC API  –  210


    Integration SDK

2.7.17.6.2 Search by part of a number

{
"method": "axxonsoft.bl.events.EventHistoryService.ReadLprEvents",
"data": {
"range": {
"begin_time": "20200226T104305.137",
"end_time": "20200226T105305.137"
},
"filters": {
"filters": [
{
"subjects": "hosts/Server1/DeviceIpint.1/SourceEndpoint.video:0:0"
}
]
},
"limit":50,
"offset":0,
"search_predicate":"*82*",
"descending": false
}
}

2.7.18 Manage device templates using gRPC API methods

On this page:

• Get list of created templates


• Create a template
• Template example with a
specified device
manufacturer, model,
username and password
• Template example with a
specified device geodata
• Edit a template
• Assign a template to a device
• Get information on selected
templates
• Delete templates

Templates allow you to apply the same preset parameters to cameras.

Note
If a template has been assigned to the camera but has not yet been applied, then the response to the ListUnits method
(see Manage devices using gRPC API methods (ConfigurationService)) will contain the parameter
"has_unapplied_templates": true.

gRPC API  –  211


    Integration SDK

2.7.18.1 Get list of created templates

{
"method": "axxonsoft.bl.config.ConfigurationService.ListTemplates",
"data": {
"view": "VIEW_MODE_FULL"
}
}

gRPC API  –  212


    Integration SDK

2.7.18.2 Create a template

2.7.18.2.1 Template example with a specified device manufacturer, model, username and password

{
"method": "axxonsoft.bl.config.ConfigurationService.ChangeTemplates",
"data": {
"created": [
{
"id": "8a7a73d7-ca8c-4a09-b7f0-7b45ef9cfe8d",
"name": "Hikvision DS-2CD2135FWD-I",
"unit": {
"uid": "hosts/Server1/DeviceIpint.13",
"type": "DeviceIpint",
"properties": [
{
"id": "vendor",
"readonly": false,
"value_string": "Hikvision"
},
{
"id": "model",
"readonly": false,
"value_string": "DS-2CD2135FWD-I"
},
{
"id": "user",
"readonly": false,
"value_string": "admin"
},
{
"id": "password",
"readonly": false,
"value_string": "Pe28age33tv"
}
],
"units": [],
"opaque_params": [
{
"id": "color",
"readonly": false,
"properties": [],
"value_string": "#e91e63"
}
]
}
}
]
}
}

Attention!
The opaque_params parameter group is required in order to display the template in the Web Client.

gRPC API  –  213


    Integration SDK

2.7.18.2.2 Template example with a specified device geodata

{
"method": "axxonsoft.bl.config.ConfigurationService.ChangeTemplates",
"data": {
"created": [
{
"id": "1322d30b-bdd4-4734-8a17-7e8bff92b41c",
"name": "Geolocation 35-45",
"unit": {
"uid": "hosts/Server1/DeviceIpint.14",
"type": "DeviceIpint",
"properties": [
{
"id": "geoLocationLatitude",
"readonly": false,
"value_double": 35
},
{
"id": "geoLocationLongitude",
"readonly": false,
"value_double": 45
}
],
"units": [],
"opaque_params": [
{
"id": "color",
"readonly": false,
"properties": [],
"value_string": "#00bcd4"
}
]
}
}
]
}
}

gRPC API  –  214


    Integration SDK

2.7.18.3 Edit a template

{
"method": "axxonsoft.bl.config.ConfigurationService.ChangeTemplates",
"data": {
"modified": [
{
"body": {
"id": "1652b728-3292-32b3-bb7f-e0adb8c9048c",
"name": "Geolocation",
"unit": {
"uid": "hosts/Server1/DeviceIpint.22",
"type": "DeviceIpint",
"properties": [
{
"id": "geoLocationLatitude",
"readonly": false,
"value_double": 38.83424
},
{
"id": "geoLocationLongitude",
"readonly": false,
"value_double": -111.0824
}
],
"units": [
{
"uid": "hosts/Server1/DeviceIpint.22/VideoChannel.0",
"type": "VideoChannel",
"properties": [
{
"id": "display_name",
"readonly": false,
"properties": [],
"value_string": "camera1"
},
{
"id": "comment",
"readonly": false,
"properties": [],
"value_string": ""
},
{
"id": "enabled",
"readonly": false,
"properties": [],
"value_bool": true
}
],
"units": [],
"opaque_params": []
}
],
"opaque_params": [
{
"id": "color",

gRPC API  –  215


    Integration SDK

"readonly": false,
"properties": [],
"value_string": "#00bcd4"
}
]
}
},
"etag": "1AC1B6FA562B290E0D1080A7D1DA2D3B3596EC95"
}
]
}
}

where etag is the template label that will change after each template edit.

2.7.18.4 Assign a template to a device

{
"method": "axxonsoft.bl.config.ConfigurationService.SetTemplateAssignments",
"data": {
"items": [
{
"unit_id": "hosts/Server1/DeviceIpint.10",
"template_ids": [
"834794f0-1085-4604-a985-7715d88165bc"
]
}
]
}
}

2.7.18.5 Get information on selected templates

{
"method": "axxonsoft.bl.config.ConfigurationService.BatchGetTemplates",
"data": {
"items": [
{
"id": "e35f6a3f-ab44-4e20-a48c-e7e36f511cc1",
"etag": "0501160E0A8513E1E95689A5E6E7CD488C0EE54D"
}
]
}
}

where etag parameter is optional:


• if it is not specified, then the request will return all information about template;
• if it is specified, then the request will return information about template updates.

gRPC API  –  216


    Integration SDK

2.7.18.6 Delete templates

{
"method": "axxonsoft.bl.config.ConfigurationService.ChangeTemplates",
"data": {
"removed": [
"cd97d7cc-3573-3864-bb6f-2814b6831341",
"834794f0-1085-4604-a985-7715d88165bc"
]
}
}

2.7.19 Configure PTZ mode for Tag & Track Pro using gRPC API methods
POST http://IP-address:port/prefix/grpc

2.7.19.1 Get current mode


Request body:

{
"method":"axxonsoft.bl.ptz.TagAndTrackService.ListTrackers",
"data": {
"access_point":"hosts/Server1/DeviceIpint.1/Observer.0"
}
}

where access_point is taken from the response to the ListCameras request in the tag_and_track parameter group (see Get
video cameras list and their parameters using gRPC API methods (DomainService)).
Response example:

{
"mode": "TAG_AND_TRACK_EVENT_TYPE_AUTOMATIC",
"trackers": []
}

2.7.19.2 Change PTZ mode


Request body:

{
"method":"axxonsoft.bl.ptz.TagAndTrackService.SetMode",
"data": {
"access_point":"hosts/Server1/DeviceIpint.1/Observer.0",
"mode":"2"
}
}

where the mode parameter value defines the PTZ control mode (see Setting PTZ mode for Tag & Track Pro):
0 - disabled (TAG_AND_TRACK_EVENT_TYPE_OFF),
1 - manual (TAG_AND_TRACK_EVENT_TYPE_MANUAL),

gRPC API  –  217


    Integration SDK

2 - automatic (TAG_AND_TRACK_EVENT_TYPE_AUTOMATIC),
3 - user priority (TAG_AND_TRACK_EVENT_TYPE_USER_PRIORITY),
4 - manual PTZ control (TAG_AND_TRACK_EVENT_TYPE_USER_PRIORITY_MANUAL).

gRPC API  –  218


    Integration SDK

3 Embeddable video component for working with Web server

3.1 General information about video component


The video component enables the remote control of the web client using a custom web page.
The video component allows you to:
• Display live and archived video.
• Play and stop the video in archive mode.
• Go to a certain time in archive mode.
To use the video component, it is necessary to:
1. Configure the web server (see Configuring the web server).
2. Add an iframe element to a custom web page.
3. In this element, specify the web server address.

<iframe src="http://10.0.11.66:81/embedded.html" width="800px" height="600px" id="iframe">


test </iframe>

4. Using the Web API, send the commands to the video component (see API for video component operation).

3.2 API for video component operation


The following types of commands are available:
1. Select the video camera and its mode.

type InitMessage = {type: 'init', mode: 'live' | 'archive', origin: string, time: Date,
options?: Options}

The options object allows you to control the archive panel - to hide it or to show it.

type Options = {archivePane?: boolean}

The origin object corresponds to the VIDEOSOURCEID identifier (see Get list of video sources (cameras)).
2. Switch between archive and live mode.

type SwitchMode = {type: 'live' | 'archive'}

3. Play and stop the video in archive mode.

type PlaybackCommand = {type: 'play' | 'stop'}

4. Go to a certain time in archive mode.

type SetTimeCommand = {type: 'setTime', time: Date}

5. Change a selected camera.

type SetCameraCommand = {type: 'setCamera', origin: string}

Embeddable video component for working with Web server  –  219
    Integration SDK

3.3 Examples of commands


Play live video:

sendMessage({ type: 'init', mode: 'live', origin: 'SERVER1/DeviceIpint.1/SourceEndpoint.video:


0:0'});

Go to the archive mode:

sendMessage({type: 'archive'})

Go to the live mode:

sendMessage({type: 'live'})

Start the playback of archive video:

sendMessage({type: 'play'})

Stop the video:

sendMessage({type: 'stop'})

Go to a certain time in archive mode:

sendMessage({type: 'setTime', time: new Date("2019-07-25 09:00:00")});

Attention!
The date should be in ISO 8601 format.

Embeddable video component for working with Web server  –  220

You might also like