ISAPI Developer Guide - Face Recognition Terminals - Value Series - 2024!05!29
ISAPI Developer Guide - Face Recognition Terminals - Value Series - 2024!05!29
or ka
i su
Te la
ch ja
no je
lo n@
gy gm
ai
Pv l
t .c
Lt om
d
About this Document
This Document includes instructions for using and managing the Product. Pictures, charts, images and all other
information hereinafter are for description and explanation only. Unless otherwise agreed, our company makes no
warranties, express or implied.
Please use this Document with the guidance and assistance of professionals trained in supporting the Product.
Trademarks Acknowledgment
All trademarks and logos mentioned are the properties of their respective owners.
LEGAL DISCLAIMER
TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS DOCUMENT AND THE PRODUCT DESCRIBED,
WITH ITS HARDWARE, SOFTWARE AND FIRMWARE, ARE PROVIDED "AS IS" AND "WITH ALL FAULTS AND
ERRORS". OUR COMPANY MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION,
MERCHANTABILITY, SATISFACTORY QUALITY, OR FITNESS FOR A PARTICULAR PURPOSE. THE USE OF THE
PRODUCT BY YOU IS AT YOUR OWN RISK. IN NO EVENT WILL OUR COMPANY BE LIABLE TO YOU FOR ANY
SPECIAL, CONSEQUENTIAL, INCIDENTAL, OR INDIRECT DAMAGES, INCLUDING, AMONG OTHERS, DAMAGES FOR
LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, OR LOSS OF DATA, CORRUPTION OF SYSTEMS, OR
LOSS OF DOCUMENTATION, WHETHER BASED ON BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
Lt om
PRODUCT LIABILITY, OR OTHERWISE, IN CONNECTION WITH THE USE OF THE PRODUCT, EVEN IF OUR
COMPANY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES OR LOSS.
t .c
YOU ACKNOWLEDGE THAT THE NATURE OF THE INTERNET PROVIDES FOR INHERENT SECURITY RISKS, AND
d
Pv l
OUR COMPANY SHALL NOT TAKE ANY RESPONSIBILITIES FOR ABNORMAL OPERATION, PRIVACY LEAKAGE OR
ai
OTHER DAMAGES RESULTING FROM CYBER-ATTACK, HACKER ATTACK, VIRUS INFECTION, OR OTHER INTERNET
SECURITY RISKS; HOWEVER, OUR COMPANY WILL PROVIDE TIMELY TECHNICAL SUPPORT IF REQUIRED.
gy gm
YOU AGREE TO USE THIS PRODUCT IN COMPLIANCE WITH ALL APPLICABLE LAWS, AND YOU ARE SOLELY
lo n@
RESPONSIBLE FOR ENSURING THAT YOUR USE CONFORMS TO THE APPLICABLE LAW. ESPECIALLY, YOU ARE
RESPONSIBLE, FOR USING THIS PRODUCT IN A MANNER THAT DOES NOT INFRINGE ON THE RIGHTS OF THIRD
no je
PARTIES, INCLUDING WITHOUT LIMITATION, RIGHTS OF PUBLICITY, INTELLECTUAL PROPERTY RIGHTS, OR DATA
ch ja
PROTECTION AND OTHER PRIVACY RIGHTS. YOU SHALL NOT USE THIS PRODUCT FOR ANY PROHIBITED END-
USES, INCLUDING THE DEVELOPMENT OR PRODUCTION OF WEAPONS OF MASS DESTRUCTION, THE
Te la
RELATED TO ANY NUCLEAR EXPLOSIVE OR UNSAFE NUCLEAR FUEL-CYCLE, OR IN SUPPORT OF HUMAN RIGHTS
ABUSES.
or ka
IN THE EVENT OF ANY CONFLICTS BETWEEN THIS DOCUMENT AND THE APPLICABLE LAW, THE LATTER
PREVAILS.
So
1 Reading Guide
Chapter Description
Includes the ISAPI overview, applicable products, terms and definitions, abbreviations, and update
Overview
history.
ISAPI
Read the chapter to take a quick look at the ISAPI framework and basic functions.
Framework
Quick Start Read the chapter to quickly understand the programming process of basic functions such as
Guide authentication, message parsing, real-time live view, playback, and event uploading.
API
Start programming according to API definitions.
Reference
How-To
Video How-to videos demonstrate detailed steps of different integration tasks.
Guidance
Lt om
t .c
2 Overview
d
Pv l
2.1 Introduction
ai
gy gm
Intelligent Security API (hereinafter referred to as ISAPI) is an application layer protocol based on HTTP (Hypertext
lo n@
Transfer Protocol) and adopts the REST (Representational State Transfer) architecture for communication between
security devices (cameras, DVRs, NVRs, etc.) and the platform or client software.
no je
Since established in 2013, ISAPI has included more than 11,000 APIs for different functions, including device
ch ja
management, vehicle recognition, parking lot management, intelligent facial application, access control management,
interrogation management, and recording management. It is applicable to industries such as traffic, fire protection,
Te la
When you integrate devices via ISAPI, the device acts as the server to listen on the fixed port and the user's application
acts as the client to actively log in to the device for communication. To achieve the above goals, the device should be
configured with a fixed IP address and the requests from the client can reach the server.
So
2.1.2 Layers in the Network Model
ISAPI is an application layer protocol based on HTTP, thereby it inherits all specifications and properties from HTTP.
Protocols frequently used along with ISAPI include SADP (Search Active Device Protocol) based on multicast for
discovering and activating devices, RTSP (Real-Time Streaming Protocol) based on TCP/UDP for live view and video
playback of devices, etc.
Lt om
t .c
2.2 Product Scope
d
Pv l
Face Recognition Terminals ai
gy gm
Value Series
lo n@
2.3.5 Group
A group of persons which is used in multi-factor authentication. The same person can belong to different groups at the
same time. Up to 4 groups can be added at the same time.
Lt om
by fingerprint, face picture, or iris.
t .c
2.3.9 Remote Verification
d
Pv l
The platform verifies the event uploaded by the device and applies the verification result to the device for controlling
the door after completing verification.
ai
gy gm
2.3.14 Device ID
lo n@
The device ID of the location of room. It is an 11-digit number contains the phase No., building No., unit No., floor No.,
no je
serial No. and Community No. It is a unique ID of the device for calling and receiving.
ch ja
The new device ID differs from device ID in other industry. It is a 16-digit number contains the industry, device type,
version, and device ID. Format: industry # device type # version # device ID. Devices will send and receive the new
i su
An event code is used to identify a specific event and corresponds to a CID code.
3 ISAPI Framework
3.1 Overview
Lt om
t .c
d
**Notes**:
Pv l
ai
In general, ISAPI refers to the communication protocol based on the HTTP standard. As ISAPI is usually used along with
RTSP (Real-Time Streaming Protocol), the RTSP standard is brought into the ISAPI system.
gy gm
The metadata scheme for transmitting additional information of the stream is extended based on the RTSP standard to
lo n@
transmit the video stream and the structured intelligent information of the stream simultaneously. It is compatible with
the RTSP standard.
no je
3.2 Activation
ch ja
Te la
The purpose of activation is to ensure that the user can set the password for the device and the password meets the
security requirement. After the device is activated, you can use the related functions.
i su
ISAPI is a communication protocol running on the application layer. When activating the device via ISAPI, you should
or ka
know the device's IP address and make sure that the device is connected to the client.
The web application built in the device supports activating the device via ISAPI. When you enter the device's IP address
in the address bar of the web browser on the PC, you can activate the device according to the activation guide.
If you want to activate the device on your own application, you need to integrate the activation function via ISAPI. The
API calling flow and related APIs are shown below.
So
Lt om
t .c
d
Pv l
ai
gy gm
lo n@
no je
hexStringToBytes: it is used to convert a hexadecimal string (the length is 2N) to a byte array (the length is N). For
example, 7f0a17 -> 127,10,23
i su
1. The client generates a public and private key pair (1024 bits), and gets the 128-byte modulus in the public key
or ka
(hereinafter referred to as public key modulus). If the length is longer than 128, the leading 0 needs to be removed.
2. The client converts the public key modulus to a 256-byte public key string via bytesToHexstring and sends the
public key string to the device in XML message (related URI: POST /ISAPI/Security/challenge ) after being
encoded by Base64.
3. The device parses the request to obtain a 256-byte public key string decoded by Base64 and converts it to a 128-
So
byte public key modulus via hexStringToBytes. The complete public key is the combination of obtained public key
modulus and public exponent (the default value is '010001' ).
4. The device generates a 32-byte hexadecimal random string, calls the RSA API to encrypt the random string with
the private key, converts the encrypted data to a string via bytesToHexstring, encodes the string by Base64, and
then sends it to the client.
5. The client decodes the string from the device by Base64, converts it via hexStringToBytes to get the encrypted data,
decrypts the encrypted data with the private key via RSA to obtain a 32-byte hexadecimal random string, converts
the obtained string via hexStringToBytes to get a 16-byte AES key. Then the client uses the AES key to encrypt the
"string consisting of the first 16 characters of the random string and the real password" by AES128
ECB mode (with zero-padding method) to get a ciphertext, and converts the ciphertext via bytesToHexstring,
encodes it by Base64, and sends it to the device in XML message (related URI: PUT /ISAPI/System/activate ).
Note: If the first 16 characters of the random string are aaaabbbbccccdddd and the real password is Abc12345 , the
data before encryption is aaaabbbbccccddddAbc12345 . This can ensure that the client uses the random string as the
key for encryption.
6. The device decodes the string by Base64, converts it via hexStringToBytes to get the ciphertext, uses the AES key to
decrypt the ciphertext by AES128 ECB mode, and gets the real password via removing the first 16 characters.
7. The device verifies the password and returns the activation result.
Notes:
You can get the device's activation status by calling the URI GET /SDK/activateStatus which requires no
authentication.
Devices also support to be activated via SADP (Search Active Device Protocol) which is based on the
communication protocol of the data link layer. With SADP, you do not have to know the IP address of the device
but need to ensure that the device and the application running SADP are connected to the same router. SADP also
supports discovering devices in the LAN, changing the password of the devices, and so on. The HCSadpSDK is
provided for SADP integration, including the developer guide, plug-in, and sample demo which can be used as a
simple SADP tool.
Lt om
Currently, all mainstream request class libraries of HTTP have encapsulated digest authentication. See details in
t .c
Authentication of Quick Start Guide.
d
Pv l
3.3.2 User Permission ai
There are three kinds of users with different permissions for access control and management.
gy gm
Administrator: Has the permission to access all supported resources and should keep activated all the time. It is also
lo n@
known as "admin".
Operator: Has the permission to access general resources and a part of advanced resources.
no je
During ISAPI integration, the HTTPS service of devices is enabled by default. When the client applications communicate
i su
and stream.
Cameras support standard RTSP (Real-Time Streaming Protocol, see details in RFC 7826). Client applications can get
the stream from devices via RTSP.
For details about real-time streaming and video playback, refer to Real-Time Live View and Playback in Quick Start
Guide.
3.4.2 Metadata
The metadata is the structured intelligent information generated by intelligent devices. When the client applications get
the audio and/or video stream from devices via RTSP, the metadata will be returned by the device at the same time. For
example, to display the face target frame, face information, vehicle target frame, license plate number, vehicle
information, and other information on the video stream, the client applications can overlay the above information on
the video image.
Before using the metadata, you need to enable the metadata function of the device and then get the stream from the
device via RTSP. Some devices support subscribing to the metadata by type. For details about the process of integrating
the metadata function, refer to Metadata Management.
4 Quick Start Guide
4.1 Authentication
When the client applications send requests to the devices, they need to use digest authentication (see details in RFC
7616) for identity authentication.
Client applications only need to call APIs of the class library to implement the digest authentication. The sample code is
shown below.
Lt om
char* pData = (char*)buffer;
str->append(pData, size * nmemb);
t .c
return nmemb;
}
d
Pv l
std::string strUrl = "http://192.168.18.84:80/ISAPI/System/deviceInfo";
std::string strResponseData;
CURL *pCurlHandle = curl_easy_init();
ai
gy gm
curl_easy_setopt(pCurlHandle, CURLOPT_CUSTOMREQUEST, "GET");
curl_easy_setopt(pCurlHandle, CURLOPT_URL, strUrl.c_str());
// Set the user name and password
lo n@
// Set the parameters of the callback function to get the returned information
curl_easy_setopt(pCurlHandle, CURLOPT_WRITEDATA, &strResponseData);
// Timeout settings for receiving the data. If receiving data is not completed within 5 seconds, the application will exit directly
Te la
// Connection timeout duration. If the duration is too short, the client application will be disconnected before the data request sent by the application
reaches the device
or ka
4.1.2 C# (WebClient)
// using System.Net;
// using System.Net.Security;
try
{
string strUrl = "http://192.168.18.84:80/ISAPI/System/deviceInfo";
WebClient client = new WebClient();
// Set the user name and password
client.Credentials = new NetworkCredential("admin", "admin12345");
byte[] responseData = client.DownloadData(strUrl);
string strResponseData = Encoding.UTF8.GetString(responseData);
// Output received information
Console.WriteLine(strResponseData);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
import requests
request_url = 'http://192.168.18.84:80/ISAPI/System/deviceInfo'
# Set the authentication information
auth = requests.auth.HTTPDigestAuth('admin', 'admin12345')
# Send the request and receive response
Lt om
response = requests.get(request_url, auth=auth)
# Output response content
print(response.text)
t .c
d
Pv l
4.2 Message Parsing ai
gy gm
4.2.1 Message Format
lo n@
During the process of communication and interaction via ISAPI, the request and response messages are often text data
in XML or JSON format. Besides that, the data of firmware packages and configuration files is in binary format. A
no je
request can also be in form format with multiple formats of data (multipart/form-data).
ch ja
4.2.1.1 XML
Te la
Generally, the Content-Type in the headers of the HTTP request is application/xml; charset="UTF-8" .
i su
Request and response messages in XML format are all encoded with UTF-8 standards in ISAPI.
or ka
The namespace http://www.isapi.org/ver20/XMLSchema and ISAPI version number 2.0 of XML messages are
configured by default, see the example below.
<enabled>true</enabled>
<nodeName>nodeName</nodeName>
<level>level1</level>
</Node>
</NodeList>
4.2.1.2 JSON
The Content-Type in the headers of the HTTP request is often application/json .
To distinguish between APIs with XML messages and those with JSON messages, ISAPI adds the query parameter
format=json to all request URLs with JSON messages, e.g.,
http://192.168.1.1:80/ISAPI/System/Sensor/thermometrySensor?format=json . Messages of request URLs without
the query parameter format=json are usually in XML format. However, there may be some exceptions, and the message
format is subject to the API definition.
Request and response messages in JSON format are all encoded by UTF-8 in ISAPI.
Lt om
In RFC specifications, it is strongly recommended to contain the field Content-Length in the entity header, and
there is no requirement that the field Content-Length should be contained in the header of each form element.
t .c
The absence of field Content-Length in the header should be considered when the client and device programs
d
parse the form data.
Pv l
ai
To avoid the conflict between message content and boundary value, it is recommended to use a longer and more
complex string as the boundary value.
gy gm
The example of ISAPI form data submitted by a client to a device is as follows.
lo n@
POST /ISAPI/Intelligent/FDLib/pictureUpload
no je
--e5c2f8c5461142aea117791dade6414d
Content-Disposition: form-data; name="PictureUploadData";
Te la
Content-Type: application/xml
Content-Length: 1234
i su
<PictureUploadData/>
--e5c2f8c5461142aea117791dade6414d
or ka
Picture Data
--e5c2f8c5461142aea117791dade6414d--
The example of ISAPI form data responded from a device to a client is as follows.
So
In ISAPI messages, when there are multiple form units, three nodes ( pid , contentid , and filename ) are used for linking
form units. The corresponding relations are as follows:
Node Form
Description
Name Field
pid in XML/JSON messages corresponds to the name property of Content-Disposition in
pid name
form headers.
Content-
contentid contentid in XML/JSON messages corresponds to Content-ID in form headers.
ID
filename in XML/JSON messages corresponds to filename property of Content-Disposition in
filename filename
form headers.
HTTP/1.1 200 OK
Content-Type: multipart/form-data; boundary=136a73438ecc4618834b999409d05bb9
Content-Length: 56789
--136a73438ecc4618834b999409d05bb9
Content-Disposition: form-data; name="mixedTargetDetection";
Content-Type: application/json
Content-Length: 811
{
"ipAddress": "172.6.64.7",
"macAddress": "01:17:24:45:D9:F4",
"channelID": 1,
"dateTime": "2009-11-14T15:27+08:00",
"eventType": "mixedTargetDetection",
"eventDescription": "Mixed target detection",
"deviceID": "123456789",
"CaptureResult": [{
"targetID": 1,
"Human": {
"Rect": {
"height": 1.0,
"width": 1.0,
"x": 0.0,
"y": 0.0
},
"contentID1": "humanImage", /*human body thumbnail*/
"contentID2": "humanBackgroundImage", /*human body background picture*/
Lt om
"pId1": "9d48a26f7b8b4f2390c16808f93f3534", /*human body thumbnail ID */
"pId2": "5EE7078E07BB47CF860DE8E4E9A85F28" /*ID of human body background picture*/
}
t .c
}]
}
d
Pv l
--136a73438ecc4618834b999409d05bb9
Content-Disposition: form-data; name="9d48a26f7b8b4f2390c16808f93f3534"; filename="humanImage.jpg";
Content-Type: image/jpeg
Content-Length: 34567
ai
gy gm
Content-ID: humanImage
Picture Data
lo n@
--136a73438ecc4618834b999409d05bb9
Content-Disposition: form-data; name="5EE7078E07BB47CF860DE8E4E9A85F28"; filename="humanBackgroundImage.jpg";
Content-Type: image/jpeg
no je
Content-Length: 345678
Content-ID: humanBackgroundImage
ch ja
Picture Data
--136a73438ecc4618834b999409d05bb9--
Te la
i su
4.2.2 Annotation
or ka
The field descriptions of ISAPI request and response messages are marked as annotations in the example messages as
shown below.
<Node>
<!--ro, opt, object, node information-->
<id>
<!--ro, req, int, node No., range:[,], step:, unit:, unitType:-->1
</id>
<enabled>
<!--ro, opt, bool, whether to enable-->true
</enabled>
<nodeName>
<!--ro, req, string, node name, range:[1,32]-->test
</nodeName>
<level>
<!--ro, opt, enum, level, subType:string,
[level1#level 1,level2#level 2,level3#level 3]-->level1
</level>
</Node>
</NodeList>
{
"name": "test",
/*ro, req, string, name, range:[1,32]*/
"type": "type1",
/*ro, req, enum, type, subType:string, [type1#type 1,type2#type 2]*/
"enabled": true,
/*ro, opt, bool, enable or not, desc:xxxxxxx*/
"NodeList": {
/*opt, object, node list, dep:and,{$.enabled,eq,true}*/
"scene": 1,
/*req, enum, scene, subType:int, [1#scene 1; 2#scene 2; 3#scene 3]*/
"ID": 1
/*req, int, No., range:[1,8], step:, unit:, unitType:*/
}
}
Lt om
wo This field can only be edited and cannot be obtained.
Only
t .c
Attribute: This field is required for request messages sent to the device and response
req
d
Pv l
Required messages returned from the device.
Attribute:
ai
This field is optional for request messages sent to the device and response
opt
gy gm
Optional messages returned from the device.
lo n@
Attribute:
dep This field is valid and required when specific conditions are satisfied.
Dependent
no je
object Field Type: Object The field of type object contains multiple sub-fields.
ch ja
list Field Type: List The subType following it refers to the data type of sub-items in the list.
Te la
The range following it refers to the maximum and the minimum string size of the
i su
int Field Type: Int The range following it refers to the maximum and the minimum value of the field.
float Field Type: Float The range following it refers to the maximum and the minimum value of the field.
Field Type:
bool The value can be true or false.
Boolean
So
Field Type: The subType following it indicates that the enumerators are of type string or int.
enum
Enumeration The [] following the subType contains all enumerators.
When the type of field is list or enum, the value of subType is the data type of each
subType Sub-Type of Field
sub-object.
desc Field Description The detailed description of the field.
<isSupportNetworkStatus>
<!--ro, opt, bool, whether it supports searching the network status, desc: related API (/ISAPI/System/Network/status?format=json)-->true
</isSupportNetworkStatus>
The value range of the field: the maximum value, minimum value, the maximum size, the minimum size, options,
Lt om
and so on of each field of the API.
t .c
The example of JSON format is shown below:
d
Pv l
{
"boolType": { ai
/*req, object, example of the capability of type bool*/
"@opt": [true, false]
gy gm
/*req, array, options, subType: bool*/
},
lo n@
"integerType": {
/*req, object, example of the capability of type integer*/
"@min": 0,
no je
},
"stringType": {
Te la
"@max": 32
/*ro, req, int, the maximum string size*/
},
or ka
"enumType": {
/*req, object, capability example of type enum*/
"@opt": ["enum1", "enum2", "enum3"]
/*req, array, options, subType: string*/
}
}
So
Note: For the same capability set, devices of different models and versions may return different results. The values
shown in this document are only examples for reference. The capability set actually returned by the device takes
precedence.
Example: 2017-08-16T20:17:06.123+08:00 refers to 20:17:06.123 on August 16, 2017 (local time which is 8 hours
ahead of UTC). The plus sign (+) indicates that the local time is ahead of UTC, and the minus sign (-) means that the
local time is behind UTC.
After the DST is enabled, the local time and time difference will change compared with UTC, and the values of related
fields also need to be changed. Disabling the DST will bring into the opposite effect.
Example: In 1986, the DST was in effect from May 4 at 2:00 a.m. (GMT+8). During the DST period, the clocks were
moved one hour ahead, which means that there was one less hour on that day. When the DST ends at 2:00 a.m. on
September 14, 1986, the clocks were moved one hour back and there was an extra hour on that day. The changes of the
time are as follows:
Lt om
t .c
DST Starts: 1986-05-04T02:00:00+08:00 --> 1986-05-04T03:00:00+09:00
d
Pv l
DST Ends: 1986-09-14T02:00:00+09:00 --> 1986-09-14T01:00:00+08:00
Notes:
ai
gy gm
The time difference cannot be simply used to determine the time zone. Because when the DST starts, the time
difference will change and it cannot represent the actual time zone.
lo n@
Both TZ (UTC time, e.g., 1986-05-03T18:00:00Z) and TD (local time and time difference, e.g., 1986-05-
no je
04T02:00:00+08:00) meet the time format standards of ISO 8601. In ISAPI, the TD format is recommended to be
used in messages sent from the user applications and the devices.
ch ja
A few old-version devices will return the time in TZ format. For representing the time difference information and
Te la
forward compatibility, an extra field timeDiff is added as shown in the example below. User applications need to
support both TD format and TZ format when parsing the time in the messages returned by devices.
i su
or ka
{
"dateTime": "1986-05-03T18:00:00Z", /*device time. The value in TZ format is the UTC time and the value in TD format is the time difference between the
device's local time and UTC*/
"timeDiff": "+08:00" /*optional, time difference between the local time and UTC time. If this field does not exist, the user application will convert
the dateTime into the local time for use*/
}
So
Lt om
11 Close Square Bracket ] 28 Open Single Quotation Mark '
t .c
12 Underscore _ 29 Vertical Bar |
d
Pv l
13 Open Brace { ai 30 Tilde ~
14 Close Brace } 31 Double Quotation Marks "
gy gm
15 Space 32 Colon :
lo n@
17 Octothorpe #
ch ja
The valid characters that can be used in some special fields are listed below.
Te la
User name: lowercase letters ( a-z ), uppercase letters ( A-Z ), digits ( 0-9 ), and characters from No. 1 to No. 30 in the
i su
Password: User Name: lowercase letters ( a-z ), uppercase letters ( A-Z ), digits ( 0-9 ), and characters from No. 1 to
No. 33 in the special character table.
Names displayed on the UI (device name, person name, face picture library name, etc.): lowercase letters ( a-z ),
uppercase letters ( A-Z ), digits ( 0-9 ), characters from No. 1 to No. 15 in the special character table, and multi-byte
characters.
So
Normal fields of type string support lowercase letters ( a-z ), uppercase letters ( A-Z ), digits ( 0-9 ), characters from
No. 1 to No. 15 in the special character table, and multi-byte characters by default.
{
"requestURL": "/ISAPI/Event/triggers/notifications/channels/whiteLightAlarm",
"statusCode": 4,
"statusString": "Invalid Operation",
"subStatusCode": "notSupport",
"errorCode": 1073741825,
"errorMsg": "notSupport"
}
5 VCA
5.1 Face Picture Library Management
5.1.1. Search via Picture Comparison in Face Capture Library
Lt om
5.1.1.1 Introduction to the Function
t .c
Picture comparison with captured picture library
d
Pv l
Scene application: Search for similar person in face picture library, which can be used for identity confirmation.
By binary picture:
Read binary picture files.
Lt om
3. Submit synced face picture library to use picture to search picture
t .c
d
Search via picture comparison in face capture library: POST /ISAPI/Intelligent/FDLib/searchByPic?
Pv l
format=json ; ai
gy gm
Note: Input parameter node dataType include three modes. Picture URL corresponds to faceURL , model data
corresponds to targetModelData , binary data mode is in form of form, and its JSON data is followed by binary
lo n@
picture data.
no je
POST /ISAPI/Intelligent/FDLib/searchByPic?format=json
Te la
Host: device_ip:port
Accept-Language: zh-cn
Date: YourDate
i su
Content-Type: multipart/form-data;boundary=<frontier>
Content-Length: text_length
Connection: keep-alive
or ka
--<frontier>
Content-Disposition: form-data; name=""
Content-Type: application/json
[JSON message]
--<frontier>
Content-Disposition: form-data; name="Picture_Name"
Content-Length: image_length
So
Content-Type: image/jpeg
[Picture data]
--<frontier>--
Lt om
t .c
d
Pv l
ai
gy gm
lo n@
no je
ch ja
Te la
i su
or ka
So
Lt om
anti-passing back parameters of card readers: GET
t .c
/ISAPI/AccessControl/CardReaderAntiSneakCfg/capabilities?format=json .
d
5. Get the capability of access control: GET /ISAPI/AccessControl/capabilities ; if the node
Pv l
ai
isSupportClearAntiSneakCfg is returned and its value is "true", it indicates that the device supports clearing
parameters of anti-passback.
gy gm
6. Clear anti-passing back parameters: PUT /ISAPI/AccessControl/ClearAntiSneakCfg?format=json ; Get the
lo n@
isSupportClearAntiSneak is returned and its value is "true", it indicates that the device supports clearing records of
anti-passback.
Te la
clearing anti-passback records by person ID. Get the capability of clearing anti-passback records: GET
/ISAPI/AccessControl/ClearAntiSneak/capabilities?format=json .
or ka
Note: clear the historic anti-passback parameters before configuring new parameters.
The device supports getting the arming information, such as the armed device IP and port, arming type, and protocol
type.
Lt om
t .c
d
Pv l
ai
gy gm
lo n@
device also supports configuring schedule templates of the card reader authentication mode).
2. Set control schedule parameters of card reader authentication mode: [GET/PUT]
/ISAPI/AccessControl/CardReaderPlan/<cardReaderID>?format=json ; the value of cardReaderID should be the
same as the value of templateNo.
3. If the node isSupportCardReaderPlan is returned and its value is "false", it indicates that the device does not
support configuring control schedules of card reader authentication mode.
the device also supports configuring weekly schedules of the card reader authentication mode).
2. Set the schedule template parameters of the card reader authentication mode: [GET/PUT]
/ISAPI/AccessControl/VerifyPlanTemplate/<planTemplateID>?format=json .
3. If the node isSupportVerifyPlanTemplate is returned and its value is "false", it indicates that the device does not
support configuring schedule templates of the card reader authentication mode.
2. Set the weekly schedule parameters of the card reader authentication mode: [GET/PUT]
/ISAPI/AccessControl/VerifyWeekPlanCfg/<weekPlanID>?format=json .
3. If the node isSupportVerifyWeekPlanCfg is returned and its value is "false", it indicates that the device does not
support configuring weekly schedules of the card reader authentication mode.
authentication mode (and the device also supports configuring holiday schedules of card reader authentication
mode).
2. Set holiday group parameters of control schedule of card reader authentication mode: [GET/PUT]
/ISAPI/AccessControl/VerifyHolidayGroupCfg/<holidayGroupID>?format=json .
3. If the node isSupportVerifyHolidayGroupCfg is returned and its value is "false", it indicates that the device does not
support configuring holiday groups of control schedule of card reader authentication mode.
Lt om
code strings according to the registered information, QR code key, and QR code protocol, for converting QR code
strings to QR code pictures, and sending to visitors' phones.
t .c
4. When the visitors enter the controlled areas, they can scan the QR codes via the devices. Then, the device can get
d
Pv l
the encrypted data, decrypt the data by QR code key and protocol, and check whether the door can be opened. If
ai
yes, the door will open; if no, the door will not open and the device will prompt the message "No permission".
gy gm
6.4.1.2 API Calling Flow
lo n@
1. Get the functional capability of access control: GET /ISAPI/AccessControl/capabilities ; if the node
isSupportQRCodeEncryption is returned and its value is "true", it indicates that the device supports QR code
no je
encryption.
ch ja
initialization vector.
4. Get the related APIs of Person and Credential Management for applying certain persons' permissions to open the
doors. So the permission of opening a door is decided by whether a person's employee No. is authenticated.
5. After generating QR code strings by Base64 and generating QR code pictures based on QR code strings, the
platform for sending the pictures to visitors' phones. The visitors can access the area after scanning the QR code
So
pictures.
1. After an access control device is deployed, you can log in to the device via the Web / iVMS-4200 client software,
and set a QR code key for the device (saving the QR code key is not necessary). Notes: to ensure security, the
QR code key should be encrypted before saving to the device; if multiple doors need to be opened via
the QR code, the devices of the multiple doors should be configured a same key.
2. By calling the APIs of person-based functions, the Web / iVMS-4200 client software applies persons' permission to
the device. So the permission of opening a door is decided by whether a person's employee No. is authenticated.
Lt om
3. Before visitors enter the controlled areas, the inviters need to upload the visitor information to EZ and apply the
information to the device. The device will generate QR code strings according to the visitor information, QR code
t .c
key, and QR code protocol, and send back to the inviters. The inviters' phones will convert QR code strings to QR
d
Pv l
code pictures, and forward the pictures to visitors' phones.
ai
4. When the visitors enter the controlled areas, they can scan the QR codes via the devices. Then, the device can get
the encrypted data, decrypt the data by QR code key and protocol, and check whether the door can be opened. If
gy gm
yes, the door will open; if no, the door will not open and prompt the message "No permission". Note: for
lo n@
usability and security, APIs of generating QR codes by the platform are not accessible, only APIs of
generating QR code by device are provided.
no je
1. Get the functional capability of access control: GET /ISAPI/AccessControl/capabilities ; if the nodes
Te la
isSupportQRCodeEncryption and isSupportQRCodeInfo are returned and the value is "true", it indicates that the
i su
4. Get the related APIs of Person and Credential Management for applying certain persons' permissions to open the
doors. The permission of opening a door will be decided by whether a person's employee No. is authenticated.
5. Generate QR code strings encoded via base64: POST /ISAPI/AccessControl/QRCodeInfo?format=json&security=
<security>&iv=<iv> ; then the device will send the QR code strings to the phones of the inviters.
6. Inviters' phones convert the QR code strings to QR code pictures, and send to visitors' phones.
7. The visitors can access the area by scanning the QR code pictures in their phones.
6.4.3 Remarks
The device will send AccessControllerEvent (contains QRCodeInfo) for QR code authentication. If the authentication
succeed, the returned event type will be 0x9c, if the authentication failed, the returned event type will be 0x9d.
Lt om
t .c
d
Pv l
ai
gy gm
lo n@
no je
ch ja
Te la
i su
or ka
Before calling the API for card management, make sure that the device supports card management.
So
1. Check whether the device supports card management: GET /ISAPI/AccessControl/capabilities ; if the node
isSupportCardInfo is returned and its value is “true”, it indicates that the device supports card management.
2. Search, apply, add, edit, and delete cards.
3. If the node isSupportCardInfo is returned and its value is “false”, it indicates that the device does not support card
management.
Note:
Before applying, adding, or editing cards on the device, make sure that the related person information linked to the
person ID has been applied to the device.
The value of the node numberPerPerson returned by calling GET
/ISAPI/AccessControl/CardInfo/capabilities?format=json is the maximum number of cards supported per
person. If the value returned is 255, it indicates that the number of cards per person is unlimited. If the node is not
returned, it indicates that the maximum number of cards can be applied is 5.
Manage cards of different card number lengths by calling [GET/PUT]
/ISAPI/AccessControl/CardVerificationRule?format=json .
6.5.2.2 Card Search
So
or ka
i su
Te la
ch ja
no je
lo n@
gy gm
ai
Pv l
t .c
Lt om
d
Lt om
t .c
d
Pv l
ai
gy gm
lo n@
no je
ch ja
Te la
i su
or ka
So
The card search function is for searching the number of cards and card information applied to the device.
1. Check whether the device supports card search: GET /ISAPI/AccessControl/CardInfo/capabilities?
format=json ; if the value of the node supportFunction contains “get”, it indicates that the device supports card
search.
2. Search the number of specified persons’ cards: GET /ISAPI/AccessControl/CardInfo/Count?
format=json&employeeNo=<employeeNo> ; the returned value of the node cardNumber is the number of the cards
added to the specified persons.
3. Search the number of all persons’ cards: GET /ISAPI/AccessControl/CardInfo/Count?format=json ; the returned
value of the node cardNumber is the number of the cards added to all persons.
4. Search card information: POST /ISAPI/AccessControl/CardInfo/Search?format=json ; the card information is
returned by page.
5. If the value of the node supportFunction does not contain “get”, it indicates that the device does not support card
search.
Note:
The value of the node maxRecordNum returned by calling GET /ISAPI/AccessControl/CardInfo/capabilities?
format=json is the maximum number of cards supported by the device.
Lt om
6.5.2.3 Card Applying
t .c
d
Pv l
ai
gy gm
lo n@
no je
ch ja
Te la
i su
or ka
So
Lt om
t .c
d
Pv l
ai
gy gm
lo n@
no je
ch ja
Te la
i su
or ka
So
Card information can be applied to the device via the card applying function. If the card has been added to
the device, the card information will be edited; if the card has not been added to the device, the card
information will be added to the device.
1. Check whether the device supports card applying: GET /ISAPI/AccessControl/CardInfo/capabilities?
format=json ; if the value of the node supportFunction contains “setUp”, it indicates that the device supports card
applying.
2. Apply card information: PUT /ISAPI/AccessControl/CardInfo/SetUp?format=json .
3. If the value of the node supportFunction does not contain “setUp”, it indicates that the device does not support
card applying.
Note:
Check whether the card has been added to the device via the node cardNo returned after calling the API for card
applying.
Card information can be added to the device via the card adding function. If the card has been added to the
device, the device will report an error; if the card has not been added to the device, the card information will
be added to the device.
1. Check whether the device supports card adding: GET /ISAPI/AccessControl/CardInfo/capabilities?
format=json ; if the value of the node supportFunction contains “post”, it indicates that the device supports card
adding.
2. Add card information: POST /ISAPI/AccessControl/CardInfo/Record?format=json .
3. If the value of the node supportFunction does not contain “post”, it indicates that the device does not support card
adding.
Note:
Check whether the card has been added to the device via the node cardNo returned after calling the API for card
adding.
Card information on the device can be edited via the card information editing function. If the card has been
added to the device, the card information will be edited; if the card has not been added to the device, the
device will report an error.
1. Check whether the device supports card information editing: GET
/ISAPI/AccessControl/CardInfo/capabilities?format=json ; if the value of the node supportFunction contains
“put”, it indicates that the device supports card information editing.
2. Edit card information: PUT /ISAPI/AccessControl/CardInfo/Modify?format=json .
3. If the value of the node supportFunction does not contain “put”, it indicates that the device does not support card
information editing.
Note:
Check whether the card has been added to the device via the node cardNo returned after calling the API for card
information editing.
The card information on the device can be deleted via the card deleting function. The device will not report
an error if the card information to be deleted is not added to the device.
1. Check whether the device supports card deleting: GET /ISAPI/AccessControl/CardInfo/capabilities?
format=json ; if the value of the node supportFunction contains “delete”, it indicates that the device supports card
deleting.
2. Delete cards: PUT /ISAPI/AccessControl/CardInfo/Delete?format=json ; if calling succeeded, it indicates that the
device has deleted the cards.
3. If the value of the node supportFunction does not contain “delete”, it indicates that the device does not support
card deleting.
The card collecting function is for collecting the card No., card type, etc.
1. Check whether the device supports card collecting: GET /ISAPI/AccessControl/capabilities ; if the node
isSupportCaptureCardInfo is returned and its value is “true”, it indicates that the device supports card collecting.
2. Collect card information: GET /ISAPI/AccessControl/CaptureCardInfo?format=json .
3. If the node isSupportCaptureCardInfo is returned and its value is “false”, it indicates that the device does not
support card collecting.
6.6 Configure Non-anti-passback Time Period
Non-anti-passback time period: anti-passback is not triggered in the set time period. Application Scenarios: In rush
hour, anti-passback can always happens since the person might follow others in the people flow. Non-anti-passback
can help normal entry&exit in rush hour.
isSupportAntiPassbackTimeRange is returned and its value is "true", it indicates that the device supports
configuring time period of anti-passback.
no je
schedule is not required. If it is not configured, No device configuration has permission for all the doors by default. The
priority of remote door control is higher than that of door control schedule. The operation of remote door control can
take effect when the door is in the status of remain open/closed, sleep, and normal.
Each schedule template can be linked to one week schedule and four holiday group schedules. Holiday schedule
priority is higher than that of weekly schedule. Weekly schedule can be configured with time periods from Monday to
Sunday, and 8 different time periods are supported each day. Holiday group schedule can be linked to 16 different
holiday schedules. Each holiday schedule can be configured with one start and end date of the holiday, and the access
time period is the same for each day (up to 8 different time periods can be configured). This schedule template is
configured to manage access control permission.
6.7.2 API Calling Flow
6.7.2.1 Configure Door Control Schedule
Lt om
t .c
d
Pv l
ai
gy gm
lo n@
no je
ch ja
Te la
i su
or ka
So
Lt om
t .c
d
Pv l
ai
gy gm
lo n@
no je
ch ja
Te la
i su
or ka
So
3. Get and set the parameters of event and card linkage: GET|PUT
/ISAPI/AccessControl/EventCardLinkageCfg/<ACEID>?format=json .
Lt om
3. Search for parameters of event and card linkage: POST /ISAPI/AccessControl/EventCardLinkageCfg/search?
format=json .
t .c
d
Pv l
6.8.2.3 Delete Parameters of Specific Event and Card Linkage
ai
1. Get the functional capability of access control: GET /ISAPI/AccessControl/capabilities ; if the node
gy gm
isSupportEventCardLinkageCfgDelete is returned and its value is "true", it indicates that the device supports
deleting parameters of event and card linkage.
lo n@
format=json .
ch ja
1. Call the functional capability of access control: GET /ISAPI/AccessControl/capabilities ; if the node
i su
isSupportEventCardNoList is returned and its value is true, it indicates that the device supports getting events and
the card linkage ID list.
or ka
2. Get the capability of the list of event and card linkage ID: GET
/ISAPI/AccessControl/EventCardNoList/capabilities?format=json .
3. Get the list of event and card linkage ID: GET /ISAPI/AccessControl/EventCardNoList?format=json .
So
Lt om
t .c
d
Pv l
ai
gy gm
lo n@
no je
ch ja
Te la
i su
or ka
Before calling the API for face picture management, make sure that the device supports face picture
management.
So
1. Check whether the device supports face picture management: GET /ISAPI/AccessControl/capabilities ; if the
node isSupportFDLib is returned and its value is “true”, it indicates that the device supports face picture
management.
2. Search, apply, add, edit, and delete face pictures.
3. If the node isSupportFDLib is returned and its value is “false”, it indicates that the device does not support face
picture management.
Note:
Before applying, adding, or editing face picture information on the device, make sure that the related person
information linked to the person ID has been applied to the device, and make sure that the device has its face
picture library by calling GET /ISAPI/Intelligent/FDLib?format=json (if the device has no face picture library,
then create the face picture library by calling POST /ISAPI/Intelligent/FDLib?format=json ), and the ID of the
library of face pictures captured in visible light (FDID) is 1.
If the value of the node mode returned by calling GET /ISAPI/AccessControl/FaceRecognizeMode/capabilities?
format=json contains “deepMode”, it indicates that the device supports the deep mode, which compares face
pictures captured in infrared light. For devices which support the deep mode, if the face picture library ID (FDID) is
2, face pictures captured in infrared light will be applied to the face picture library and be used for face picture
comparison; if the face picture library ID (FDID) is 1, face pictures captured in visible light will be applied to the face
picture library and be displayed on the device.
Switch between the deep mode and normal mode: [GET/PUT] /ISAPI/AccessControl/FaceRecognizeMode?
format=json ; the modes can be switched via the node mode.
Lt om
t .c
d
Pv l
ai
gy gm
lo n@
no je
ch ja
Te la
i su
or ka
So
The face picture search function is for searching the number of face pictures and face picture information
added to the device.
1. Check whether the device supports face picture search: GET /ISAPI/Intelligent/FDLib/capabilities?
format=json ; if the value of the node supportFunction contains “get”, it indicates that the device supports face
picture search.
Lt om
2. Search the number of face pictures in the specified face picture libraries: GET /ISAPI/Intelligent/FDLib/Count?
format=json&FDID=<FDID>&faceLibType=<faceLibType> ; the returned value of the node recordDataNumber is the
t .c
number of the added face pictures of the specified face picture libraries.
d
Pv l
3. Search the number of face pictures in all face picture libraries: GET /ISAPI/Intelligent/FDLib/Count?
ai
format=json ; the returned value of the node recordDataNumber is the number of face pictures in all face picture
gy gm
libraries.
4. Search face picture information: POST /ISAPI/Intelligent/FDLib/FDSearch?format=json ; the face picture
lo n@
5. If the value of the node supportFunction does not contain “get”, it indicates that the device does not support face
picture search.
ch ja
Note:
Te la
Face picture information can be applied to the device via the face picture applying function. If the face
picture has been added to the device, the face picture information will be edited; if the face picture has not
been added to the device, the face picture information will be added to the device.
1. Check whether the device supports face picture applying: GET /ISAPI/Intelligent/FDLib/capabilities?
format=json ; if the value of the node supportFunction contains “setUp”, it indicates that the device supports face
picture applying.
2. Apply face picture information: PUT /ISAPI/Intelligent/FDLib/FDSetUp?format=json .
3. If the value of the node supportFunction does not contain “setUp”, it indicates that the device does not support face
picture applying.
Note:
Check whether the face picture has been added to the device via the node FPID returned by calling the API for face
picture applying, and link the face picture to the person information via the node FPID in face picture management and
the node employeeNo in person management.
Face picture information can be added to the device via the face picture adding function. If the face picture
has been added to the device, the device will report an error; if the face picture has not been added to the
device, the face picture information will be added to the device.
1. Check whether the device supports face picture adding: GET /ISAPI/Intelligent/FDLib/capabilities?
format=json ; if the value of the node supportFunction contains “post”, it indicates that the device supports face
picture adding.
2. Add face picture information: POST /ISAPI/Intelligent/FDLib/FaceDataRecord?format=json .
3. If the value of the node supportFunction does not contain “post”, it indicates that the device does not support face
picture adding.
Note:
Check whether the face picture has been added to the device via the node FPID returned by calling the API for face
picture adding, and link the face picture to the person information via the node FPID in face picture management and
the node employeeNo in person management.
Face picture information on the device can be edited via the face picture information editing function. If the
face picture has been added to the device, the face picture information will be edited; if the face picture has
not been added to the device, the device will report an error.
1. Check whether the device supports face picture information editing: GET
/ISAPI/Intelligent/FDLib/capabilities?format=json ; if the value of the node supportFunction contains “put”,
it indicates that the device supports face picture information editing.
2. Edit face picture information: PUT /ISAPI/Intelligent/FDLib/FDModify?format=json .
3. If the value of the node supportFunction does not contain “put”, it indicates that the device does not support face
picture information editing.
Note:
Check whether the face picture has been added to the device via the node FPID returned by calling the API for face
picture information editing, and link the face picture to the person information via the node FPID in face picture
management and the node employeeNo in person management.
6.9.2.6 Face Picture Deleting
Lt om
t .c
d
Pv l
ai
gy gm
lo n@
no je
ch ja
Te la
i su
or ka
So
The face picture information on the device can be deleted via the face picture deleting function. The device
will not report an error if the face picture to be deleted is not added to the device.
1. Check whether the device supports face picture deleting: GET /ISAPI/Intelligent/FDLib/capabilities?
format=json ; if the value of the node supportFunction contains “delete”, it indicates that the device supports face
picture deleting.
2. Delete face pictures: PUT /ISAPI/Intelligent/FDLib/FDSearch/Delete?format=json&FDID=<FDID>&faceLibType=
<FDType> ; if calling succeeded, it indicates that the device has deleted the face pictures.
3. If the value of the node supportFunction does not contain “delete”, it indicates that the device does not support
face picture deleting.
Note:
All the face picture libraries and the face picture information in the libraries on the device can be deleted by calling
DELETE /ISAPI/Intelligent/FDLib?format=json .
6.9.2.7 Face Picture Collecting
Lt om
t .c
d
Pv l
ai
gy gm
lo n@
no je
ch ja
Te la
i su
or ka
So
Face picture data, face picture quality grades, etc., can be collected via the face picture collecting function.
1. Check whether the device supports face picture collecting: GET /ISAPI/AccessControl/capabilities ; if the node
isSupportCaptureFace is returned and its value is “true”, it indicates that the device supports face picture (captured
in visible light) collecting. If the node isSupportCaptureInfraredFace is returned and its value is “true”, it indicates
that the device supports face picture (captured in infrared light) collecting.
2. Collect face picture information: POST /ISAPI/AccessControl/CaptureFaceData .
If the node captureProgress is returned, and the value is 100, it indicates that the face picture has been collected,
and the binary data or URL of the collected face picture will be parsed.
If the node captureProgress is returned and the value is 0, it indicates that the face picture has not been collected,
and you need to get the progress of face picture collecting.
3. Get the progress of face picture collecting: GET /ISAPI/AccessControl/CaptureFaceData/Progress ; repeatedly
call this API to get the progress of face picture collecting.
Repeatedly call this API until the node captureProgress is returned and its value is 100, which indicates that the
face picture has been collected and the binary data and URL of the face picture will be parsed.
If the value of the node captureProgress is 0 and the value of the isCurRequestOver is true, which indicates that the
face picture collecting failed, stop calling the API.
4. If the node isSupportCaptureFace is returned and its value is “false”, it indicates that the device does not support
face picture collecting.
6.10 Fingerprint Management
6.10.1 Introduction to the Function
Fingerprint management includes searching, applying, deleting, and collecting fingerprints.
Lt om
t .c
6.10.2.1 Check Whether the Device Supports Fingerprint Management
d
Pv l
ai
gy gm
lo n@
no je
ch ja
Te la
i su
or ka
So
Lt om
t .c
d
Pv l
ai
gy gm
lo n@
no je
ch ja
Te la
i su
or ka
Before calling the API for fingerprint management, make sure that the device supports fingerprint
So
management.
1. Check whether the device supports fingerprint management: GET /ISAPI/AccessControl/capabilities ; if the
node isSupportFingerPrintCfg is returned and its value is “true”, it indicates that the device supports fingerprint
management.
2. Search, apply, add, and edit fingerprints.
3. If the node isSupportFingerPrintCfg is returned and its value is “false”, it indicates that the device does not support
fingerprint management.
Note:
Before applying the fingerprint information to the device, make sure that the related person information linked to
the person ID has been applied to the device.
The maximum number of fingerprints that can be applied to the device per person is 10 (the 10 fingerprints of a
person).
Lt om
The value of the node fingerPrintCapacity returned by calling GET
/ISAPI/AccessControl/CardReaderCfg/<cardReaderID>?format=json is the maximum number of fingerprints
t .c
supported by the card reader.
d
Pv l
ai
The value of the node fingerPrintNum returned by calling GET
/ISAPI/AccessControl/CardReaderCfg/<cardReaderID>?format=json is the number of fingerprints added to the
gy gm
card reader.
lo n@
Fingerprint information can be applied to the device via the fingerprint applying function. If the fingerprint
has been added to the device, the fingerprint information will be edited; if the fingerprint has not been
added to the device, the fingerprint will be added to the device.
1. Check whether the device supports fingerprint applying: GET
/ISAPI/AccessControl/FingerPrintCfg/capabilities?format=json ; if the node isSupportSetUp is returned and
its value is “true”, it indicates that the device supports fingerprint applying.
2. Apply fingerprint information: POST /ISAPI/AccessControl/FingerPrint/SetUp?format=json .
3. If the node isSupportSetUp is returned and its value is false, it indicates that the device does not support
fingerprint applying.
Note:
Check whether the fingerprint has been added to the device via the nodes employeeNo and fingerPrintID returned after
calling the API for fingerprint applying.
Fingerprint information can be added to the device via the fingerprint adding function. If the fingerprint has
been added to the device, the device will report an error; if the fingerprint has not been added to the device,
the fingerprint will be added to the device.
1. Check whether the device supports fingerprint adding: GET
/ISAPI/AccessControl/FingerPrintCfg/capabilities?format=json ; if calling succeeded, it indicates that the
device supports fingerprint adding.
2. Add fingerprint information: POST /ISAPI/AccessControl/FingerPrintDownload?format=json ; if calling
succeeded, it indicates that the device has started to execute fingerprint adding, but it does not indicate that the
device has added the fingerprint.
3. Get the progress of fingerprint adding: GET /ISAPI/AccessControl/FingerPrintProgress?format=json ;
repeatedly call this API to get the progress of fingerprint adding.
4. If calling failed, it indicates that the device does not support fingerprint adding.
Note:
Check whether the fingerprint has been added to the device via the nodes employeeNo and fingerPrintID returned after
calling the API for fingerprint adding.
Lt om
t .c
d
Pv l
ai
gy gm
lo n@
no je
ch ja
Te la
i su
or ka
So
The fingerprint information on the device can be edited via the fingerprint information editing function. If
the fingerprint has been added to the device, the fingerprint information will be edited; if the fingerprint
has not been added to the device, the device will report an error.
1. Check whether the device supports fingerprint information editing: GET
/ISAPI/AccessControl/FingerPrintCfg/capabilities?format=json ; if calling succeeded, it indicates that the
device supports fingerprint information editing.
2. Edit fingerprint information: POST /ISAPI/AccessControl/FingerPrintModify?format=json .
3. If calling failed, it indicates that the device does not support fingerprint information editing.
Note:
Check whether the fingerprint has been added to the device via the nodes employeeNo and fingerPrintID returned
after calling the API for fingerprint information editing.
When the fingerprint information is edited, only the fingerprint parameters will be edited; the fingerprint data will
not be edited.
Lt om
t .c
d
Pv l
ai
gy gm
lo n@
no je
ch ja
Te la
i su
or ka
So
Lt om
t .c
d
Pv l
ai
gy gm
lo n@
no je
ch ja
Te la
i su
or ka
So
The fingerprint information on the device can be deleted via the fingerprint deleting function. The device
will not report an error if the fingerprint information to be deleted is not added to the device.
1. Check whether the device supports fingerprint deleting: GET /ISAPI/AccessControl/capabilities ; if the node
isSupportFingerPrintDelete is returned and its value is “true”, it indicates that the device supports fingerprint
deleting.
2. Delete fingerprint information: PUT /ISAPI/AccessControl/FingerPrint/Delete?format=json ; if calling
succeeded, it indicates that the device has started to execute fingerprint deleting, but it does not indicate that the
device has deleted the fingerprints.
3. Get the progress of fingerprint deleting: GET /ISAPI/AccessControl/FingerPrint/DeleteProcess?format=json ;
repeatedly call this API to get the progress of fingerprint deleting.
4. If the node isSupportFingerPrintDelete is returned and its value is “false”, it indicates that the device does not
support fingerprint deleting.
Lt om
t .c
d
Pv l
ai
gy gm
lo n@
no je
ch ja
Te la
i su
or ka
So
The fingerprint collecting function is for collecting the fingerprint data, fingerprint quality, etc.
1. Check whether the device supports fingerprint collecting: GET /ISAPI/AccessControl/capabilities ; if the node
isSupportCaptureFingerPrint is returned and its value is “true”, it indicates that the device supports fingerprint
collecting.
2. Collect fingerprint information: POST /ISAPI/AccessControl/CaptureFingerPrint .
3. If the node isSupportCaptureFingerPrint is returned and its value is “false”, it indicates that the device does not
support fingerprint collecting.
6.11 Iris Data Management
6.11.1 Introduction to the Function
Iris data management includes searching, applying, adding, editing, deleting, and collecting iris data.
Lt om
t .c
d
Pv l
ai
gy gm
lo n@
no je
ch ja
Te la
i su
or ka
So
Before calling the API for iris data management, make sure that the device supports iris data management:
1. Check whether the device supports iris data management: GET /ISAPI/AccessControl/capabilities ; if the node
isSupportIrisInfo is returned and its value is true, it indicates that the device supports iris data management.
2. Search, apply, add, edit, and delete iris data.
3. If the node isSupportIrisInfo is returned and its value is false, it indicates that the device does not support iris data
management.
Note:
Before applying, adding, and editing the iris data on the device, make sure that the related person information
linked to the person ID has been applied to the device.
Data for up to two irises of each person (two eyes of each person) can be applied to the device.
The iris data search function is for searching the number of irises and iris information added to the device.
1. Check whether the device supports iris data search: GET /ISAPI/AccessControl/IrisInfo/capabilities?
format=json ; if the node supportFunction is returned, and the value contains “get”, it indicates that the device
supports iris data search.
2. Search the number of irises: GET /ISAPI/AccessControl/IrisInfo/count?format=json ; the value of the node
IrisNumber is the number of added irises on the device.
3. Search iris information: POST /ISAPI/AccessControl/IrisInfo/search?format=json ; the searched iris
information will be returned by page.
4. If the value of the node supportFunction does not contain “get”, it indicates that the device does not support iris
data search.
Note:
The value of the node maxRecordNum returned by calling GET /ISAPI/AccessControl/IrisInfo/capabilities?
format=json is the maximum number of irises supported by the device.
Lt om
t .c
d
Pv l
ai
gy gm
lo n@
no je
ch ja
Te la
i su
or ka
So
The iris data applying function is for applying iris information to the device. If the iris data has already been
applied to the device, the information about the iris will be edited; if the iris data has not been applied to
the device, the iris information will be added to the device.
1. Check whether the device supports iris data applying: GET /ISAPI/AccessControl/IrisInfo/capabilities?
format=json ; if the node supportFunction is returned and the value contains “setUp”, it indicates that the device
supports iris data applying.
2. Iris Data Applying: PUT /ISAPI/AccessControl/IrisInfo/setup?format=json .
3. If the value of the node supportFunction does not contain “setUp”, it indicates that the device does not support iris
data applying.
Note:
Check whether the iris data have been applied to the device via the nodes employeeNo and id returned by calling the
API for iris data applying.
Lt om
t .c
d
Pv l
ai
gy gm
lo n@
no je
ch ja
Te la
i su
or ka
So
The iris data adding function is for adding the iris data to the device. If the iris data have already been
added to the device, the device will report an error; if the iris data have not been added to the device, the
iris data will be added to the device.
1. Check whether the device supports iris data adding: GET /ISAPI/AccessControl/IrisInfo/capabilities?
format=json ; if the value of the node supportFunction contains “post”, it indicates that the device supports iris data
applying.
2. Add iris data: POST /ISAPI/AccessControl/IrisInfo/record?format=json .
3. If the value of the node supportFunction does not contain “post”, it indicates that the device does not support iris
data applying.
Note:
Check whether the iris data have been applied to the device via the nodes employeeNo and id returned by calling the
API for iris data adding.
Lt om
t .c
d
Pv l
ai
gy gm
lo n@
no je
ch ja
Te la
i su
or ka
So
The iris data editing function is for editing the applied iris information on the device. If the iris data have
already been added to the device, the iris information will be edited; if the iris data have not been added to
the device, the device will report an error.
1. Check whether the device supports iris data editing: GET /ISAPI/AccessControl/IrisInfo/capabilities?
format=json ; if the value of the node supportFunction contains “put”, it indicates that the device supports iris data
editing.
2. Edit iris information: PUT /ISAPI/AccessControl/IrisInfo/modify?format=json .
3. If the value of the node supportFunction does not contain “put”, it indicates that the device does not support iris
data editing.
Note:
Check whether the iris data have been applied to the device via the nodes employeeNo and id returned by calling the
API for iris data editing.
Lt om
t .c
d
Pv l
ai
gy gm
lo n@
no je
ch ja
Te la
i su
or ka
So
The iris data deleting function is for deleting the applied iris information on the device. If the iris data to be
deleted have not been applied to the device, the device will not report an error.
1. Check whether the device supports iris data deleting: GET /ISAPI/AccessControl/IrisInfo/capabilities?
format=json ; if the value of the node supportFunction contains “delete”, it indicates that the device supports iris
data deleting.
2. Delete iris information: PUT /ISAPI/AccessControl/IrisInfo/delete?format=json ; if calling succeeded, it
indicates that the iris information has been deleted.
3. If the value of the node supportFunction does not contain “delete”, it indicates that the device does not support iris
data deleting.
The iris data collecting function is for collecting iris data and information.
1. Check whether the device supports iris data collecting: GET /ISAPI/AccessControl/capabilities ; if the node
isSupportCaptureIrisData is returned and its value is “true”, it indicates that the device supports iris data collecting.
2. Collect iris information: POST /ISAPI/AccessControl/captureIrisData?format=json ; if calling succeeded, it
indicates that the device has started to execute the collection.
3. Get the progress of iris data collecting: GET /ISAPI/AccessControl/captureIrisData/progress?format=json ;
repeatedly call this API until the value of captureProgress is returned and is 100, which indicates that the collecting
completed.
4. If the node isSupportCaptureIrisData is returned and its value is “false”, it indicates that the device does not
support iris data collecting.
6.12 Multi-Factor Authentication
6.12.1 Introduction to the Function
In some scenarios with higher security levels, you can set rules that the door will only open when different persons
authenticate in the access control point during fixed time.
For example, in a bank, a door will only open after two or more persons are authenticated (such as swiping card,
authenticated by fingerprint, face picture, iris, etc.). If a door is configured multi-factor authentication, the number
authentication persons, authentication order, and authentication methods should follow the rules.
Lt om
t .c
d
Pv l
ai
gy gm
lo n@
no je
ch ja
Te la
i su
or ka
So
Lt om
t .c
d
Pv l
ai
gy gm
lo n@
no je
ch ja
Te la
i su
or ka
So
Lt om
t .c
d
Pv l
ai
This document mainly introduces the calling flows for person management and credential management (card,
gy gm
fingerprint, face picture, iris data management). For details about the calling flow for permission schedule management,
refer to the “Management of Permission Schedules for Persons and Access Points”.
lo n@
no je
Person management includes searching, applying, adding, editing, and deleting persons.
i su
Before calling the API for person management, make sure that the device supports person management.
1. Check whether the device supports person management: GET /ISAPI/AccessControl/capabilities ; if the node
So
isSupportUserInfo is returned and its value is true, it indicates that the device supports person management.
2. Search, apply, add, and edit persons.
3. If the node isSupportUserInfo is returned and its value is false, it indicates that the device does not support person
management.
Note:
The person ID (EmployeeNo) is the unique identifier for person and credential management. After calling GET
/ISAPI/AccessControl/capabilities , through the child nodes of EmployeeNoInfo which are employeeNo,
characterType, and isSupportCompress, the maximum string length and character types of the person ID supported by
the device can be checked. Generally, devices support up to 32 bytes and any type of characters. But for access
controllers and distribution-type access control devices, check through the child nodes mentioned above.
The person search function is for searching the number of persons and person information added to the
device.
1. Check whether the device supports person search: GET /ISAPI/AccessControl/UserInfo/capabilities?
format=json ; if the value of the node supportFunction contains “get”, it indicates that the device supports person
search.
2. Search the number of persons: GET /ISAPI/AccessControl/UserInfo/Count?format=json ; the returned value of
the node userNumber is the number of the persons added to the device.
3. Search person information: POST /ISAPI/AccessControl/UserInfo/Search?format=json ; the person information
is returned by page.
4. If the value of the node supportFunction does not contain “get”, it indicates that the device does not support
person search.
Note:
The value of the node maxRecordNum returned by calling GET /ISAPI/AccessControl/UserInfo/capabilities?
format=json is the maximum number of persons supported by the device.
Lt om
t .c
d
Pv l
ai
gy gm
lo n@
no je
ch ja
Te la
i su
or ka
So
Person information can be applied to the device via the person applying function. If the person has been
added to the device, the person information will be edited; if the person has not been added to the device,
the person information will be applied to the device.
1. Check whether the device supports person applying: GET /ISAPI/AccessControl/UserInfo/capabilities?
format=json ; if the value of the node supportFunction contains “setUp”, it indicates that the device supports
person applying.
2. Apply person information: PUT /ISAPI/AccessControl/UserInfo/SetUp?format=json .
3. If the value of the node supportFunction does not contain setUp, it indicates that the device does not support
person applying.
Note:
Check whether the person has been added to the device via the node employeeNo returned after calling the API for
person applying.
Lt om
t .c
d
Pv l
ai
gy gm
lo n@
no je
ch ja
Te la
i su
or ka
So
Person can be added to the device via the person adding function. If the person has been added to the
device, the device will report an error; if the person has not been added to the device, the person will be
added to the device.
1. Check whether the device supports person adding: GET /ISAPI/AccessControl/UserInfo/capabilities?
format=json ; if the value of the node supportFunction contains “post”, it indicates that the device supports person
adding.
2. Add persons: POST /ISAPI/AccessControl/UserInfo/Record?format=json .
3. If the value of the node supportFunction does not contain “post”, it indicates that the device does not support
person adding.
Note:
Check whether the person has been added to the device via the node employeeNo returned after calling the API for
person adding.
Lt om
t .c
d
Pv l
ai
gy gm
lo n@
no je
ch ja
Te la
i su
or ka
So
Person information added to the device can be edited via the person information editing function. If the
person has been added to the device, the person information will be edited; if the person has not been
added to the device, the device will report an error.
1. Check whether the device supports person information editing: GET
/ISAPI/AccessControl/UserInfo/capabilities?format=json ; if the value of the node supportFunction contains
“put”, it indicates that the device supports person information editing.
2. Edit Person Information: PUT /ISAPI/AccessControl/UserInfo/Modify?format=json .
3. If the value of the node supportFunction does not contain “put”, it indicates that the device does not support
person information editing.
Note:
Check whether the person has been added to the device via the node employeeNo returned after calling the API for
person information editing.
Lt om
t .c
d
Pv l
ai
gy gm
lo n@
no je
ch ja
Te la
i su
or ka
So
Lt om
t .c
d
Pv l
ai
gy gm
lo n@
no je
ch ja
Te la
i su
or ka
So
The person added to the device can be deleted via the person deleting function. The device will not report
an error if the person to be deleted is not added to the device.
1. Check whether the device supports person deleting: GET /ISAPI/AccessControl/capabilities ; if the node
isSupportUserInfoDetailDelete is returned and its value is “true”, it indicates that the device supports person
deleting.
2. Delete persons: PUT /ISAPI/AccessControl/UserInfoDetail/Delete?format=json ; if calling succeeded, it
indicates that the device has started to execute person deleting, but it does not indicate that the device has deleted
the person.
3. Get the progress of deleting person information: GET /ISAPI/AccessControl/UserInfoDetail/DeleteProcess ;
repeatedly call this API to get the progress of person deleting.
4. If the node isSupportUserInfoDetailDelete is returned and its value is “false”, it indicates that the device does not
support person deleting.
Note:
When the person is deleted, the information on the credentials (the card, fingerprint, face picture, and iris data) linked
via the person ID will also be deleted.
Lt om
t .c
d
Pv l
ai
gy gm
lo n@
no je
ch ja
Te la
i su
or ka
So
Lt om
t .c
d
Pv l
The API calling flow is as follow: ai
1. Check whether the device supports remote verification: GET /ISAPI/AccessControl/capabilities . If the node
gy gm
isSupportRemoteCheck is returned and its value is true, it indicates that the device supports remote verification.
lo n@
needDeviceCheck.
ch ja
3. Upload events to be verified: when the node remoteCheck of the following events (AccessControllerEvent/
IDCardInfoEvent/ QRCodeEvent/ FaceTemperatureMeasurementEvent) is returned and its value is true, it indicates
Te la
1. Reset by authentication interval. This function will take effect in specific time period after the anti-passbak is
triggered. If the user trigger the function by swiping a card by route, the anti-passback flag will be reset in certain
time.
2. Reset by time. The anti-passback flag will be reset automatically in certain time.
3. Invalid mode. The resetting rule is disabled.
Application scenarios: The anti-passback function will be help to reduce the cost of manual monitoring. Anti-passback
by time period and by time cannot set at the same time.
rules of anti-passback.
no je
It is required to connect to door permission and schedule template of access permission related to each door before
applying permissions to persons. For applying permissions to persons, see calling flow of Person Management of
Person and Credential Management. Configuring schedules of persons' access permission is required, or the related
persons cannot access.
1 weekly schedule and 4 holiday groups can be added in each schedule template. The priority of holiday schedule is
So
higher than that of weekly schedule. Weekly schedule can be configured by day of a week and 8 different time period of
a day. 16 holiday schedules can be added to a holiday group schedule. Each holiday schedule has its start and end day,
and the time period is same in the holiday range (8 time periods can be added). The access control can follow the
schedule template to manage person's permissions by time.
6.17.2 API Calling Flow
6.17.2.1 Schedule Template of Persons' Access Permission
Lt om
t .c
d
Pv l
ai
gy gm
lo n@
no je
ch ja
Te la
i su
or ka
So
Calling Flow:
1. Check whether the device supports schedule template configuration of person's permission: GET
/ISAPI/AccessControl/capabilities ; if the node isSupportUserRightPlanTemplate is returned and its value is
"true", it indicates that the device supports schedule template configuration of person's permission (if it supports, it
also supports weekly schedule configuration of persons' permission).
2. Schedule template configuration of persons' permission: [GET/PUT]
/ISAPI/AccessControl/UserRightPlanTemplate/<planTemplateID>?format=json .
3. Configuring schedule template of persons' access permission control for the device is not supported.
6.17.2.2 Weekly Schedule of Persons' Access Permission
Lt om
t .c
d
Pv l
ai
gy gm
lo n@
no je
ch ja
Te la
i su
or ka
So
Calling Flow:
1. Check whether the device supports weekly schedule configuration of persons' permissions: GET
/ISAPI/AccessControl/capabilities ; if the node isSupportCardRightWeekPlanCfg is returned and its value is
"true", it indicates that the device supports weekly schedule configuration of person's permissions.
2. Weekly schedule configuration of persons' permissions:[GET/PUT]
/ISAPI/AccessControl/UserRightWeekPlanCfg/<weekPlanID>?format=json .
3. Configuring weekly schedule of persons' access permission control for the device is not supported.
Calling Flow:
1. Check whether the device supports holiday group configuration of person's permissions: GET
/ISAPI/AccessControl/capabilities ; if the nodeisSupportUserRightHolidayGroupCfg is returned and its value is
"true", it indicates that the device supports holiday group configuration of person's permission (if it supports, it
also supports holiday schedule configuration of persons' permissions).
2. Holiday group configuration of persons' permissions:[GET/PUT]
/ISAPI/AccessControl/UserRightHolidayGroupCfg/<holidayGroupID>?format=json .
3. Configuring holiday groups of persons' access permission control for the device is not supported.
Calling Flow:
1. Check whether the device supports holiday schedule configuration of persons' permissions: GET
/ISAPI/AccessControl/capabilities ; if the node isSupportCardRightHolidayPlanCfg is returned and its value is
"true", it indicates that the device supports holiday schedule configuration of person's permissions.
2. Holiday schedule configuration of persons' permissions:[GET/PUT]
/ISAPI/AccessControl/UserRightHolidayPlanCfg/<holidayPlanID>?format=json .
3. Configuring holiday schedule of persons' access permission control for the device is not supported.
6.18 Search for QR Code Scanning Event
4. Get the functional capability of access control: GET /ISAPI/AccessControl/capabilities ; if the node
isSupportQRCodeEvent is returned and its value is "true", it indicates that the device supports searching for QR
code scanning events.
5. Get the capability of searching for QR code scanning events: GET
/ISAPI/AccessControl/QRCodeEvent/capabilities?format=json .
6. Search for QR code scanning events: POST /ISAPI/AccessControl/QRCodeEvent?format=json . Notes: the device
displays QR code rather than authentication information.
Lt om
deleting old events by specified time and overwriting.
t .c
6.19.2 API Calling Flow
d
Pv l
6.19.2.1 Configure Storage Parameters of Access Control Events
ai
1. Call the functional capability of access control: GET /ISAPI/AccessControl/capabilities ; if the node
gy gm
isSupportEventStorageCfg is returned and its value is "true", it indicates that the device supports configuring the
lo n@
3. Get and set storage parameters of access control events: GET|PUT /ISAPI/AccessControl/AcsEvent/StorageCfg?
Te la
format=json .
i su
1. Call the functional capability of access control: GET /ISAPI/AccessControl/capabilities ; if the node
isSupportAcsEvent is returned and its value is "true", it indicates that the device supports searching for access
control events.
2. Get the capability of searching for access control events: GET /ISAPI/AccessControl/AcsEvent/capabilities?
So
format=json .
3. Get the total number of access control events by specific conditions: POST
/ISAPI/AccessControl/AcsEventTotalNum?format=json .
Lt om
t .c
d
Pv l
ai
gy gm
lo n@
no je
ch ja
Te la
i su
or ka
So
Lt om
t .c
d
Pv l
ai
gy gm
lo n@
no je
ch ja
Te la
i su
or ka
So
Lt om
the main ARCs and No. 2 and 4 are the spare ARCs. Only when the main ARCs fail to push alarm messages, will the
spare ARCs take the charge.
t .c
d
8.2.2 ARC Parameter Configuration
Pv l
API Calling Flow:
ai
gy gm
lo n@
no je
ch ja
Te la
i su
or ka
So
Lt om
t .c
d
Pv l
ai
gy gm
lo n@
no je
ch ja
Te la
i su
or ka
So
API Calling Steps: 1. Get the configuration capability of the security control panel to check whether the device
supports ARC notification configuration: GET /ISAPI/SecurityCP/Configuration/capabilities?format=json . If the
returned value of the node isSptARC is true, the device supports this function.
2. Get the capability of configuring ARC parameters: GET /ISAPI/SecurityCP/Configuration/ARC/capabilities?
format=json .
3. Get parameters of one or multiple ARCs: GET /ISAPI/SecurityCP/Configuration/ARC?format=json&security=
<security>&iv=<iv> . The userName and password nodes should be encrypted.
4. Get or set parameters of a single ARC: PUT /ISAPI/SecurityCP/Configuration/ARC/<indexID>?
format=json&security=<security>&iv=<iv> . The nodes userName and password should be encrypted. The indexID in
the URL is the ARC No.
Lt om
t .c
d
Pv l
ai
gy gm
lo n@
no je
ch ja
Te la
i su
or ka
So
So
or ka
i su
Te la
ch ja
no je
lo n@
gy gm
ai
Pv l
t .c
Lt om
d
API Calling Steps: 1. Get the configuration capability of the security control panel to check whether the device
supports manual test of ARC: GET /ISAPI/SecurityCP/Configuration/capabilities?format=json . If the returned
value of the node isSptARC is true, the device supports this function.
2. Get the capability of manual test of ARC: GET /ISAPI/SecurityCP/Configuration/ARC/manualTest/capabilities?
format=json .
3. Set the No. of an ARC and start manual test: PUT /ISAPI/SecurityCP/Configuration/ARC/manualTest?format=json .
4. Enter the ARC No. and get the ARC test status: POST /ISAPI/SecurityCP/Configuration/ARC/manualTest/status?
format=json .
5. Check the returned test status: success for success and failed for failure. If processing is returned within the
configured timeout threshold, you need to call the API in the previous step again.
Lt om
t .c
d
Pv l
ai
gy gm
lo n@
no je
ch ja
Te la
i su
or ka
So
Lt om
t .c
d
Pv l
ai
gy gm
lo n@
no je
ch ja
Te la
i su
or ka
So
Lt om
t .c
d
Pv l
ai
gy gm
lo n@
no je
ch ja
Te la
i su
or ka
So
Lt om
6. (Optional) Delete a custom text message: POST /ISAPI/SecurityCP/customMessage/deleteCustomMessage?
t .c
format=json .
d
Pv l
8.5 Email Notification Management ai
gy gm
If the device supports email notification, you can enable the event notification and configure related email notification
parameters.
lo n@
9 Zone Alarm
9.1 Peripheral Management
9.1.1 Peripheral No.
The peripheral No. is used to specify a certain peripheral (such as detector, network camera, relay, and sounder) when
you perform operations including configuring parameters and upgrading devices. For details about rules, see the
picture below:
Lt om
t .c
d
Pv l
ai
9.2 Topology of Detectors and Peripherals
gy gm
lo n@
The hybrid security control panel can access detectors in the following ways:
1 (access wired detectors via onboard zones), 2 (access pircams via the RS-485 bus), 5 (access 1 to 2 detectors by
connecting the RS-485 bus with e-map fences), 6 (access 1 detector by enabling the function of extending zones for e-
map fences), 7 (access wireless detectors by connecting the RS-485 bus with R3/RX receivers), 8 (access wired
detectors via multi-channel wired zone modules), 10 (access wired detectors via keypads), 11 (access wired detectors
via network zone modules)
The wireless security control panel can access detectors in the following ways:
1 (access wired detectors via onboard transmitters), 3 (access wireless detectors via internal wireless receivers), 4
(access 1 to 2 wired detectors by enabling the function of extending zones for some magnetic contact detectors), 9
(access wired detectors by connecting wireless receivers with single-channel / multi-channel transmitters)
Lt om
t .c
d
Pv l
ai
gy gm
lo n@
no je
The hybrid security control panel can access peripherals in the following ways:
1 (access keypads via the RS-485 bus), 2 (access wireless cards and keyfobs via keypads), 3 (access wired sounders via
ch ja
onboard sounder modules), 4 (access wired relays via onboard relay modules), 5 (access wired relays via keypads), 11
Te la
(access wireless sounders, single-channel output modules (wireless relays), and keyfobs via the receivers connected to
the RS-485 bus), 12 (access wired relays via the wired output module connected to the RS-485 bus), 13 (access
i su
The wireless security control panel can access peripherals in the following ways:
1 (access keypas via wireless network), 3 (access wireless sounders via internal wireless receivers), 4 (access wired
relays via onboard transmitters), 6 (access card readers via wireless network), 7 (access repeaters via wireless network),
8 (access keyfobs via wireless network), 9 (access wired relays by connecting wireless receivers with single-channel /
So
multi-channel transmitters), 10 (access wired relays by connecting wireless receivers with wireless output modules), 13
(access network cameras by login via the network)
10 API Reference
10.1 VCA
10.1.1 Face Picture Library Management
10.1.1.1 Get face picture library capability
Request URL
GET /ISAPI/Intelligent/FDLib/capabilities?format=json
Query Parameter
None
Request Message
None
Response Message
{
"statusCode": 1,
/*ro, req, int, status code*/
"statusString": "test",
/*ro, req, string, status description*/
"subStatusCode": "test",
/*ro, req, string, sub status code*/
"FDNameMaxLen": 64,
/*ro, req, int, maximum length of face picture library name*/
"customInfoMaxLen": 192,
/*ro, req, int, maximum length of custom information*/
"FDMaxNum": 3,
/*ro, req, int, maximum number of face picture libraries*/
"FDRecordDataMaxNum": 12345,
/*ro, req, int, maximum face records supported by face picture library*/
"supportFDFunction": "post,delete,put,get,setUp",
/*ro, req, string, the supported operations on face picture library, desc:"post” (create), "delete” (delete), "put” (edit), "get” (search), "setUp”
(set)*/
"isSuportFDSearch": true,
/*ro, req, bool, whether supports searching in face picture library, desc:whether supports searching in face picture library*/
"isSupportFDSearchDataPackage": true,
/*ro, req, bool, whether supports packaging the found data in the face picture library*/
"isSuportFSsearchByPic": true,
/*ro, req, bool, whether supports searching by picture in the face picture library, desc:whether supports searching by picture in the face picture
Lt om
library*/
"isSuportFSsearchByPicGenerate": true,
t .c
/*ro, req, bool, whether supports exporting results of using picture to search picture from the face picture library*/
"isSuportFDSearchDuplicate": true,
/*ro, req, bool, whether supports duplication checking*/
d
Pv l
"isSuportFDSearchDuplicateGenerate": true,
"isSuportFCSearch": true,
ai
/*ro, req, bool, whether supports exporting the duplication checking results*/
/*ro, req, bool, whether supports searching face picture comparison alarms*/
gy gm
"isSupportFCSearchDataPackage": true,
/*ro, req, bool, whether supports packaging the search results of face picture comparison alarms*/
"isSupportFDExecuteControl": true,
lo n@
/*ro, req, bool, whether supports creating relation between face picture libraries and cameras*/
"generateMaxNum": 1234,
no je
/*ro, opt, int, maximum face records can be exported from face picture library*/
"faceLibType": "blackFD,staticFD,infraredFD",
/*ro, opt, string, face picture library type*/
ch ja
"modelMaxNum": 1000,
/*ro, opt, int, the maximum number of search results*/
"isSupportModelData": true,
Te la
/*ro, opt, int, the maximum size of the face picture URL, desc:if this node is not returned, the default size of the face picture URL supported by the
device is 256 bytes; otherwise, the device should support that the value of this node is greater than or equal to 256*/
"featurePointTypeList": ["face", "leftEye", "rightEye", "leftMouthCorner", "rightMouthCorner", "nose"],
or ka
/*ro, opt, array, feature point types of face pictures supported by the device, subType:string*/
"facePicFormat": {
/*ro, opt, object*/
}
Request URL
POST /ISAPI/Intelligent/FDLib/search?format=json
Query Parameter
None
Request Message
{
"searchResultPosition": 0,
/*req, int, the start position of the search result in the result list, desc:in a single search, if you cannot get all the records in the result list,
you can mark the end position and get the following records after the marked position in the next search*/
"maxResults": 0,
/*req, int, the maximum number of search results this time*/
"libArmingType": "armingLib"
/*opt, enum, arming type, subType:string, desc:"armingLib” (armed library (default)), "nonArmingLib” (not armed library)*/
}
Response Message
{
"responseStatusStrg": "OK",
/*ro, opt, enum, searching status description, subType:string, desc:"OK" (searching completed), "MORE" (searching for more data), "NO MATCH" (no matched
data).*/
"numOfMatches": 1,
/*ro, opt, int, number of results returned this time*/
"totalMatches": 1,
/*ro, opt, int, total number of matched results*/
"FDLib": [
/*ro, opt, array, face picture library information, subType:object*/
{
"FDID": "test",
/*ro, opt, string, face picture library ID*/
"faceLibType": "blackFD",
/*ro, opt, enum, face picture library type, desc:"blackFD” (list library), "staticFD” (static library)*/
"name": "test",
/*ro, opt, string, name of the face picture library, range:[0,48]*/
"customInfo": "test",
/*ro, opt, string, custom information, range:[0,192]*/
"libArmingType": "armingLib",
/*ro, opt, enum, arming type, subType:string, desc:"armingLib” (armed library (default)), "nonArmingLib” (not armed library)*/
"libAttribute": "blackList"
/*ro, opt, enum, library attribute type, subType:string, desc:"blackList” (blocklist), "VIP” (VIP library), "passerby” (passer-by library, which
cannot be deleted)*/
}
]
}
Lt om
t .c
10.1.1.3 Delete all face picture libraries
d
Request URL
Pv l
DELETE /ISAPI/Intelligent/FDLib?format=json ai
gy gm
Query Parameter
None
lo n@
Request Message
no je
None
ch ja
Response Message
Te la
{
"statusCode": 1,
i su
/*ro, opt, int, status code, desc:1 (succeeded). It is required when an error occurred*/
"statusString": "ok",
/*ro, opt, string, status description, range:[1,64], desc:"ok" (succeeded). It is required when an error occurred*/
or ka
"subStatusCode": "ok",
/*ro, opt, string, sub status code, range:[1,64], desc:"ok" (succeeded). It is required when an error occurred*/
}
Request URL
POST /ISAPI/Intelligent/FDLib?format=json
Query Parameter
None
Request Message
{
"faceLibType": "blackFD,staticFD",
/*req, string, face picture library type, desc:face picture library type*/
"name": "test",
/*req, string, name of the face picture library, range:[0,48], desc:name of the face picture library*/
"customInfo": "test",
/*opt, string, custom information, range:[0,192], desc:custom information*/
"libArmingType": "armingLib",
/*opt, enum, subType:string*/
"libAttribute": "blackList",
/*opt, enum, subType:string*/
"FDID": "test"
/*opt, string, face picture library ID, desc:face picture library ID*/
}
Response Message
{
"requestURL": "test",
/*ro, opt, string, request URL*/
"statusCode": 1,
/*ro, req, int, status code, desc:1 (succeeded). It is required when an error occurred*/
"statusString": "ok",
/*ro, req, string, status description, range:[1,64], desc:"ok" (succeeded). It is required when an error occurred*/
"subStatusCode": "ok",
/*ro, req, string, sub status code, range:[1,64], desc:"ok" (succeeded). It is required when an error occurred*/
"errorCode": 1,
/*ro, opt, int, error code, desc:when the value of statusCode is not 1, it corresponds to subStatusCode*/
"errorMsg": "ok",
/*ro, opt, string, error details, desc:this node is required when the value of statusCode is not 1*/
"FDID": "test"
/*ro, opt, string, face picture library ID, desc:face picture library ID*/
}
Lt om
Query Parameter
t .c
Parameter Name Parameter Type Description
d
Pv l
FDID string --
faceLibType string
ai --
gy gm
terminalNo string --
lo n@
Request Message
no je
None
ch ja
Response Message
Te la
{
"statusCode": 1,
i su
/*ro, opt, int, status code, desc:1 (succeeded). It is required when an error occurred*/
"statusString": "ok",
or ka
/*ro, opt, string, status description, range:[1,64], desc:"ok" (succeeded). It is required when an error occurred*/
"subStatusCode": "ok",
/*ro, opt, string, sub status code, range:[1,64], desc:"ok" (succeeded). It is required when an error occurred*/
"errorCode": 1,
/*ro, opt, int, error code, desc:it is required when the value of statusCode is not 1, it corresponds to subStatusCode*/
"errorMsg": "ok"
/*ro, opt, string, error information, desc:this field is required when the value of statusCode is not 1*/
}
So
10.1.1.6 Edit the information of a specific face picture library information, including name and custom
information
Request URL
PUT /ISAPI/Intelligent/FDLib?format=json&FDID=<FDID>&faceLibType=<faceLibType>&terminalNo=<terminalNo>
Query Parameter
Parameter Name Parameter Type Description
FDID string --
faceLibType string --
terminalNo string --
Request Message
{
"name": "test",
/*opt, string, face picture library name, range:[0,48]*/
"customInfo": "test",
/*opt, string, custom information, range:[0,192]*/
"libArmingType": "armingLib",
/*opt, enum, arming type of the list library, subType:string, desc:“armingLib” (armed face picture library), “nonArmingLib” (not armed face picture
library). The default value is "armingLib”*/
"libAttribute": "blackList"
/*opt, enum, library type, subType:string, desc:“blackList” (blocklist library), “VIP” (VIP library), “passerby” (passerby library). The passerby
library cannot be deleted*/
}
Response Message
{
"statusCode": 1,
/*ro, opt, int, status code, desc:1 (succeeded). It is required when an error occurred*/
"statusString": "ok",
/*ro, opt, string, status description, range:[1,64], desc:"ok" (succeeded). It is required when an error occurred*/
"subStatusCode": "ok",
/*ro, opt, string, sub status code, range:[1,64], desc:"ok" (succeeded). It is required when an error occurred*/
"errorCode": 1,
/*ro, opt, int, error code, desc:it corresponds to subStatusCode when statusCode is not 1*/
"errorMsg": "ok"
Lt om
/*ro, opt, string, error information, desc:this field is required when the value of statusCode is not 1*/
}
t .c
d
Pv l
10.1.1.7 Get the information, including library ID, library type, name, and custom information, of all face
picture libraries ai
gy gm
Request URL
GET /ISAPI/Intelligent/FDLib?format=json&FDID=<FDID>&faceLibType=<faceLibType>&terminalNo=<terminalNo>
lo n@
Query Parameter
no je
FDID string --
Te la
faceLibType string --
i su
terminalNo string --
or ka
Request Message
None
Response Message
So
{
"statusCode": 1,
/*ro, req, int, status code, desc:status code*/
"statusString": "ok",
/*ro, req, string, status description, range:[1,64], desc:status description*/
"subStatusCode": "ok",
/*ro, req, string, sub status code, range:[1,64], desc:sub status code*/
}
{
"statusCode": 1,
/*ro, opt, int, status code, desc:1 (succeeded). It is required when an error occurred*/
"statusString": "ok",
/*ro, opt, string, status description, range:[1,64], desc:"ok" (succeeded). It is required when an error occurred*/
"subStatusCode": "ok",
/*ro, opt, string, sub status code, range:[1,64], desc:"ok" (succeeded). It is required when an error occurred*/
"FDRecordDataInfo": [
/*ro, opt, array, information of face records in face picture library, subType:object, desc:this node is valid when errorCode is 1 and errorMsg is
"ok"*/
{
"FDID": "test",
/*ro, opt, string, face picture library ID, desc:the maximum size is 63 bytes*/
"faceLibType": "blackFD",
/*ro, opt, enum, face picture library type, subType:string, desc:face picture library type "blackFD" list library,"staticFD" static library, the
maximum size is 32 bytes*/
"name": "test",
/*ro, opt, string, face picture library name, desc:the maximum size is 48 bytes*/
"recordDataNumber": 123,
/*ro, opt, int, number of records*/
}
],
}
Lt om
10.1.2.2 Get the total number of face records in a face picture library
t .c
Request URL
d
Pv l
GET /ISAPI/Intelligent/FDLib/Count?format=json&FDID=<FDID>&faceLibType=<faceLibType>&terminalNo=
<terminalNo> ai
Query Parameter
gy gm
Parameter Name Parameter Type Description
lo n@
FDID string --
no je
faceLibType string --
ch ja
terminalNo string --
Te la
Request Message
i su
None
or ka
Response Message
{
"requestURL": "test",
/*ro, opt, string, request URL*/
"statusCode": 1,
/*ro, opt, int, status code, desc:1 (succeeded). It is required when an error occurred*/
So
"statusString": "ok",
/*ro, opt, string, status description, range:[1,64], desc:"ok" (succeeded). It is required when an error occurred*/
"subStatusCode": "ok",
/*ro, opt, string, sub status code, range:[1,64], desc:"ok" (succeeded). It is required when an error occurred*/
"errorCode": 1,
/*ro, req, int, error code, desc:it is required when the value of statusCode is not 1, it corresponds to subStatusCode*/
"errorMsg": "ok",
/*ro, req, string, error description, desc:this node is required when the value of statusCode is not 1*/
"FDID": "test",
/*ro, opt, string, face picture library ID*/
"faceLibType": "blackFD",
/*ro, opt, enum, face picture library type, subType:string, desc:face picture library type*/
"name": "test",
/*ro, opt, string, name of the face picture library, desc:the maximum length is 48*/
"recordDataNumber": 123
/*ro, opt, int, total number of records*/
}
{
"faceURL": "test",
/*opt, string, picture storage URL inputted when uploading the face picture by URL*/
"faceLibType": "blackFD",
/*req, enum, face picture library type, subType:string, desc:face picture library type*/
"FDID": "test",
/*req, string, face picture library ID, desc:the maximum size is 63 bytes*/
"FPID": " test",
/*opt, string, face record ID, desc:face record ID,it can be generated by device or inputted. If it is inputted,it should be the unique ID with the
combination of letters and digits,and the maximum length is 63 bytes; if it is generated by the device automatically,it is the same as the employee No.
(person ID)*/
"name": "张三",
/*req, string, name of person in the face picture, desc:the maximum size is 96 bytes*/
"gender": "male",
/*opt, enum, gender of person in the face picture, subType:string, desc:“male”, “female”, “unknown”; the maximum size is 32 bytes*/
"bornTime": "2004-05-03",
/*req, string, birthday of person in the face picture, desc:the maximum size is 20 bytes*/
"city": "130100",
/*opt, string, city code of birth for the person in the face picture, desc:the maximum size is 32 bytes*/
"certificateType": "officerID",
/*opt, enum, certificate type, subType:string*/
"certificateNumber": "test",
/*opt, string, certificate No., desc:the maximum size is 32 bytes*/
"caseInfo": "test",
Lt om
/*opt, string, case information, desc:the maximum size is 192 bytes; it is valid when faceLibType is "blackFD”*/
"tag": "aa,bb,cc,dd",
t .c
/*opt, string, custom tag, desc:up to 4 tags, which are separated by commas. The maximum size is 195 bytes. It is valid when faceLibType is "blackFD”*/
"address": "test",
/*opt, string, person address, desc:the maximum size is 192 bytes. It is valid when faceLibType is "staticFD”*/
d
Pv l
"customInfo": "test",
"modelData": "test",
ai
/*opt, string, custom information, desc:the maximum size is 192 bytes. It is valid when faceLibType is "staticFD"*/
/*opt, string, target modeling data, desc:target model data,non-modeled binary data needs to be encrypted by Base64 during transmission*/
gy gm
"transfer": true,
/*opt, bool, whether to enable transfer, desc:whether to enable transfer*/
"operateType": "byTerminal",
lo n@
/*opt, array, terminal ID list, subType:int, desc:this node is required when operation type is "byTerminal"; currently, only one terminal is supported*/
"PicFeaturePoints": [
/*opt, array, feature points to be applied, subType:object*/
ch ja
{
"featurePointType": "face",
/*req, enum, feature point type, subType:string, desc:"face", "leftEye" (left eye), "rightEye" (right eye), "leftMouthCorner" (left corner of
Te la
/*opt, object, coordinates of the feature point, desc:object,coordinates of the feature point*/
"x": 1,
/*req, int, X-coordinate, range:[0,1000], desc:normalized X-coordinate which is between 0 and 1000*/
or ka
"y": 1,
/*req, int, Y-coordinate, range:[0,1000], desc:normalized Y-coordinate which is between 0 and 1000*/
"width": 1,
/*opt, int, width, range:[0,1000], desc:this node is required when featurePointType is "face"*/
"height": 1
/*opt, int, height, range:[0,1000], desc:this node is required when featurePointType is "face"*/
}
}
],
So
"faceType": "normalFace",
/*opt, enum, face picture type, subType:string*/
"saveFacePic": true,
/*opt, bool, whether to save face pictures*/
"leaderPermission": [1, 2, 3, 4]
/*opt, array, subType:int, range:[1,4]*/
}
Parameter Name Parameter Value Parameter Type(Content-Type) Content-ID File Name Description
faceURL [Message content] application/json -- -- --
img [Binary picture data] image/jpeg facePic.jpg --
Note: The protocol is transmitted in form format. See Chapter 4.5.1.4 for form framework description, as shown in
the instance below.
--<frontier>
Content-Disposition: form-data; name=Parameter Name;filename=File Name
Content-Type: Parameter Type
Content-Length: ****
Content-ID: Content ID
Parameter Value
Parameter Name: the name property of Content-Disposition in the header of form unit; it refers to the form unit
name.
Parameter Type (Content-Type): the Content-Type property in the header of form unit.
File Name (filename): the filename property of Content-Disposition of form unit Headers. It exists only when the
transmitted data of form unit is file, and it refers to the file name of form unit body.
Parameter Value: the body content of form unit.
Response Message
{
"requestURL": "test",
/*ro, opt, string, request URL*/
"statusCode": 1,
Lt om
/*ro, req, int, status code*/
"statusString": "test",
/*ro, req, string, status description*/
t .c
"subStatusCode": "test",
/*ro, req, string, sub status code*/
d
"errorCode": 1,
Pv l
/*ro, opt, int, error code*/
"errorMsg": "ok", ai
/*ro, opt, string, error description, desc:see the description of this node and above nodes in the message of JSON_ResponseStatus*/
"FPID": "test",
gy gm
/*ro, opt, string, face record ID, desc:face record ID returned when the face record is added,it is unique,and the maximum size is 63 bytes. This node
is valid when errorCode is "1" and errorMsg is "ok"*/
lo n@
"rowKey": "test"
/*ro, opt, string*/
}
no je
ch ja
Request URL
i su
PUT /ISAPI/Intelligent/FDLib/FDModify?format=json
Query Parameter
or ka
None
Request Message
{
}
So
--<frontier>
Content-Disposition: form-data; name=Parameter Name;filename=File Name
Content-Type: Parameter Type
Content-Length: ****
Content-ID: Content ID
Parameter Value
Parameter Name: the name property of Content-Disposition in the header of form unit; it refers to the form unit
name.
Parameter Type (Content-Type): the Content-Type property in the header of form unit.
File Name (filename): the filename property of Content-Disposition of form unit Headers. It exists only when the
transmitted data of form unit is file, and it refers to the file name of form unit body.
Parameter Value: the body content of form unit.
Response Message
{
"statusCode": 1,
/*ro, opt, int, status code, desc:1 (succeeded). It is required when an error occurred*/
"statusString": "ok",
/*ro, opt, string, status description, range:[1,64], desc:"ok" (succeeded). It is required when an error occurred*/
"subStatusCode": "ok",
/*ro, opt, string, sub status code, range:[1,64], desc:"ok" (succeeded). It is required when an error occurred*/
"errorCode": 1,
/*ro, opt, int, error code, desc:when the value of statusCode is not 1, it corresponds to subStatusCode*/
"errorMsg": "ok"
/*ro, opt, string, error details, desc:this field is required when statusCode is not 1*/
}
Lt om
10.1.2.5 Delete the face record(s) in the face picture library
Request URL
t .c
PUT /ISAPI/Intelligent/FDLib/FDSearch/Delete?format=json&FDID=<FDID>&faceLibType=<FDType>
d
Pv l
Query Parameter ai
Parameter Name Parameter Type Description
gy gm
FDID string --
lo n@
FDType enum --
no je
ch ja
Request Message
Te la
{
}
i su
Response Message
or ka
{
"statusCode": 1,
/*ro, opt, int, status code, desc:1 (succeeded). It is required when an error occurred*/
"statusString": "ok",
/*ro, opt, string, status description, range:[1,64], desc:"ok" (succeeded). It is required when an error occurred*/
"subStatusCode": "ok",
/*ro, opt, string, sub status code, range:[1,64], desc:"ok" (succeeded). It is required when an error occurred*/
So
"errorCode": 1,
/*ro, opt, int, error code, desc:when the value of statusCode is not 1, it corresponds to subStatusCode*/
"errorMsg": "ok"
/*ro, opt, string, error information, desc:this field is required when statusCode is not 1*/
}
10.1.2.6 Search for the face records in the a face picture library or multiple face picture libraries
Request URL
POST /ISAPI/Intelligent/FDLib/FDSearch?format=json
Query Parameter
None
Request Message
{
"searchResultPosition": 0,
/*req, int, the start position of the search result in the result list, desc:in a single search, if you cannot get all the records in the result list,
you can mark the end position and get the following records after the marked position in the next search*/
"maxResults": 100,
/*req, int, the maximum number of search results this time*/
"faceLibType": "blackFD",
/*req, enum, face picture library type, subType:string, desc:face picture library type: "blackFD"-list library,"staticFD"-static library,the maximum
size is 32 bytes*/
"FDID": "test",
/*req, string, face picture library ID, desc:face picture library ID,the maximum size is 63*/
"FPID": " ",
/*opt, string, face record ID*/
"startTime": "2004-05-03",
/*opt, string, start date of birth*/
"endTime": "2004-05-03",
/*opt, string, end time of birth*/
"name": "test",
/*opt, string, name*/
"gender": "any",
/*req, enum, gender, subType:string, desc:"any” (unlimited condition which is used in search), "male”, “female”, “unknown"*/
"city": "130100",
/*opt, string, city code, desc:city code of birth for the person in the face picture,the maximum size is 32 bytes*/
"certificateType": "ID",
/*req, enum, certificate type, subType:string, desc:the maximum size is 10 bytes,certificate type: "officerID"-officer ID,"ID"-identify
card,passport,other*/
"certificateNumber": "test",
/*opt, string, certificate No.*/
Lt om
"isInLibrary": "yes",
/*opt, enum, whether the picture is in library (whether modeling is successful), subType:string, desc:whether modeling is successful: unknown, no, yes*/
"isDisplayCaptureNum": true,
t .c
/*opt, bool, whether to display number of captured pictures*/
"rowKey": "test",
d
Pv l
/*opt, string, main key of face picture library, desc:searching by rowKey can be more efficient*/
"transfer": true
}
ai
/*opt, bool, Transferring, desc:whether to enable transfer*/
gy gm
lo n@
Response Message
no je
ch ja
Te la
i su
or ka
So
{
"requestURL": "test",
/*ro, opt, string, request URL*/
"statusCode": 1,
/*ro, req, int, status code*/
"statusString": "test",
/*ro, req, string, status description*/
"subStatusCode": "activeNumMax",
/*ro, req, enum, sub status code, subType:string*/
"errorCode": 1,
/*ro, opt, int, detailed error description, this field is required when the value of statusCode is not 1*/
"errorMsg": "ok",
/*ro, opt, string, detailed error description, this field is required when the value of statusCode is not 1*/
"responseStatusStrg": "OK",
/*ro, opt, enum, status search, subType:string, desc:"OK" (searching completed), "MORE" (searching for more data), "NO MATCH" (no matched data).*/
"numOfMatches": 1,
/*ro, opt, int, number of results returned this time*/
"totalMatches": 1,
/*ro, opt, int, total number of matched results*/
"MatchList": [
/*ro, opt, array, list of matched records, subType:object*/
{
"FDID": "test",
/*ro, opt, string, face picture library ID*/
"FDName": "名单库A",
/*ro, opt, string*/
"FPID": "test",
/*ro, opt, string, face record ID*/
Lt om
"faceURL": "test",
/*ro, opt, string, face picture URL*/
"name": "test",
t .c
/*ro, opt, string, name*/
"gender": "any",
d
Pv l
/*ro, req, enum, gender, subType:string, desc:"any” (unlimited condition which is used in search), "male”, “female”, “unknown"*/
"bornTime": "2004-05-03",
ai
/*ro, opt, string, birth date of the person in the face picture*/
"city": "130100",
gy gm
/*ro, opt, string*/
"certificateType": "ID",
/*ro, req, enum, certificate type, subType:string*/
lo n@
"certificateNumber": "test",
/*ro, opt, string, certificate No.*/
"caseInfo": "test",
no je
"customInfo": "test",
/*ro, opt, string, custom information*/
"isInLibrary": "yes",
i su
/*ro, opt, enum, subType:string, desc:whether modeling is successful: unknown, no, yes*/
"captureNum": 12,
or ka
{
}
Response Message
{
"statusCode": 1,
/*ro, opt, int, status code, desc:1 (succeeded). It is required when an error occurred*/
"statusString": "ok",
Lt om
/*ro, opt, string, status description, range:[1,64], desc:"ok" (succeeded). It is required when an error occurred*/
"subStatusCode": "ok",
/*ro, opt, string, sub status code, range:[1,64], desc:"ok" (succeeded). It is required when an error occurred*/
t .c
"errorCode": 1,
/*ro, req, int, error code, desc:when the value of statusCode is not 1, it corresponds to subStatusCode*/
d
"errorMsg": "ok"
Pv l
/*ro, req, string, error details, desc:this node is required when the value of statusCode is not 1*/
} ai
gy gm
10.1.2.8 Set the face picture data in the face picture library
lo n@
Request URL
no je
PUT /ISAPI/Intelligent/FDLib/FDSetUp?format=json
ch ja
Query Parameter
None
Te la
Request Message
i su
or ka
{
}
--<frontier>
Content-Disposition: form-data; name=Parameter Name;filename=File Name
Content-Type: Parameter Type
Content-Length: ****
Content-ID: Content ID
Parameter Value
Parameter Name: the name property of Content-Disposition in the header of form unit; it refers to the form unit
name.
Parameter Type (Content-Type): the Content-Type property in the header of form unit.
File Name (filename): the filename property of Content-Disposition of form unit Headers. It exists only when the
transmitted data of form unit is file, and it refers to the file name of form unit body.
Parameter Value: the body content of form unit.
Response Message
{
"statusCode": 1,
/*ro, opt, int, status code, desc:1 (succeeded). It is required when an error occurred*/
"statusString": "ok",
/*ro, opt, string, status description, range:[1,64], desc:"ok" (succeeded). It is required when an error occurred*/
"subStatusCode": "ok",
/*ro, opt, string, sub status code, range:[1,64], desc:"ok" (succeeded). It is required when an error occurred*/
"errorCode": 1,
/*ro, req, int, error code, desc:it is required when the value of statusCode is not 1, it corresponds to subStatusCode*/
"errorMsg": "ok"
/*ro, req, string, error information, desc:this node is required when the value of statusCode is not 1*/
}
Lt om
Request URL
t .c
GET /ISAPI/AccessControl/AcsEvent/capabilities?format=json
d
Pv l
Query Parameter
None
ai
gy gm
Request Message
lo n@
None
Response Message
no je
ch ja
{
"AcsEvent": {
/*ro, req, object, access control events*/
Te la
"AcsEventCond": {
/*ro, opt, object, search conditions*/
i su
"searchID": {
/*ro, req, object, search ID, it is used to check whether the current search requester is the same as the previous one. If they are the same,
the search record will be stored in the device to speed up the next search*/
or ka
"@min": 1,
/*ro, req, int, the minimum value*/
"@max": 1
/*ro, req, int, the maximum value*/
},
"searchResultPosition": {
/*ro, req, object, the start position of the search result in the result list*/
"@min": 1,
/*ro, req, int, the minimum value*/
So
"@max": 1
/*ro, req, int, the maximum value*/
},
"maxResults": {
/*ro, req, object, the maximum number of search results that can be obtained by calling this URL*/
"@min": 1,
/*ro, req, int, the minimum value*/
"@max": 1
/*ro, req, int, the maximum value*/
},
"major": {
/*ro, opt, object, major alarm type (the type value should be transformed to the decimal number)*/
"@opt": "0,1,2,3,5"
/*ro, req, string, major type*/
},
"minorAlarm": {
/*ro, opt, object, minor alarm type (the type value should be transformed to the decimal number)*/
"@opt": "1024,1025,1026,1027…"
/*ro, req, string, minor alarm type*/
},
"minorException": {
/*ro, opt, object, minor exception type (the type value should be transformed to the decimal number)*/
"@opt": "39,58,59,1024…"
/*ro, req, string, minor exception type*/
},
"minorOperation": {
/*ro, opt, object, minor operation type (the type value should be transformed to the decimal number)*/
"@opt": "80,90,112,113…"
/*ro, req, string, minor operation type*/
},
},
"minorEvent": {
/*ro, opt, object, minor event type (the type value should be transformed to the decimal number)*/
"@opt": "1,2,3,4…"
/*ro, req, string, minor event type*/
},
"startTime": {
/*ro, opt, object, start time*/
"@min": 0,
/*ro, req, int, the minimum value, range:[0,32]*/
"@max": 32
/*ro, req, int, the maximum value, range:[0,32]*/
},
"endTime": {
/*ro, opt, object, end time*/
"@min": 0,
/*ro, req, int, the minimum value, range:[0,32]*/
"@max": 32
/*ro, req, int, the maximum value, range:[0,32]*/
},
"cardNo": {
/*ro, opt, object, card No.*/
"@min": 1,
/*ro, req, int, the minimum value*/
"@max": 1
/*ro, req, int, the maximum value*/
},
"name": {
/*ro, opt, object, name of the card holder*/
"@min": 1,
Lt om
/*ro, req, int, the minimum value*/
"@max": 1
/*ro, req, int, the maximum value*/
t .c
},
"picEnable": "true,false",
d
Pv l
/*ro, opt, string, whether to include pictures*/
"beginSerialNo": {
ai
/*ro, opt, object, start serial No.*/
"@min": 1,
gy gm
/*ro, req, int, the minimum value*/
"@max": 1
/*ro, req, int, the maximum value*/
lo n@
},
"endSerialNo": {
/*ro, opt, object, end serial No.*/
no je
"@min": 1,
/*ro, req, int, the minimum value*/
ch ja
"@max": 1
/*ro, req, int, the maximum value*/
},
Te la
"employeeNoString": {
/*ro, opt, object, employee No.*/
"@min": 1,
i su
},
},
"InfoList": {
/*ro, opt, object, information list*/
"maxSize": 10,
/*ro, opt, int, the maximum value*/
"time": {
/*ro, opt, object, time (UTC time)*/
"@min": 0,
So
Lt om
},
"userType": {
/*ro, opt, object, person types*/
t .c
"@opt": "normal,visitor,blackList,administrators"
/*ro, req, string, "normal" (normal person (household)), "visitor" (visitor), "blacklist" (person in blocklist), "administrators"
(administrator)*/
d
Pv l
},
"currentVerifyMode": { ai
/*ro, opt, object, current authentication mode of the card reader*/
"@opt":
gy gm
"cardAndPw,card,cardOrPw,fp,fpAndPw,fpOrCard,fpAndCard,fpAndCardAndPw,faceOrFpOrCardOrPw,faceAndFp,faceAndPw,faceAndCard,face,employeeNoAndPw,fpOrPw,employe
eNoAndFp,employeeNoAndFpAndPw,faceAndFpAndCard,faceAndPwAndFp,employeeNoAndFace,faceOrfaceAndCard,fpOrface,cardOrfaceOrPw,iris,faceOrFpOrCardOrPwOrIris,face
OrCardOrPwOrIris"
lo n@
},
"thermometryUnit": {
/*ro, opt, object, temperature unit*/
"@opt": ["celsius", "fahrenheit", "kelvin"]
/*ro, req, array, "celsius" (Celsius (default)), "fahrenheit" (Fahrenheit), "kelvin" (Kelvin), subType:string*/
},
"currTemperature": {
/*ro, opt, object, skin-surface temperature*/
"@min": 1,
So
/*ro, req, int, skin-surface temperature, which is accurate to one decimal place*/
"@max": 1
/*ro, req, int, skin-surface temperature, which is accurate to one decimal place*/
},
"isAbnomalTemperature": {
/*ro, opt, object, whether the skin-surface temperature is abnormal*/
"@opt": [true, false]
/*ro, req, array, whether the skin-surface temperature is abnormal (true-yes), subType:bool*/
},
"RegionCoordinates": {
/*ro, opt, object, coordinates of the skin-surface temperature*/
"positionX": {
/*ro, opt, object, X-coordinate*/
"@min": 0,
/*ro, req, int, the minimum value, normalized X-coordinate which is between 0 and 1000*/
"@max": 1000
/*ro, req, int, the maximum value, normalized X-coordinate which is between 0 and 1000*/
},
"positionY": {
/*ro, opt, object, Y-coordinate*/
"@min": 0,
/*ro, req, int, the minimum value, normalized Y-coordinate which is between 0 and 1000*/
"@max": 1000
/*ro, req, int, the maximum value, normalized Y-coordinate which is between 0 and 1000*/
}
},
"mask": {
/*ro, opt, object, whether the person is wearing mask*/
"@opt": ["unknown", "yes", "no"]
/*ro, req, array, "unknown", "yes", "no", subType:string*/
/*ro, req, array, "unknown", "yes", "no", subType:string*/
},
"pictureURL": {
/*ro, opt, object, URL of the captured picture*/
"@min": 1,
/*ro, req, int, the minimum value*/
"@max": 1
/*ro, req, int, the maximum value*/
},
"attendanceStatus": {
/*ro, opt, object, attendance status, desc:"undefined", "checkIn" (check-in), "checkOut" (check-out), "breakOut" (start of break), "breakIn"
(end of break), "overtimeIn" (start of overtime), "overTimeOut" (end of overtime)*/
"@opt": "undefined,checkIn,checkOut,breakOut,breakIn,overtimeIn,overtimeOut"
/*ro, req, string, options*/
},
"label": {
/*ro, opt, object, self-defined attendance name*/
"@min": 1,
/*ro, req, int, the minimum value*/
"@max": 1
/*ro, req, int, the maximum value*/
},
"statusValue": {
/*ro, opt, object, status value*/
"@min": 1,
/*ro, req, int, the minimum value*/
"@max": 1
/*ro, req, int, the maximum value*/
},
"helmet": {
Lt om
/*ro, opt, object, whether the person is wearing hard hat, desc:"unknown", "yes", "no"*/
"@opt": "unknown,yes,no"
/*ro, req, string, options*/
t .c
},
"thermalPicUrl": {
d
Pv l
/*ro, opt, object, URL of the thermal imaging picture*/
"@min": 1,
ai
/*ro, req, int, the minimum value*/
"@max": 1
gy gm
/*ro, req, int, the maximum value*/
},
"HealthInfo": {
lo n@
"@opt": [0, 1, 2, 3, 4, 5, 6, 7]
/*ro, req, array, options, subType:int, desc:0 (no request), 1 (no health code), 2 (green QR code), 3 (yellow QR code), 4 (red QR code),
ch ja
5 (no such person), 6 (other error, e.g., searching failed due to API exception), 7 (searching for the health code timed out)*/
},
"NADCode": {
Te la
/*ro, opt, object, nucleic acid test result, desc:0 (no result), 1 (negative, which means normal), 2 (positive, which means diagnosed), 3
(the result has expired)*/
"@opt": [0, 1, 2, 3, 4]
i su
"travelCode": {
/*ro, opt, object, trip code, desc:0 (no trip in the past 14 days), 1 (has left the current area left in the past 14 days), 2 (has been to
the high-risk area in the past 14 days), 3 (other)*/
"@opt": [0, 1, 2, 3, 4]
/*ro, req, array, options, subType:int*/
},
"travelInfo": {
/*ro, opt, object*/
"@min": 0,
/*ro, req, int, step:1*/
So
"@max": 15
/*ro, req, int, step:1*/
},
"vaccineStatus": {
/*ro, opt, object, whether the person is vaccinated, desc:0 (not vaccinated), 1 (vaccinated)*/
"@opt": [0, 1, 2, 3, 4]
/*ro, req, array, options, subType:int*/
},
"vaccineNum": {
/*ro, opt, object*/
"@min": 0,
/*ro, req, int, step:1*/
"@max": 3
/*ro, req, int, step:1*/
}
},
"FaceRect": {
/*ro, opt, object, rectangle frame for human face, desc:the origin is the upper-left corner of the screen*/
"height": {
/*ro, req, object, height*/
"@min": 0.000,
/*ro, req, float, the minimum value*/
"@max": 1.000
/*ro, req, float, the maximum value*/
},
"width": {
/*ro, req, object, width*/
"@min": 0.000,
/*ro, req, float, the minimum value*/
"@max": 1.000
/*ro, req, float, the maximum value*/
},
"x": {
/*ro, req, object, X-coordinate of the upper-left corner of the frame*/
"@min": 0.000,
/*ro, req, float, the minimum value*/
"@max": 1.000
/*ro, req, float, the maximum value*/
},
"y": {
/*ro, req, object, Y-coordinate of the upper-left corner of the frame*/
"@min": 0.000,
/*ro, req, float, the minimum value*/
"@max": 1.000
/*ro, req, float, the maximum value*/
}
},
"currentAuthenticationTimes": {
/*ro, req, object*/
"@min": 0,
/*ro, req, int*/
"@max": 255
/*ro, req, int*/
},
"allowAuthenticationTimes": {
/*ro, req, object*/
"@min": 0,
/*ro, req, int*/
Lt om
"@max": 255
/*ro, req, int*/
}
t .c
}
}
d
}
Pv l
ai
10.2.1.2 Get the configuration capability of storing access control events
gy gm
Request URL
lo n@
GET /ISAPI/AccessControl/AcsEvent/StorageCfg/capabilities?format=json
no je
Query Parameter
ch ja
None
Te la
Request Message
None
i su
Response Message
or ka
{
"EventStorageCfgCap": {
/*ro, req, object, configuration capability of event storing*/
"mode": {
/*ro, req, object, event storage method, desc:"regular" (delete old events periodically), "time" (delete old events by specified time), "cycle"
(overwriting)*/
"@opt": ["regular", "time", "cycle"]
So
{
"EventStorageCfg": {
/*ro, req, object*/
"mode": "regular",
/*ro, req, enum, event storage mode, subType:string, desc:"regular" (delete old events periodically), "time" (delete old events by specified time),
"cycle" (overwriting)*/
"period": 10
/*ro, opt, int, time period for deleting old events. This node is required when the storage mode is "regular", unit:min, desc:unit: minute*/
}
}
Lt om
Query Parameter
t .c
None
d
Request Message
Pv l
{
ai
gy gm
"EventStorageCfg": {
/*wo, req, object*/
"mode": "regular",
lo n@
/*wo, req, enum, event storage method, subType:string, desc:"regular" (delete old events periodically), "time" (delete old events by specified
time), "cycle" (overwriting);*/
"period": 10
no je
/*wo, opt, int, time period for deleting old events; this node is valid when mode is "regular", unit:min, desc:time period for deleting old events;
this node is valid when mode is "regular"*/
ch ja
}
}
Te la
Response Message
i su
{
or ka
"statusCode": 1,
/*ro, opt, int, status code, desc:1 (succeeded); it is required when an error occurred*/
"statusString": "ok",
/*ro, opt, string, status description, range:[1,64], desc:"ok" (succeeded); it is required when an error occurred*/
"subStatusCode": "ok",
/*ro, opt, string, sub status code, range:[1,64], desc:"ok" (succeeded); it is required when an error occurred*/
"errorCode": 1,
/*ro, opt, int, error code, desc:when the value of statusCode is not 1, it corresponds to subStatusCode*/
"errorMsg": "ok"
So
/*ro, opt, string, error information, desc:this node must be returned when the value of statusCode is not 1*/
}
Lt om
"picEnable": true,
/*opt, bool, whether to upload the picture along with the event information, desc:false (no), true (yes, default value); (1. all matched events will
be uploaded without pictures; 2. all matched events will be uploaded with pictures if there are any; 3. if this node is not configured, the default value is
t .c
true)*/
"beginSerialNo": 1,
d
Pv l
/*opt, int, start serial No.*/
"endSerialNo": 1,
/*opt, int, end serial No.*/
"employeeNoString": "test",
ai
gy gm
/*opt, string, employee No. (person ID)*/
"timeReverseOrder": true,
/*opt, bool, whether to return events in descending order of time (later events will be returned first), desc:true (yes), false or this node is not
lo n@
returned (no)*/
"isAbnomalTemperature": true,
/*opt, bool, whether the skin-surface temperature is abnormal*/
no je
"temperatureSearchCond": "all",
/*opt, enum, temperature search condition, subType:string, desc:when this node and isAbnormalTemperature both exist, isAbnormalTemperature is
ch ja
invalid; "all" (event with temperature), "normal" (event with normal temperature), "abnormal" (event with abnormal temperature)*/
"isAttendanceInfo": true,
/*opt, bool, whether it contains attendance records, desc:this node is newly added to HEOP protocol; if this node is true, main type, minor type,
Te la
}
}
or ka
Response Message
{
"AcsEvent": {
/*ro, req, object, access control events*/
"searchID": "test",
So
/*ro, req, string, search ID, it is used to check whether the current search requester is the same as the previous one. If they are the same, the
search record will be stored in the device to speed up the next search*/
"responseStatusStrg": "OK",
/*ro, req, string, searching status description*/
"numOfMatches": 1,
/*ro, req, int, number of results returned this time*/
"totalMatches": 1,
/*ro, req, int, total number of matched results*/
"InfoList": [
/*ro, opt, array, information list, subType:object*/
{
"major": 1,
/*ro, req, int, major alarm type*/
"minor": 1,
/*ro, req, int, minor alarm type*/
"time": "2016-12-12T17:30:08+08:00",
/*ro, req, string, time (UTC time)*/
"netUser": "test",
/*ro, opt, string, user name*/
"remoteHostAddr": "test",
/*ro, opt, string, remote host address*/
"videoChannel": 1,
/*ro, opt, int, video channel No., range:[1,86400], desc:this node is newly added to DeepinMind devices for attendance*/
"cardNo": "test",
/*ro, opt, string, card No.*/
"cardType": 1,
/*ro, opt, enum, card type, subType:int, desc:1 (normal card), 2 (disability card), 3 (blocklist card), 4 (patrol card), 5 (duress card), 6
(super card), 7 (visitor card), 8 (dismiss card)*/
"whiteListNo": 1,
/*ro, opt, int, allowlist No.*/
"reportChannel": 1,
/*ro, opt, int, channel type for uploading alarm/event*/
"cardReaderKind": 1,
/*ro, opt, int, card reader type: 1 (IC card reader)*/
"cardReaderNo": 1,
/*ro, opt, int, card reader No.*/
"doorNo": 1,
/*ro, opt, int, door or floor No.*/
"verifyNo": 1,
/*ro, opt, int, multi-factor authentication No.*/
"alarmInNo": 1,
/*ro, opt, int, alarm input No.*/
"alarmOutNo": 1,
/*ro, opt, int, alarm output No.*/
"caseSensorNo": 1,
/*ro, opt, int, event trigger No.*/
"RS485No": 1,
/*ro, opt, int, RS-485 channel No.*/
"multiCardGroupNo": 1,
/*ro, opt, int, group No.*/
"accessChannel": 1,
/*ro, opt, int, RS-485 channel No.*/
"deviceNo": 1,
/*ro, opt, int, device No.*/
"distractControlNo": 1,
/*ro, opt, int, distributed controller No.*/
"employeeNoString": "test",
/*ro, opt, string, employee No. (person ID)*/
Lt om
"localControllerID": 1,
/*ro, opt, int, distributed controller No.*/
"InternetAccess": 1,
t .c
/*ro, opt, int, network interface No.*/
"type": 1,
/*ro, opt, int, zone type, desc:0 (instant alarm zone), 1 (24-hour zone), 2 (delayed zone), 3 (internal zone), 4 (key zone), 5 (fire alarm
d
Pv l
zone), 6 (perimeter zone), 7 (24-hour silent zone), 8 (24-hour auxiliary zone), 9 (24-hour shock zone), 10 (emergency door open zone), 11 (emergency door
closed zone), 255 (none)*/
"MACAddr": "test",
ai
/*ro, opt, string, MAC address*/
gy gm
"swipeCardType": 1,
/*ro, opt, enum, card swiping type, subType:int, desc:0 (invalid), 1 (QR code)*/
"serialNo": 1,
lo n@
"channelControllerIRAdaptorID": 1,
/*ro, opt, int, IR adapter ID of lane controller, range:[1,255]*/
"channelControllerIREmitterID": 1,
Te la
/*ro, opt, int, active infrared intrusion detector No. of lane controller, range:[1,255]*/
"userType": "normal",
i su
(card or password), "fp" (fingerprint), "fpAndPw" (fingerprint + password), "fpOrCard" "fingerprint or card", "fpAndCard" (fingerprint + card),
"fpAndCardAndPw" (fingerprint + card + password), "faceOrFpOrCardOrPw" (face or fingerprint or card or password), "faceAndFp" (face + fingerprint),
"faceAndPw" (face + password), "faceAndCard" (face + card), "face", "employeeNoAndPw" (emplyee No. +password), "fpOrPw" (fingerprint or password),
"employeeNoAndFp" (employee No. + fingerprint), "employeeNoAndFpAndPw" (employee No. + fingerprint + password), "faceAndFpAndCard" (face + fingerprint +
card), "faceAndPwAndFp" (face + password + fingerprint), "employeeNoAndFace" (employee No. + face), "faceOrfaceAndCard" (face or face + card), "fpOrface"
(fingerprint or face), "cardOrfaceOrPw" (card or face or password), "faceOrFpOrCardOrPwOrIris" (face or fingerprint or card or password or iris),
"faceOrCardOrPwOrIris" (face or card or password or iris), "sleep", "invalid"*/
"QRCodeInfo": "test",
/*ro, opt, string, QR code information*/
So
"thermometryUnit": "celsius",
/*ro, opt, enum, temperature unit, subType:string, desc:"celsius" (Celsius, default value), "fahrenheit" (Fahrenheit), "kelvin" (Kelvin)*/
"currTemperature": 36.5,
/*ro, opt, float, skin-surface temperature, which is accurate to one decimal place*/
"isAbnomalTemperature": true,
/*ro, opt, bool, whether the skin-surface temperature is abnormal (true-yes)*/
"RegionCoordinates": {
/*ro, opt, object, coordinates of the skin-surface temperature*/
"positionX": 254,
/*ro, opt, int, normalized X-coordinate which is between 0 and 1000*/
"positionY": 133
/*ro, opt, int, normalized Y-coordinate which is between 0 and 1000*/
},
"mask": "unknown",
/*ro, opt, enum, whether the person wears a mask, subType:string, desc:"unknown"*/
"pictureURL": "test",
/*ro, opt, string, picture URL*/
"filename": "picture1",
/*ro, opt, string, file name, desc:if multiple pictures are returned at a time, filename of each picture should be unique*/
"attendanceStatus": "undefined",
/*ro, opt, enum, attendance status, subType:string, desc:"undefined", "checkIn" (check-in), "checkOut" (check-out), "breakOut" (start of
break), "breakIn" (end of break), "overtimeIn" (start of overtime), "overTimeOut" (end of overtime)*/
"label": "test",
/*ro, opt, string, custom attendance name*/
"statusValue": 1,
/*ro, opt, int, status value*/
"helmet": "unknown",
/*ro, opt, enum, whether the person wears a hard hat, subType:string, desc:"unknown", "yes", "no"*/
"visibleLightPicUrl": "test",
/*ro, opt, string, visible light picture URL*/
/*ro, opt, string, visible light picture URL*/
"thermalPicUrl": "test",
/*ro, opt, string, URL of the thermal imaging picture*/
"appType": "attendance",
/*ro, opt, enum, application type, subType:string, desc:"attendance" (Time & Attendance module), "signIn" (Check-In module, which is only
used for FocSign products)*/
"HealthInfo": {
/*ro, opt, object, health information*/
"healthCode": 1,
/*ro, opt, enum, health code status, subType:int, desc:0 (no request), 1 (no health code), 2 (green QR code), 3 (yellow QR code), 4 (red
QR code), 5 (no such person), 6 (other error, e.g., searching failed due to API exception), 7 (searching for the health code timed out)*/
"NADCode": 1,
/*ro, opt, enum, nucleic acid test result, subType:int, desc:0 (no result), 1 (negative, which means normal), 2 (positive, which means
diagnosed), 3 (the result has expired)*/
"travelCode": 1,
/*ro, opt, enum, trip code, subType:int, desc:0 (no trip in the past 14 days), 1 (has left the current area in the past 14 days), 2 (has
been to the high-risk area in the past 14 days), 3 (other)*/
"travelInfo": "test",
/*ro, opt, string*/
"vaccineStatus": 1,
/*ro, opt, enum, whether the person is vaccinated, subType:int, desc:0 (not vaccinated), 1 (vaccinated)*/
"vaccineNum": 1
/*ro, opt, int, step:1*/
},
"meetingID": "test",
/*ro, opt, string, meeting ID*/
"PersonInfoExtends": [
/*ro, opt, array, additional person information, subType:object, desc:this node displays additional person information on the device*/
{
"id": 1,
Lt om
/*ro, opt, int, extended ID of the additional person information, range:[1,32], desc:related URL:
/ISAPI/AccessControl/personInfoExtendName?format=json; this node is used for displaying the name of value; if ID does not exists, it starts from 1*/
"value": "test"
t .c
/*ro, opt, string, extended content of the additional person information*/
}
d
Pv l
],
"name": "test",
ai
/*ro, opt, string, name, desc:person name*/
"FaceRect": {
gy gm
/*ro, opt, object, rectangle frame for human face, desc:the origin is the upper-left corner of the screen*/
"height": 1.000,
/*ro, req, float, height, range:[0.000,1.000]*/
lo n@
"width": 1.000,
/*ro, req, float, width, range:[0.000,1.000]*/
"x": 0.000,
no je
/*ro, req, float, X-coordinate of the upper-left corner of the frame, range:[0.000,1.000]*/
"y": 0.000
ch ja
/*ro, req, float, Y-coordinate of the upper-left corner of the frame, range:[0.000,1.000]*/
},
"RecordInfo": {
Te la
"endTime": "1970-01-01T00:00:00+08:00",
/*ro, opt, datetime, recording end time*/
or ka
"playbackURL": "rtsp://10.65.130.168:554/ISAPI/Streaming/tracks/201/?starttime=20190213T091134Z&endtime=20190213T092116Z"
/*ro, opt, string, range:[0,256]*/
},
"currentAuthenticationTimes": 1,
/*ro, opt, int, range:[0,255], step:1*/
"allowAuthenticationTimes": 1
/*ro, opt, int, range:[0,255], step:1*/
}
]
}
So
10.2.1.6 Get the capability of getting total number of access control events by specific conditions
Request URL
GET /ISAPI/AccessControl/AcsEventTotalNum/capabilities?format=json
Query Parameter
None
Request Message
None
Response Message
{
"AcsEvent": {
/*ro, opt, object*/
"AcsEventTotalNumCond": {
/*ro, opt, object, search conditions*/
"major": {
/*ro, req, object, major alarm type*/
"@opt": "0,1,2,3,5"
/*ro, opt, string, major alarm type*/
},
"minorAlarm": {
/*ro, req, object, minor alarm type*/
"@opt": "1024,1025,1026,1027"
/*ro, opt, string, minor alarm type*/
},
"minorException": {
/*ro, req, object, minor exception type*/
"@opt": "39,58,59,1024"
/*ro, opt, string, minor exception type*/
},
"minorOperation": {
/*ro, req, object, minor operation type*/
"@opt": "80,90,112,113"
/*ro, opt, string, minor operation type*/
},
"minorEvent": {
/*ro, opt, object, minor event type*/
"@opt": "1,2,3,4"
Lt om
/*ro, opt, string, minor event type*/
},
"startTime": {
t .c
/*ro, opt, object, start time*/
"@min": 1,
d
Pv l
/*ro, opt, int, start time (UTC time)*/
"@max": 1
},
ai
/*ro, opt, int, end time (UTC time)*/
gy gm
"endTime": {
/*ro, opt, object, end time*/
"@min": 1,
lo n@
},
"cardNo": {
ch ja
"@max": 32
/*ro, opt, int, card No.*/
},
i su
"name": {
/*ro, opt, object, name of the card holder*/
or ka
"@min": 1,
/*ro, opt, int, name of the card holder*/
"@max": 32
/*ro, opt, int, name of the card holder*/
},
"beginSerialNo": {
/*ro, opt, object, start serial No.*/
"@min": 1,
/*ro, opt, int, start serial No.*/
"@max": 1
So
{
"AcsEventTotalNumCond": {
/*req, object*/
"major": 1,
/*req, int, major alarm type, desc:(the type value should be transformed to the decimal number), refer to Access Control Event Types for details*/
"minor": 1024,
/*req, int, sub type, step:1, desc:(the type value should be transformed to the decimal number),refer to Access Control Event Types for details*/
"startTime": "1970-01-01+08:00",
/*opt, date, start time (UTC time)*/
"endTime": "1970-01-01+08:00",
/*opt, date, end time (UTC time)*/
"cardNo": "test",
/*opt, string, card No.*/
"name": "test",
/*opt, string, name of the card holder*/
Lt om
"picEnable": true,
/*opt, bool, whether to upload the picture along with the event information, desc:whether to contain pictures: "true"-yes,"false"-no*/
"beginSerialNo": 1,
t .c
/*opt, int, start serial No.*/
"endSerialNo": 100,
d
Pv l
/*opt, int, end serial No.*/
"employeeNoString": "test"
}
ai
/*opt, string, employee No. (person ID), range:[1,32]*/
gy gm
}
lo n@
Response Message
no je
{
ch ja
"AcsEventTotalNum": {
/*ro, req, object*/
"totalNum": 1,
Te la
/*ro, req, int, total number of events that match the search conditions*/
"existedEventNum": 1
/*ro, opt, int*/
i su
}
}
or ka
10.2.1.8 Get the capability of clearing event and card linkage parameters
Request URL
GET /ISAPI/AccessControl/ClearEventCardLinkageCfg/capabilities?format=json
So
Query Parameter
None
Request Message
None
Response Message
{
"ClearEventCardLinkageCfg": {
/*ro, opt, object, clear event and card linkage parameters*/
"ClearFlags": {
/*ro, opt, object*/
"eventCardLinkage": "true,false"
/*ro, req, string, event and card linkage parameters*/
}
}
}
{
"ClearEventCardLinkageCfg": {
/*req, object*/
"ClearFlags": {
/*opt, object*/
"eventCardLinkage": true
/*req, bool, whether to clear event and card linkage parameters*/
}
}
}
Response Message
{
"statusCode": 1,
/*ro, opt, int, status code, desc:1 (succeeded); it is required when an error occurred*/
Lt om
"statusString": "ok",
/*ro, opt, string, status description, range:[1,64], desc:"ok" (succeeded); it is required when an error occurred*/
"subStatusCode": "ok",
t .c
/*ro, opt, string, sub status code, range:[1,64], desc:"ok" (succeeded); it is required when an error occurred*/
"errorCode": 1,
/*ro, opt, int, error code, desc:when the value of statusCode is not 1, it corresponds to subStatusCode*/
d
Pv l
"errorMsg": "ok"
}
ai
/*ro, opt, string, error information, desc:this node must be returned when the value of statusCode is not 1*/
gy gm
lo n@
GET /ISAPI/AccessControl/DeployInfo
ch ja
Query Parameter
Te la
None
i su
Request Message
None
or ka
Response Message
Lt om
10.2.1.12 Set the event card linkage parameters
t .c
Request URL
d
Pv l
PUT /ISAPI/AccessControl/EventCardLinkageCfg/<ACEID>?format=json
Query Parameter
ai
gy gm
Parameter Name Parameter Type Description
lo n@
ACEID string --
no je
Request Message
ch ja
{
Te la
"EventCardLinkageCfg": {
/*req, object, event card linkage parameters*/
"proMode": "event",
i su
/*req, enum, linkage type, subType:string, desc:"event” (event linkage), "card” (card linkage), "mac" (MAC address linkage), "employee” (employee
No., i.e., person ID)*/
"EmployeeInfo": {
or ka
/*opt, object, employee No. (person ID) linkage parameters, desc:it is valid when proMode is "employee”*/
"employeeNo": "test"
/*opt, string, employee No. (person ID)*/
},
"eventSourceID": 1,
/*opt, int, event source ID, desc:it is valid when proMode is "event". For device event (mainEventType is 0), this field is invalid; for access
control point event (mainEventType is 2), this field refers to the access control point No.; for authentication unit event (mainEventType is 3), this field
refers to the authentication unit No.; for alarm input event (mainEventType is 1), this field refers to the zone alarm input ID or the event alarm input ID
65535-all*/
So
Response Message
{
"requestURL": "test",
/*ro, opt, string, URI*/
"statusCode": "test",
/*ro, opt, string, status code*/
"statusString": "test",
/*ro, opt, string, status description*/
"subStatusCode": "test",
/*ro, opt, string, sub status code*/
"errorCode": 1,
/*ro, req, int, error code*/
"errorMsg": "ok"
/*ro, req, string, error description*/
}
Lt om
ACEID string --
t .c
Request Message
d
Pv l
None ai
Response Message
gy gm
lo n@
{
"EventCardLinkageCfg": {
/*ro, req, object*/
no je
"proMode": "event",
/*ro, req, enum, linkage type, subType:string, desc:"event"-event linkage, "card"-card linkage, "mac"-MAC address linkage, "employee"-employee No.
(person ID)*/
ch ja
"EventLinkageInfo": {
/*ro, opt, object, event linage parameters, desc:it is valid when proMode is "event”*/
Te la
"mainEventType": 0,
/*ro, opt, enum, major event type, subType:int, desc:0-device event,1-alarm input event,2-access control point event,3-authentication unit (card
reader, fingerprint module) event*/
i su
"subEventType": 54
/*ro, opt, int, event sub type, desc:minor event type,refer to Event Linkage Types for details*/
},
or ka
"EmployeeInfo": {
/*ro, opt, object, employee No. (person ID) linkage parameters, desc:it is valid when proMode is "employee”*/
"employeeNo": "test"
/*ro, opt, string, employee No. (person ID)*/
},
"eventSourceID": 1,
/*ro, opt, int, event source ID, desc:it is valid when proMode is "event",65535-all. For device event (mainEventType is 0),this field is invalid;
for access control point event (mainEventType is 2),this field refers to the access control point No.; for authentication unit event (mainEventType is
3,this field refers to the authentication unit No.; for alarm input event (mainEventType is 1),this field refers to the zone alarm input ID or the event
So
10.2.1.14 Get the configuration capability of the event and card linkage
Request URL
GET /ISAPI/AccessControl/EventCardLinkageCfg/capabilities?format=json
Query Parameter
None
Request Message
None
Response Message
{
"EventCardLinkageCfg": {
/*ro, req, object, parameters of the event and card linkage*/
"eventID": {
/*ro, opt, object, event ID*/
"@min": 1,
/*ro, opt, int*/
"@max": 1
/*ro, opt, int*/
},
"proMode": {
/*ro, req, object, linkage type*/
"@opt": "event,card,mac,employee"
/*ro, opt, string, linkage method*/
},
"EventLinkageInfo": {
/*ro, opt, object, event linkage information*/
"mainEventType": {
/*ro, opt, object, event main type*/
Lt om
"@opt": "0,1,2,3"
/*ro, opt, string, event main type*/
},
t .c
"devSubEventType": {
/*ro, opt, object, minor event type*/
d
"@opt": "0,1,2,3,54…"
Pv l
/*ro, opt, string, minor event type*/
},
"alarmSubEventType": {
ai
/*ro, opt, object, minor type of alarm input event*/
gy gm
"@opt": "0,1,2,3,52…"
/*ro, opt, string, minor type of alarm input event*/
lo n@
},
"doorSubEventType": {
/*ro, opt, object, minor type of access control point event*/
no je
"@opt": "0,1,2,3…"
/*ro, opt, string, minor type of access control point event*/
},
ch ja
"cardReaderSubEventType": {
/*ro, opt, object, minor type of authentication unit event*/
Te la
"@opt": "0,1,2,3…"
/*ro, opt, string, minor type of authentication unit event*/
}
i su
},
"CardNoLinkageInfo": {
/*ro, opt, object, card linkage parameters*/
or ka
"cardNo": {
/*ro, opt, object, card No.*/
"@min": 1,
/*ro, opt, int*/
"@max": 32
/*ro, opt, int*/
}
},
"EmployeeInfo": {
So
Lt om
},
}
t .c
}
d
Pv l
ai
10.2.1.15 Get the configuration capability of event optimization
Request URL
gy gm
GET /ISAPI/AccessControl/EventOptimizationCfg/capabilities?format=json
lo n@
Query Parameter
no je
None
ch ja
Request Message
None
Te la
Response Message
i su
{
or ka
"EventOptimizationCfg": {
/*ro, opt, object*/
"enable": "true,false",
/*ro, opt, string, whether to enable event optimization*/
"isCombinedLinkageEvents": "true,false"
/*ro, opt, string, whether to enable linked event combination*/
}
}
So
{
"EventOptimizationCfg": {
/*opt, object*/
"enable": true,
/*opt, bool, whether to enable event optimization*/
"isCombinedLinkageEvents": true
/*opt, bool, whether to enable linked event combination*/
}
}
Response Message
{
"requestURL": "test",
/*ro, opt, string, URI*/
"statusCode": "test",
/*ro, opt, string, status code*/
"statusString": "test",
/*ro, opt, string, status description*/
"subStatusCode": "test",
/*ro, opt, string, sub status code*/
"errorCode": 1,
/*ro, req, int, error code*/
"errorMsg": "ok"
/*ro, req, string, error details*/
}
Lt om
None
t .c
Request Message
None
d
Pv l
Response Message ai
gy gm
{
"EventOptimizationCfg": {
lo n@
"isCombinedLinkageEvents": true
/*ro, opt, bool, whether to enable linked event combination*/
ch ja
}
}
Te la
EventType:AccessControllerEvent
or ka
{
"ipAddress": "172.6.64.7",
/*ro, req, string, IPv4 address of the device that triggers the alarm*/
"ipv6Address": "1080:0:0:0:8:800:200C:417A",
/*ro, opt, string, IPv6 address of the device that triggers the alarm*/
"portNo": 80,
/*ro, opt, int, communication port No. of the device that triggers the alarm*/
So
"protocol": "HTTP",
/*ro, opt, enum, transmission communication protocol type, subType:string, desc:when ISAPI protocol is transmitted via HCNetSDK, the channel No. is the
video channel No. of private protocol. When ISAPI protocol is transmitted via EZ protocol, the channel No. is the video channel No. of EZ protocol. When
ISAPI protocol is transmitted via ISUP, the channel No. is the video channel No. of ISUP*/
"macAddress": "01:17:24:45:D9:F4",
/*ro, opt, string, MAC address*/
"channelID": 1,
/*ro, opt, int, channel No. of the device that triggers the alarm, desc:when ISAPI protocol is transmitted via HCNetSDK, the channel No. is the video
channel No. of private protocol. When ISAPI protocol is transmitted via EZ protocol, the channel No. is the video channel No. of EZ protocol. When ISAPI
protocol is transmitted via ISUP, the channel No. is the video channel No. of ISUP*/
"dateTime": "2004-05-03T17:30:08+08:00",
/*ro, req, datetime, alarm trigger time*/
"activePostCount": 1,
/*ro, req, int, times that the same alarm has been uploaded, desc:times that the same alarm has been uploaded*/
"eventType": "AccessControllerEvent",
/*ro, req, string, event type, desc:"AccessControllerEvent" (access control event)*/
"eventState": "active",
/*ro, req, enum, event status, subType:string, desc:for durative event: "active" (valid event or event starts), "inactive" (invalid event or the event
ends). For the heartbeat, the node value indicates the heartbeat data, and it is uploaded every 10 seconds*/
"eventDescription": "AccessControllerEvent",
/*ro, req, string, event description, desc:"AccessControllerEvent" (access control event)*/
"deviceID": "test0123",
/*ro, opt, string, device ID (PUID), desc:this node must be returned when ISAPI event information is transmitted via ISUP*/
"AccessControllerEvent": {
/*ro, req, object, access control event information*/
"deviceName": "test",
/*ro, opt, string, device name*/
"majorEventType": 1,
/*ro, req, int, major alarm type, desc:the type value should be transformed to the decimal number; see Access Control Alarm Types for details*/
"subEventType": 1,
"subEventType": 1,
/*ro, req, int, minor alarm type, desc:the type value should be transformed to the decimal number; see Access Control Alarm Types for details*/
"inductiveEventType": "authenticated",
/*ro, opt, enum, inductive event type, subType:string, desc:this node is used by storage devices; for access control devices, this node is invalid;
"authenticated", "authenticationFailed", "openingDoor", "closingDoor", "doorException", "remoteOperation", "timeSynchronization", "deviceException",
"deviceRecovered", "alarmTriggered", "alarmRecovered" (arming restoring event), "callCenter"*/
"netUser": "test",
/*ro, opt, string, user name for network operations*/
"remoteHostAddr": "test",
/*ro, opt, string, remote host address*/
"cardNo": "test",
/*ro, opt, string, card No.*/
"cardType": 1,
/*ro, opt, enum, card type, subType:int, desc:1 (normal card), 2 (disability card), 3 (blocklist card), 4 (patrol card), 5 (duress card), 6 (super
card), 7 (visitor card), 8 (dismiss card)*/
"name": "test",
/*ro, opt, string, person name*/
"sex": "male",
/*ro, opt, enum, subType:string, desc:"male", "female"*/
"whiteListNo": 1,
/*ro, opt, int, allowlist No.*/
"reportChannel": 1,
/*ro, opt, enum, channel type for uploading alarms/events, subType:int, desc:1 (uploading in arming mode), 2 (uploading by central group 1), 3
(uploading by central group 2)*/
"cardReaderKind": 1,
/*ro, opt, enum, card reader type, subType:int, desc:1 (IC card reader), 2 (ID card reader), 3 (QR code scanner), 4 (fingerprint module)*/
"cardReaderNo": 1,
/*ro, opt, int, card reader No., step:1, desc:card reader No.*/
"doorNo": 1,
/*ro, opt, int, door (floor) No.*/
Lt om
"verifyNo": 1,
/*ro, opt, int, multiple authentication No.*/
t .c
"alarmInNo": 1,
/*ro, opt, int, alarm input No.*/
"alarmOutNo": 1,
d
Pv l
/*ro, opt, int, alarm output No.*/
"caseSensorNo": 1,
/*ro, opt, int, event trigger No.*/
"RS485No": 1,
ai
gy gm
/*ro, opt, int, RS-485 channel No.*/
"multiCardGroupNo": 1,
/*ro, opt, int, group No.*/
lo n@
"accessChannel": 1,
/*ro, opt, int, turnstile No.*/
no je
"deviceNo": 1,
/*ro, opt, int, device No.*/
"distractControlNo": 1,
ch ja
"employeeNoString": "test",
/*ro, opt, string, employee No. (person ID), desc:if the node employeeNo exists or the value of employeeNoString can be converted to that of
i su
employeeNo, this node is required. For the upper-layer platform or client software, the node employeeNoString will be parsed in priority; if
employeeNoString is not configured, the node employeeNo will be parsed*/
"employeeName": "test",
or ka
/*ro, opt, string, person name, desc:this node is only used for FocSign products*/
"localControllerID": 1,
/*ro, opt, int, distributed access controller No., desc:0 (access controller), 1 to 64 (distributed access controller No. 1 to distributed access
controller No. 64)*/
"InternetAccess": 1,
/*ro, opt, enum, network interface No., subType:int, desc:1 (upstream network interface No. 1), 2 (upstream network interface No. 2), 3 (downstream
network interface No. 1)*/
"type": 1,
/*ro, opt, enum, zone type, subType:int, desc:0 (instant zone), 1 (24-hour zone), 2 (delayed zone), 3 (internal zone), 4 (key zone), 5 (fire alarm
So
zone), 6 (perimeter zone), 7 (24-hour silent zone), 8 (24-hour auxiliary zone), 9 (24-hour shock zone), 10 (emergency door open zone), 11 (emergency door
closed zone), 255 (none)*/
"MACAddr": "test",
/*ro, opt, string, MAC address*/
"swipeCardType": 1,
/*ro, opt, enum, card swiping types, subType:int, desc:0 (invalid), 1 (QR code)*/
"serialNo": 1,
/*ro, opt, int, event serial No., range:[1,100000], desc:it starts at 1 and each record increases by 1. It will be overwritten repeatedly when
reaching the maximum value supported by the device*/
"channelControllerID": 1,
/*ro, opt, enum, lane controller ID, subType:int, desc:1 (main lane controller), 2 (sub-lane controller)*/
"channelControllerLampID": 1,
/*ro, opt, int, light board ID of lane controller, range:[1,255]*/
"channelControllerIRAdaptorID": 1,
/*ro, opt, int, IR adaptor ID of the lane controller, range:[1,255]*/
"channelControllerIREmitterID": 1,
/*ro, opt, int, active infrared intrusion detector No. of the lane controller, range:[1,255]*/
"userType": "normal",
/*ro, opt, enum, person type, subType:string, desc:"normal" (normal person (resident)), "visitor" (visitor), "blacklist" (person in the blocklist),
"administrators" (administrator)*/
"currentVerifyMode": "cardAndPw",
/*ro, opt, enum, current authentication mode of the card reader, subType:string, desc:"cardAndPw" (card+password), "card" (card), "cardOrPw" (card
or password), "fp" (fingerprint), "fpAndPw" (fingerprint+password), "fpOrCard" (fingerprint or card), "fpAndCard" (fingerprint+card), "fpAndCardAndPw"
(fingerprint+card+password), "faceOrFpOrCardOrPw" (face or fingerprint or card or password), "faceAndFp" (face+fingerprint), "faceAndPw" (face+password),
"faceAndCard" (face+card), "face" (face), "employeeNoAndPw" (employee No.+password), "fpOrPw" (fingerprint or password), "employeeNoAndFp" (employee
No.+fingerprint), "employeeNoAndFpAndPw" (employee No.+fingerprint+password), "faceAndFpAndCard" (face+fingerprint+card), "faceAndPwAndFp"
(face+password+fingerprint), "employeeNoAndFace" (employee No.+face), "faceOrfaceAndCard" (face or face+card), "fpOrface" (fingerprint or face),
"cardOrfaceOrPw" (card or face or password), "iris" (iris), "faceOrFpOrCardOrPwOrIris" (face, fingerprint, card, password, or iris), "faceOrCardOrPwOrIris"
(face, card, password, or iris)*/
"currentEvent": true,
"currentEvent": true,
/*ro, opt, bool, whether it is a real-time event*/
"QRCodeInfo": "test",
/*ro, opt, string, QR code information*/
"thermometryResult": "success",
/*ro, opt, enum, temperature screening result, subType:string, desc:"success", "fail"*/
"thermometryUnit": "celsius",
/*ro, opt, enum, temperature unit, subType:string, desc:"celsius" (Celsius, default value), "fahrenheit" (Fahrenheit), "kelvin" (Kelvin)*/
"currTemperature": 36.1,
/*ro, opt, float, skin-surface temperature, which is accurate to one decimal place*/
"isAbnomalTemperature": true,
/*ro, opt, bool, whether the skin-surface temperature is abnormal*/
"RegionCoordinates": {
/*ro, opt, object, coordinates of the skin-surface temperature*/
"positionX": 0,
/*ro, opt, int, normalized X-coordinate which is between 0 and 1000, range:[0,1000]*/
"positionY": 0
/*ro, opt, int, normalized Y-coordinate which is between 0 and 1000, range:[0,1000]*/
},
"remoteCheck": true,
/*ro, opt, bool, whether remote verification is required: true-yes, false-no (default)*/
"mask": "unknown",
/*ro, opt, enum, whether the person wears a mask, subType:string, desc:"unknown", "yes", "no"*/
"frontSerialNo": 1,
/*ro, opt, int, serial No. of the previous event, desc:if this node does not exist, the platform will check whether the event loss occurred
according to the node serialNo. If both the serialNo and frontSerialNo are returned, the platform will check whether the event loss occurred according to
both nodes. It is mainly used to solve the problem that the serialNo is inconsistent after subscribing events or alarms*/
"attendanceStatus": "checkIn",
/*ro, opt, enum, attendance status, subType:string, desc:"checkIn" (check-in), "checkOut" (check-out), "breakOut" (start of break), "breakIn" (end
of break), "overtimeIn" (start of overtime), "overTimeOut" (end of overtime)*/
Lt om
"label": "test",
/*ro, opt, string, self-defined attendance name*/
"statusValue": 1,
t .c
/*ro, opt, int, status value*/
"pictureURL": "test",
d
Pv l
/*ro, opt, string, URL of the captured picture, range:[0,256]*/
"visibleLightURL": "test",
ai
/*ro, opt, string, visible light picture URL of the thermal imaging camera, range:[0,256]*/
"thermalURL": "test",
gy gm
/*ro, opt, string, URL of the thermal picture, range:[0,256]*/
"faceBasemapURL": "test",
/*ro, opt, string, range:[0,256]*/
lo n@
"picturesNumber": 1,
/*ro, opt, int, number of captured pictures*/
"unlockType": "password",
no je
/*ro, opt, enum, unlocking type, subType:string, desc:this node is returned when the minor type is MINOR_UNCLOCK_RECORD; "password" (unlock by
password), "hijcking" (unlock by duress), "card" (unlock by card), "householder" (unlock by householder), "centerplatform" (unlock by management center),
ch ja
"bluetooth" (unlock by bluetooth), "qrcode" (unlocked via QR code), "face" (unlock by recognizing face), "fingerprint" (unlock by fingerprint)*/
"classroomId": "test",
/*ro, opt, string, class ID*/
Te la
"classroomName": "test",
/*ro, opt, string, class name*/
"analysisModule": "signageApp",
i su
/*ro, opt, enum, analysis module, subType:string, desc:this node is not returned, and the value is report via signage App; "signageApp" (signage
App), "faceSDK" (face picture SDK)*/
"customInfo": "test",
or ka
/*ro, opt, enum, application type (for FocSign products), subType:string, desc:"attendance" (Time & Attendance module), "signIn" (Check-In module)*/
"HealthInfo": {
/*ro, opt, object, health information*/
"healthCode": 1,
/*ro, opt, enum, health code status, subType:int, desc:0 (no request), 1 (no health code), 2 (green QR code), 3 (yellow QR code), 4 (red QR
code), 5 (no such person), 6 (other error, e.g., searching failed due to API exception), 7 (searching for the health code timed out)*/
"NADCode": 1,
/*ro, opt, enum, nucleic acid test result, subType:int, desc:0 (no result), 1 (negative, which means normal), 2 (positive, which means
diagnosed), 3 (the result has expired)*/
"NADMsg": "test",
/*ro, opt, string, range:[0,64]*/
"NADTime": 1,
/*ro, opt, enum, subType:int*/
"travelCode": 1,
/*ro, opt, enum, trip code, subType:int, desc:0 (no trip in the past 14 days), 1 (has left the current area left in the past 14 days), 2 (has
been to the high-risk area in the past 14 days), 3 (other)*/
"travelInfo": "test",
/*ro, opt, string, trip information, desc:the empty string indicates that searching trip failed*/
"vaccineStatus": 1,
/*ro, opt, enum, whether the person is vaccinated, subType:int, desc:0 (not vaccinated), 1 (vaccinated)*/
"vaccineNum": 1,
/*ro, opt, int, step:1*/
"vaccineMsg": "test",
/*ro, opt, string, range:[0,64]*/
"ANTCode": 1,
/*ro, opt, enum, subType:int*/
"ANTMsg": "test"
/*ro, opt, string, range:[0,64]*/
},
"PhysicalInfo": {
/*ro, opt, object, BMI information, desc:this node is obtained after authentication by BMI scales which is connected to MinMoe terminals*/
"weight": 7000,
/*ro, opt, int, weight, unit:kg*/
"height": 18000
/*ro, opt, int, height, unit:cm*/
},
"meetingID": "test",
/*ro, opt, string, meeting ID, range:[1,32]*/
"PersonInfoExtends": [
/*ro, opt, array, additional person information, subType:object, desc:this node displays additional person information on the device*/
{
"id": 1,
/*ro, opt, int, extended ID of the additional person information, range:[1,32], desc:related URL: /ISAPI/AccessControl/personInfoExtendName?
format=json; this node is used for displaying the name of value; if ID does not exists, it starts from 1*/
"value": "test"
/*ro, opt, string, extended content of the additional person information*/
}
],
"customPrompt": "test",
/*ro, opt, string, custom prompt message, range:[1,128], desc:this node is displayed when the authentication result is authenticated, authentication
failed, or stranger*/
"FaceRect": {
/*ro, opt, object, rectangle frame for human face, desc:the origin is the upper-left corner of the screen*/
"height": 1.000,
/*ro, req, float, height, range:[0.000,1.000]*/
"width": 1.000,
/*ro, req, float, width, range:[0.000,1.000]*/
"x": 0.000,
Lt om
/*ro, req, float, X-coordinate of the upper-left corner of the frame, range:[0.000,1.000]*/
"y": 0.000
/*ro, req, float, Y-coordinate of the upper-left corner of the frame, range:[0.000,1.000]*/
t .c
},
"faceSimilarity": 90,
/*ro, opt, int, Similarity, range:[0,100]*/
d
Pv l
"faceRecognitionDistance": 0.1,
/*ro, opt, float, unit:m*/
"eyesDistance": 20,
ai
/*ro, opt, int, range:[0,100], step:1*/
gy gm
"faceRecognitionFailedReason": "attackBlacklist",
/*ro, opt, enum, subType:string*/
"currentAuthenticationTimes": 1,
lo n@
"attendanceResult": [
/*ro, opt, array, subType:object*/
{
Te la
"date": "1970-01-01",
/*ro, opt, date*/
i su
"week": 1,
/*ro, opt, enum, subType:int, desc:1 (Monday), 2 (Tuesday), 3 (Wednesday), 4 (Thursday), 5 (Friday), 6 (Saturday), 7 (Sunday)*/
"personalAttendanceStatus": "normal"
or ka
Parameter Parameter
Parameter Name Content-ID File Name Description
Value Type(Content-Type)
[Message
AccessControllerEvent application/json -- -- --
content]
[Binary picture
Picture image/jpeg pictureImage Picture.jpg --
data]
[Binary picture
VisibleLight image/jpeg visibleLight_image VisibleLight.jpg --
data]
[Binary picture
Thermal image/jpeg thermal_image Thermal.jpg --
data]
Note: The protocol is transmitted in form format. See Chapter 4.5.1.4 for form framework description, as shown in
the instance below.
--<frontier>
Content-Disposition: form-data; name=Parameter Name;filename=File Name
Content-Type: Parameter Type
Content-Length: ****
Content-ID: Content ID
Parameter Value
Parameter Name: the name property of Content-Disposition in the header of form unit; it refers to the form unit
name.
Parameter Type (Content-Type): the Content-Type property in the header of form unit.
File Name (filename): the filename property of Content-Disposition of form unit Headers. It exists only when the
transmitted data of form unit is file, and it refers to the file name of form unit body.
Parameter Value: the body content of form unit.
Lt om
10.2.2.1 Get the capability of clearing access control schedule configuration.
t .c
Request URL
GET /ISAPI/AccessControl/ClearPlansCfg/capabilities?format=json
d
Pv l
Query Parameter ai
None
gy gm
Request Message
lo n@
None
no je
Response Message
ch ja
{
"ClearPlansCfg": {
Te la
"cardReaderWeekPlan": "true,false",
/*ro, opt, string, whether to clear the week schedule of the card reader authentication mode control*/
"userRightWeekPlan": "true,false",
/*ro, opt, string, whether to clear the week schedule of the access permission control*/
"doorStatusHolidayPlan": "true,false",
/*ro, opt, string, whether to clear the holiday schedule of the door control*/
"cardReaderHolidayPlan": "true,false",
/*ro, opt, string, whether to clear the holiday schedule of the card reader authentication mode control*/
"userRightHolidayPlan": "true,false",
So
/*ro, opt, string, whether to clear the holiday schedule of the access permission control*/
"doorStatusHolidayGroup": "true,false",
/*ro, opt, string, whether to clear the holiday group of the door control*/
"cardReaderHolidayGroup": "true,false",
/*ro, opt, string, whether to clear the holiday group of the card reader authentication mode control*/
"userRightHolidayGroup": "true,false",
/*ro, opt, string, whether to clear the holiday group of the access permission control*/
"doorStatusTemplate": "true,false",
/*ro, opt, string, whether to clear the schedule template of the door control*/
"cardReaderTemplate": "true,false",
/*ro, opt, string, whether to clear the control schedule template of the card reader authentication mode*/
"userRightTemplate": "true,false"
/*ro, opt, string, whether to clear the schedule template of the access permission control*/
}
}
}
{
"ClearPlansCfg": {
/*opt, object*/
"ClearFlags": {
/*opt, object*/
"doorStatusWeekPlan": true,
/*opt, bool, whether to clear the week schedule of the door control*/
"cardReaderWeekPlan": true,
/*opt, bool, whether to clear the week schedule of the card reader authentication mode control*/
"userRightWeekPlan": true,
/*opt, bool, whether to clear the week schedule of the access permission control*/
"doorStatusHolidayPlan": true,
/*opt, bool, whether to clear the holiday schedule of the door control*/
"cardReaderHolidayPlan": true,
/*opt, bool, whether to clear the holiday schedule of the card reader authentication mode control*/
"userRightHolidayPlan": true,
/*opt, bool, whether to clear the holiday schedule of the access permission control*/
"doorStatusHolidayGroup": true,
/*opt, bool, whether to clear the holiday group of the door control*/
"cardReaderHolidayGroup": true,
/*opt, bool, whether to clear the holiday group of the card reader authentication mode control*/
"userRightHolidayGroup": true,
/*opt, bool, whether to clear the holiday group of the access permission control*/
"doorStatusTemplate": true,
/*opt, bool, whether to clear the schedule template of the door control*/
"cardReaderTemplate": true,
Lt om
/*opt, bool, whether to clear the control schedule template of card reader authentication mode*/
"userRightTemplate": true
t .c
/*opt, bool, whether to clear the schedule template of access permission control*/
}
}
d
Pv l
}
ai
Response Message
gy gm
lo n@
{
"statusCode": 1,
/*ro, opt, int, status code, desc:1 (succeeded); it is required when an error occurred*/
no je
"statusString": "ok",
/*ro, opt, string, status description, range:[1,64], desc:"ok" (succeeded); it is required when an error occurred*/
ch ja
"subStatusCode": "ok",
/*ro, opt, string, sub status code, range:[1,64], desc:"ok" (succeeded); it is required when an error occurred*/
"errorCode": 1,
Te la
/*ro, opt, int, error code, desc:when the value of statusCode is not 1, it corresponds to subStatusCode*/
"errorMsg": "ok"
/*ro, opt, string, error information, desc:this node must be returned when the value of statusCode is not 1*/
i su
}
or ka
{
"DoorStatusHolidayGroupCfg": {
/*opt, object*/
"enable": true,
/*req, bool, whether to enable, desc:whether to enable*/
"groupName": "test",
/*req, string, holiday group name*/
"holidayPlanNo": "1,3,5"
/*opt, string*/
}
}
Response Message
{
"statusCode": 1,
/*ro, opt, int, status code, desc:1 (succeeded); it is required when an error occurred*/
"statusString": "ok",
/*ro, opt, string, status description, range:[1,64], desc:"ok" (succeeded); it is required when an error occurred*/
"subStatusCode": "ok",
/*ro, opt, string, sub status code, range:[1,64], desc:"ok" (succeeded); it is required when an error occurred*/
"errorCode": 1,
/*ro, opt, int, error code, desc:when the value of statusCode is not 1, it corresponds to subStatusCode*/
"errorMsg": "ok"
/*ro, opt, string, error information, desc:this node must be returned when the value of statusCode is not 1*/
}
10.2.2.4 Get the holiday group configuration parameters of the door control schedule
Request URL
GET /ISAPI/AccessControl/DoorStatusHolidayGroupCfg/<holidayGroupID>?format=json
Query Parameter
Parameter Name Parameter Type Description
holidayGroupID string --
Lt om
Request Message
t .c
None
d
Pv l
Response Message ai
gy gm
{
"DoorStatusHolidayGroupCfg": {
lo n@
"groupName": "test",
/*ro, req, string, holiday group name*/
"holidayPlanNo": "1,3,5"
ch ja
}
i su
10.2.2.5 Get the configuration capability of door status parameters of holiday group
or ka
Request URL
GET /ISAPI/AccessControl/DoorStatusHolidayGroupCfg/capabilities?format=json
Query Parameter
None
So
Request Message
None
Response Message
{
"DoorStatusHolidayGroupCfg": {
/*ro, opt, object*/
"groupNo": {
/*ro, opt, object, holiday group No.*/
"@min": 1,
/*ro, opt, int, the minimum value*/
"@max": 16
/*ro, opt, int, the maximum value*/
},
"enable": "true,false",
/*ro, opt, string, whether to enable, desc:true (enable)*/
"groupName": {
/*ro, opt, object, length of holiday group name*/
"@min": 1,
/*ro, opt, int, the minimum length*/
"@max": 32
/*ro, opt, int, the maximum length*/
},
"holidayPlanNo": {
/*ro, opt, object, holiday group plan No.*/
"@min": 1,
/*ro, opt, int, the minimum value*/
"@max": 16
/*ro, opt, int, the maximum value*/
}
}
}
Lt om
t .c
10.2.2.6 Get the configuration parameters of the door control holiday schedule
d
Pv l
Request URL ai
GET /ISAPI/AccessControl/DoorStatusHolidayPlanCfg/<holidayPlanID>?format=json
gy gm
Query Parameter
lo n@
holidayPlanID string --
ch ja
Request Message
Te la
None
i su
Response Message
or ka
{
"DoorStatusHolidayPlanCfg": {
/*ro, req, object*/
"enable": true,
/*ro, req, bool, whether to enable, desc:true (enable), false (disable)*/
"beginDate": "2017-10-01",
/*ro, req, date, start date of the holiday*/
"endDate": "2017-10-08",
/*ro, req, date, end date of the holiday*/
So
"HolidayPlanCfg": [
/*ro, req, array, holiday schedule parameters, subType:object*/
{
"id": 1,
/*ro, req, int, time period No., range:[1,8]*/
"enable": true,
/*ro, req, bool, whether to enable, desc:true (enable), false (disable)*/
"doorStatus": "remainClosed",
/*ro, req, enum, door status, subType:string, desc:“remainOpen”-remain open (access without authentication), “remainClosed”-remain closed
(access is not allowed), “normal”-access by authentication, "sleep", "invalid”, “induction”, “barrierFree”*/
"TimeSegment": {
/*ro, opt, object, time*/
"beginTime": "00:00:00",
/*ro, req, time, start time of the time period, desc:device local time*/
"endTime": "10:00:00"
/*ro, req, time, end time of the time period, desc:device local time*/
}
}
]
}
}
{
"DoorStatusHolidayPlanCfg": {
/*ro, req, object*/
"enable": true,
/*ro, req, bool, whether to enable, desc:"true"-enable, "false"-disable*/
"beginDate": "2017-10-01",
/*ro, req, date, start date of the holiday*/
"endDate": "2017-10-08",
/*ro, req, date, end data of the holiday*/
"HolidayPlanCfg": [
/*ro, req, array, holiday schedule parameters, subType:object*/
{
"id": 1,
/*ro, req, int, time period No., range:[1,8]*/
"enable": true,
Lt om
/*ro, req, bool, whether to enable, desc:"true"-enable, "false"-disable*/
"doorStatus": "remainClosed",
/*ro, req, enum, door status, subType:string, desc:"remainOpen"-remain open (access without authentication), "remainClosed"-remain closed
t .c
(access is not allowed), "normal"-access by authentication, "sleep", "invalid”*/
"TimeSegment": {
d
/*ro, opt, object, time*/
Pv l
"beginTime": "00:00:00",
ai
/*ro, req, time, start time, desc:device local time*/
"endTime": "10:00:00"
/*ro, req, time, end time, desc:device local time*/
gy gm
}
}
lo n@
]
}
}
no je
ch ja
Response Message
Te la
{
"statusCode": 1,
i su
/*ro, opt, int, status code, desc:1 (succeeded); it is required when an error occurred*/
"statusString": "ok",
/*ro, opt, string, status description, range:[1,64], desc:"ok" (succeeded); it is required when an error occurred*/
or ka
"subStatusCode": "ok",
/*ro, opt, string, sub status code, range:[1,64], desc:"ok" (succeeded); it is required when an error occurred*/
"errorCode": 1,
/*ro, opt, int, error code, desc:when the value of statusCode is not 1, it corresponds to subStatusCode*/
"errorMsg": "ok"
/*ro, opt, string, error information, desc:this node must be returned when the value of statusCode is not 1*/
}
So
10.2.2.8 Get the configuration capability of the door control holiday schedule
Request URL
GET /ISAPI/AccessControl/DoorStatusHolidayPlanCfg/capabilities?format=json
Query Parameter
None
Request Message
None
Response Message
{
"DoorStatusHolidayPlanCfg": {
/*ro, opt, object*/
"planNo": {
/*ro, opt, object, holiday schedule No.*/
"@min": 1,
/*ro, opt, int*/
"@max": 16
/*ro, opt, int*/
},
"enable": "true,false",
/*ro, opt, string, whether to enable: "true"-enable,"false"-disable, desc:"true" (enable), "false" (disable)*/
"beginDate": "1970-01-01",
/*ro, opt, date, start date of the holiday*/
"endDate": "1971-01-01",
/*ro, opt, date, end date of the holiday*/
"HolidayPlanCfg": {
/*ro, opt, object*/
"maxSize": 8,
/*ro, opt, int*/
"id": {
/*ro, opt, object, time period No.*/
"@min": 1,
/*ro, opt, int*/
"@max": 8
/*ro, opt, int*/
},
"enable": "true,false",
Lt om
/*ro, opt, string, whether to enable: "true"-enable,"false"-disable, desc:"true" (enable), "false" (disable)*/
"doorStatus": {
/*ro, opt, object, door status*/
t .c
"@opt": "remainOpen,remainClosed,normal,sleep,invlid,induction,barrierFree"
/*ro, opt, string, desc:"remainOpen" (remain open (access without authentication)), "remainClosed" (remain closed (access is not allowed)),
d
Pv l
"normal" (access by authentication), "sleep", "invalid"*/
},
"TimeSegment": {
/*ro, opt, object, time*/
ai
gy gm
"beginTime": "00:00:00",
/*ro, opt, time, start time of the time period (device local time), desc:device local time*/
"endTime": "00:00:00",
lo n@
/*ro, opt, time, end time of the time period (device local time), desc:device local time*/
"validUnit": "minute"
/*ro, opt, enum, time accuracy, subType:string, desc:"hour", "minute", "second"; if this node is not returned, the default time accuracy is
no je
"minute"*/
}
ch ja
}
}
}
Te la
i su
Request URL
GET /ISAPI/AccessControl/DoorStatusPlan/<doorID>?format=json
Query Parameter
Parameter Name Parameter Type Description
So
doorID string --
Request Message
None
Response Message
{
"DoorStatusPlan": {
/*ro, req, object*/
"templateNo": 1
/*ro, req, int, schedule template No., desc:0-cancel linking the template with the schedule and restore to the default status (normal status)*/
}
}
{
"DoorStatusPlan": {
/*req, object*/
"templateNo": 1
/*req, int, schedule template No., desc:0-cancel linking the template with the schedule and restore to the default status (normal status)*/
}
}
Response Message
{
"statusCode": 1,
/*ro, opt, int, status code, desc:1 (succeeded); it is required when an error occurred*/
"statusString": "ok",
/*ro, opt, string, status description, range:[1,64], desc:"ok" (succeeded); it is required when an error occurred*/
"subStatusCode": "ok",
/*ro, opt, string, sub status code, range:[1,64], desc:"ok" (succeeded); it is required when an error occurred*/
Lt om
"errorCode": 1,
/*ro, opt, int, error code, desc:when the value of statusCode is not 1, it corresponds to subStatusCode*/
t .c
"errorMsg": "ok"
/*ro, opt, string, error information, desc:this node must be returned when the value of statusCode is not 1*/
}
d
Pv l
ai
10.2.2.11 Get the configuration capability of the door control schedule
gy gm
Request URL
lo n@
GET /ISAPI/AccessControl/DoorStatusPlan/capabilities?format=json
no je
Query Parameter
ch ja
None
Request Message
Te la
None
i su
Response Message
or ka
{
"DoorStatusPlan": {
/*ro, opt, object*/
"doorNo": {
/*ro, opt, object, door No.*/
"@min": 1,
/*ro, opt, int*/
"@max": 4
So
{
"DoorStatusPlanTemplate": {
/*ro, opt, object, door control schedule template*/
"enable": true,
/*ro, req, bool, whether to enable, desc:"true"-enable, "false"-disable*/
"templateName": "test",
/*ro, req, string, template name*/
"weekPlanNo": 1,
/*ro, req, int, weekly schedule No.*/
"holidayGroupNo": "1,3,5"
/*ro, req, string, holiday group No., desc:holiday group No.*/
}
}
Response Message
{
"statusCode": 1,
/*ro, opt, int, status code, desc:1 (succeeded); it is required when an error occurred*/
"statusString": "ok",
/*ro, opt, string, status description, range:[1,64], desc:"ok" (succeeded); it is required when an error occurred*/
"subStatusCode": "ok",
/*ro, opt, string, sub status code, range:[1,64], desc:"ok" (succeeded); it is required when an error occurred*/
Lt om
"errorCode": 1,
/*ro, opt, int, error code, desc:when the value of statusCode is not 1, it corresponds to subStatusCode*/
"errorMsg": "ok"
t .c
/*ro, opt, string, error information, desc:this node must be returned when the value of statusCode is not 1*/
}
d
Pv l
ai
10.2.2.13 Get parameters of door control schedule template
gy gm
Request URL
lo n@
GET /ISAPI/AccessControl/DoorStatusPlanTemplate/<planTemplateID>?format=json
no je
Query Parameter
ch ja
planTemplateID string --
i su
Request Message
or ka
None
Response Message
{
"DoorStatusPlanTemplate": {
/*ro, opt, object, door control schedule template*/
"enable": true,
So
10.2.2.14 Get the configuration capability of the door control schedule template
Request URL
GET /ISAPI/AccessControl/DoorStatusPlanTemplate/capabilities?format=json
Query Parameter
None
Request Message
None
Response Message
{
"DoorStatusPlanTemplate": {
/*ro, opt, object, schedule template*/
"templateNo": {
/*ro, opt, object, schedule template No.*/
"@min": 1,
/*ro, opt, int, the minimum value of schedule template No.*/
"@max": 16
/*ro, opt, int, the maximum value of schedule template No.*/
},
"enable": "true,false",
/*ro, opt, string, whether to enable, desc:true (enable), false (disable)*/
"templateName": {
/*ro, opt, object, template name length*/
"@min": 1,
/*ro, opt, int, the minimum value of template name length*/
"@max": 32
/*ro, opt, int, the maximum value of template name length*/
},
"weekPlanNo": {
/*ro, opt, object, weekly schedule No.*/
"@min": 1,
/*ro, opt, int, the minimum value of weekly schedule No.*/
"@max": 16
/*ro, opt, int, the maximum value of weekly schedule No.*/
},
"holidayGroupNo": {
/*ro, opt, object, holiday group No.*/
Lt om
"@min": 1,
/*ro, opt, int, the minimum value of holiday group No.*/
"@max": 16
t .c
/*ro, opt, int, the maximum value of holiday group No.*/
}
d
Pv l
}
}
ai
gy gm
10.2.2.15 Set parameters of door control weekly schedule
lo n@
Request URL
no je
PUT /ISAPI/AccessControl/DoorStatusWeekPlanCfg/<weekPlanID>?format=json
Query Parameter
ch ja
weekPlanID string --
i su
or ka
Request Message
{
"DoorStatusWeekPlanCfg": {
/*opt, object, weekly schedule of door control*/
"enable": true,
/*req, bool, whether to enable, desc:"true"-enable, "false"-disable*/
"WeekPlanCfg": [
So
Response Message
{
"statusCode": 1,
/*ro, opt, int, status code, desc:1 (succeeded); it is required when an error occurred*/
"statusString": "ok",
/*ro, opt, string, status description, range:[1,64], desc:"ok" (succeeded); it is required when an error occurred*/
"subStatusCode": "ok",
/*ro, opt, string, sub status code, range:[1,64], desc:"ok" (succeeded); it is required when an error occurred*/
"errorCode": 1,
/*ro, opt, int, error code, desc:when the value of statusCode is not 1, it corresponds to subStatusCode*/
"errorMsg": "ok"
/*ro, opt, string, error information, desc:this node must be returned when the value of statusCode is not 1*/
}
10.2.2.16 Get the configuration parameters of the door control week schedule
Request URL
GET /ISAPI/AccessControl/DoorStatusWeekPlanCfg/<weekPlanID>?format=json
Query Parameter
Parameter Name Parameter Type Description
weekPlanID string --
Lt om
Request Message
t .c
None
d
Pv l
Response Message ai
gy gm
{
"DoorStatusWeekPlanCfg": {
lo n@
"WeekPlanCfg": [
/*ro, req, array, week schedule parameters, subType:object*/
{
ch ja
"week": "Monday",
/*ro, req, enum, days of the week, subType:string, desc:"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday”*/
Te la
"id": 1,
/*ro, req, int, time period No., range:[1,8]*/
"enable": true,
i su
]
}
}
10.2.2.17 Get the configuration capability of the door control week schedule
Request URL
GET /ISAPI/AccessControl/DoorStatusWeekPlanCfg/capabilities?format=json
Query Parameter
None
Request Message
None
Response Message
{
"DoorStatusWeekPlanCfg": {
/*ro, opt, object*/
"planNo": {
/*ro, opt, object, week schedule No.*/
"@min": 1,
/*ro, opt, int*/
"@max": 16
/*ro, opt, int*/
},
"enable": "true,false",
/*ro, opt, string, whether to enable: "true"-enable,"false"-disable, desc:"true" (enable), "false" (disable)*/
"WeekPlanCfg": {
/*ro, opt, object, week schedule parameters*/
"maxSize": 56,
/*ro, opt, int*/
"week": {
/*ro, opt, object*/
"@opt": "Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday"
/*ro, opt, string, desc:"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"*/
},
"id": {
/*ro, opt, object, weekly schedule No.*/
"@min": 1,
/*ro, opt, int*/
"@max": 8
/*ro, opt, int*/
},
Lt om
"enable": "true,false",
/*ro, opt, string, whether to enable: "true"-enable,"false"-disable, desc:"true" (enable), "false" (disable)*/
"doorStatus": {
t .c
/*ro, opt, object, door status*/
"@opt": "remainOpen,remainClosed,normal,sleep,invalid,induction,barrierFree"
d
Pv l
/*ro, opt, string, desc:"remainOpen" (remain open (access without authentication)), "remainClosed" (remain closed (access is not allowed)),
"normal" (access by authentication), "sleep", "invalid"*/
},
"TimeSegment": {
ai
gy gm
/*ro, opt, object, time*/
"beginTime": "00:00:00",
/*ro, opt, time, start time of the time period (device local time), desc:device local time*/
lo n@
"endTime": "10:00:00",
/*ro, opt, time, end time of the time period (device local time), desc:device local time*/
"validUnit": "minute"
no je
/*ro, opt, enum, time accuracy, subType:string, desc:"hour", "minute", "second"; if this node is not returned, the default time accuracy is
"minute"*/
ch ja
}
}
}
Te la
}
i su
None
Request Message
None
Response Message
{
"AcsCfg": {
/*ro, req, object*/
"voicePrompt": "true,false",
/*ro, opt, string, whether to enable voice prompt, desc:"true” (yes), "false” (no)*/
"uploadCapPic": "true,false",
/*ro, opt, string, whether to upload the picture from linked capture, desc:"true” (yes), "false” (no)*/
"saveCapPic": "true,false",
/*ro, opt, string, whether to save the captured picture, desc:"true” (yes), "false” (no)*/
"protocol": {
/*ro, opt, object, communication protocol type of the card reader, desc:"Private” (private protocol), "OSDP” (OSDP protocol)*/
"@opt": "Private,OSDP"
/*ro, opt, string, optional item*/
},
"showPicture": "true,false",
/*ro, opt, string, whether to display the authenticated picture, desc:"true” (yes), "false” (no)*/
"showEmployeeNo": "true,false",
/*ro, opt, string, whether to display the authenticated employee ID, desc:"true” (yes), "false” (no)*/
"showName": "true,false",
"showName": "true,false",
/*ro, opt, string, whether to display the authenticated name, desc:"true” (yes), "false” (no)*/
"desensitiseEmployeeNo": {
/*ro, opt, object, whether to enable employee No. de-identification for local UI display*/
"@opt": [true, false]
/*ro, opt, array, subType:bool*/
},
"desensitiseName": {
/*ro, opt, object, whether to enable name de-identification for local UI display*/
"@opt": [true, false]
/*ro, opt, array, subType:bool*/
},
"thermalEnabled": {
/*ro, opt, object, whether to enable temperature measurement*/
"@opt": [true, false]
/*ro, opt, array, subType:bool*/
},
"thermalMode": {
/*ro, opt, object, whether to enable temperature measurement only mode: true-enable (only for temperature measurement),false-disable (default)*/
"@opt": [true, false]
/*ro, opt, array, subType:bool*/
},
"thermalPictureEnabled": {
/*ro, opt, object, whether to enable uploading visible light pictures in temperature measurement only mode: true-enable,false-disable (default).
This field is used to control uploading captured pictures and visible light pictures, desc:whether to enable uploading visible light pictures in temperature
measurement only mode: true-enable,false-disable (default). This field is used to control uploading captured pictures and visible light pictures*/
"@opt": [true, false]
/*ro, opt, array, whether to enable uploading visible light pictures in temperature measurement only mode, subType:bool*/
},
Lt om
"highestThermalThreshold": {
/*ro, opt, object, maximum value of the temperature threshold, desc:float,upper limit of the temperature threshold which is accurate to one decimal
place,unit: Celsius*/
t .c
"@min": 1.0,
/*ro, opt, float*/
"@max": 2.0
d
Pv l
/*ro, opt, float*/
},
"lowestThermalThreshold": {
ai
/*ro, opt, object, minimum value of the temperature threshold, desc:float,lower limit of the temperature threshold which is accurate to one decimal
gy gm
place,unit: Celsius*/
"@min": 1.0,
/*ro, opt, float*/
lo n@
"@max": 2.0
/*ro, opt, float*/
no je
},
"thermalDoorEnabled": {
/*ro, opt, object, whether to open the door according to the temperature threshold, desc:whether to open the door when the temperature is above the
ch ja
upper limit (highestThermalThreshold) or below the lower limit (lowestThermalThreshold) of the threshold: true (open the door), false (not open the door
(default))*/
"@opt": [true, false]
Te la
"QRCodeEnabled": {
/*ro, opt, object, whether to enable QR code function, desc:whether to enable QR code function: true-enable,false-disable (default)*/
"@opt": [true, false]
or ka
Lt om
/*ro, req, array, subType:bool*/
},
"saveVPAudioFile": {
t .c
/*ro, opt, object*/
"@opt": [true, false]
d
Pv l
/*ro, req, array, subType:bool*/
},
"saveVPAudioFileByAuth": {
/*ro, opt, object*/
ai
gy gm
"@opt": [true, false]
/*ro, req, array, subType:bool*/
},
lo n@
}
}
no je
ch ja
PUT /ISAPI/AccessControl/AcsCfg?format=json
i su
Query Parameter
or ka
None
Request Message
So
{
"AcsCfg": {
/*req, object, parameters of the access controller*/
"voicePrompt": true,
/*opt, bool, whether to enable voice prompt*/
"uploadCapPic": true,
/*opt, bool, whether to upload the picture from linked capture, desc:whether to upload the picture from linked capture*/
"saveCapPic": true,
/*opt, bool, whether to save the captured picture, desc:whether to save the captured picture*/
"showPicture": true,
/*opt, bool, whether to display the authenticated picture, desc:whether to display the authenticated picture*/
"showEmployeeNo": true,
/*opt, bool, whether to display the authenticated employee ID*/
"showName": true,
/*opt, bool, whether to display the authenticated name*/
"thermalEnabled": true,
/*opt, bool, whether to enable temperature measurement*/
"thermalMode": true,
/*opt, bool, whether to enable temperature measurement only mode*/
"thermalPictureEnabled": true,
/*opt, bool, whether to enable uploading visible light pictures in temperature measurement only mode*/
"highestThermalThreshold": 37.3,
/*opt, float, maximum value of the temperature threshold*/
"lowestThermalThreshold": 38.5,
/*opt, float, minimum value of the temperature threshold*/
"thermalDoorEnabled": false,
/*opt, bool, whether to open the door when the temperature is above the upper limit (highestThermalThreshold) or below the lower limit
(lowestThermalThreshold) of the threshold: true-open the door,false-not open the door (default), desc:whether to open the door when the temperature is above
Lt om
the upper limit (highestThermalThreshold) or below the lower limit (lowestThermalThreshold) of the threshold: true (open the door), false (not open the door
(default))*/
"QRCodeEnabled": false,
t .c
/*opt, bool, whether to enable QR code function*/
"remoteCheckDoorEnabled": false,
d
Pv l
/*opt, bool, whether to enable controlling the door by remote verification, desc:whether to enable controlling the door by remote verification*/
"checkChannelType": "Ezviz",
ai
/*opt, enum, verification channel type, subType:string, dep:or,{$.AcsCfg.remoteCheckDoorEnabled,eq,true}, desc:verification channel type: "Ezviz"-
EZVIZ channel,"ISUP"-ISUP channel,"ISAPI"-ISAPI channel,"PrivateSDK"-private SDK channel,"ISAPIListen"-ISAPI listening channel. This field is valid when
gy gm
remoteCheckDoorEnabled is true*/
"channelIp": "test",
/*opt, string, IP address of the verification channel, dep:and,{$.AcsCfg.checkChannelType,eq,PrivateSDK}, desc:this field is valid when
lo n@
checkChannelType is "PrivateSDK"*/
"uploadVerificationPic": true,
/*opt, bool, whether to upload the authenticated picture, desc:whether to upload the authenticated picture*/
no je
"saveVerificationPic": true,
/*opt, bool, whether to save the authenticated picture, desc:whether to save the authenticated picture*/
ch ja
"saveFacePic": true,
/*opt, bool, whether to save the registered face picture, desc:whether to save the registered face picture*/
"thermalUnit": "celsius",
Te la
is used to check whether to open the door when the temperature is higher than the threshold*/
"lowestThermalThresholdF": 1.0,
or ka
/*opt, float, the minimum value of the temperature threshold, desc:the value is accurate to one decimal place, and the unit is Fahrenheit this node
is used to check whether to open the door when the temperature is higher than the threshold*/
"thermalCompensation": 1.0,
/*opt, float, temperature compensation, desc:float,temperature compensation,the value is accurate to one decimal place. The unit depends on the node
thermalUnit. If the node thermalUnit does not exist,the default unit is Celsius*/
"externalCardReaderEnabled": true,
/*opt, bool*/
"combinationAuthenticationTimeout": 1,
/*opt, int, range:[1,20], step:1, unit:s*/
"combinationAuthenticationLimitOrder": true,
So
/*opt, bool*/
"saveVPAudioFile": false,
/*opt, bool*/
"saveVPAudioFileByAuth": false,
/*opt, bool*/
}
}
Response Message
{
"statusCode": 1,
/*ro, opt, int, status code, desc:status code*/
"statusString": "ok",
/*ro, opt, string, status description, range:[1,64], desc:status description*/
"subStatusCode": "ok",
/*ro, opt, string, sub status code, range:[1,64], desc:sub status code*/
"errorCode": 1,
/*ro, opt, int, error code, desc:error code*/
"errorMsg": "ok"
/*ro, opt, string, error description, desc:error description*/
}
10.2.3.3 Get the configuration parameters of the access controller
Request URL
GET /ISAPI/AccessControl/AcsCfg?format=json
Query Parameter
None
Request Message
None
Response Message
{
"AcsCfg": {
/*ro, req, object*/
"voicePrompt": true,
/*ro, opt, bool, whether to enable voice prompt*/
"uploadCapPic": true,
/*ro, opt, bool, whether to upload the picture from linked capture, desc:whether to upload the picture from linked capture*/
"saveCapPic": true,
/*ro, opt, bool, whether to save the captured picture, desc:whether to save the captured picture*/
"protocol": "Private",
/*ro, opt, enum, communication protocol type of the card reader, subType:string, desc:"Private” (private protocol), "OSDP” (OSDP protocol)*/
Lt om
"showPicture": true,
/*ro, opt, bool, whether to display the authenticated picture, desc:whether to display the authenticated picture*/
t .c
"showEmployeeNo": true,
/*ro, opt, bool, whether to display the authenticated employee ID*/
"showName": true,
d
Pv l
/*ro, opt, bool, whether to display the authenticated name*/
"desensitiseEmployeeNo": true, ai
/*ro, opt, bool, whether to enable employee No. de-identification for local UI display, dep:or,{$.AcsCfg.showEmployeeNo,eq,true}*/
"desensitiseName": true,
gy gm
/*ro, opt, bool, whether to enable name de-identification for local UI display, dep:or,{$.AcsCfg.showName,eq,true}*/
"thermalEnabled": true,
/*ro, opt, bool, whether to enable temperature measurement*/
lo n@
"thermalMode": true,
/*ro, opt, bool, whether to enable temperature measurement only mode*/
no je
"thermalPictureEnabled": true,
/*ro, opt, bool, whether to enable uploading visible light pictures in temperature measurement only mode: true-enable,false-disable (default). This
field is used to control uploading captured pictures and visible light pictures*/
ch ja
"highestThermalThreshold": 37.3,
/*ro, opt, float, upper limit of the temperature threshold*/
"lowestThermalThreshold": 38.5,
Te la
/*ro, opt, bool, whether to open the door according to the temperature threshold, desc:whether to open the door when the temperature is above the
upper limit (highestThermalThreshold) or below the lower limit (lowestThermalThreshold) of the threshold: true (open the door), false (not open the door
(default))*/
or ka
"QRCodeEnabled": false,
/*ro, opt, bool, whether to enable QR code function*/
"remoteCheckDoorEnabled": false,
/*ro, opt, bool, whether to enable controlling the door by remote verification, desc:whether to enable controlling the door by remote verification*/
"checkChannelType": "Ezviz",
/*ro, opt, enum, verification channel type, subType:string, dep:or,{$.AcsCfg.remoteCheckDoorEnabled,eq,true}, desc:verification channel type*/
"uploadVerificationPic": true,
/*ro, opt, bool, whether to upload the authenticated picture, desc:whether to upload the authenticated picture*/
"saveVerificationPic": true,
So
/*ro, opt, bool, whether to save the authenticated picture, desc:whether to save the authenticated picture*/
"saveFacePic": true,
/*ro, opt, bool, whether to save the registered face picture, desc:whether to save the registered face picture*/
"thermalUnit": "celsius",
/*ro, opt, enum, temperature unit, subType:string, desc:"celsius", "fahrenheit"*/
"highestThermalThresholdF": 1.0,
/*ro, opt, float, the maximum value of the temperature threshold, desc:the value is accurate to one decimal place, and the unit is Fahrenheit this
node is used to check whether to open the door when the temperature is higher than the threshold*/
"lowestThermalThresholdF": 1.0,
/*ro, opt, float, the minimum value of the temperature threshold, desc:the value is accurate to one decimal place, and the unit is Fahrenheit this
node is used to check whether to open the door when the temperature is higher than the threshold*/
"thermalCompensation": 1.0,
/*ro, opt, float, temperature compensation, desc:float,temperature compensation,the value is accurate to one decimal place. The unit depends on the
node thermalUnit. If the node thermalUnit does not exist,the default unit is Celsius*/
"externalCardReaderEnabled": true,
/*ro, opt, bool*/
"combinationAuthenticationTimeout": 1,
/*ro, opt, int, range:[1,20], step:1, unit:s*/
"combinationAuthenticationLimitOrder": true,
/*ro, opt, bool*/
"buzzerEnabled": true,
/*ro, opt, bool*/
"saveVPAudioFile": false,
/*ro, opt, bool*/
"saveVPAudioFileByAuth": false,
/*ro, opt, bool*/
}
}
10.2.3.4 Get the capability of getting the working status of
the access controller Request URL
GET /ISAPI/AccessControl/AcsWorkStatus/capabilities?format=json
Query Parameter
None
Request Message
None
Response Message
{
"AcsWorkStatus": {
/*ro, req, object*/
"doorLockStatus": {
/*ro, opt, object, door lock status (relay status): 0-normally close, 1-normally open, 2-short-circuit alarm, 3-broken-circuit alarm, 4-exception
alarm*/
"@opt": "0,1,2,3,4"
/*ro, opt, string*/
},
"doorStatus": {
/*ro, opt, object, door (floor) status: 1-sleep, 2-remain unlocked (free), 3-remain locked (disabled), 4-normal status (controlled)*/
Lt om
"@opt": "1,2,3,4"
/*ro, opt, string*/
t .c
},
"magneticStatus": {
/*ro, opt, object, magnetic contact status: 0-normally close,1-normally open, 2-short-circuit alarm, 3-broken-circuit alarm, 4-exception alarm*/
d
Pv l
"@opt": "0,1,2,3,4"
},
"caseStatus": {
ai
/*ro, opt, string, magnetic contact status*/
gy gm
/*ro, opt, object, event trigger status*/
"@min": 1,
/*ro, opt, int, event trigger status*/
lo n@
"@max": 1
/*ro, opt, int, event trigger status*/
no je
},
"antiSneakStatus": {
/*ro, opt, object, anti-passback status: "close"-disabled,"open"-enabled*/
ch ja
"@opt": "close,open"
/*ro, opt, string*/
},
Te la
"hostAntiDismantleStatus": {
/*ro, opt, object, tampering status of the access control device: "close"-disabled, "open"-enabled*/
i su
"@opt": "close,open"
/*ro, opt, string*/
},
or ka
"cardReaderOnlineStatus": {
/*ro, opt, object, online status of the authentication unit*/
"@min": 1,
/*ro, opt, int, the minimum value, range:[1,8]*/
"@max": 1
/*ro, opt, int, the maximum value, range:[1,8]*/
},
"cardReaderAntiDismantleStatus": {
/*ro, opt, object, tampering status of the authentication unit*/
So
"@min": 1,
/*ro, opt, int*/
"@max": 1
/*ro, opt, int*/
},
"cardReaderVerifyMode": {
/*ro, opt, object, current authentication mode of the authentication unit, desc:1-sleep,2-card+password,3-card,4-card or password,5-fingerprint,6-
fingerprint+password,7-fingerprint or card,8-fingerprint+card,9-fingerprint+card+password,10-face or fingerprint or card or password,11-face+fingerprint,12-
face+password,13-face+card,14-face,15-employee No.+password,16-fingerprint or password,17-employee No.+fingerprint,18-employee No.+fingerprint+password,19-
face+fingerprint+card,20-face+password+fingerprint,21-employee No.+face,22-face or face+card,23-fingerprint or face,24-card or face or password,25-card or
face,26-card or face or fingerprint,27-card or fingerprint or password*/
"@opt": "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34"
/*ro, opt, string*/
},
"alarmOutStatus": {
/*ro, opt, object, No. of output port with alarms*/
"@min": 1,
/*ro, opt, int*/
"@max": 1
/*ro, opt, int*/
},
"cardNum": {
/*ro, opt, object, number of added cards*/
"@min": 1,
/*ro, opt, int*/
"@max": 1
/*ro, opt, int*/
},
"netStatus": {
/*ro, opt, object, network connection status*/
/*ro, opt, object, network connection status*/
"@opt": ["connect", "disconnect", "ipConflict"]
/*ro, opt, array, subType:string*/
},
"InterfaceStatusList": {
/*ro, opt, object*/
"@size": 2,
/*ro, opt, int*/
"id": {
/*ro, opt, object*/
"@min": 1,
/*ro, opt, int*/
"@max": 2
/*ro, opt, int*/
},
"netStatus": {
/*ro, opt, object*/
"@opt": ["connect", "disconnect", "ipConflict"]
/*ro, opt, array, subType:string*/
}
},
"sipStatus": {
/*ro, opt, object*/
"@opt": ["connect", "disconnect", "unregistered"]
/*ro, opt, array, subType:string*/
},
"ezvizStatus": {
/*ro, opt, object*/
"@opt": ["unregistered", "notAdd", "connect"]
/*ro, opt, array, subType:string*/
Lt om
},
"voipStatus": {
/*ro, opt, object*/
t .c
"@opt": ["unregistered", "connect"]
/*ro, opt, array, subType:string*/
d
Pv l
},
"wifiStatus": {
/*ro, opt, object*/ ai
"@opt": ["connect", " disconnect", "connecting", "noModule"]
gy gm
/*ro, opt, array, subType:string*/
},
}
lo n@
}
no je
Request URL
Te la
GET /ISAPI/AccessControl/AcsWorkStatus?format=json
i su
Query Parameter
None
or ka
Request Message
None
Response Message
So
{
"AcsWorkStatus": {
/*ro, req, object*/
"doorLockStatus": [1, 2, 1, 2],
/*ro, opt, enumarray, door lock status (relay status), subType:int, desc:door lock status (relay status): 0 (normally close), 1 (normally open), 2
(short-circuit alarm), 3 (broken-circuit alarm), 4 (exception alarm). For example, [1,2,1,2] indicates that door lock 1 is normally open, door lock 2
triggers short-circuit alarm, door lock 3 is normally open, and door lock 4 triggers short-circuit alarm*/
"doorStatus": [1, 2, 1, 2],
/*ro, opt, enumarray, door (floor) status, subType:int, desc:door (floor) status: 1 (sleep), 2 (remain unlocked (free)), 3 (remain locked
(disabled)), 4 (normal status (controlled)). For example, [1,2,1,2] indicates that door 1 is sleeping, door 2 remains unlocked, door 3 is sleeping, and door
4 remains unlocked*/
"magneticStatus": [1, 2, 1, 2],
/*ro, opt, enumarray, magnetic contact status, subType:int, desc:magnetic contact status: 0 (normally close), 1 (normally open), 2 (short-circuit
alarm), 3 (broken-circuit alarm), 4 (exception alarm). For example, [1,2,1,2] indicates that magnetic contact No.1 is normally open, magnetic contact No.2
triggers short-circuit alarm, magnetic contact No.3 is normally open, and magnetic contact No.4 triggers short-circuit alarm*/
"antiSneakStatus": "open",
/*ro, opt, enum, anti-passback status, subType:string, desc:"close” (disabled), "open” (enabled)*/
"hostAntiDismantleStatus": "open",
/*ro, opt, enum, tampering status of the access control device, subType:string, desc:"close” (disabled), "open” (enabled)*/
"cardReaderOnlineStatus": [1, 3, 5],
/*ro, opt, array, online status of the authentication unit, subType:int, desc:online status of the authentication unit, e.g., [1,3,5] indicates that
authentication unit No.1, No.3, and No.5 are online*/
"cardReaderAntiDismantleStatus": [1, 3, 5],
/*ro, opt, array, tampering status of the authentication unit, subType:int, desc:tampering status of the authentication unit, e.g., [1,3,5]
indicates that the tampering function of authentication unit No.1, No.3, and No.5 is enabled*/
"cardReaderVerifyMode": [3, 5, 3, 5],
/*ro, opt, enumarray, current authentication mode of the authentication unit, subType:int, desc:1 (sleep), 2 (card + password), 3 (card), 4 (card or
password), 5 (fingerprint), 6 (fingerprint + password), 7 (fingerprint or card), 8 (fingerprint + card), 9 (fingerprint + card + password),10 (face or
Lt om
fingerprint or card or password), 11 (face + fingerprint), 12 (face + password), 13 (face + card), 14 (face), 15 (employee No. + password), 16 (fingerprint
or password), 17 (employee No. + fingerprint), 18 (employee No. + fingerprint + password), 19 (face + fingerprint + card), 20 (face + password +
fingerprint), 21 (employee No. + face), 22 (face or face + card), 23 (fingerprint or face), 24 (card or face or password), 25 (card or face), 26 (card or
t .c
face or fingerprint), 27 (card or fingerprint or password). For example, [3,5,3,5] indicates that the authentication mode of authentication unit 1 is
"card", the authentication mode of authentication unit 2 is "fingerprint", the authentication mode of authentication unit 3 is "card", and the
d
Pv l
authentication mode of authentication unit 4 is "fingerprint"*/
"cardNum": 3,
ai
/*ro, opt, int, number of added cards, desc:number of added cards*/
"netStatus": "connect",
gy gm
/*ro, opt, enum, subType:string*/
"InterfaceStatusList": [
/*ro, opt, array, subType:object*/
lo n@
{
"id": 1,
/*ro, opt, int*/
no je
"netStatus": "connect"
/*ro, opt, enum, subType:string*/
ch ja
}
],
"ezvizStatus": "unregistered",
Te la
}
}
or ka
Query Parameter
None
Request Message
None
Response Message
{
"ClearPictureCfgCap": {
/*ro, req, object, clear all pictures in the device*/
"ClearFlags": {
/*ro, opt, object, clear status*/
"facePicture": {
/*ro, opt, object, clear registered face pictures*/
"@opt": [true, false]
/*ro, req, array, options, subType:bool*/
},
"capOrVerifyPicture": {
/*ro, opt, object, clear authenticated or captured face pictures*/
"@opt": [true, false]
/*ro, req, array, options, subType:bool*/
},
}
}
}
Lt om
Query Parameter
None
t .c
Request Message
d
Pv l
{
ai
"ClearPictureCfg": {
gy gm
/*req, object, clear picture configuration*/
"ClearFlags": {
/*opt, object, clear status*/
lo n@
"facePicture": true,
/*opt, bool, whether it supports clearing registered face pictures in the device*/
no je
"capOrVerifyPicture": true,
/*opt, bool, whether it supports clearing authenticated or captured face pictures stored in the device*/
"irisPicture": true
ch ja
}
i su
Response Message
or ka
{
"statusCode": 1,
/*ro, opt, int, status code, desc:1 (succeeded); it is required when an error occurred*/
"statusString": "ok",
/*ro, opt, string, status description, range:[1,64], desc:"ok" (succeeded); it is required when an error occurred*/
"subStatusCode": "ok",
/*ro, opt, string, sub status code, range:[1,64], desc:"ok" (succeeded); it is required when an error occurred*/
So
"errorCode": 1,
/*ro, opt, int, error code, desc:when the value of statusCode is not 1, it corresponds to subStatusCode*/
"errorMsg": "ok"
/*ro, opt, string, error information, desc:this node must be returned when the value of statusCode is not 1*/
}
10.2.4.2 Set door lock status when the device is powered off
Request URL
PUT /ISAPI/AccessControl/Configuration/lockType?format=json&doorID=<doorID>
Query Parameter
Parameter Name Parameter Type Description
doorID string --
Lt om
Request Message
t .c
{
"LockType": {
d
Pv l
/*opt, object, status*/
}
"status": "alwaysOpen" ai
/*req, enum, door lock status when the device is powered off, subType:string, desc:"alwaysOpen"-remain open, "alwaysClose"-remain closed*/
gy gm
}
lo n@
Response Message
no je
{
ch ja
"requestURL": "test",
/*ro, opt, string, URI*/
"statusCode": "test",
Te la
"subStatusCode": "test",
/*ro, opt, string, sub status code*/
or ka
"errorCode": 1,
/*ro, req, int, error code*/
"errorMsg": "ok"
/*ro, req, string, error information*/
}
10.2.4.3 Get the configuration of the door lock status when the device is powered off
So
Request URL
GET /ISAPI/AccessControl/Configuration/lockType?format=json&doorID=<doorID>
Query Parameter
Parameter Name Parameter Type Description
doorID string --
Request Message
None
Response Message
{
"LockType": {
/*ro, opt, object, status*/
"status": "alwaysOpen"
/*ro, opt, enum, door lock status when the device is powered off, subType:string, desc:door lock status when the device is powered off:
"alwaysOpen"-remain open,"alwaysClose"-remain closed*/
}
}
Lt om
None
t .c
Response Message
d
Pv l
<?xml version="1.0" encoding="UTF-8"?>
ai
<DoorParam xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
<!--ro, req, object, attr:version{req, string, protocolVersion}-->
<doorNo min="1" max="10">
gy gm
<!--ro, opt, int, door No., attr:min{req, int},max{req, int}-->1
</doorNo>
lo n@
<magneticType opt="alwaysClose,alwaysOpen">
<!--ro, opt, enum, magnetic contact type, subType:string, attr:opt{req, string}, desc:"alwaysClose” (remain locked), "alwaysOpen” (remain unlocked)--
>alwaysClose
ch ja
</magneticType>
<openButtonType opt="alwaysClose,alwaysOpen">
Te la
<!--ro, opt, enum, door button type, subType:string, attr:opt{req, string}, desc:"alwaysClose” (remain locked), "alwaysOpen” (remain unlocked)--
>alwaysClose
</openButtonType>
i su
</enableLeaderCard>
<leaderCardOpenDuration min="1" max="1440">
<!--ro, opt, int, duration of remaining open with first card, attr:min{req, int},max{req, int}-->1
</leaderCardOpenDuration>
<stressPassword min="1" max="8">
<!--ro, opt, string, duress password, attr:min{req, int},max{req, int}, desc:the maximum length is 8 bytes, and the duress password should be encoded by
Base64 for transmission-->test
</stressPassword>
<superPassword min="1" max="8">
<!--ro, opt, string, super password, attr:min{req, int},max{req, int}, desc:the maximum length is 8 bytes, and the duress password should be encoded by
Base64 for transmission-->test
</superPassword>
</DoorParam>
Lt om
<!--opt, int, door open duration, range:[1,255], unit:s-->1
</openDuration>
<disabledOpenDuration>
t .c
<!--opt, int, door open duration by disability card (delay duration of closing the door), range:[1,255], unit:s-->1
</disabledOpenDuration>
d
<magneticAlarmTimeout>
Pv l
<!--opt, int, alarm time of magnetic contact detection timeout, range:[0,255], unit:s, desc:0 refers to not triggering alarm-->1
</magneticAlarmTimeout>
<enableDoorLock>
ai
<!--opt, bool, lock door when door closed-->true
gy gm
</enableDoorLock>
<enableLeaderCard>
lo n@
<!--opt, enum, first card mode, subType:string, desc:first card mode: "disable","alwaysOpen"-remain open with first card,"authorize"-first card
authentication. If this node is configured,the node <enableLeaderCard> is invalid-->disable
</leaderCardMode>
ch ja
<leaderCardOpenDuration>
<!--opt, int, duration of remaining open with first card, range:[0,1440], unit:min, dep:and,{$.DoorParam.leaderCardMode,eq,alwaysOpen}-->1
</leaderCardOpenDuration>
Te la
<stressPassword>
<!--opt, string, duress password, desc:the maximum length is 8 bytes, and the duress password should be encoded by Base64 for transmission-->test
i su
</stressPassword>
<superPassword>
<!--opt, string, super password, desc:the maximum length is 8 bytes, and the duress password should be encoded by Base64 for transmission-->test
or ka
</superPassword>
<unlockPassword>
<!--opt, string, unlock password, desc:the maximum length is 8 bytes, and the duress password should be encoded by Base64 for transmission-->test
</unlockPassword>
<useLocalController>
<!--opt, bool, whether it is connected to the distributed controller-->true
</useLocalController>
<localControllerID>
<!--opt, int, distributed controller No., range:[0,64], desc:ro,distributed controller No.,which is between 1 and 64,0-unregistered-->1
So
</localControllerID>
<localControllerDoorNumber>
<!--opt, int, distributed controller door No., range:[0,4], desc:ro,distributed controller door No.,which is between 1 and 4,0-unregistered-->1
</localControllerDoorNumber>
<localControllerStatus>
<!--opt, enum, online status of the distributed controller, subType:int, desc:ro,online status of the distributed controller: 0-offline,1-network
online,2-RS-485 serial port 1 on loop circuit 1,3-RS-485 serial port 2 on loop circuit 1,4-RS-485 serial port 1 on loop circuit 2,5-RS-485 serial port 2 on
loop circuit 2,6-RS-485 serial port 1 on loop circuit 3,7-RS-485 serial port 2 on loop circuit 3,8-RS-485 serial port 1 on loop circuit 4,9-RS-485 serial
port 2 on loop circuit 4-->1
</localControllerStatus>
<lockInputCheck>
<!--opt, bool, whether to enable door lock input detection-->true
</lockInputCheck>
<lockInputType>
<!--opt, enum, door lock input type, subType:string, desc:"alwaysClose” (remain locked), "alwaysOpen” (remain unlocked), lt remains locked by default--
>alwaysClose
</lockInputType>
<doorTerminalMode>
<!--opt, enum, working mode of door terminal, subType:string, desc:"preventCutAndShort” (prevent from broken-circuit and short-circuit
(default)),"common"-->preventCutAndShort
</doorTerminalMode>
<openButton>
<!--opt, bool, whether to enable door button-->true
</openButton>
<ladderControlDelayTime>
<!--opt, int, elevator control delay time (for visitor), range:[1,255], unit:min-->1
</ladderControlDelayTime>
<Leader>
<!--opt, object-->
<continuousVerificationTimes>
<continuousVerificationTimes>
<!--opt, int, range:[1,10]-->1
</continuousVerificationTimes>
<continuousVerificationDuration>
<!--opt, int, range:[5,60], unit:s-->20
</continuousVerificationDuration>
<effectiveTimeEnabled>
<!--req, bool-->true
</effectiveTimeEnabled>
<dayBeginTime>
<!--opt, time, dep:and,{$.DoorParam.Leader.effectiveTimeEnabled,eq,true}-->00:00:00
</dayBeginTime>
<beginEffectiveTime>
<!--opt, time, dep:and,{$.DoorParam.Leader.effectiveTimeEnabled,eq,true}-->00:00:00
</beginEffectiveTime>
<endEffectiveTime>
<!--opt, time, dep:and,{$.DoorParam.Leader.effectiveTimeEnabled,eq,true}-->00:00:00
</endEffectiveTime>
</Leader>
<verificationPassOpenDoor>
<!--opt, bool-->true
</verificationPassOpenDoor>
<relayReverseEnabled>
<!--opt, bool-->true
</relayReverseEnabled>
</DoorParam>
Response Message
Lt om
<?xml version="1.0" encoding="UTF-8"?>
t .c
<ResponseStatus xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
d
Pv l
<!--ro, req, object, response message, attr:version{ro, req, string, protocolVersion}-->
<requestURL>
<!--ro, req, string, request URL-->null
</requestURL>
ai
gy gm
<statusCode>
<!--ro, req, enum, status code, subType:int, desc:0 (OK), 1 (OK), 2 (Device Busy), 3 (Device Error), 4 (Invalid Operation), 5 (Invalid XML Format), 6
(Invalid XML Content), 7 (Reboot Required)-->0
lo n@
</statusCode>
<statusString>
<!--ro, req, enum, status description, subType:string, desc:“OK” (succeeded), “Device Busy”, “Device Error”, “Invalid Operation”, “Invalid XML Format”,
no je
<subStatusCode>
<!--ro, req, string, error code description, desc:error code description-->OK
</subStatusCode>
Te la
</ResponseStatus>
i su
Request URL
GET /ISAPI/AccessControl/Door/param/<doorID>
Query Parameter
Parameter Name Parameter Type Description
So
doorID string --
security string --
iv string --
Request Message
None
Response Message
<?xml version="1.0" encoding="UTF-8"?>
<DoorParam xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
<!--ro, req, object, attr:version{req, string, protocolVersion}-->
<doorName>
<!--ro, opt, string, door name-->test
</doorName>
<magneticType>
<!--ro, opt, enum, magnetic contact type, subType:string, desc:"alwaysClose"-remain locked, "alwaysOpen"-remain unlocked-->alwaysClose
</magneticType>
<openButtonType>
<!--ro, opt, enum, door button type, subType:string, desc:"alwaysClose"-remain locked, "alwaysOpen"-remain unlocked-->alwaysClose
</openButtonType>
<openDuration>
<!--ro, opt, int, door open duration, range:[1,255], unit:s-->1
</openDuration>
<disabledOpenDuration>
<!--ro, opt, int, door open duration by disability card (delay duration of closing the door), range:[1,255], unit:s-->1
</disabledOpenDuration>
<magneticAlarmTimeout>
<!--ro, opt, int, alarm time of magnetic contact detection timeout, range:[0,255], unit:s, desc:0 refers to not triggering alarm-->1
</magneticAlarmTimeout>
<enableLeaderCard>
<!--ro, opt, bool, whether to enable remaining open with first card. This node is invalid when leaderCardMode is configured-->true
</enableLeaderCard>
<leaderCardOpenDuration>
<!--ro, opt, int, duration of remaining open with first card, range:[0,1440], unit:min, dep:and,{$.DoorParam.leaderCardMode,eq,alwaysOpen}-->1
</leaderCardOpenDuration>
</DoorParam>
Lt om
t .c
10.2.4.7 Get the status of the secure door control unit
d
Pv l
Request URL ai
GET /ISAPI/AccessControl/DoorSecurityModule/moduleStatus
gy gm
Query Parameter
lo n@
None
Request Message
no je
None
ch ja
Response Message
Te la
<!--ro, req, string, secure door control unit No., attr:min{req, int},max{req, int}-->test
</securityModuleNo>
<onlineStatus opt="0,1">
<!--ro, req, enum, online status, subType:int, attr:opt{req, string}, desc:0 (offline), 1(online)-->1
</onlineStatus>
<desmantelStatus opt="0,1">
<!--ro, req, enum, tamper-proof status, subType:int, attr:opt{req, string}, desc:0 (the unit is not tampered), 1(the unit is tampered)-->1
</desmantelStatus>
</ModuleStatus>
So
10.2.4.8 Get the capability of getting the status of the secure door control unit
Request URL
GET /ISAPI/AccessControl/DoorSecurityModule/moduleStatus/capabilities
Query Parameter
None
Request Message
None
Response Message
<?xml version="1.0" encoding="UTF-8"?>
<ModuleStatus xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
<!--ro, opt, object, module status, attr:version{req, string, protocolVersion}-->
<securityModuleNo min="1" max="256">
<!--ro, req, string, secure door control unit No., attr:min{req, int},max{req, int}-->test
</securityModuleNo>
<onlineStatus opt="0,1">
<!--ro, req, enum, online status, subType:int, attr:opt{req, string}, desc:0 (offline), 1 (online)-->1
</onlineStatus>
<desmantelStatus opt="0,1">
<!--ro, req, enum, tampering status, subType:int, attr:opt{req, string}, desc:0 (the unit is not tampered), 1 (the unit is tampered)-->1
</desmantelStatus>
</ModuleStatus>
10.2.5 Anti-Passback
10.2.5.1 Get the anti-passing back configuration capability
Request URL
GET /ISAPI/AccessControl/AntiSneakCfg/capabilities?format=json
Query Parameter
Lt om
None
t .c
Request Message
None
d
Pv l
Response Message ai
gy gm
{
"AntiSneakCfg": {
lo n@
"startCardReaderNo": {
/*ro, opt, object, first card reader No., desc:first card reader No.*/
"@min": 1,
ch ja
}
or ka
None
Request Message
None
Response Message
{
"AntiSneakCfg": {
/*ro, req, object*/
"enable": true,
/*ro, req, bool, whether to enable anti-passback*/
"startCardReaderNo": 1
/*ro, opt, int, first card reader No., desc:first card reader No.,0-no first card reader*/
}
}
{
"AntiSneakCfg": {
/*req, object*/
"enable": true,
/*req, bool, whether to enable anti-passing back*/
"startCardReaderNo": 1
/*opt, int, first card reader No., desc:0-no first card reader*/
}
}
Response Message
{
"requestURL": "test",
/*ro, opt, string, URI*/
"statusCode": 1,
/*ro, opt, int, status code, desc:1 (succeeded). It is required when an error occurred*/
"statusString": "ok",
/*ro, opt, string, status description, range:[1,64], desc:"ok" (succeeded). It is required when an error occurred*/
Lt om
"subStatusCode": "ok",
/*ro, opt, string, sub status code, range:[1,64], desc:"ok" (succeeded). It is required when an error occurred*/
t .c
"errorCode": 1,
/*ro, opt, int, error code, desc:when the value of statusCode is not 1, it corresponds to subStatusCode*/
"errorMsg": "ok"
d
Pv l
/*ro, opt, string, error information, desc:this node is required when the value of statusCode is not 1*/
} ai
gy gm
10.2.5.4 Get the anti-passing back configuration parameters of a specified card reader
lo n@
Request URL
no je
GET /ISAPI/AccessControl/CardReaderAntiSneakCfg/<cardReaderID>?format=json
ch ja
Query Parameter
Te la
cardReaderID string --
or ka
Request Message
None
Response Message
{
"CardReaderAntiSneakCfg": {
So
Response Message
{
"requestURL": "test",
/*ro, opt, string, URI*/
"statusCode": 1,
/*ro, opt, int, status code, desc:1 (succeeded); it is required when an error occurred*/
"statusString": "ok",
/*ro, opt, string, status description, range:[1,64], desc:"ok" (succeeded); it is required when an error occurred*/
"subStatusCode": "ok",
/*ro, opt, string, sub status code, range:[1,64], desc:"ok" (succeeded); it is required when an error occurred*/
"errorCode": 1,
/*ro, opt, int, error code, desc:when the value of statusCode is not 1, it corresponds to subStatusCode*/
"errorMsg": "ok"
Lt om
/*ro, opt, string, error information, desc:this node is required when the value of statusCode is not 1*/
}
t .c
d
Pv l
10.2.5.6 Get the configuration capability of anti-passing back parameters of card readers
Request URL
ai
gy gm
GET /ISAPI/AccessControl/CardReaderAntiSneakCfg/capabilities?format=json
lo n@
Query Parameter
None
no je
Request Message
ch ja
None
Te la
Response Message
i su
{
"CardReaderAntiSneakCfg": {
or ka
/*ro, req, string, whether to enable the anti-passing back function of the card reader*/
"followUpCardReader": {
/*ro, opt, object, array,following card reader No. after the first card reader*/
"@min": 1,
/*ro, opt, int*/
"@max": 512,
/*ro, opt, int*/
}
}
}
{
"ClearAntiSneak": {
/*ro, req, object*/
"EmployeeNoList": {
/*ro, opt, object*/
"maxSize": 32,
/*ro, opt, int*/
"employeeNo": {
/*ro, opt, object, employee No. (person ID)*/
"@min": 1,
/*ro, opt, int*/
"@max": 32
/*ro, opt, int*/
}
},
"clearMode": {
/*ro, opt, object*/
"@opt": ["employeeNo", "all"]
/*ro, opt, array, subType:string*/
}
}
}
Lt om
Request URL
t .c
PUT /ISAPI/AccessControl/ClearAntiSneak?format=json
d
Pv l
Query Parameter ai
Parameter Name Parameter Type Description
gy gm
security string --
lo n@
iv string --
no je
Request Message
ch ja
Te la
{
"ClearAntiSneak": {
/*req, object, clear anti-passback records*/
i su
"EmployeeNoList": [
/*opt, array, person ID list, subType:object, dep:and,{$.ClearAntiSneak.clearMode,eq,employeeNo}*/
or ka
{
"employeeNo": "test"
/*opt, string, employee No. (person ID)*/
}
],
"clearMode": "employeeNo"
/*opt, enum, clearing mode, subType:string*/
}
}
So
Response Message
{
"requestURL": "test",
/*ro, opt, string, URI*/
"statusCode": 1,
/*ro, opt, int, status code, desc:1 (succeeded). It is required when an error occurred*/
"statusString": "ok",
/*ro, opt, string, status description, range:[1,64], desc:"ok" (succeeded). It is required when an error occurred*/
"subStatusCode": "ok",
/*ro, opt, string, sub status code, range:[1,64], desc:"ok" (succeeded). It is required when an error occurred*/
"errorCode": 1,
/*ro, opt, int, error code, desc:it is required when the value of statusCode is not 1, and it corresponds to subStatusCode*/
"errorMsg": "ok"
/*ro, opt, string, error information, desc:this node is required when the value of statusCode is not 1*/
}
{
"ClearAntiSneakCfg": {
/*ro, req, object, the capability of clearing anti-passback*/
"ClearFlags": {
/*ro, req, object*/
"antiSneak": "true,false"
/*ro, req, string, whether to clear the anti-passback parameter*/
}
}
}
Lt om
PUT /ISAPI/AccessControl/ClearAntiSneakCfg?format=json
t .c
Query Parameter
d
None
Pv l
Request Message ai
gy gm
{
"ClearAntiSneakCfg": {
lo n@
/*req, object*/
"ClearFlags": {
/*req, object*/
no je
"antiSneak": true
/*req, bool, whether to clear the anti-passing back parameters*/
ch ja
}
}
}
Te la
i su
Response Message
or ka
{
"requestURL": "test",
/*ro, opt, string, URI*/
"statusCode": 1,
/*ro, opt, int, status code, desc:1 (succeeded); it is required when an error occurred*/
"statusString": "ok",
/*ro, opt, string, status description, range:[1,64], desc:"ok" (succeeded); it is required when an error occurred*/
"subStatusCode": "ok",
/*ro, opt, string, sub status code, range:[1,64], desc:"ok" (succeeded); it is required when an error occurred*/
So
"errorCode": 1,
/*ro, opt, int, error code, desc:when the value of statusCode is not 1, it corresponds to subStatusCode*/
"errorMsg": "ok"
/*ro, opt, string, error information, desc:this node is required when the value of statusCode is not 1*/
}
Response Message
{
"statusCode": 1,
/*ro, opt, int, status code, desc:1 (succeeded); it is required when an error occurred*/
"statusString": "ok",
/*ro, opt, string, status description, range:[1,64], desc:"ok" (succeeded); it is required when an error occurred*/
"subStatusCode": "ok",
/*ro, opt, string, sub status code, range:[1,64], desc:"ok" (succeeded); it is required when an error occurred*/
"errorCode": 1,
/*ro, opt, int, error code, desc:when the value of statusCode is not 1, it corresponds to subStatusCode*/
"errorMsg": "ok"
/*ro, opt, string, error information, desc:this node must be returned when the value of statusCode is not 1*/
}
Lt om
10.2.6.2 Get the control schedule configuration parameters of the card reader authentication mode
t .c
Request URL
d
GET /ISAPI/AccessControl/CardReaderPlan/<cardReaderID>?format=json
Pv l
Query Parameter ai
gy gm
Parameter Name Parameter Type Description
lo n@
cardReaderID string --
no je
Request Message
ch ja
None
Response Message
Te la
i su
{
"CardReaderPlan": {
/*ro, req, object, schedule template structure*/
or ka
"templateNo": 1
/*ro, req, int, schedule template number, desc:0-cancel linking the template to the schedule and restore to the default status (normal status)*/
}
}
10.2.6.3 Get the control schedule configuration capability of the card reader authentication mode
So
Request URL
GET /ISAPI/AccessControl/CardReaderPlan/capabilities?format=json
Query Parameter
None
Request Message
None
Response Message
{
"CardReaderPlan": {
/*ro, opt, object, card reader No. node*/
"cardReaderNo": {
/*ro, opt, object, card reader No.*/
"@min": 1,
/*ro, opt, int*/
"@max": 4
/*ro, opt, int*/
},
"templateNo": {
/*ro, opt, object, schedule template No. node*/
"@min": 1,
/*ro, opt, int*/
"@max": 16,
/*ro, opt, int*/
},
}
}
10.2.6.4 Get the holiday group configuration parameters of the control schedule of the card reader
authentication mode
Request URL
Lt om
GET /ISAPI/AccessControl/VerifyHolidayGroupCfg/<holidayGroupID>?format=json
t .c
Query Parameter
d
Pv l
Parameter Name Parameter Type Description
holidayGroupID string
ai --
gy gm
Request Message
lo n@
None
no je
Response Message
ch ja
{
"VerifyHolidayGroupCfg": {
Te la
"groupName": "test",
/*ro, req, string, holiday group name*/
or ka
"holidayPlanNo": "1,3,5"
/*ro, opt, string, holiday group schedule No., desc:holiday group schedule No.*/
}
}
10.2.6.5 Set holiday group parameters of control schedule of card reader authentication mode
So
Request URL
PUT /ISAPI/AccessControl/VerifyHolidayGroupCfg/<holidayGroupID>?format=json
Query Parameter
Parameter Name Parameter Type Description
holidayGroupID string --
Request Message
{
"VerifyHolidayGroupCfg": {
/*opt, object, holiday group parameters of control schedule of card reader authentication mode*/
"enable": true,
/*req, bool, whether to enable, desc:"true"-enable, "false"-disable*/
"groupName": "test",
/*req, string, holiday group name*/
"holidayPlanNo": "1,3,5"
/*opt, string, holiday group schedule No., desc:holiday group schedule No.*/
}
}
Response Message
{
"statusCode": 1,
/*ro, opt, int, status code, desc:1 (succeeded); it is required when an error occurred*/
"statusString": "ok",
/*ro, opt, string, status description, range:[1,64], desc:"ok" (succeeded); it is required when an error occurred*/
"subStatusCode": "ok",
/*ro, opt, string, sub status code, range:[1,64], desc:"ok" (succeeded); it is required when an error occurred*/
"errorCode": 1,
/*ro, opt, int, error code, desc:when the value of statusCode is not 1, it corresponds to subStatusCode*/
"errorMsg": "ok"
/*ro, opt, string, error information, desc:this node must be returned when the value of statusCode is not 1*/
}
10.2.6.6 Get the holiday group configuration capability of the control schedule of the card reader
authentication mode
Request URL
GET /ISAPI/AccessControl/VerifyHolidayGroupCfg/capabilities?format=json
Query Parameter
Lt om
None
Request Message
t .c
None
d
Pv l
Response Message ai
gy gm
{
"VerifyHolidayGroupCfg": {
/*ro, opt, object*/
lo n@
"groupNo": {
/*ro, opt, object, holiday group No.*/
no je
"@min": 1,
/*ro, opt, int, the minimum value*/
"@max": 16
ch ja
"@max": 32
/*ro, opt, int, the maximum length*/
},
"holidayPlanNo": {
/*ro, opt, object, holiday group schedule No.*/
"@min": 1,
/*ro, opt, int, the minimum value*/
"@max": 16
/*ro, opt, int, the maximum value*/
So
}
}
}
10.2.6.7 Get holiday schedule parameters of the card reader authentication mode
Request URL
GET /ISAPI/AccessControl/VerifyHolidayPlanCfg/<holidayPlanID>?format=json
Query Parameter
Parameter Name Parameter Type Description
holidayPlanID string --
Request Message
None
Response Message
{
"VerifyHolidayPlanCfg": {
/*ro, opt, object, holiday schedule parameters of the card reader authentication mode*/
"enable": true,
/*ro, req, bool, whether to enable, desc:true (enable), false (disable)*/
"beginDate": "1970-01-01",
/*ro, req, date, start date of the holiday, desc:device local time*/
"endDate": "1970-01-02",
/*ro, req, date, end date of the holiday, desc:device local time*/
"HolidayPlanCfg": [
/*ro, req, array, holiday schedule parameters, subType:object*/
{
"id": 1,
/*ro, req, int, time period No., range:[1,8]*/
"enable": true,
/*ro, req, bool, whether to enable the holiday schedule, desc:true (enable), false (disable)*/
"verifyMode": "cardAndPw",
/*ro, req, enum, authentication mode, subType:string, desc:"cardAndPw" (card+password), "card" (card), "cardOrPw" (card or password), "fp"
(fingerprint), "fpAndPw" (fingerprint+password), "fpOrCard" (fingerprint or card), "fpAndCard" (fingerprint+card), "fpAndCardAndPw"
(fingerprint+card+password), "faceOrFpOrCardOrPw" (face or fingerprint or card or password), "faceAndFp" (face+fingerprint), "faceAndPw" (face+password),
"faceAndCard" (face+card), "face" (face), "employeeNoAndPw" (employee No.+password), "fpOrPw" (fingerprint or password), "employeeNoAndFp" (employee
No.+fingerprint), "employeeNoAndFpAndPw" (employee No.+fingerprint+password), "faceAndFpAndCard" (face+fingerprint+card), "faceAndPwAndFp"
(face+password+fingerprint), "employeeNoAndFace" (employee No.+face), "faceOrfaceAndCard" (face or face+card), "fpOrface" (fingerprint or face),
"cardOrfaceOrPw" (card or face or password), "cardOrFace" (card or face), "cardOrFaceOrFp" (card or face or fingerprint), "cardOrFpOrPw" (card or
fingerprint or password), "iris" (iris), "faceOrFpOrCardOrPwOrIris" (face or fingerprint or card or password or iris), "faceOrCardOrPwOrIris" (face or card
or password or iris), "cardOrFace" (card or face), "cardOrFaceOrFp" (card or face or password), "faceOrPw" (face or password), "employeeNoAndFaceAndPw"
(employee No.+face+password), "cardOrFaceOrFaceAndCard" (card or face or face+card), "faceOrFpOrPw" (face or fingerprint or password),
"cardOrFpOrFaceOrIris" (card or fingerpriont or face or iris), "fpOrFaceOrIrisOrPw" (fingerprint or face or iris or password), "cardOrFpOrIrisOrPw" (card or
Lt om
fingerprint or iris or password), "cardOrIrisOrPw" (card or iris or password), "cardAndIris" (card+ris), "fpAndIri" (fingerprint+iris), "faceAndIris"
(face+iris), "irisAndPw" (iris+password), "cardAndIrisAndPw" (card+iris+password), "faceAndIrisAndPw" (face+iris+password), "cardAndFaceAndIris"
(card+face+iris)*/
t .c
"TimeSegment": {
/*ro, opt, object, time*/
d
Pv l
"beginTime": "00:00:00",
/*ro, req, time, start time of the time period, desc:device local time*/
"endTime": "10:00:00"
ai
/*ro, req, time, end time of the time period, desc:device local time*/
gy gm
}
}
]
lo n@
}
}
no je
ch ja
PUT /ISAPI/AccessControl/VerifyHolidayPlanCfg/<holidayPlanID>?format=json
i su
Query Parameter
or ka
Lt om
fingerprint or iris or password), "cardOrIrisOrPw" (card or iris or password), "cardAndIris" (card+ris), "fpAndIri" (fingerprint+iris), "faceAndIris"
(face+iris), "irisAndPw" (iris+password), "cardAndIrisAndPw" (card+iris+password), "faceAndIrisAndPw" (face+iris+password), "cardAndFaceAndIris"
(card+face+iris)*/
t .c
"TimeSegment": {
/*opt, object, time*/
d
Pv l
"beginTime": "00:00:00",
/*req, time, start time of the time period, desc:device local time*/
"endTime": "10:00:00"
ai
/*req, time, end time of the time period, desc:device local time*/
gy gm
}
}
]
lo n@
}
}
no je
Response Message
ch ja
Te la
{
"statusCode": 1,
/*ro, opt, int, status code, desc:1 (succeeded); it is required when an error occurred*/
i su
"statusString": "OK",
/*ro, opt, string, status description, range:[1,64], desc:"ok" (succeeded); it is required when an error occurred*/
"subStatusCode": "ok",
or ka
/*ro, opt, string, sub status code, range:[1,64], desc:"ok" (succeeded); it is required when an error occurred*/
"errorCode": 1,
/*ro, opt, int, error code, desc:when the value of statusCode is not 1, it corresponds to subStatusCode*/
"errorMsg": "ok"
/*ro, opt, string, error information, desc:this node must be returned when the value of statusCode is not 1*/
}
So
10.2.6.9 Get the holiday schedule configuration capability of the card reader authentication mode
Request URL
GET /ISAPI/AccessControl/VerifyHolidayPlanCfg/capabilities?format=json
Query Parameter
None
Request Message
None
Response Message
{
"VerifyHolidayPlanCfg": {
/*ro, opt, object, holiday schedule of card reader authentication mode*/
"planNo": {
/*ro, opt, object, holiday schedule template No.*/
"@min": 1,
/*ro, opt, int, maximum value*/
"@max": 16
/*ro, opt, int, minimum value*/
},
"enable": "true,false",
/*ro, opt, string, whether to enable, desc:true (enable), false (disable)*/
"beginDate": "1970-01-01",
/*ro, opt, date, start date of the holiday (device local time), desc:(device local time)*/
"endDate": "1970-01-02",
/*ro, opt, date, end date of the holiday (device local time), desc:(device local time)*/
"HolidayPlanCfg": {
/*ro, opt, object, holiday schedule parameters*/
"maxSize": 8,
/*ro, opt, int, maximum value*/
"id": {
/*ro, opt, object, time period No.*/
"@min": 1,
/*ro, opt, int, minimum value*/
"@max": 8
/*ro, opt, int, maximum value*/
},
"enable": "true,false",
Lt om
/*ro, opt, string, whether to enable, desc:true (enable), false (disable)*/
"verifyMode": {
/*ro, opt, object, authentication mode*/
t .c
"@opt":
"cardAndPw,card,cardOrPw,fp,fpAndPw,fpOrCard,fpAndCard,fpAndCardAndPw,faceOrFpOrCardOrPw,faceAndFp,faceAndPw,faceAndCard,face,employeeNoAndPw,fpOrPw,employe
d
Pv l
eNoAndFp,employeeNoAndFpAndPw,faceAndFpAndCard,faceAndPwAndFp,employeeNoAndFace,faceOrfaceAndCard,fpOrface,cardOrfaceOrPw,cardOrFace,cardOrFaceOrFp,faceOrPw
,employeeNoAndFaceAndPw,cardOrFaceOrFaceAndCard,iris,faceOrFpOrCardOrPwOrIris,faceOrCardOrPwOrIris,sleep,invalid,cardOrFpOrFaceOrIris,fpOrFaceOrIrisOrPw,car
ai
dOrFpOrIrisOrPw,cardOrIrisOrPw,cardAndIris,fpAndIris,faceAndIris,irisAndPw,cardAndIrisAndPw,faceAndIrisAndPw,cardAndFaceAndIris,Pw,cardOrFpOrPw,faceOrFpOrPw
,cardAndVp,faceAndVp,fpAndVp,pwAndVp"
gy gm
/*ro, opt, string, authentication mode, desc:"cardAndPw" (card+password), "card" (card), "cardOrPw" (card or password), "fp" (fingerprint),
"fpAndPw" (fingerprint+password), "fpOrCard" (fingerprint or card), "fpAndCard" (fingerprint+card), "fpAndCardAndPw" (fingerprint+card+password),
"faceOrFpOrCardOrPw" (face or fingerprint or card or password), "faceAndFp" (face+fingerprint), "faceAndPw" (face+password), "faceAndCard" (face+card),
lo n@
"face" (face), "employeeNoAndPw" (employee No.+password), "fpOrPw" (fingerprint or password), "employeeNoAndFp" (employee No.+fingerprint),
"employeeNoAndFpAndPw" (employee No.+fingerprint+password), "faceAndFpAndCard" (face+fingerprint+card), "faceAndPwAndFp" (face+password+fingerprint),
"employeeNoAndFace" (employee No.+face), "faceOrfaceAndCard" (face or face+card), "fpOrface" (fingerprint or face), "cardOrfaceOrPw" (card or face or
no je
password), "cardOrFace" (card or face), "cardOrFaceOrFp" (card or face or fingerprint), "cardOrFpOrPw" (card or fingerprint or password), "iris" (iris),
"faceOrFpOrCardOrPwOrIris" (face or fingerprint or card or password or iris), "faceOrCardOrPwOrIris" (face or card or password or iris), "cardOrFace" (card
ch ja
or face), "cardOrFaceOrFp" (card or face or password), "faceOrPw" (face or password), "employeeNoAndFaceAndPw" (employee No.+face+password),
"cardOrFaceOrFaceAndCard" (card or face or face+card), "faceOrFpOrPw" (face or fingerprint or password), "cardOrFpOrFaceOrIris" (card or fingerpriont or
face or iris), "fpOrFaceOrIrisOrPw" (fingerprint or face or iris or password), "cardOrFpOrIrisOrPw" (card or fingerprint or iris or password),
Te la
"cardOrIrisOrPw" (card or iris or password), "cardAndIris" (card+ris), "fpAndIri" (fingerprint+iris), "faceAndIris" (face+iris), "irisAndPw"
(iris+password), "cardAndIrisAndPw" (card+iris+password), "faceAndIrisAndPw" (face+iris+password), "cardAndFaceAndIris" (card+face+iris)*/
},
i su
"TimeSegment": {
/*ro, opt, object, time*/
or ka
"beginTime": "00:00:00",
/*ro, opt, time, start time, desc:(device local time)*/
"endTime": "10:00:00",
/*ro, opt, time, end time, desc:(device local time)*/
"validUnit": "minute"
/*ro, opt, enum, time accuracy, subType:string, desc:"hour", "minute", "second". If this node is not returned, the default time accuracy is
"minute"*/
}
},
"purePwdVerifyEnable": true
So
10.2.6.10 Get the schedule template parameters of card reader authentication mode
Request URL
GET /ISAPI/AccessControl/VerifyPlanTemplate/<planTemplateID>?format=json
Query Parameter
Parameter Name Parameter Type Description
planTemplateID string --
Request Message
None
Response Message
{
"VerifyPlanTemplate": {
/*ro, opt, object, the schedule template parameters of card reader authentication mode*/
"enable": true,
/*ro, req, bool, whether to enable, desc:"true"-enable, "false"-disable*/
"templateName": "test",
/*ro, req, string, template name*/
"weekPlanNo": 1,
/*ro, req, int, week schedule No.*/
"holidayGroupNo": "1,3,5"
/*ro, req, string, holiday group No., desc:holiday group No.*/
}
}
10.2.6.11 Set the schedule template parameters of the card reader authentication mode
Request URL
PUT /ISAPI/AccessControl/VerifyPlanTemplate/<planTemplateID>?format=json
Query Parameter
Parameter Name Parameter Type Description
Lt om
planTemplateID string --
t .c
Request Message
d
Pv l
{
"VerifyPlanTemplate": {
/*opt, object*/
ai
gy gm
"enable": true,
/*req, bool, whether to enable, desc:true (yes), false (no)*/
"templateName": "test",
lo n@
}
}
Te la
Response Message
i su
or ka
{
"statusCode": 1,
/*ro, opt, int, status code, desc:1 (succeeded). It is required when an error occurred*/
"statusString": "ok",
/*ro, opt, string, status description, range:[1,64], desc:"ok" (succeeded). It is required when an error occurred*/
"subStatusCode": "ok",
/*ro, opt, string, sub status code, range:[1,64], desc:"ok" (succeeded). It is required when an error occurred*/
"errorCode": 1,
/*ro, opt, int, error code, desc:it is required when the value of statusCode is not 1, and it corresponds to subStatusCode*/
So
"errorMsg": "ok"
/*ro, opt, string, error information, desc:this field is required when the value of statusCode is not 1*/
}
10.2.6.12 Get the schedule template configuration capability of the card reader authentication mode
Request URL
GET /ISAPI/AccessControl/VerifyPlanTemplate/capabilities?format=json
Query Parameter
None
Request Message
None
Response Message
{
"VerifyPlanTemplate": {
/*ro, opt, object*/
"templateNo": {
/*ro, opt, object, schedule template No.*/
"@min": 1,
/*ro, opt, int*/
"@max": 16
/*ro, opt, int*/
},
"enable": "true,false",
/*ro, opt, string, whether to enable, desc:true (yes), false (no)*/
"templateName": {
/*ro, opt, object, template name length*/
"@min": 1,
/*ro, opt, int*/
"@max": 32
/*ro, opt, int*/
},
"weekPlanNo": {
/*ro, opt, object, weekly schedule No.*/
"@min": 1,
/*ro, opt, int*/
"@max": 16
/*ro, opt, int*/
},
"holidayGroupNo": {
/*ro, opt, object, holiday group No.*/
Lt om
"@min": 1,
/*ro, opt, int*/
"@max": 16
t .c
/*ro, opt, int*/
}
d
Pv l
}
}
ai
gy gm
10.2.6.13 Get the week schedule configuration parameters of the card reader authentication mode
lo n@
Request URL
no je
GET /ISAPI/AccessControl/VerifyWeekPlanCfg/<weekPlanID>?format=json
Query Parameter
ch ja
weekPlanID string --
i su
or ka
Request Message
None
Response Message
So
{
"VerifyWeekPlanCfg": {
/*ro, opt, object, the week schedule configuration parameters of the card reader authentication mode*/
"enable": true,
/*ro, req, bool, whether to enable the week schedule configuration parameters of the card reader authentication mode, desc:true (enable), false
(disable)*/
"WeekPlanCfg": [
/*ro, req, array, week schedule parameters, subType:object*/
{
"week": "Monday",
/*ro, req, enum, day of a week, subType:string, desc:"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"*/
"id": 1,
/*ro, req, int, time period No., range:[1,8]*/
"enable": true,
/*ro, req, bool, whether to enable week schedule*/
"verifyMode": "cardAndPw",
/*ro, req, enum, authentication mode, subType:string, desc:"cardAndPw" (card+password), "card" (card), "cardOrPw" (card or password), "fp"
(fingerprint), "fpAndPw" (fingerprint+password), "fpOrCard" (fingerprint or card), "fpAndCard" (fingerprint+card), "fpAndCardAndPw"
(fingerprint+card+password), "faceOrFpOrCardOrPw" (face or fingerprint or card or password), "faceAndFp" (face+fingerprint), "faceAndPw" (face+password),
"faceAndCard" (face+card), "face" (face), "employeeNoAndPw" (employee No.+password), "fpOrPw" (fingerprint or password), "employeeNoAndFp" (employee
No.+fingerprint), "employeeNoAndFpAndPw" (employee No.+fingerprint+password), "faceAndFpAndCard" (face+fingerprint+card), "faceAndPwAndFp"
(face+password+fingerprint), "employeeNoAndFace" (employee No.+face), "faceOrfaceAndCard" (face or face+card), "fpOrface" (fingerprint or face),
"cardOrfaceOrPw" (card or face or password), "cardOrFace" (card or face), "cardOrFaceOrFp" (card or face or fingerprint), "cardOrFpOrPw" (card or
fingerprint or password), "iris" (iris), "faceOrFpOrCardOrPwOrIris" (face or fingerprint or card or password or iris), "faceOrCardOrPwOrIris" (face or card
or password or iris), "cardOrFace" (card or face), "cardOrFaceOrFp" (card or face or password), "faceOrPw" (face or password), "employeeNoAndFaceAndPw"
(employee No.+face+password), "cardOrFaceOrFaceAndCard" (card or face or face+card), "faceOrFpOrPw" (face or fingerprint or password),
"cardOrFpOrFaceOrIris" (card or fingerpriont or face or iris), "fpOrFaceOrIrisOrPw" (fingerprint or face or iris or password), "cardOrFpOrIrisOrPw" (card or
fingerprint or iris or password), "cardOrIrisOrPw" (card or iris or password), "cardAndIris" (card+ris), "fpAndIri" (fingerprint+iris), "faceAndIris"
Lt om
(face+iris), "irisAndPw" (iris+password), "cardAndIrisAndPw" (card+iris+password), "faceAndIrisAndPw" (face+iris+password), "cardAndFaceAndIris"
(card+face+iris)*/
"TimeSegment": {
t .c
/*ro, req, object, time*/
"beginTime": "00:00:00",
d
Pv l
/*ro, req, time, start time, desc:device local time*/
"endTime": "10:00:00"
}
ai
/*ro, req, time, end time, desc:device local time*/
gy gm
}
]
}
lo n@
}
no je
10.2.6.14 Set the week schedule parameters of the card reader authentication mode
ch ja
Request URL
Te la
PUT /ISAPI/AccessControl/VerifyWeekPlanCfg/<weekPlanID>?format=json
i su
Query Parameter
or ka
Lt om
(card+face+iris)*/
"TimeSegment": {
/*req, object, time*/
t .c
"beginTime": "00:00:00",
/*req, time, start time of the time period, desc:device local time*/
d
Pv l
"endTime": "10:00:00"
/*req, time, end time of the time period, desc:device local time*/
}
}
ai
gy gm
]
}
}
lo n@
no je
Response Message
ch ja
{
"statusCode": 1,
Te la
/*ro, opt, int, status code, desc:1 (succeeded). It is required when an error occurred*/
"statusString": "OK",
/*ro, opt, string, status description, range:[1,64], desc:"ok" (succeeded). It is required when an error occurred*/
i su
"subStatusCode": "ok",
/*ro, opt, string, sub status code, range:[1,64], desc:"ok" (succeeded). It is required when an error occurred*/
"errorCode": 1,
or ka
/*ro, opt, int, error code, desc:it is required when the value of statusCode is not 1, and it corresponds to subStatusCode*/
"errorMsg": "ok"
/*ro, opt, string, error information, desc:this field is required when the value of statusCode is not 1*/
}
10.2.6.15 Get the weekly schedule configuration capability of the card reader authentication mode
So
Request URL
GET /ISAPI/AccessControl/VerifyWeekPlanCfg/capabilities?format=json
Query Parameter
None
Request Message
None
Response Message
{
"VerifyWeekPlanCfg": {
/*ro, opt, object, weekly schedule parameters of the card reader authentication mode*/
"planNo": {
/*ro, opt, object, weekly schedule No.*/
"@min": 1,
/*ro, opt, int, minimum value*/
"@max": 16
/*ro, opt, int, maximum value*/
},
"enable": "true,false",
/*ro, opt, string, whether to enable, desc:"true"-enable, "false"-disable*/
"WeekPlanCfg": {
/*ro, opt, object, week schedule parameters*/
"maxSize": 56,
/*ro, opt, int, maximum value*/
"week": {
/*ro, opt, object, day of a week*/
"@opt": "Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday"
/*ro, opt, string, day of a week, desc:"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"*/
},
"id": {
/*ro, opt, object, weekly schedule No.*/
"@min": 1,
/*ro, opt, int, minimum value*/
"@max": 8
/*ro, opt, int, maximum value*/
},
Lt om
"enable": "true,false",
/*ro, opt, string, whether to enable, desc:true (enable), false (disable)*/
"verifyMode": {
t .c
/*ro, opt, object, authentication mode*/
"@opt":
d
Pv l
"cardAndPw,card,cardOrPw,fp,fpAndPw,fpOrCard,fpAndCard,fpAndCardAndPw,faceOrFpOrCardOrPw,faceAndFp,faceAndPw,faceAndCard,face,employeeNoAndPw,fpOrPw,employe
eNoAndFp,employeeNoAndFpAndPw,faceAndFpAndCard,faceAndPwAndFp,employeeNoAndFace,faceOrfaceAndCard,fpOrface,cardOrfaceOrPw,cardOrFace,cardOrFaceOrFp,faceOrPw
ai
,employeeNoAndFaceAndPw,cardOrFaceOrFaceAndCard,iris,faceOrFpOrCardOrPwOrIris,faceOrCardOrPwOrIris,sleep,invalid,cardOrFpOrFaceOrIris,fpOrFaceOrIrisOrPw,car
dOrFpOrIrisOrPw,cardOrIrisOrPw,cardAndIris,fpAndIris,faceAndIris,irisAndPw,cardAndIrisAndPw,faceAndIrisAndPw,cardAndFaceAndIris,Pw,cardOrFpOrPw,faceOrFpOrPw
gy gm
,cardAndVp,faceAndVp,fpAndVp,pwAndVp"
/*ro, opt, string, authentication mode, desc:"cardAndPw" (card+password), "card" (card), "cardOrPw" (card or password), "fp" (fingerprint),
"fpAndPw" (fingerprint+password), "fpOrCard" (fingerprint or card), "fpAndCard" (fingerprint+card), "fpAndCardAndPw" (fingerprint+card+password),
lo n@
"faceOrFpOrCardOrPw" (face or fingerprint or card or password), "faceAndFp" (face+fingerprint), "faceAndPw" (face+password), "faceAndCard" (face+card),
"face" (face), "employeeNoAndPw" (employee No.+password), "fpOrPw" (fingerprint or password), "employeeNoAndFp" (employee No.+fingerprint),
"employeeNoAndFpAndPw" (employee No.+fingerprint+password), "faceAndFpAndCard" (face+fingerprint+card), "faceAndPwAndFp" (face+password+fingerprint),
no je
"employeeNoAndFace" (employee No.+face), "faceOrfaceAndCard" (face or face+card), "fpOrface" (fingerprint or face), "cardOrfaceOrPw" (card or face or
password), "cardOrFace" (card or face), "cardOrFaceOrFp" (card or face or fingerprint), "cardOrFpOrPw" (card or fingerprint or password), "iris" (iris),
ch ja
"faceOrFpOrCardOrPwOrIris" (face or fingerprint or card or password or iris), "faceOrCardOrPwOrIris" (face or card or password or iris), "cardOrFace" (card
or face), "cardOrFaceOrFp" (card or face or password), "faceOrPw" (face or password), "employeeNoAndFaceAndPw" (employee No.+face+password),
"cardOrFaceOrFaceAndCard" (card or face or face+card), "faceOrFpOrPw" (face or fingerprint or password), "cardOrFpOrFaceOrIris" (card or fingerpriont or
Te la
face or iris), "fpOrFaceOrIrisOrPw" (fingerprint or face or iris or password), "cardOrFpOrIrisOrPw" (card or fingerprint or iris or password),
"cardOrIrisOrPw" (card or iris or password), "cardAndIris" (card+ris), "fpAndIri" (fingerprint+iris), "faceAndIris" (face+iris), "irisAndPw"
(iris+password), "cardAndIrisAndPw" (card+iris+password), "faceAndIrisAndPw" (face+iris+password), "cardAndFaceAndIris" (card+face+iris), "sleep",
i su
"invalid"*/
},
or ka
"TimeSegment": {
/*ro, opt, object, time*/
"beginTime": "00:00:00",
/*ro, opt, time, start time, desc:start time of the time period (device local time)*/
"endTime": "10:00:00",
/*ro, opt, time, end time, desc:end time of the time period (device local time)*/
"validUnit": "minute"
/*ro, opt, enum, time accuracy, subType:string, desc:If this node is not returned, it indicates that the time accuracy is "minute". "hour",
"minute", "second"*/
}
So
},
"purePwdVerifyEnable": true
/*ro, opt, bool*/
}
}
Lt om
"faceMatchThresholdN": 1,
/*opt, int, threshold of face picture 1:N comparison, range:[0,100], desc:threshold of face picture 1:N comparison,which is between 0 and 100*/
"faceRecogizeTimeOut": 1,
t .c
/*opt, enum, face recognition timeout, subType:int, desc:it is between 1 and 20, unit: second, 255-infinite*/
"faceRecogizeInterval": 1,
d
Pv l
/*opt, enum, face recognition interval, subType:int, desc:it is between 1 and 10, unit: second, 255-no delay*/
"cardReaderFunction": ["fingerPrint", "face", "fingerVein", "iris", "card"],
ai
/*opt, enumarray, card reader type, subType:string, desc:"fingerPrint"-fingerprint, "face", "fingerVein"-finger vein, “iris”. For example,
["fingerPrint","face"] indicates that the card reader supports both fingerprint and face*/
gy gm
"livingBodyDetect": true,
/*opt, bool, whether to enable human detection*/
"faceMatchThreshold1": 1,
lo n@
/*opt, int, threshold of face picture 1:1 comparison, range:[0,100], desc:threshold of face picture 1:1 comparison,which is between 0 and 100*/
"envirMode": "indoor",
/*opt, enum, environment mode of face recognition, subType:string, desc:"indoor", "other”*/
no je
"liveDetLevelSet": "low",
/*opt, enum, threshold level of liveness detection, subType:string, desc:"low", "middle"-medium, "high"*/
ch ja
"liveDetAntiAttackCntLimit": 1,
/*opt, int, number of anti-attacks of liveness detection,, range:[1,255], desc:this value should be configured as the same one on both client and
device*/
Te la
"enableLiveDetAntiAttack": true,
/*opt, bool, whether to enable anti-attack for liveness detection*/
"defaultVerifyMode": "cardAndPw",
i su
/*opt, enum, default authentication mode of the fingerprint and card reader (factory defaults):, subType:string, desc:factory defaults; "cardAndPw"
(card+password), "card" (card), "cardOrPw" (card or password), "fp" (fingerprint), "fpAndPw" (fingerprint+password), "fpOrCard" (fingerprint or card),
or ka
"fpAndCard" (fingerprint+card), "fpAndCardAndPw" (fingerprint+card+password), "faceOrFpOrCardOrPw" (face or fingerprint or card or password), "faceAndFp"
(face+fingerprint), "faceAndPw" (face+password), "faceAndCard" (face+card), "face" (face), "employeeNoAndPw" (employee No.+password), "fpOrPw" (fingerprint
or password), "employeeNoAndFp" (employee No.+fingerprint), "employeeNoAndFpAndPw" (employee No.+fingerprint+password), "faceAndFpAndCard"
(face+fingerprint+card), "faceAndPwAndFp" (face+password+fingerprint), "employeeNoAndFace" (employee No.+face), "faceOrfaceAndCard" (face or face+card),
"fpOrface" (fingerprint or face), "cardOrfaceOrPw" (card or face or password), "cardOrFace" (card or face), "cardOrFaceOrFp" (card or face or fingerprint),
"cardOrFpOrPw" (card or fingerprint or password), "iris" (iris), "faceOrFpOrCardOrPwOrIris" (face or fingerprint or card or password or iris),
"faceOrCardOrPwOrIris" (face or card or password or iris), "cardOrFace" (card or face), "cardOrFaceOrFp" (card or face or password), "faceOrPw" (face or
password), "employeeNoAndFaceAndPw" (employee No.+face+password), "cardOrFaceOrFaceAndCard" (card or face or face+card), "faceOrFpOrPw" (face or fingerprint
or password), "cardOrFpOrFaceOrIris" (card or fingerpriont or face or iris), "fpOrFaceOrIrisOrPw" (fingerprint or face or iris or password),
"cardOrFpOrIrisOrPw" (card or fingerprint or iris or password), "cardOrIrisOrPw" (card or iris or password), "cardAndIris" (card+ris), "fpAndIri"
So
Response Message
{
"statusCode": 1,
/*ro, opt, int, status code, desc:1 (succeeded). It is required when an error occurred*/
"statusString": "OK",
/*ro, opt, string, status description, range:[1,64], desc:"ok" (succeeded). It is required when an error occurred*/
"subStatusCode": "ok",
/*ro, opt, string, sub status code, range:[1,64], desc:"ok" (succeeded). It is required when an error occurred*/
"errorCode": 1,
/*ro, opt, int, error code, desc:when the value of statusCode is not 1, it corresponds to subStatusCode*/
"errorMsg": "ok"
/*ro, opt, string, error description, desc:this node is required when the value of statusCode is not 1*/
}
Lt om
Request Message
t .c
None
d
Pv l
Response Message ai
gy gm
lo n@
no je
ch ja
Te la
i su
or ka
So
{
"CardReaderCfg": {
/*ro, req, object, card reader information*/
"enable": true,
/*ro, req, bool, whether to enable, desc:true (enable), false (disable)*/
"okLedPolarity": "cathode",
/*ro, opt, enum, OK LED polarity, subType:string, desc:"cathode", "anode"*/
"errorLedPolarity": "cathode",
/*ro, opt, enum, Error LED polarity, subType:string, desc:"cathode", "anode"*/
"swipeInterval": 1,
/*ro, opt, int, time interval of repeated authentication, unit:s, desc:which is valid for authentication modes such as fingerprint, card, face,
etc.*/
"pressTimeout": 1,
/*ro, opt, int, timeout to reset entry on keypad, unit:s*/
"enableFailAlarm": true,
/*ro, opt, bool, whether to enable excessive failed authentication attempts alarm*/
"maxReadCardFailNum": 1,
/*ro, opt, int, maximum number of failed authentication attempts*/
"enableTamperCheck": true,
/*ro, opt, bool, whether to enable tampering detection*/
"offlineCheckTime": 1,
/*ro, opt, int, time to detect after the card reader is offline, unit:s*/
"fingerPrintCheckLevel": 1,
/*ro, opt, enum, fingerprint recognition level, subType:int, desc:1-1/10 false acceptance rate (FAR), 2-1/100 false acceptance rate (FAR), 3-1/1000
false acceptance rate (FAR), 4-1/10000 false acceptance rate (FAR), 5-1/100000 false acceptance rate (FAR), 6-1/1000000 false acceptance rate (FAR), 7-
1/10000000 false acceptance rate (FAR), 8-1/100000000 false acceptance rate (FAR), 9-3/100 false acceptance rate (FAR), 10-3/1000 false acceptance rate
(FAR), 11-3/10000 false acceptance rate (FAR), 12-3/100000 false acceptance rate (FAR), 13-3/1000000 false acceptance rate (FAR), 14-3/10000000 false
acceptance rate (FAR), 15-3/100000000 false acceptance rate (FAR), 16-Automatic Normal, 17-Automatic Secure, 18-Automatic More Secure (currently not
Lt om
support)*/
"faceMatchThresholdN": 1,
/*ro, opt, int, threshold of face picture 1:N comparison,which is between 0 and 100, range:[0,100]*/
t .c
"faceRecogizeTimeOut": 1,
/*ro, opt, enum, face recognition timeout, subType:int, desc:face recognition timeout,which is between 1 and 20,unit: second,255-infinite*/
d
Pv l
"faceRecogizeInterval": 1,
/*ro, opt, enum, face recognition interval, subType:int, desc:face recognition interval,which is between 1 and 10,unit: second,255-no delay*/
ai
"cardReaderFunction": ["fingerPrint", "face", "card"],
/*ro, opt, enumarray, card reader type, subType:string, desc:"fingerPrint”, "face", "fingerVein". For example, ["fingerPrint", "face"] indicates
gy gm
that the card reader supports both fingerprint and face*/
"cardReaderDescription": "Wiegand\u000485Offline",
/*ro, opt, string, card reader description, desc:if the card reader is the Wiegand card reader or if offline, this field will be set to "Wiegand" or
lo n@
"485Offline”*/
"livingBodyDetect": true,
/*ro, opt, bool, whether to enable human detection*/
no je
"faceMatchThreshold1": 1,
/*ro, opt, int, threshold of face picture 1:1 comparison, range:[0,100]*/
ch ja
"liveDetLevelSet": "low",
/*ro, opt, enum, threshold level of liveness detection, subType:string, desc:"low", "middle", "high”*/
"liveDetAntiAttackCntLimit": 1,
Te la
/*ro, opt, int, number of anti-attacks of liveness detection, range:[1,255], desc:this value should be configured as the same one on both client and
device*/
"enableLiveDetAntiAttack": true,
i su
"fpOrface" (fingerprint or face), "cardOrfaceOrPw" (card or face or password), "cardOrFace" (card or face), "cardOrFaceOrFp" (card or face or fingerprint),
"cardOrFpOrPw" (card or fingerprint or password), "iris" (iris), "faceOrFpOrCardOrPwOrIris" (face or fingerprint or card or password or iris),
"faceOrCardOrPwOrIris" (face or card or password or iris), "cardOrFace" (card or face), "cardOrFaceOrFp" (card or face or password), "faceOrPw" (face or
password), "employeeNoAndFaceAndPw" (employee No.+face+password), "cardOrFaceOrFaceAndCard" (card or face or face+card), "faceOrFpOrPw" (face or fingerprint
or password), "cardOrFpOrFaceOrIris" (card or fingerpriont or face or iris), "fpOrFaceOrIrisOrPw" (fingerprint or face or iris or password),
"cardOrFpOrIrisOrPw" (card or fingerprint or iris or password), "cardOrIrisOrPw" (card or iris or password), "cardAndIris" (card+ris), "fpAndIri"
(fingerprint+iris), "faceAndIris" (face+iris), "irisAndPw" (iris+password), "cardAndIrisAndPw" (card+iris+password), "faceAndIrisAndPw"
(face+iris+password), "cardAndFaceAndIris" (card+face+iris)*/
"faceRecogizeEnable": 1,
/*ro, opt, enum, whether to enable facial recognition, subType:int, desc:1 (enable), 2 (disable), 3 (attendence checked in/out by recognition of
multiple faces)*/
"enableReverseCardNo": true,
/*ro, opt, bool, whether to enable reversing the card No.*/
"independSwipeIntervals": 0,
/*ro, opt, int, time interval of person authentication, desc:unit: second. This time interval is calculated for each person separately and is
different from swipeInterval*/
"maskFaceMatchThresholdN": 1,
/*ro, opt, int, 1:N face picture (face with mask and normal background) comparison threshold, range:[0,100]*/
"maskFaceMatchThreshold1": 1,
/*ro, opt, int, 1:1 face picture (face with mask and normal background) comparison threshold, range:[0,100]*/
}
}
{
"CardReaderCfg": {
/*ro, req, object, Set Card Reader Parameters*/
"cardReaderNo": {
/*ro, opt, object, card reader No., desc:card reader No.*/
"@min": 1,
/*ro, opt, int, the minimum value*/
"@max": 512,
/*ro, opt, int, the maximum value*/
},
"enable": "true,false",
Lt om
/*ro, opt, string, whether to enable, desc:"true"-yes,"false"-no*/
"okLedPolarity": {
/*ro, opt, object, OK LED polarity*/
t .c
"@opt": "cathode,anode"
/*ro, req, string, options, desc:"cathode", "anode"*/
d
Pv l
},
"errorLedPolarity": {
ai
/*ro, opt, object, error LED polarity*/
"@opt": "cathode,anode"
gy gm
/*ro, req, string, options, desc:"cathode", "anode"*/
},
"swipeInterval": {
lo n@
/*ro, opt, object, time interval of repeated authentication, desc:it is valid for authentication modes such as fingerprint, card, face, etc., unit:
second*/
"@min": 1,
no je
},
"pressTimeout": {
Te la
"@max": 255
/*ro, req, int, the maximum value*/
},
or ka
"enableFailAlarm": "true,false",
/*ro, opt, string, whether to enable excessive failed authentication attempts alarm*/
"maxReadCardFailNum": {
/*ro, opt, object, maximum number of failed authentication attempts*/
"@min": 1,
/*ro, req, int, the minimum value*/
"@max": 255
/*ro, req, int, the maximum value*/
},
So
"enableTamperCheck": "true,false",
/*ro, opt, string, whether to enable tampering detection*/
"offlineCheckTime": {
/*ro, opt, object, time to detect after the card reader is offline, desc:unit: second*/
"@min": 1,
/*ro, req, int, the minimum value*/
"@max": 255
/*ro, req, int, the maximum value*/
},
"fingerPrintCheckLevel": {
/*ro, opt, object, fingerprint recognition level*/
"@opt": "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18"
/*ro, req, string, options*/
},
"faceMatchThresholdN": {
/*ro, opt, object, threshold of face picture 1:N comparison, desc:it is between 0 and 100*/
"@min": 0,
/*ro, req, int, the minimum value*/
"@max": 100
/*ro, req, int, the maximum value*/
},
"faceRecogizeTimeOut": {
/*ro, opt, object, face recognition timeout, desc:it is between 1 and 20, unit: second, 0 (infinite)*/
"@min": 0,
/*ro, req, int, the minimum value*/
"@max": 20
/*ro, req, int, the maximum value*/
},
"faceRecogizeInterval": {
/*ro, opt, object, face recognition interval, desc:it is between 1 and 10, unit: second, 0 (no delay)*/
/*ro, opt, object, face recognition interval, desc:it is between 1 and 10, unit: second, 0 (no delay)*/
"@min": 0,
/*ro, req, int, the minimum value*/
"@max": 10
/*ro, req, int, the maximum value*/
},
"cardReaderFunction": {
/*ro, opt, object, card reader type*/
"@opt": "fingerPrint,face,fingerVein,iris,card,voiceprint"
/*ro, req, string, options, desc:"fingerPrint” (fingerprint), "face", "fingerVein” (finger vein), “iris”*/
},
"cardReaderDescription": {
/*ro, opt, object, card reader description, desc:if the card reader is the Wiegand card reader or if offline, this field will be set to "Wiegand" or
"485Offline"*/
"@min": 1,
/*ro, req, int, the minimum value*/
"@max": 16
/*ro, req, int, the maximum value*/
},
"faceMatchThreshold1": {
/*ro, opt, object, threshold of face picture 1:1 comparison, desc:it is between 0 and 100*/
"@min": 0,
/*ro, req, int, the minimum value*/
"@max": 100
/*ro, req, int, the maximum value*/
},
"livingBodyDetect": "true,false",
/*ro, opt, string, whether to enable human detection*/
"liveDetLevelSet": {
Lt om
/*ro, opt, object, threshold level of liveness detection*/
"@opt": "low,middle,high,general,enhancive,professional"
/*ro, req, string, options*/
t .c
},
"liveDetAntiAttackCntLimit": {
/*ro, opt, object, number of anti-attacks of liveness detection, desc:it is between 1 and 255. This value should be configured as the same one on
d
Pv l
both client and device*/
"@min": 1, ai
/*ro, req, int, the minimum value*/
"@max": 255
gy gm
/*ro, req, int, the maximum value*/
},
"enableLiveDetAntiAttack": "true,false",
lo n@
/*ro, opt, string, whether to enable anti-attack for liveness detection, desc:whether to enable anti-attack for liveness detection*/
"fingerPrintCapacity": {
no je
"@max": 100
/*ro, req, int, the maximum value*/
},
Te la
"fingerPrintNum": {
/*ro, opt, object, number of added fingerprints*/
i su
"@min": 1,
/*ro, req, int, the minimum value*/
"@max": 100
or ka
"independSwipeIntervals": {
/*ro, opt, object, time interval of person authentication, desc:unit: second. This time interval is calculated for each person separately and is
different from swipeInterval*/
"@min": 1,
/*ro, req, int, the minimum value*/
"@max": 1
/*ro, req, int, the maximum value*/
},
"maskFaceMatchThresholdN": {
/*ro, opt, object, 1:N face picture (face with mask and normal background) comparison threshold, desc:value range: [0,100]*/
"@min": 0,
/*ro, req, int, the minimum value*/
"@max": 100
/*ro, req, int, the maximum value*/
},
"maskFaceMatchThreshold1": {
/*ro, opt, object, 1:1 face picture (face with mask and normal background) comparison threshold, desc:value range: [0,100]*/
"@min": 0,
/*ro, req, int, the minimum value*/
"@max": 100
/*ro, req, int, the maximum value*/
},
}
}
{
"CardVerificationRuleCap": {
/*ro, req, object*/
"cardNoLenMode": {
/*ro, opt, object, length mode of card No. authentication (comparison), desc:length mode of card No. authentication (comparison)*/
"@opt": ["full", "4Bytes", "3Bytes", "wiegand27", "wiegand35", "Corporate1000_35", "Corporate1000_48", "H10302_37", "H10304_37",
"wiegand_26CSN", "H103130_32CSN", "wiegand_56CSN", "wiegand_58"]
/*ro, opt, array, options, subType:string*/
},
"CardVerificationRuleRes": {
/*ro, opt, object*/
"checkStatus": {
/*ro, opt, object, status of switching card No. authentication (comparison) mode, desc:"continue" (switching result can be searched for later),
Lt om
"ok" (switching completed), "duplicate" (duplicate data exist and switching failed)*/
"@opt": ["continue", "ok", "duplicate"]
/*ro, opt, array, options, subType:string*/
t .c
},
"progress": {
d
Pv l
/*ro, opt, object, switching progress in percentage, desc:which is between 0 and 100,and 100 indicates that the card No. authentication
(comparison) mode is switched*/
"@min": 0,
ai
/*ro, opt, int, the minimum value*/
gy gm
"@max": 0
/*ro, opt, int, the maximum value*/
}
lo n@
},
}
}
no je
ch ja
10.2.7.5 Get the switching progress and configuration result of card No. authentication mode
Te la
Request URL
i su
GET /ISAPI/AccessControl/CardVerificationRule/progress?format=json
Query Parameter
or ka
None
Request Message
None
Response Message
So
{
"CardVerificationRuleRes": {
/*ro, req, object*/
"checkStatus": "continue",
/*ro, opt, enum, status of switching card No. authentication (comparison) mode, subType:string, desc:"continue" (switching result can be searched
for later), "ok" (switching succeeded), "duplicate" (duplicate data exist and switching failed)*/
"progress": 100
/*ro, opt, int, switching progress in percentage, range:[0,100], desc:100 indicates that card No. authentication (comparison) mode is switched*/
}
}
{
"CardVerificationRule": {
/*ro, req, object*/
"cardNoLenMode": "full",
/*ro, req, enum, length mode of card No. authentication (comparison), subType:string, desc:"full", "3Bytes", "4Bytes". After the card No.
authentication (comparison) mode is switched, the device should check the card No. compatibility*/
}
}
Lt om
{
t .c
"CardVerificationRule": {
/*req, object*/
d
"cardNoLenMode": "full",
Pv l
/*req, enum, length mode of card No. authentication (comparison), subType:string, desc:"full", "3Bytes", "4Bytes". After the card No. authentication
ai
(comparison) mode is switched, the device should check the card No. compatibility*/
"reverseCardNoEnabled": true
/*opt, bool*/
gy gm
}
}
lo n@
no je
Response Message
ch ja
{
"statusCode": 1,
Te la
/*ro, opt, int, status code, desc:1 (succeeded). It is required when an error occurred*/
"statusString": "ok",
/*ro, opt, string, status description, range:[1,64], desc:"ok" (succeeded). It is required when an error occurred*/
i su
"subStatusCode": "ok",
/*ro, opt, string, sub status code, range:[1,64], desc:"ok" (succeeded). It is required when an error occurred*/
"errorCode": 1,
or ka
/*ro, opt, int, error code, desc:it is required when the value of statusCode is not 1, it corresponds to subStatusCode*/
"errorMsg": "ok"
/*ro, opt, string, error information, desc:this node is required when the value of statusCode is not 1*/
}
10.2.7.8 Get the configuration capability of enabling NFC (Near-Field Communication) function
So
Request URL
GET /ISAPI/AccessControl/Configuration/NFCCfg/capabilities?format=json
Query Parameter
None
Request Message
None
Response Message
{
"NFCCfgCap": {
/*ro, opt, object, configuration capability of enabling NFC (Near-Field Communication) function*/
"enable": "true,false"
/*ro, req, string, whether to enable NFC function, desc:true-yes, false-no (default)*/
}
}
{
"NFCCfg": {
/*ro, req, object*/
"enable": true
/*ro, req, bool, whether to enable NFC function, desc:true (yes), false (no). The value of this node is "false" by default*/
}
}
Lt om
Request URL
PUT /ISAPI/AccessControl/Configuration/NFCCfg?format=json
t .c
Query Parameter
d
Pv l
None ai
Request Message
gy gm
{
lo n@
"NFCCfg": {
/*req, object, configuration capability of enabling NFC (Near-Field Communication) function*/
no je
"enable": true
/*req, bool, whether to enable NFC function, desc:true-yes, false-no (default)*/
}
ch ja
}
Te la
Response Message
i su
{
or ka
"requestURL": "test",
/*ro, opt, string, URI*/
"statusCode": 1,
/*ro, opt, int, status code, desc:1 (succeeded). It is required when an error occurred*/
"statusString": "test",
/*ro, opt, string, status description, desc:"ok" (succeeded). It is required when an error occurred*/
"subStatusCode": "test",
/*ro, opt, string, sub status code, desc:"ok" (succeeded). It is required when an error occurred*/
"errorCode": 1,
So
/*ro, req, int, error code, desc:it is required when the value of statusCode is not 1, and it corresponds to subStatusCode*/
"errorMsg": "ok"
/*ro, req, string, error information, desc:this node is required when the value of statusCode is not 1*/
}
10.2.7.11 Get the configuration capability of enabling RF (Radio Frequency) card recognition
Request URL
GET /ISAPI/AccessControl/Configuration/RFCardCfg/capabilities?format=json
Query Parameter
None
Request Message
None
Response Message
{
"RFCardCfgCap": {
/*ro, req, object*/
"cardType": {
/*ro, opt, object, card type, desc:"EMCard"-EM card, "M1Card"-M1 card, "CPUCard"-CPU card, "IDCard"-ID card, "DesfireCard"-DESFire card,
"FelicaCard"-FeliCa card*/
"@opt": ["EMCard", "M1Card", "CPUCard", "IDCard", "FelicaCard"]
/*ro, req, array, options, subType:string*/
},
"enabled": {
/*ro, opt, object, whether to enable RF card recognition*/
"@opt": [true, false]
/*ro, req, array, options, subType:bool*/
}
}
}
Lt om
None
t .c
Request Message
None
d
Pv l
Response Message ai
gy gm
{
"RFCardCfg": [
lo n@
/*ro, req, enum, card type, subType:string, desc:"EMCard” (EM card), "M1Card” (M1 card), "CPUCard” (CPU card), "IDCard” (ID card), "DesfireCard”
(DESFire card), "FelicaCard” (FeliCa card)*/
"enabled": true
ch ja
]
}
i su
Request URL
PUT /ISAPI/AccessControl/Configuration/RFCardCfg?format=json
Query Parameter
None
So
Request Message
{
"RFCardCfg": [
/*req, array, the parameters of enabling RF (Radio Frequency) card recognition, subType:object*/
{
"cardType": "EMCard",
/*req, enum, card type, subType:string, desc:"EMCard"(EM card), "M1Card"(M1 card), "CPUCard"(CPU card), "IDCard"(ID card), "DesfireCard"(DESFire
card), "FelicaCard"(FeliCa card)*/
"enabled": true
/*req, bool, whether to enable RF card recognition, desc:"true"(yes), "false"(no)*/
}
]
}
Response Message
{
"requestURL": "test",
/*ro, opt, string, URI*/
"statusCode": 1,
/*ro, opt, int, status code, desc:1 (succeeded). It is required when an error occurred*/
"statusString": "test",
/*ro, opt, string, status description, desc:"ok" (succeeded). It is required when an error occurred*/
"subStatusCode": "test",
/*ro, opt, string, sub status code, desc:"ok" (succeeded). It is required when an error occurred*/
"errorCode": 1,
/*ro, req, int, error code, desc:it is required when the value of statusCode is not 1, and it corresponds to subStatusCode*/
"errorMsg": "ok"
/*ro, req, string, error information, desc:this node is required when the value of statusCode is not 1*/
}
Lt om
Request Message
t .c
<?xml version="1.0" encoding="UTF-8"?>
d
Pv l
<FaceCompareCond xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
ai
<!--req, object, facial recognition parameters, attr:version{opt, string, protocolVersion}-->
<faceWidthLowerLimit>
<!--opt, int, face width threshold, range:[0,100], desc:when the detected face width is larger than this threshold, the following conditions will be
gy gm
ignored and the face picture comparison will be executed it has the highest priority-->50
</faceWidthLowerLimit>
<pitch>
lo n@
<!--opt, int, face raising or bowing angle, range:[0,90], desc:the smaller the better-->0
</pitch>
no je
<yaw>
<!--opt, int, face siding left or right angle, range:[0,90], desc:the smaller the better-->0
</yaw>
ch ja
<width>
<!--opt, int, face width, range:[0,100]-->50
</width>
Te la
<height>
<!--opt, int, face height, range:[0,100]-->50
i su
</height>
<leftBorder>
<!--opt, int, left border of face, range:[0,100]-->50
or ka
</leftBorder>
<rightBorder>
<!--opt, int, right border of face, range:[0,100]-->50
</rightBorder>
<upBorder>
<!--opt, int, top border of face, range:[0,100]-->50
</upBorder>
<bottomBorder>
<!--opt, int, bottom border of face, range:[0,100]-->50
So
</bottomBorder>
<interorbitalDistance>
<!--opt, int, pupillary distance, range:[0,100]-->50
</interorbitalDistance>
<faceScore>
<!--opt, int, face score (face picture quality), range:[0,100], desc:the valid face score must be larger than this value-->50
</faceScore>
<maxDistance>
<!--opt, enum, maximum recognition distance, subType:string, desc:"0.5" (0.5 m), "1" (1 m), "1.5" (1.5 m), "2" (2m), "auto" (automatic)-->0.5
</maxDistance>
<similarity>
<!--opt, float, face picture comparison similarity-->50
</similarity>
<antiFake>
<!--opt, int, face anti- spoofing parameters-->50
</antiFake>
<identifyType>
<!--opt, enum, face recognition type, subType:string, desc:highest (the highest similarity, default), single (one picture whose similarity exceeds the
threshold), multiple (multiple pictures whose similarity exceeds the threshold). If the value of this node is highest, it indicates all face pictures in the
whole face picture library will be compared and the one with the highest similarity will be returned. If the value of this node is single, it indicates that
the first picture whose similarity exceeds the threshold will be returned. If the value of this node is multiple, the first 30 pictures whose similarity
exceeds the threshold will be returned-->highest
</identifyType>
<chooseType>
<!--opt, enum, face recognition area, subType:string, desc:if "middle" is set, the device will recognize the middle face on the picture; if "biggest" is
set, the device will recognize the biggest face on the picture; if "all" is set, the device will recognize all faces on the picture; "middle", "biggest",
"all"; the default value is all-->all
</chooseType>
<enabled>
<!--opt, enum, whether to enable face recognition, subType:string, desc:singleFace (recognizing a single face, default), close (disable facial
<!--opt, enum, whether to enable face recognition, subType:string, desc:singleFace (recognizing a single face, default), close (disable facial
recognition), multiFace (recognizing multiple faces). This node can be used to enable facial recognition for the device and it will take effect in all
readers-->singleFace
</enabled>
<faceScoreEnabled>
<!--opt, bool, whether to enable face scoring, desc:whether to enable face scoring-->true
</faceScoreEnabled>
<ageFaceMatchEnabled>
<!--opt, bool, whether to enable age groups matching-->true
</ageFaceMatchEnabled>
<ageFaceMatchList>
<!--opt, array, list of different age groups, subType:object, range:[0,5], dep:or,{$.FaceCompareCond.ageFaceMatchEnabled,eq,true}-->
<ageFaceMatch>
<!--opt, object, age groups matching-->
<ageLevel>
<!--opt, enum, age groups, subType:int, desc:0 (child who are 0~6 years old), 1 (teenager who are 7~17years old), 2 (youth and prime who are 18~40
years old), 3 (middle age who are 41~65 years old), 4 (elderly who are more than 66 years old)-->1
</ageLevel>
<ageFaceMatchThreshold1>
<!--opt, int, matching threshold when authenticating via age groups (1:1), range:[0,100]-->1
</ageFaceMatchThreshold1>
<ageFaceMatchThresholdN>
<!--opt, int, matching threshold when authenticating via age groups (1:N), range:[0,100]-->1
</ageFaceMatchThresholdN>
</ageFaceMatch>
</ageFaceMatchList>
<faceScoreThreshold1>
<!--opt, int, matching threshold when face scoring via 1:N matching mode, range:[0,100], desc:it can rate the captured face pictures and is available
for person and ID comparison and authentication without ID card-->1
</faceScoreThreshold1>
Lt om
</FaceCompareCond>
t .c
Response Message
d
Pv l
<?xml version="1.0" encoding="UTF-8"?> ai
gy gm
<ResponseStatus xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
<!--ro, req, object, response message, attr:version{ro, req, string, protocolVersion}-->
<requestURL>
lo n@
<!--ro, req, enum, status code, subType:int, desc:0 (OK), 1 (OK), 2 (Device Busy), 3 (Device Error), 4 (Invalid Operation), 5 (Invalid XML Format), 6
(Invalid XML Content), 7 (Reboot Required)-->0
ch ja
</statusCode>
<statusString>
<!--ro, req, enum, status information, subType:string, desc:"OK" (succeeded), "Device Busy", "Device Error", "Invalid Operation", "Invalid XML Format",
Te la
<!--ro, req, string, sub status code, which describes the error in details, desc:sub status code, which describes the error in details-->OK
</subStatusCode>
<description>
or ka
<!--ro, opt, string, custom error information description, range:[0,1024], desc:the detailed information of custom error returned by device
applications, which is used for fast debugging-->badXmlFormat
</description>
</ResponseStatus>
Request URL
GET /ISAPI/AccessControl/FaceCompareCond
Query Parameter
None
Request Message
None
Response Message
<?xml version="1.0" encoding="UTF-8"?>
<FaceCompareCond xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
<!--ro, req, object, facial recognition parameters, attr:version{opt, string, protocolVersion}-->
<pitch>
<!--ro, opt, int, face pitching angle, range:[0,90], desc:the smaller the better-->0
</pitch>
<yaw>
<!--ro, opt, int, face yawing angle, range:[0,90], desc:The smaller, the better.-->0
</yaw>
<leftBorder>
<!--ro, opt, int, left border of the face, range:[0,100]-->50
</leftBorder>
<rightBorder>
<!--ro, opt, int, right border of the face, range:[0,100]-->50
</rightBorder>
<upBorder>
<!--ro, opt, int, upper border of the face, range:[0,100]-->50
</upBorder>
<bottomBorder>
<!--ro, opt, int, lower border of the face, range:[0,100]-->50
</bottomBorder>
<faceScore>
<!--ro, opt, int, face score, range:[0,100], desc:the face to be detected is valid when its score is higher than the value of this node-->50
</faceScore>
<maxDistance>
<!--ro, opt, enum, maximum recognition distance, subType:string, desc:0.5 (0.5m), 1 (1m), 1.5 (1.5m), 2 (2m), auto (automatic)-->0.5
</maxDistance>
</FaceCompareCond>
Lt om
t .c
10.2.7.16 Get the capability of configuring facial recognition parameters.
d
Pv l
Request URL ai
GET /ISAPI/AccessControl/FaceCompareCond/capabilities
gy gm
Query Parameter
lo n@
None
Request Message
no je
None
ch ja
Response Message
Te la
<!--ro, opt, int, face pitching angle, range:[0,90], attr:min{req, int},max{req, int}, desc:The smaller, the better.-->1
</pitch>
<yaw min="1" max="10">
<!--ro, opt, int, face yawing angle, range:[0,90], attr:min{req, int},max{req, int}, desc:The smaller, the better.-->1
</yaw>
<leftBorder min="1" max="10">
<!--ro, opt, int, left border of the face, range:[0,100], attr:min{req, int},max{req, int}-->1
</leftBorder>
<rightBorder min="1" max="10">
So
<!--ro, opt, int, right border of the face, range:[0,100], attr:min{req, int},max{req, int}-->1
</rightBorder>
<upBorder min="1" max="10">
<!--ro, opt, int, upper border of the face, range:[0,100], attr:min{req, int},max{req, int}-->1
</upBorder>
<bottomBorder min="1" max="10">
<!--ro, opt, int, lower border of the face, range:[0,100], attr:min{req, int},max{req, int}-->1
</bottomBorder>
<faceScore min="1" max="10">
<!--ro, opt, int, face score, range:[0,100], attr:min{req, int},max{req, int}, desc:The face to be detected is valid when its score is higher than the
value of this node.-->1
</faceScore>
<maxDistance opt="0.5,0.75,1,1.5,2,auto">
<!--ro, opt, string, maximum recognition distance, attr:opt{req, string}, desc:This field takes precedence over interorbitalDistance, unit: m.-->test
</maxDistance>
</FaceCompareCond>
10.2.7.17 Get the capability of configuring parameters of the facial recognition mode.
Request URL
GET /ISAPI/AccessControl/FaceRecognizeMode/capabilities?format=json
Query Parameter
None
Request Message
None
Response Message
{
"FaceRecognizeMode": {
/*ro, opt, object, facial recognition mode*/
"mode": {
/*ro, req, object, mode*/
"@opt": "normalMode"
/*ro, opt, enum, mode options, subType:string, desc:"normalMode" (normal mode), "deepMode" (deep mode)*/
}
}
}
Lt om
None
t .c
Request Message
d
Pv l
None
Response Message
ai
gy gm
{
lo n@
"FaceRecognizeMode": {
/*ro, opt, object, facial recognition mode*/
"mode": "normalMode"
no je
/*ro, req, enum, facial recognition mode, subType:string, desc:"normalMode" (normal mode), "deepMode" (deep mode)*/
}
}
ch ja
Te la
Request URL
or ka
PUT /ISAPI/AccessControl/FaceRecognizeMode?format=json
Query Parameter
None
Request Message
So
{
"FaceRecognizeMode": {
/*opt, object, facial recognition mode*/
"mode": "normalMode"
/*req, enum, facial recognition mode, subType:string, desc:"normalMode" (normal mode), "deepMode" (deep mode)*/
}
}
Response Message
{
"requestURL": "/ISAPI/Intelligent/FDLib/asyncImportDatas?format=json",
/*ro, opt, string, request URL*/
"statusCode": 1,
/*ro, opt, int, status code, desc:1 (succeeded). It is required when an error occurred*/
"statusString": "ok",
/*ro, opt, string, status description, range:[1,64], desc:"ok" (succeeded). It is required when an error occurred*/
"subStatusCode": "ok",
/*ro, opt, string, sub status code, range:[1,64], desc:"ok" (succeeded). It is required when an error occurred*/
"errorCode": 1,
/*ro, opt, int, error code, desc:it is required when the value of statusCode is not 1, it corresponds to subStatusCode*/
"errorMsg": "ok"
/*ro, opt, string, error information, desc:this node is required when the value of statusCode is not 1*/
}
10.2.7.20 Get the parameters of face recognition terminal
Request URL
GET /ISAPI/AccessControl/IdentityTerminal
Query Parameter
None
Request Message
None
Response Message
Lt om
t .c
d
Pv l
ai
gy gm
lo n@
no je
ch ja
Te la
i su
or ka
So
<?xml version="1.0" encoding="UTF-8"?>
<IdentityTerminal xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
<!--ro, req, object, parameters of face recognition terminal, attr:version{req, string, protocolVersion}-->
<terminalMode>
<!--ro, opt, enum, terminal mode, subType:string, desc:"authMode” (authentication mode), "registerMode” (registration mode)-->authMode
</terminalMode>
<idCardReader>
<!--ro, opt, enum, ID card reader model, subType:string, desc:“iDR210”, “DS-K1F110-I”, “DS-K1F1110-B”, “DS-K1F1110-AB”, “none”, “DS-K1F1001-I(USB)”,
“DS-K1F1002-I(USB)”-->iDR210
</idCardReader>
<camera>
<!--ro, opt, enum, camera, subType:string, desc:camera model: C270,DS-2CS5432B-S-->C270
</camera>
<fingerPrintModule>
<!--ro, opt, enum, fingerprint module type, subType:string, desc:“ALIWARD”, “”-->ALIWARD
</fingerPrintModule>
<videoStorageTime>
<!--ro, opt, int, time for saving video, range:[0,10], desc:unit: second-->1
</videoStorageTime>
<faceContrastThreshold>
<!--ro, opt, int, face picture comparison threshold, range:[0,100]-->1
</faceContrastThreshold>
<twoDimensionCode>
<!--ro, opt, enum, whether to enable QR code recognition, subType:string, desc:“enable”, “disable”-->enable
</twoDimensionCode>
<blackListCheck>
<!--ro, opt, enum, whether to enable blocklist verification, subType:string, desc:“enable”, “disable”-->enable
</blackListCheck>
Lt om
<idCardCheckCenter>
<!--ro, opt, enum, ID card comparison mode, subType:string, desc:“local” (compare with ID card of local storage), “server” (compare with ID card of
remote server storage)-->local
t .c
</idCardCheckCenter>
<faceAlgorithm>
d
Pv l
<!--ro, opt, enum, face picture algorithm, subType:string, desc:"DeepLearn" (deep learning algorithm), "Tradition" (third-party algorithm)-->DeepLearn
</faceAlgorithm>
<comNo>
<!--ro, opt, int, COM No., range:[1,9]-->1
ai
gy gm
</comNo>
<memoryLearning>
<!--ro, opt, enum, whether to enable learning and memory function, subType:string, desc:“enable”, “disable”-->enable
lo n@
</memoryLearning>
<saveCertifiedImage>
<!--ro, opt, enum, whether to enable saving authenticated picture, subType:string, desc:“enable”, “disable”-->enable
no je
</saveCertifiedImage>
<MCUVersion>
ch ja
<!--ro, opt, enum, set content to be read from CPU card, subType:string, desc:“serialNo” (read serial No.), “file” (read file)-->serialNo
</readInfoOfCard>
<workMode>
i su
<ecoMode>
<!--ro, opt, object, ECO mode-->
<eco>
<!--ro, opt, enum, whether to enable ECO mode, subType:string, desc:“enable”, “disable”-->enable
</eco>
<faceMatchThreshold1>
<!--ro, opt, int, 1V1 face picture comparison threshold of ECO mode, range:[0,100]-->1
</faceMatchThreshold1>
<faceMatchThresholdN>
<!--ro, opt, int, 1:N face picture comparison threshold of ECO mode, range:[0,100]-->1
So
</faceMatchThresholdN>
<changeThreshold>
<!--ro, opt, int, switching threshold of ECO mode, range:[0,8], desc:switching threshold of ECO mode,which is between 0 and 8-->0
</changeThreshold>
<maskFaceMatchThresholdN>
<!--ro, opt, int, 1:N face picture (face with mask and normal background picture) comparison threshold of ECO mode, range:[0,100]-->1
</maskFaceMatchThresholdN>
<maskFaceMatchThreshold1>
<!--ro, opt, int, 1:1 face picture (face with mask and normal background picture) comparison threshold of ECO mode, range:[0,100]-->1
</maskFaceMatchThreshold1>
</ecoMode>
<enableScreenOff>
<!--ro, opt, bool, whether the device enters the sleep mode when there is no operation after the configured sleep time-->true
</enableScreenOff>
<screenOffTimeout>
<!--ro, opt, int, sleep time, range:[0,3600], unit:s, dep:or,{$.IdentityTerminal.enableScreenOff,eq,true}, desc:unit: second-->1
</screenOffTimeout>
<showMode>
<!--ro, opt, enum, display mode, subType:string, desc:"concise" (simple mode,only the authentication result will be displayed), "normal" (normal mode).
The default mode is normal mode. If this node does not exist, the default mode is normal mode-->concise
</showMode>
<popUpPreviewWindow>
<!--ro, opt, bool, whether to pop up live view window, dep:or,{$.IdentityTerminal.showMode,eq,advertising}-->true
</popUpPreviewWindow>
</IdentityTerminal>
10.2.7.21 Set the parameters of face recognition terminal
Request URL
PUT /ISAPI/AccessControl/IdentityTerminal
Query Parameter
None
Request Message
Lt om
</fingerPrintModule>
<videoStorageTime>
<!--opt, int, time for saving video, range:[0,10], desc:unit: second-->1
t .c
</videoStorageTime>
<faceContrastThreshold>
d
Pv l
<!--opt, int, face picture comparison threshold, range:[0,100]-->1
</faceContrastThreshold>
<twoDimensionCode>
ai
<!--opt, enum, whether to enable QR code recognition, subType:string, desc:“enable”, “disable”-->enable
gy gm
</twoDimensionCode>
<blackListCheck>
<!--opt, enum, whether to enable blocklist verification, subType:string, desc:“enable”, “disable”-->enable
lo n@
</blackListCheck>
<idCardCheckCenter>
<!--opt, enum, ID card comparison mode, subType:string, desc:“local” (compare with ID card of local storage), “server” (compare with ID card of remote
no je
server storage)-->local
</idCardCheckCenter>
ch ja
<faceAlgorithm>
<!--opt, enum, face picture algorithm, subType:string, desc:"DeepLearn" (deep learning algorithm), "Tradition" (third-party algorithm)-->DeepLearn
</faceAlgorithm>
Te la
<comNo>
<!--opt, int, COM No., range:[1,9]-->1
</comNo>
i su
<memoryLearning>
<!--opt, enum, whether to enable learning and memory function, subType:string, desc:“enable”, “disable”-->enable
or ka
</memoryLearning>
<saveCertifiedImage>
<!--opt, enum, whether to enable saving authenticated picture, subType:string, desc:“enable”, “disable”-->enable
</saveCertifiedImage>
<MCUVersion>
<!--opt, string, MCU Version-->test
</MCUVersion>
<usbOutput>
<!--opt, enum, whether to enable USB output of ID card reader, subType:string, desc:“enable”, “disable”-->enable
</usbOutput>
So
<serialOutput>
<!--opt, enum, whether to enable serial port output of ID card reade, subType:string, desc:“enable”, “disable”-->enable
</serialOutput>
<readInfoOfCard>
<!--opt, enum, set content to be read from CPU card, subType:string, desc:“serialNo” (read serial No.), “file” (read file)-->serialNo
</readInfoOfCard>
<workMode>
<!--opt, enum, authentication mode, subType:string, desc:“passMode”, “accessControlMode”-->passMode
</workMode>
<ecoMode>
<!--opt, object, ECO mode-->
<eco>
<!--opt, enum, whether to enable ECO mode, subType:string, desc:“enable”, “disable”-->enable
</eco>
<faceMatchThreshold1>
<!--opt, int, 1V1 face picture comparison threshold of ECO mode, range:[0,100]-->1
</faceMatchThreshold1>
<faceMatchThresholdN>
<!--opt, int, 1VN face picture comparison threshold of ECO mode, range:[0,100]-->1
</faceMatchThresholdN>
<changeThreshold>
<!--opt, int, ECO mode threshold, range:[0,8], desc:switching threshold of ECO mode,which is between 0 and 8-->0
</changeThreshold>
<maskFaceMatchThresholdN>
<!--opt, int, 1:N face picture (face with mask and normal background picture) comparison threshold of ECO mode, range:[0,100]-->1
</maskFaceMatchThresholdN>
<maskFaceMatchThreshold1>
<!--opt, int, 1:1 face picture (face with mask and normal background picture) comparison threshold of ECO mode, range:[0,100]-->1
</maskFaceMatchThreshold1>
<alwaysInfrared>
<!--opt, bool, whether to enable infrared recognition, desc:if this node exists and changeThreshold is 8, it indicates that the device will not always
enable the infrared recognition-->true
</alwaysInfrared>
<ageFaceMatchList>
<!--opt, array, list of different age groups in ECO mode, subType:object, range:[0,5], desc:before set this node, age group matching should be
enabled, see URL: PUT /ISAPI/AccessControl/FaceCompareCond, and ageFaceMatchEnabled should be true-->
<ageFaceMatch>
<!--opt, object, age group matching in ECO mode-->
<ageLevel>
<!--opt, enum, age groups, subType:int, desc:0 (child who are 0~6 years old), 1 (teenager who are 7~17years old), 2 (youth and prime who are 18~40
years old), 3 (middle age who are 41~65 years old), 4 (elderly who are more than 66 years old)-->1
</ageLevel>
<ageFaceMatchThreshold1>
<!--opt, int, matching threshold when authenticating via age groups in ECO mode (1:1), range:[0,100]-->1
</ageFaceMatchThreshold1>
<ageFaceMatchThresholdN>
<!--opt, int, matching threshold when authenticating via age groups in ECO mode (1:N), range:[0,100]-->1
</ageFaceMatchThresholdN>
</ageFaceMatch>
</ageFaceMatchList>
</ecoMode>
<readCardRule>
<!--opt, enum, card No. setting rule, subType:string, desc:"wiegand26", "wiegand34"-->wiegand26
</readCardRule>
<enableScreenOff>
<!--opt, bool, whether the device enters the sleep mode when there is no operation after the configured sleep time-->true
</enableScreenOff>
<screenOffTimeout>
Lt om
<!--opt, int, sleep time, range:[0,3600], unit:s, dep:or,{$.IdentityTerminal.enableScreenOff,eq,true}, desc:unit: second-->1
</screenOffTimeout>
<enableScreensaver>
t .c
<!--opt, bool, whether to enable the screen saver function-->true
</enableScreensaver>
d
<faceModuleVersion>
Pv l
<!--opt, string, face recognition module version, range:[1,32]-->test
</faceModuleVersion>
<showMode>
ai
<!--opt, enum, display mode, subType:string, desc:simple mode indicates that the device displays authentication results exclude employee No., name,
gy gm
etc.; the device applies normal mode by default; advertisement mode indicates that the device displays both advertisement and authentication results;
meeting mode indicates that the device displays check-in page of the conference; custom mode indicates that the device displays layout of the interface
lo n@
customized by users; "concise"-simple mode, "normal"-normal mode (default), "advertising"-advertisement mode, "meeting"-meeting mode, "selfDefine"-custom
mode-->concise
</showMode>
no je
<popUpPreviewWindow>
<!--opt, bool, whether to pop up live view window, dep:or,{$.IdentityTerminal.showMode,eq,advertising}-->true
</popUpPreviewWindow>
ch ja
<needDeviceCheck>
<!--opt, bool, whether it need device check in permission free mode, dep:or,{$.IdentityTerminal.workMode,eq,passMode}-->true
Te la
</needDeviceCheck>
<previewShowTime>
<!--opt, int, display duration in live view, range:[1,99], unit:s, dep:or,{$.IdentityTerminal.popUpPreviewWindow,eq,true}-->1
i su
</previewShowTime>
<screensaverTimeout>
<!--opt, int, range:[0,3600], unit:s, dep:or,{$.IdentityTerminal.enableScreensaver,eq,true}-->1
or ka
</screensaverTimeout>
<screensaverDuration>
<!--opt, int, range:[0,3600], unit:s, dep:or,{$.IdentityTerminal.enableScreensaver,eq,true}-->1
</screensaverDuration>
<standbyTimeout>
<!--opt, int, range:[30,1800], unit:s-->30
</standbyTimeout>
<advertisingDisplayType>
<!--opt, enum, subType:string, dep:or,{$.IdentityTerminal.showMode,eq,advertising}-->full
So
</advertisingDisplayType>
</IdentityTerminal>
Response Message
Lt om
<!--ro, opt, enum, face picture algorithm, subType:string, attr:opt{req, string}, desc:"DeepLearn" (deep learning algorithm), "Tradition" (third-party
algorithm)-->DeepLearn
t .c
</faceAlgorithm>
<saveCertifiedImage opt="enable,disable">
<!--ro, opt, enum, whether to enable saving authenticated picture, subType:string, attr:opt{req, string}, desc:“enable”, “disable”-->enable
d
Pv l
</saveCertifiedImage>
<MCUVersion min="1" max="10"> ai
<!--ro, opt, string, MCU version information, attr:min{req, int},max{req, int}-->test
</MCUVersion>
gy gm
<readInfoOfCard opt="serialNo,file">
<!--ro, opt, enum, set content to be read from CPU card, subType:string, attr:opt{req, string}, desc:"serialNo" (read the serial No.), "file" (read the
file)-->serialNo
lo n@
</readInfoOfCard>
<workMode opt="passMode,accessControlMode">
no je
<!--ro, opt, enum, authentication mode, subType:string, attr:opt{req, string}, desc:authentication mode-->passMode
</workMode>
<ecoMode>
ch ja
</eco>
<faceMatchThreshold1 min="0" max="100">
i su
<!--ro, opt, int, 1V1 face picture comparison threshold of ECO mod, range:[0,100], attr:min{req, int},max{req, int}-->1
</faceMatchThreshold1>
<faceMatchThresholdN min="0" max="100">
or ka
<!--ro, opt, int, 1:N face picture comparison threshold of ECO mode, range:[0,100], attr:min{req, int},max{req, int}-->1
</faceMatchThresholdN>
<changeThreshold min="0" max="8">
<!--ro, opt, int, switching threshold of ECO mode, range:[0,8], attr:min{req, int},max{req, int}, desc:switching threshold of ECO mode,which is
between 0 and 8-->0
</changeThreshold>
<maskFaceMatchThresholdN min="0" max="100">
<!--ro, opt, int, 1:N face picture (face with mask and normal background picture) comparison threshold of ECO mode, range:[0,100], attr:min{req,
int},max{req, int}-->1
So
</maskFaceMatchThresholdN>
<maskFaceMatchThreshold1 min="0" max="100">
<!--ro, opt, int, 1:1 face picture (face with mask and normal background picture) comparison threshold of ECO mode, range:[0,100], attr:min{req,
int},max{req, int}-->1
</maskFaceMatchThreshold1>
</ecoMode>
<enableScreenOff opt="true,false">
<!--ro, opt, bool, whether the device enters the sleep mode when there is no operation after the configured sleep time, attr:opt{req, string}-->true
</enableScreenOff>
<screenOffTimeout min="0" max="3600">
<!--ro, opt, int, sleep time, range:[0,3600], unit:s, attr:min{req, int},max{req, int}-->1
</screenOffTimeout>
<showMode opt="concise,normal,advertising,meeting,selfDefine,boxStatus,clock">
<!--ro, opt, enum, display mode, subType:string, attr:opt{req, string}, desc:"concise" (simple mode,only the authentication result will be displayed),
"normal" (normal mode). The default mode is normal mode. If this node does not exist, the default mode is normal mode-->concise
</showMode>
<popUpPreviewWindow opt="true,false">
<!--ro, opt, bool, whether to pop up live view window, dep:or,{$.IdentityTerminal.showMode,eq,advertising}, attr:opt{req, string}-->true
</popUpPreviewWindow>
</IdentityTerminal>
Response Message
Lt om
<!--ro, req, string, request URL, desc:request URL-->test
</requestURL>
t .c
<statusCode>
<!--ro, req, enum, status code, subType:string, desc:0 (OK), 1 (OK), 2 (Device Busy), 3 (Device Error), 4 (Invalid Operation), 5 (Invalid XML Format), 6
(Invalid XML Content), 7 (Reboot Required)-->1
d
Pv l
</statusCode>
<statusString> ai
<!--ro, req, enum, status description, subType:string, desc:"OK,Device Busy,Device Error,Invalid Operation,Invalid XML Format,Invalid XML
Content,Reboot"-->OK
gy gm
</statusString>
<subStatusCode>
<!--ro, req, string, sub status code, desc:sub status code description-->test
lo n@
</subStatusCode>
</ResponseStatus>
no je
ch ja
Request URL
GET /ISAPI/AccessControl/M1CardEncryptCfg
i su
Query Parameter
or ka
None
Request Message
None
Response Message
So
Lt om
None
t .c
Response Message
d
Pv l
<?xml version="1.0" encoding="UTF-8"?>
ai
<WiegandCfg xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
<!--ro, req, object, configuration of Wiegand parameters, attr:version{req, string, protocolVersion}-->
gy gm
<wiegandNo min="1" max="4" opt="1,4">
<!--ro, req, int, Wiegand interface No., range:[0,4], step:1, attr:min{opt, int},max{opt, int},opt{opt, string}, desc:Wiegand interface No.-->1
</wiegandNo>
lo n@
<communicateDirection opt="receive,send">
<!--ro, req, enum, communication direction, subType:string, attr:opt{req, string}, desc:"receive", "send"-->receive
</communicateDirection>
no je
<wiegandMode
opt="wiegand26,wiegand34,wiegand27,wiegand35,Corporate1000_35,Corporate1000_48,H10302_37,H10304_37,wiegand_26CSN,H103130_32CSN,wiegand_56CSN,wiegand_58">
ch ja
<!--ro, opt, enum, Wiegand mode, subType:string, attr:opt{req, string}, desc:Wiegand mode-->wiegand26
</wiegandMode>
<enable opt="true,false">
Te la
Lt om
</facilityCode>
<dataType>
<!--opt, enum, data type, subType:string, dep:or,{$.WiegandCfg.wiegandMode,eq,send}, desc:data type-->employeeNo
t .c
</dataType>
</WiegandCfg>
d
Pv l
Response Message
ai
gy gm
<?xml version="1.0" encoding="UTF-8"?>
lo n@
<requestURL>
<!--ro, req, string, request URL-->null
ch ja
</requestURL>
<statusCode>
<!--ro, req, enum, status code, subType:int, desc:0 (OK), 1 (OK), 2 (Device Busy), 3 (Device Error), 4 (Invalid Operation), 5 (Invalid XML Format), 6
Te la
<!--ro, req, enum, status information, subType:string, desc:"OK" (succeeded), "Device Busy", "Device Error", "Invalid Operation", "Invalid XML Format",
"Invalid XML Content", "Reboot" (reboot device)-->OK
</statusString>
or ka
<subStatusCode>
<!--ro, req, string, sub status code, which describes the error in details, desc:sub status code, which describes the error in details-->OK
</subStatusCode>
</ResponseStatus>
Request URL
GET /ISAPI/AccessControl/WiegandCfg/wiegandNo/<wiegandID>
Query Parameter
Parameter Name Parameter Type Description
wiegandID string --
Request Message
None
Response Message
<?xml version="1.0" encoding="UTF-8"?>
<WiegandCfg xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
<!--ro, req, object, Wiegand parameters, attr:version{req, string, protocolVersion}-->
<communicateDirection>
<!--ro, req, enum, communication direction, subType:string, desc:"receive", "send"-->receive
</communicateDirection>
<enable>
<!--ro, opt, bool, whether to enable the function or not-->true
</enable>
</WiegandCfg>
Lt om
None
t .c
Response Message
d
Pv l
{
"ClearGroupCfg": {
ai
gy gm
/*ro, opt, object*/
"ClearFlags": {
/*ro, opt, object*/
lo n@
"groupCfg": "true,false"
/*ro, req, string, group parameters*/
}
no je
}
}
ch ja
Te la
Request URL
PUT /ISAPI/AccessControl/ClearGroupCfg?format=json
or ka
Query Parameter
None
Request Message
So
{
"ClearGroupCfg": {
/*opt, object, group parameters*/
"ClearFlags": {
/*opt, object*/
"groupCfg": true
/*req, bool, whether to clear group parameters*/
}
}
}
Response Message
{
"requestURL": "test",
/*ro, opt, string, URI*/
"statusCode": "test",
/*ro, opt, string, status code*/
"statusString": "test",
/*ro, opt, string, status description*/
"subStatusCode": "test",
/*ro, opt, string, sub status code*/
"errorCode": 1,
/*ro, req, int, error code*/
"errorMsg": "ok"
/*ro, req, string, error description*/
}
Lt om
groupID string --
t .c
Request Message
d
Pv l
None ai
Response Message
gy gm
lo n@
{
"GroupCfg": {
/*ro, opt, object, group parameters*/
no je
"enable": true,
/*ro, req, bool, whether to enable the function*/
"ValidPeriodCfg": {
ch ja
"endTime": "1970-01-01T00:00:00+08:00"
/*ro, req, datetime, end time of the validity period (UTC time)*/
},
or ka
"groupName": "test"
/*ro, opt, string*/
}
}
Request URL
PUT /ISAPI/AccessControl/GroupCfg/<groupID>?format=json
Query Parameter
Parameter Name Parameter Type Description
groupID string --
Request Message
{
"GroupCfg": {
/*opt, object, group parameters*/
"enable": true,
/*req, bool, whether to enable the group*/
"ValidPeriodCfg": {
/*opt, object, validity period of the group*/
"enable": true,
/*req, bool, whether to enable validity period*/
"beginTime": "1970-01-01T00:00:00+08:00",
/*req, datetime, start time of the validity period (UTC time)*/
"endTime": "1970-01-01T00:00:00+08:00"
/*req, datetime, end time of the validity period (UTC time)*/
},
"groupName": "test"
/*opt, string, group name*/
}
}
Response Message
{
"requestURL": "test",
/*ro, opt, string, request URL*/
"statusCode": "test",
Lt om
/*ro, opt, string, status code*/
"statusString": "test",
/*ro, opt, string, status description*/
t .c
"subStatusCode": "test",
/*ro, opt, string, sub status code*/
d
Pv l
"errorCode": 1,
/*ro, req, int, error code*/
"errorMsg": "ok"
/*ro, req, string, error information*/
ai
gy gm
}
lo n@
Request URL
ch ja
GET /ISAPI/AccessControl/GroupCfg/capabilities?format=json
Te la
Query Parameter
None
i su
Request Message
or ka
None
Response Message
So
{
"GroupCfg": {
/*ro, opt, object, group parameters*/
"groupNo": {
/*ro, opt, object, group No.*/
"@min": 1,
/*ro, opt, int, the minimum value*/
"@max": 1
/*ro, opt, int, the maximum value*/
},
"enable": "true,false",
/*ro, req, string, whether to enable the group*/
"ValidPeriodCfg": {
/*ro, req, object, whether to enable validity period parameters of the group*/
"enable": "true,false",
/*ro, req, string, whether to enable validity period*/
"beginTime": {
/*ro, req, object, start time of the validity period (UTC time)*/
"@min": 1,
/*ro, opt, int, the minimum value*/
"@max": 32
/*ro, opt, int, the maximum value*/
},
"endTime": {
/*ro, req, object, end time of the validity period (UTC time)*/
"@min": 1,
/*ro, opt, int, the minimum value*/
"@max": 32
Lt om
/*ro, opt, int, the maximum value*/
}
},
t .c
"groupName": {
/*ro, opt, object, group name*/
d
Pv l
"@min": 1,
/*ro, opt, int, the minimum value*/
"@max": 32
ai
/*ro, opt, int, the maximum value*/
gy gm
}
}
}
lo n@
no je
Request URL
Te la
GET /ISAPI/AccessControl/MultiCardCfg/<doorID>?format=json
Query Parameter
i su
doorID string --
Request Message
None
So
Response Message
{
"MultiCardCfg": {
/*ro, opt, object*/
"enable": true,
/*ro, req, bool, whether to enable multi-factor authentication*/
"swipeIntervalTimeout": 10,
/*ro, opt, int, timeout of swiping (authentication) interval*/
"GroupCfg": [
/*ro, opt, array, multi-factor authentication parameters, subType:object*/
{
"id": 1,
/*ro, opt, int, multi-factor authentication No.*/
"enable": true,
/*ro, opt, bool, whether to enable multi-factor authentication*/
"enableOfflineVerifyMode": true,
/*ro, opt, bool, whether to enable verification mode when the access control device is offline (the super password will replace opening door
remotely)*/
"templateNo": 1,
/*ro, opt, int, schedule template No. to enable the multi-factor authentication*/
"GroupCombination": [
/*ro, opt, array, multi-factor authentication parameters, subType:object*/
{
"enable": true,
/*ro, opt, bool, whether to enable multi-factor authentication*/
"memberNum": 3,
/*ro, opt, int, number of members swiping cards*/
"sequenceNo": 1,
/*ro, opt, int, serial No. of swiping cards of the multi-factor authentication group*/
Lt om
"groupNo": 1
/*ro, opt, int, group No.*/
}
t .c
]
}
d
Pv l
]
}
}
ai
gy gm
10.2.8.7 Set parameters of multi-factor authentication mode
lo n@
Request URL
no je
PUT /ISAPI/AccessControl/MultiCardCfg/<doorID>?format=json
ch ja
Query Parameter
Te la
doorID string --
or ka
Request Message
So
{
"MultiCardCfg": {
/*opt, object, parameters of multi-factor authentication mode*/
"enable": true,
/*req, bool, whether to enable multi-factor authentication*/
"swipeIntervalTimeout": 10,
/*opt, int, timeout of swiping (authentication) interval*/
"GroupCfg": [
/*opt, array, multi-factor authentication parameters, subType:object*/
{
"id": 1,
/*opt, int, multi-factor authentication No.*/
"enable": true,
/*opt, bool, whether to enable multi-factor authentication*/
"enableOfflineVerifyMode": true,
/*opt, bool, whether to enable verification mode when the access control device is offline (the super password will replace opening door
remotely)*/
"templateNo": 1,
/*opt, int, schedule template No. to enable the multi-factor authentication*/
"GroupCombination": [
/*opt, array, parameters of the multi-factor authentication group, subType:object*/
{
"enable": true,
/*opt, bool, whether to enable multi-factor authentication*/
"memberNum": 3,
/*opt, int, number of members swiping cards*/
"sequenceNo": 1,
/*opt, int, serial No. of swiping cards of the multi-factor authentication group*/
Lt om
"groupNo": 1
/*opt, int, group No.*/
}
t .c
]
}
d
Pv l
]
}
}
ai
gy gm
Response Message
lo n@
{
no je
"requestURL": "test",
/*ro, opt, string, URI*/
ch ja
"statusCode": "test",
/*ro, opt, string, status code*/
"statusString": "test",
Te la
"errorCode": 1,
/*ro, req, int, error code*/
"errorMsg": "ok"
or ka
GET /ISAPI/AccessControl/MultiCardCfg/capabilities?format=json
Query Parameter
None
Request Message
None
Response Message
{
"MultiCardCfg": {
/*ro, opt, object*/
"doorNo": {
/*ro, opt, object, door No.*/
"@min": 1,
/*ro, opt, int, minimum value*/
"@max": 256
/*ro, opt, int, maximum value*/
},
"enable": "true,false",
/*ro, req, string, whether to enable multi-factor authentication*/
"swipeIntervalTimeout": {
/*ro, opt, object, timeout of swiping (authentication) interval*/
"@min": 1,
/*ro, opt, int, minimum value*/
"@max": 255
/*ro, opt, int, maximum value*/
},
"GroupCfg": {
/*ro, opt, object, multi-factor authentication parameters*/
"maxSize": 20,
/*ro, opt, int, maximum value*/
"id": {
/*ro, opt, object, multi-factor authentication No.*/
"@min": 1,
/*ro, opt, int, minimum value*/
"@max": 20
Lt om
/*ro, opt, int, maximum value*/
},
"enable": "true,false",
t .c
/*ro, opt, string, whether to enable multi-factor authentication*/
"enableOfflineVerifyMode": "true,false",
d
Pv l
/*ro, opt, string, whether to enable verification mode when the access control device is offline (the super password will replace opening door
remotely)*/
"templateNo": {
ai
/*ro, opt, object, schedule template No. to enable the multi-factor authentication*/
gy gm
"@min": 1,
/*ro, opt, int, minimum value*/
"@max": 20
lo n@
"memberNum": {
/*ro, opt, object, number of members swiping cards*/
"@min": 1,
i su
{
"UserRightHolidayGroupCfg": {
/*req, object, the holiday group parameters of the access permission control schedule*/
"enable": true,
/*req, bool, whether to enable, desc:true (yes), false (no)*/
"groupName": "test",
/*req, string, holiday group name*/
"holidayPlanNo": "1,3,5",
/*req, string, holiday group schedule No., desc:holiday group schedule No.*/
"operateType": "byTerminal",
/*opt, enum, operation type, subType:string, desc:"byTerminal" (by terminal), "byOrg" (by organization), "byTerminalOrg" (by terminal
organization)*/
"terminalNoList": [1, 2, 3, 4],
/*opt, array, terminal ID list, subType:int, desc:this node is required when operation type is "byTerminal" or "byTerminalOrg"*/
"orgNoList": [1, 2, 3, 4]
/*opt, array, organization ID list, subType:int, desc:this node is required when operation type is "byOrg" or "byTerminalOrg"*/
}
}
Lt om
Response Message
t .c
{
d
Pv l
"requestURL": "test",
/*ro, opt, string, URI*/
"statusCode": "test",
ai
/*ro, opt, string, status code, desc:1 (succeeded). It is required when an error occurred*/
gy gm
"statusString": "test",
/*ro, opt, string, status description, desc:"ok" (succeeded). It is required when an error occurred*/
"subStatusCode": "test",
lo n@
/*ro, opt, string, sub status code, desc:"ok" (succeeded). It is required when an error occurred*/
"errorCode": 1,
/*ro, req, int, error code, desc:it is required when the value of statusCode is not 1, and it corresponds to subStatusCode*/
no je
"errorMsg": "ok"
/*ro, req, string, error information, desc:this node is required when the value of statusCode is not 1*/
ch ja
}
Te la
10.2.9.2 Get the holiday group configuration parameters of the access permission control schedule
i su
Request URL
or ka
GET /ISAPI/AccessControl/UserRightHolidayGroupCfg/<holidayGroupID>?format=json
Query Parameter
Parameter Name Parameter Type Description
holidayGroupID string --
So
Request Message
None
Response Message
{
"UserRightHolidayGroupCfg": {
/*ro, req, object*/
"enable": true,
/*ro, req, bool, whether to enable, desc:true (yes), false (no)*/
"groupName": "test",
/*ro, req, string, holiday group name*/
"holidayPlanNo": "1,3,5"
/*ro, req, string, holiday group schedule No., desc:holiday group schedule No.*/
}
}
10.2.9.3 Get the holiday group configuration capability of the access permission control
Request URL
GET /ISAPI/AccessControl/UserRightHolidayGroupCfg/capabilities?format=json
Query Parameter
None
Request Message
None
Response Message
{
"UserRightHolidayGroupCfg": {
/*ro, req, object*/
"groupNo": {
/*ro, opt, object, holiday group No.*/
"@min": 1,
/*ro, opt, int, the minimum value*/
"@max": 16
/*ro, opt, int, the maximum value*/
},
"enable": "true,false",
/*ro, opt, string, whether it is enabled, desc:"true" (enabled), "false" (disabled)*/
"groupName": {
/*ro, opt, object, holiday group name*/
"@min": 1,
/*ro, opt, int, the minimum value*/
"@max": 32
Lt om
/*ro, opt, int, the maximum value*/
},
"holidayPlanNo": {
t .c
/*ro, opt, object, holiday group schedule No.*/
"@min": 1,
d
/*ro, opt, int, the minimum value*/
Pv l
"@max": 16
}
ai
/*ro, opt, int, the maximum value*/
}
gy gm
}
lo n@
10.2.9.4 Set the holiday schedule parameters of the access permission control
no je
Request URL
ch ja
PUT /ISAPI/AccessControl/UserRightHolidayPlanCfg/<holidayPlanID>?format=json
Te la
Query Parameter
i su
holidayPlanID string --
Request Message
So
{
"UserRightHolidayPlanCfg": {
/*req, object, the holiday schedule parameters of the access permission control*/
"enable": true,
/*req, bool, whether to enable, desc:"true" (enable), "false" (disable)*/
"beginDate": "1970-01-01",
/*req, date, start date of the holiday, desc:device local time*/
"endDate": "1970-01-01",
/*req, date, end date of the holiday, desc:device local time*/
"HolidayPlanCfg": [
/*req, array, subType:object*/
{
"id": 1,
/*req, int, time period No., range:[1,8], desc:it is between 1 and 8*/
"enable": true,
/*req, bool, whether to enable, desc:"true" (enable), "false" (disable)*/
"TimeSegment": {
/*opt, object, time period*/
"beginTime": "00:00:00",
/*req, time, start time of the time period, desc:device local time*/
"endTime": "00:00:00"
/*req, time, end time of the time period, desc:device local time*/
},
"authenticationTimesEnabled": true,
/*opt, bool*/
"authenticationTimes": 10
/*opt, int, range:[1,255], step:1*/
}
Lt om
]
}
}
t .c
d
Pv l
Response Message ai
gy gm
{
"requestURL": "test",
/*ro, opt, string, URI*/
lo n@
"statusCode": "test",
/*ro, opt, string, status code, desc:1 (succeeded). It is required when an error occurred*/
"statusString": "test",
no je
/*ro, opt, string, status description, desc:"ok" (succeeded). It is required when an error occurred*/
"subStatusCode": "test",
ch ja
/*ro, opt, string, sub status code, desc:"ok" (succeeded). It is required when an error occurred*/
"errorCode": 1,
/*ro, opt, int, error code, desc:it is required when the value of statusCode is not 1, and it corresponds to subStatusCode*/
Te la
"errorMsg": "ok"
/*ro, opt, string, error information, desc:this node is required when the value of statusCode is not 1*/
}
i su
or ka
Lt om
]
}
}
t .c
d
Pv l
ai
10.2.9.6 Get the holiday schedule configuration capability of the access permission control
Request URL
gy gm
GET /ISAPI/AccessControl/UserRightHolidayPlanCfg/capabilities?format=json
lo n@
Query Parameter
no je
None
ch ja
Request Message
None
Te la
Response Message
i su
or ka
So
{
"UserRightHolidayPlanCfg": {
/*ro, req, object*/
"planNo": {
/*ro, opt, object, holiday schedule No.*/
"@min": 1,
/*ro, opt, int, the minimum value*/
"@max": 16
/*ro, opt, int, the maximum value*/
},
"enable": "true,false",
/*ro, opt, string, whether it is enabled, desc:"true" (enabled), "false" (disabled)*/
"beginDate": "1970-01-01",
/*ro, opt, date, start date of the holiday, desc:(device local time)*/
"endDate": "1970-01-01",
/*ro, opt, date, end date of the holiday, desc:(device local time)*/
"HolidayPlanCfg": {
/*ro, opt, object, holiday schedule parameter*/
"maxSize": 8,
/*ro, opt, int, the maximum value*/
"id": {
/*ro, opt, object, time period No.*/
"@min": 1,
/*ro, opt, int, the minimum value*/
"@max": 8
/*ro, opt, int, the maximum value*/
},
"enable": "true,false",
Lt om
/*ro, opt, string, whether it is enabled, desc:"true" (enabled), "false" (disabled)*/
"TimeSegment": {
/*ro, opt, object, time period*/
t .c
"beginTime": "00:00:00",
/*ro, opt, time, start time, desc:(device local time)*/
d
Pv l
"endTime": "00:00:00",
/*ro, opt, time, end time, desc:(device local time)*/
"validUnit": "minute"
ai
/*ro, opt, enum, time accuracy, subType:string, desc:"hour", "minute", "second". If this node is not returned, the default time accuracy is
gy gm
"minute"*/
},
"authenticationTimesEnabled": {
lo n@
},
"authenticationTimes": {
ch ja
"@max": 255
/*ro, req, int, range:[1,255], step:1*/
}
i su
}
}
or ka
10.2.9.7 Get the schedule template configuration parameters of the access permission control
Request URL
GET /ISAPI/AccessControl/UserRightPlanTemplate/<planTemplateID>?format=json
So
Query Parameter
Parameter Name Parameter Type Description
planTemplateID string --
Request Message
None
Response Message
{
"UserRightPlanTemplate": {
/*ro, req, object*/
"enable": true,
/*ro, req, bool, whether to enable, desc:true (yes), false (no)*/
"templateName": "test",
/*ro, req, string, template name*/
"weekPlanNo": 1,
/*ro, req, int, week schedule No.*/
"holidayGroupNo": "1,3,5"
/*ro, req, string, holiday group No., desc:holiday group No.*/
}
}
10.2.9.8 Set the schedule template parameters of the access permission control
Request URL
PUT /ISAPI/AccessControl/UserRightPlanTemplate/<planTemplateID>?format=json
Query Parameter
Parameter Name Parameter Type Description
Lt om
planTemplateID string --
t .c
Request Message
d
Pv l
{
"UserRightPlanTemplate": {
ai
/*req, object, the schedule template of the access permission control*/
gy gm
"enable": true,
/*req, bool, whether to enable, desc:true (yes), false (no)*/
"templateName": "test",
lo n@
"operateType": "byTerminal",
/*opt, enum, operation type, subType:string, desc:"byTerminal" (by terminal), "byOrg" (by organization), "byTerminalOrg" (by terminal
organization)*/
Te la
"orgNoList": [1, 2, 3, 4]
/*opt, array, organization ID list, subType:int, desc:this node is required when operation type is "byOrg" or "byTerminalOrg"*/
}
or ka
Response Message
{
"requestURL": "test",
So
10.2.9.9 Get the schedule template configuration capability of the access permission control
Request URL
GET /ISAPI/AccessControl/UserRightPlanTemplate/capabilities?format=json
Query Parameter
None
Request Message
None
Response Message
{
"UserRightPlanTemplate": {
/*ro, opt, object*/
"templateNo": {
/*ro, opt, object, schedule template No.*/
"@min": 1,
/*ro, opt, int, the minimum value*/
"@max": 16
/*ro, opt, int, the maximum value*/
},
"enable": "true,false",
/*ro, opt, string, whether it is enabled, desc:"true" (enabled), "false" (disabled)*/
"templateName": {
/*ro, opt, object, template name*/
"@min": 1,
/*ro, opt, int, the minimum value*/
"@max": 32
/*ro, opt, int, the maximum value*/
},
"weekPlanNo": {
/*ro, opt, object, weekly schedule No.*/
"@min": 1,
/*ro, opt, int, the minimum value*/
"@max": 16
/*ro, opt, int, the maximum value*/
},
Lt om
"holidayGroupNo": {
/*ro, opt, object, holiday group No.*/
t .c
"@min": 1,
/*ro, opt, int, the minimum value*/
"@max": 16
d
Pv l
/*ro, opt, int, the maximum value*/
}
}
} ai
gy gm
lo n@
Request URL
GET /ISAPI/AccessControl/UserRightWeekPlanCfg/<weekPlanID>?format=json
ch ja
Query Parameter
Te la
weekPlanID string --
or ka
Request Message
None
Response Message
So
{
"UserRightWeekPlanCfg": {
/*ro, opt, object, weekly schedule configuration parameters*/
"enable": true,
/*ro, req, bool, whether to enable, desc:true (enable), false (disable)*/
"WeekPlanCfg": [
/*ro, req, array, weekly schedule parameters, subType:object*/
{
"week": "Monday",
/*ro, req, enum, day of the week, subType:string, desc:"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"*/
"id": 1,
/*ro, req, int, time period No., range:[1,8], desc:it is between 1 and 8*/
"enable": true,
/*ro, req, bool, whether to enable, desc:true (enable), false (disable)*/
"TimeSegment": {
/*ro, req, object, time period*/
"beginTime": "10:10:00",
/*ro, req, string, start time of the time period, desc:device local time*/
"endTime": "12:10:00"
/*ro, req, string, end time of the time period, desc:device local time*/
},
"authenticationTimesEnabled": true,
/*ro, opt, bool*/
"authenticationTimes": 10
/*ro, opt, int, range:[1,255], step:1*/
}
]
}
Lt om
}
t .c
10.2.9.11 Set the week schedule parameters of the access permission control
d
Pv l
Request URL ai
PUT /ISAPI/AccessControl/UserRightWeekPlanCfg/<weekPlanID>?format=json
gy gm
Query Parameter
lo n@
weekPlanID string --
ch ja
Request Message
Te la
i su
{
"UserRightWeekPlanCfg": {
/*opt, object, the week schedule parameters of the access permission control*/
or ka
"enable": true,
/*req, bool, whether to enable, desc:"true" (enable), "false" (disable)*/
"WeekPlanCfg": [
/*req, array, week schedule parameters, subType:object*/
{
"week": "Monday",
/*req, enum, days of the week, subType:string, desc:"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"*/
"id": 1,
/*req, int, time period No., range:[1,8], desc:it is between 1 and 8*/
So
"enable": true,
/*req, bool, whether to enable, desc:"true" (enable), "false" (disable)*/
"TimeSegment": {
/*req, object, time period*/
"beginTime": "10:10:00",
/*req, string, start time of the time period, desc:(device local time)*/
"endTime": "12:10:00"
/*req, string, end time of the time period, desc:(device local time)*/
},
"authenticationTimesEnabled": true,
/*opt, bool*/
"authenticationTimes": 10
/*opt, int, range:[1,255], step:1*/
}
]
}
}
Response Message
{
"requestURL": "test",
/*ro, opt, string, URI*/
"statusCode": "test",
/*ro, opt, string, status code, desc:1 (succeeded). It is required when an error occurred*/
"statusString": "test",
/*ro, opt, string, status description, desc:"ok" (succeeded). It is required when an error occurred*/
"subStatusCode": "test",
/*ro, opt, string, sub status code, desc:"ok" (succeeded). It is required when an error occurred*/
"errorCode": 1,
/*ro, opt, int, error code, desc:it is required when the value of statusCode is not 1, and it corresponds to subStatusCode*/
"errorMsg": "ok"
/*ro, opt, string, error information, desc:this node is required when the value of statusCode is not 1*/
}
10.2.9.12 Get the weekly schedule configuration capability of the access permission control
Request URL
GET /ISAPI/AccessControl/UserRightWeekPlanCfg/capabilities?format=json
Query Parameter
None
Lt om
Request Message
t .c
None
Response Message
d
Pv l
ai
gy gm
lo n@
no je
ch ja
Te la
i su
or ka
So
{
"UserRightWeekPlanCfg": {
/*ro, opt, object*/
"planNo": {
/*ro, opt, object, weekly schedule No.*/
"@min": 1,
/*ro, opt, int, the minimum value*/
"@max": 16
/*ro, opt, int, the maximum value*/
},
"enable": "true,false",
/*ro, opt, string, whether it is enabled, desc:"true" (enabled), "false" (disabled)*/
"WeekPlanCfg": {
/*ro, opt, object, weekly schedule parameters*/
"maxSize": 56,
/*ro, opt, int, the maximum value*/
"week": {
/*ro, opt, object, week*/
"@opt": "Monday"
/*ro, opt, enum, days of the week, subType:string, desc:"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"*/
},
"id": {
/*ro, opt, object*/
"@min": 1,
/*ro, opt, int, the minimum value*/
"@max": 8
/*ro, opt, int, the maximum value*/
},
Lt om
"enable": "true,false",
/*ro, opt, string, whether it is enabled, desc:"true" (enabled), "false" (disabled)*/
"TimeSegment": {
t .c
/*ro, opt, object, time period*/
"beginTime": "test",
d
Pv l
/*ro, opt, string, start time, desc:(device local time)*/
"endTime": "test",
ai
/*ro, opt, string, end time, desc:(device local time)*/
"validUnit": "minute"
gy gm
/*ro, opt, enum, time accuracy, subType:string, desc:"hour", "minute", "second". If this node is not returned, the default time accuracy is
"minute"*/
},
lo n@
"authenticationTimesEnabled": {
/*ro, opt, object*/
"@opt": [true, false]
no je
"authenticationTimes": {
/*ro, opt, object*/
"@min": 1,
Te la
}
}
or ka
}
}
and permissions
Request URL
GET /ISAPI/AccessControl/UserInfoDetail/Delete/capabilities?format=json
Query Parameter
None
Request Message
None
Response Message
{
"UserInfoDetail": {
/*ro, opt, object, user Information*/
"mode": {
/*ro, req, object*/
"@opt": "all,byEmployeeNo"
/*ro, opt, string, deleting mode, desc:all (delete all), byEmployeeNo (delete by employee No. (person ID))*/
},
"EmployeeNoList": {
/*ro, opt, object, person ID list, desc:person ID list*/
"maxSize": 50,
/*ro, opt, int*/
"employeeNo": {
/*ro, opt, object, employee No. (person ID)*/
"@min": 1,
/*ro, opt, int, the maximum value*/
"@max": 32
/*ro, opt, int, the minimum value*/
}
}
}
}
10.2.10.2 Start deleting all person information (including linked cards, fingerprints, and faces) and
permissions by employee No.
Lt om
Request URL
t .c
PUT /ISAPI/AccessControl/UserInfoDetail/Delete?format=json
d
Pv l
Query Parameter
Parameter Name Parameter Type Description
ai
gy gm
security string --
lo n@
iv string --
no je
Request Message
ch ja
{
Te la
"UserInfoDetail": {
/*opt, object, user Information*/
i su
"mode": "all",
/*req, enum, deleting mode, subType:string, desc:deleting mode*/
"EmployeeNoList": [
or ka
Response Message
{
"statusCode": 1,
/*ro, opt, int, status code, desc:1 (succeeded). It is required when an error occurred*/
"statusString": "ok",
/*ro, opt, string, status description, range:[1,64], desc:"ok" (succeeded). It is required when an error occurred*/
"subStatusCode": "ok",
/*ro, opt, string, sub status code, range:[1,64], desc:"ok" (succeeded). It is required when an error occurred*/
"errorCode": 1,
/*ro, opt, int, error code, desc:when the value of statusCode is not 1, it corresponds to subStatusCode*/
"errorMsg": "ok"
/*ro, opt, string, error information, desc:this field is required when the value of statusCode is not 1*/
}
10.2.10.3 Get the status of deleting all person information (including linked cards, fingerprints, and faces)
and permissions by employee No
Request URL
GET /ISAPI/AccessControl/UserInfoDetail/DeleteProcess?format=json
Query Parameter
None
Request Message
None
Response Message
{
"UserInfoDetailDeleteProcess": {
/*ro, req, object*/
"status": "processing",
/*ro, req, enum, status, subType:string, desc:status*/
"percent": 100
/*ro, opt, int, range:[0,100], dep:or,{$.UserInfoDetailDeleteProcess.status,eq,processing}*/
}
}
Lt om
t .c
10.2.11 Person and Credential Management
d
Pv l
10.2.11.1 Get the capability of deleting person information (including linked cards, fingerprints, and faces)
ai
and permissions
gy gm
Request URL
lo n@
GET /ISAPI/AccessControl/UserInfoDetail/Delete/capabilities?format=json
Query Parameter
no je
None
ch ja
Request Message
Te la
None
i su
Response Message
or ka
{
"UserInfoDetail": {
/*ro, opt, object, user Information*/
"mode": {
/*ro, req, object*/
"@opt": "all,byEmployeeNo"
/*ro, opt, string, deleting mode, desc:all (delete all), byEmployeeNo (delete by employee No. (person ID))*/
},
"EmployeeNoList": {
So
10.2.11.2 Start deleting all person information (including linked cards, fingerprints, and faces) and
permissions by employee No.
Request URL
PUT /ISAPI/AccessControl/UserInfoDetail/Delete?format=json
Query Parameter
Parameter Name Parameter Type Description
security string --
iv string --
Request Message
{
"UserInfoDetail": {
/*opt, object, user Information*/
"mode": "all",
/*req, enum, deleting mode, subType:string, desc:deleting mode*/
"EmployeeNoList": [
/*opt, array, person ID list, subType:object*/
{
"employeeNo": "test"
/*opt, string, employee No.*/
}
],
"operateType": "byTerminal",
/*opt, enum, operation mode, subType:string, desc:"byTerminal" (by terminal), "byOrg" (by organization), "byTerminalOrg" (by terminal
organization)*/
"terminalNoList": [1, 2, 3, 4],
/*opt, array, terminal list, subType:int, dep:and,{$.UserInfoDetail.operateType,eq,byTerminal}*/
Lt om
"orgNoList": [1, 2, 3, 4]
/*opt, array, organization list, subType:int, dep:or,{$.UserInfoDetail.operateType,eq,byOrg},{$.UserInfoDetail.operateType,eq,byTerminalOrg}*/
}
t .c
}
d
Pv l
Response Message ai
gy gm
{
"statusCode": 1,
lo n@
/*ro, opt, int, status code, desc:1 (succeeded). It is required when an error occurred*/
"statusString": "ok",
/*ro, opt, string, status description, range:[1,64], desc:"ok" (succeeded). It is required when an error occurred*/
no je
"subStatusCode": "ok",
/*ro, opt, string, sub status code, range:[1,64], desc:"ok" (succeeded). It is required when an error occurred*/
"errorCode": 1,
ch ja
/*ro, opt, int, error code, desc:when the value of statusCode is not 1, it corresponds to subStatusCode*/
"errorMsg": "ok"
Te la
/*ro, opt, string, error information, desc:this field is required when the value of statusCode is not 1*/
}
i su
10.2.11.3 Get the status of deleting all person information (including linked cards, fingerprints, and faces)
or ka
None
Request Message
None
Response Message
{
"UserInfoDetailDeleteProcess": {
/*ro, req, object*/
"status": "processing",
/*ro, req, enum, status, subType:string, desc:status*/
"percent": 100
/*ro, opt, int, range:[0,100], dep:or,{$.UserInfoDetailDeleteProcess.status,eq,processing}*/
}
}
{
"AsyncImportDatasTask": {
/*ro, req, object*/
"taskID": "test",
/*ro, req, string, range:[1,64]*/
"URL": "test",
/*ro, opt, string, range:[1,256]*/
"status": 0,
/*ro, req, enum, subType:int*/
"totalNum": 1,
/*ro, opt, int*/
Lt om
"successNum": 1,
/*ro, opt, int*/
"failedNum": 1
t .c
/*ro, opt, int*/
}
d
Pv l
}
ai
gy gm
10.2.12.2 Delete a specified task of applying person data asynchronously
Request URL
lo n@
DELETE /ISAPI/AccessControl/UserInfo/asyncImportDatasTasks/<taskID>?format=json
no je
Query Parameter
ch ja
taskID string --
i su
Request Message
or ka
None
Response Message
{
"statusCode": 1,
/*ro, opt, int*/
So
"statusString": "ok",
/*ro, opt, string, range:[1,64]*/
"subStatusCode": "ok",
/*ro, opt, string, range:[1,64]*/
}
{
"AsyncImportDatasCap": {
/*ro, req, object*/
/*ro, req, object*/
"taskID": {
/*ro, req, object*/
"@min": 1,
/*ro, opt, int*/
"@max": 64
/*ro, opt, int*/
},
"taskNum": 1,
/*ro, req, int*/
"URL": {
/*ro, req, object*/
"@min": 1,
/*ro, opt, int*/
"@max": 256
/*ro, opt, int*/
},
"singleFileMaxSize": 1,
/*ro, req, int*/
"employeeNo": {
/*ro, opt, object*/
"@min": 1,
/*ro, opt, int*/
"@max": 32
/*ro, opt, int*/
},
"deleteUser": {
/*ro, opt, object*/
"@opt": [true, false]
/*ro, opt, array, subType:bool*/
Lt om
},
"name": {
/*ro, opt, object*/
t .c
"@min": 1,
/*ro, opt, int*/
d
"@max": 32
Pv l
/*ro, opt, int*/
},
"userType": {
ai
/*ro, opt, object*/
gy gm
"@opt": ["normal", "visitor", "blackList"]
/*ro, opt, array, subType:string*/
lo n@
},
"Valid": {
/*ro, opt, object*/
no je
"enable": {
/*ro, opt, object*/
"@opt": [true, false]
ch ja
"beginTime": "1970-01-01T00:00:00+08:00",
/*ro, opt, string*/
"endTime": "2037-12-31T23:59:59+08:00"
i su
Lt om
/*ro, opt, int*/
},
t .c
"maxOpenDoorTime": {
/*ro, opt, object*/
"@min": 0,
d
Pv l
/*ro, opt, int*/
},
"@max": 1
/*ro, opt, int*/
ai
gy gm
"openDoorTime": {
/*ro, opt, object*/
"@min": 1,
lo n@
"@max": 1
/*ro, opt, int*/
i su
},
"floorNumber": {
/*ro, opt, object*/
or ka
"@min": 1,
/*ro, opt, int*/
"@max": 1
/*ro, opt, int*/
}
},
"FaceInfo": {
/*ro, opt, object*/
"deleteAllFace": {
So
Lt om
},
"numberPerPerson": 50
/*ro, opt, enum, subType:int*/
t .c
}
},
d
Pv l
"FPInfo": {
/*ro, opt, object*/
"deleteAllFP": {
/*ro, opt, object*/
ai
gy gm
"@opt": [true, false]
/*ro, opt, array, subType:bool*/
},
lo n@
"List": {
/*ro, opt, object*/
"fingerID": {
no je
},
"deleteFP": {
/*ro, opt, object*/
i su
"enableCardReaderNo": {
/*ro, opt, object*/
"@min": 1,
/*ro, opt, int*/
"@max": 1
/*ro, opt, int*/
},
"enableCardReaderNum": {
/*ro, opt, object*/
So
"@min": 0,
/*ro, opt, int*/
"@max": 1
/*ro, opt, int*/
},
"fingerType": {
/*ro, opt, object*/
"@opt": ["normalFP", "hijackFP", "patrolFP", "superFP", "dismissingFP"]
/*ro, opt, array, subType:string*/
},
"fingerData": {
/*ro, opt, object*/
"@opt": [768]
/*ro, opt, array, subType:int*/
},
"AccessControl": {
/*ro, opt, object*/
"leaderFPNum": {
/*ro, opt, object*/
"@min": 0,
/*ro, opt, int*/
"@max": 1
/*ro, opt, int*/
}
}
}
}
}
}
10.2.12.4 Get the status of all tasks of applying person data asynchronously
Request URL
GET /ISAPI/AccessControl/UserInfo/asyncImportDatasTasks/status?format=json
Query Parameter
None
Request Message
None
Response Message
{
}
10.2.12.5 Get the status of a specified task of applying person pictures asynchronously
Lt om
Request URL
GET /ISAPI/AccessControl/UserPic/asyncImportDatasTasks/<taskID>/status?format=json
t .c
Query Parameter
d
Pv l
Parameter Name Parameter Type Description ai
gy gm
taskID string --
lo n@
Request Message
no je
None
Response Message
ch ja
Te la
{
"AsyncImportDatasTask": {
/*ro, req, object*/
i su
"taskID": "test",
/*ro, req, string, range:[1,64]*/
"URL": "test",
or ka
}
}
Lt om
{
t .c
"AsyncImportDatasCap": {
/*ro, opt, object*/
d
"taskID": {
Pv l
/*ro, opt, object*/
"@min": 1,
/*ro, opt, int*/
ai
"@max": 64
gy gm
/*ro, req, int*/
},
lo n@
"taskNum": 1,
/*ro, req, int*/
"URL": {
no je
"@max": 256
/*ro, req, int*/
Te la
},
"singleFileMaxSize": 1,
/*ro, req, int*/
i su
"employeeNo": {
/*ro, opt, object*/
"@min": 1,
or ka
10.2.12.8 Get the status of all tasks of applying person pictures asynchronously
Request URL
GET /ISAPI/AccessControl/UserPic/asyncImportDatasTasks/status?format=json
Query Parameter
None
Request Message
None
Response Message
{
}
Lt om
{
"QRCodeEventCap": {
t .c
/*ro, req, object, capability of actively getting QR code scanning events*/
"QRCodeEventCond": {
d
Pv l
/*ro, opt, object, condition of actively getting QR code scanning events*/
"searchID": {
ai
/*ro, req, object, search ID, desc:search ID,which is used to check whether the current search requester is the same as the previous one. If
they are the same,the search record will be stored in the device to speed up the next search*/
gy gm
"@min": 1,
/*ro, opt, int, minimum value*/
"@max": 1
lo n@
/*ro, req, object, the start position of the search result in the result list, desc:the start position of search result in the result list. In a
single search,if you cannot get all the records in the result list,you can mark the end position and get the following records after the marked position in
ch ja
the next search. If the maximum number of totalMatches supported by the device is M and the number of totalMatches stored in the device now is N (N<=M),the
valid range of this node is 0 to N-1*/
"@min": 1,
Te la
},
"maxResults": {
or ka
/*ro, req, object, the maximum number of search results that can be obtained by calling the URI this time, desc:if maxResults exceeds the range
returned by the device capability, the device will return the maximum number of search results according to the device capability and will not return error
message*/
"@min": 1,
/*ro, opt, int, minimum value*/
"@max": 1
/*ro, opt, int, maximum value*/
},
"startTime": "1970-01-01T00:00:00+08:00",
/*ro, opt, datetime, start time (UTC time)*/
So
"endTime": "1970-01-01T00:00:00+08:00",
/*ro, opt, datetime, end time (UTC time)*/
"picEnable": {
/*ro, opt, object, whether to upload the picture along with the event information, desc:false (not upload the picture along with the event
information), true (upload the picture along with the event information). false (all matched events will be uploaded without pictures) true (all matched
events will be uploaded with pictures if there are any) If this node is not configured,the default value is true*/
"@opt": [true, false]
/*ro, opt, array, optional, subType:bool*/
},
"beginSerialNo": {
/*ro, opt, object, start serial No.*/
"@min": 1,
/*ro, opt, int, minimum value*/
"@max": 1
/*ro, opt, int, maximum value*/
},
"endSerialNo": {
/*ro, opt, object, end serial No.*/
"@min": 1,
/*ro, opt, int, minimum value*/
"@max": 1
/*ro, opt, int, maximum value*/
}
},
}
}
10.2.13.2 Search QR code scanning events
Request URL
POST /ISAPI/AccessControl/QRCodeEvent?format=json
Query Parameter
None
Request Message
{
"QRCodeEventCond": {
/*req, object*/
"searchID": "test",
/*req, string, search ID, desc:it is used to check whether the current search requester is the same as the previous one. If they are the same, the
search record will be stored in the device to speed up the next search*/
"searchResultPosition": 0,
/*req, int, the start position of the search result in the result list, desc:the start position of the search result in the result list*/
"maxResults": 30,
/*req, int, the maximum number of search results that can be obtained by calling the URI this time, desc:if maxResults exceeds the range returned by
the device capability, the device will return the maximum number of search results according to the device capability and will not return error message*/
"startTime": "1970-01-01T00:00:00+08:00",
/*opt, datetime, start time (UTC time)*/
"endTime": "1970-01-01T00:00:00+08:00",
/*opt, datetime, end time (UTC time)*/
Lt om
"picEnable": true,
/*opt, bool, whether to upload the picture along with the event information*/
"beginSerialNo": 1,
t .c
/*opt, int, start serial No.*/
"endSerialNo": 1
d
Pv l
/*opt, int, end serial No.*/
}
}
ai
gy gm
Response Message
lo n@
no je
ch ja
Te la
i su
or ka
So
{
"QRCodeEvent": {
/*ro, req, object*/
"searchID": "test",
/*ro, req, string, search ID, desc:it is used to check whether the current search requester is the same as the previous one. If they are the same,
the search record will be stored in the device to speed up the next search*/
"responseStatusStrg": "OK",
/*ro, req, enum, searching status description, subType:string, desc:"OK" (searching completed), "MORE" (searching for more data), "NO MATCH" (no
matched data).*/
"numOfMatches": 1,
/*ro, req, int, number of results returned this time*/
"totalMatches": 1,
/*ro, req, int, total number of matched results*/
"InfoList": [
/*ro, opt, array, subType:object*/
{
"deviceName": "test",
/*ro, opt, string, device name*/
"serialNo": 1,
/*ro, opt, int, event serial No.*/
"QRCodeInfo": "test",
/*ro, req, string, QR code information*/
"thermometryUnit": "celsius",
/*ro, opt, enum, temperature unit, subType:string, desc:"celsius" (Celsius), "fahrenheit" (Fahrenheit), "kelvin" (Kelvin), the default value
is "celsius"*/
"currTemperature": 1.0,
/*ro, opt, float, face temperature, desc:it should be accurate to one decimal place*/
"isAbnomalTemperature": true,
Lt om
/*ro, opt, bool, whether the face temperature is abnormal, desc:true (yes), false (no)*/
"RegionCoordinates": {
/*ro, opt, object, face temperature's coordinates*/
t .c
"positionX": 1,
/*ro, opt, int, X-coordinate, range:[0,1000], desc:the value is normalized to a number between 0 and 1000*/
d
Pv l
"positionY": 1
/*ro, opt, int, Y-coordinate, range:[0,1000], desc:the value is normalized to a number between 0 and 1000*/
},
"mask": "unknown",
ai
gy gm
/*ro, opt, enum, whether the person wears a mask, subType:string, desc:"unknown" (unknown), "yes" (wearing a mask), "no" (no mask)*/
"visibleLightPicUrl": "test",
/*ro, opt, string, URL of the visible light picture*/
lo n@
"thermalPicUrl": "test",
/*ro, opt, string, URL of the thermal picture*/
"helmet": "unknown",
no je
/*ro, opt, enum, whether the person is wearing hard hat, subType:string, desc:"unknown", "yes", "no"*/
"HealthInfo": {
ch ja
"NADCode": 1,
/*ro, opt, enum, subType:int*/
"travelCode": 1,
i su
{
"ipAddress": "172.6.64.7",
/*ro, req, string, IPv4 address of the device that triggers the alarm*/
"ipv6Address": "1080:0:0:0:8:800:200C:417A",
/*ro, opt, string, IPv6 address of the device that triggers the alarm*/
"portNo": 80,
/*ro, opt, int, communication port No. of the device that triggers the alarm*/
"protocol": "HTTP",
/*ro, opt, enum, transmission communication protocol type, subType:string, desc:transmission communication protocol type: "HTTP", "HTTPS", "EHome". The
value should be "HTTP" when ISAPI protocol is transmitted via EZ protocol. The value should be "EHome" when ISAPI protocol is transmitted via ISUP*/
"macAddress": "01:17:24:45:D9:F4",
/*ro, opt, string, MAC address*/
"channelID": 1,
/*ro, opt, int, channel No. of the device that triggers the alarm, desc:when ISAPI protocol is transmitted via HCNetSDK, the channel No. is the video
channel No. of private protocol. When ISAPI protocol is transmitted via EZ protocol, the channel No. is the video channel No. of EZ protocol. When ISAPI
protocol is transmitted via ISUP, the channel No. is the video channel No. of ISUP*/
"dateTime": "2004-05-03T17:30:08+08:00",
/*ro, req, datetime, alarm trigger time*/
"activePostCount": 1,
/*ro, opt, int, times that the same alarm has been uploaded, desc:number of times that the same alarm has been uploaded*/
"eventType": "QRCodeEvent",
/*ro, req, string, event type, desc:"QRCodeEvent" (QR code event of access control)*/
"eventState": "active",
/*ro, req, enum, event status, subType:string, desc:for durative event: active (valid event or event starts), inactive (invalid event or the event
ends). For the heartbeat, the field value indicates the heartbeat data, and it is uploaded every 10 seconds*/
"eventDescription": "QR Code Event",
/*ro, req, string, event description, desc:event description*/
"deviceID": "test0123",
/*ro, opt, string, device ID (PUID), desc:it should be returned in ISUP alarm*/
"QRCodeEvent": {
/*ro, opt, object, QR code event of access control*/
"deviceName": "test",
/*ro, opt, string, device name*/
"serialNo": "test",
/*ro, opt, string, event serial No.*/
"currentEvent": true,
/*ro, opt, bool, whether it is a real-time event*/
"QRCodeInfo": "test",
/*ro, req, string, QR code information*/
"thermometryUnit": "celsius",
/*ro, opt, enum, temperature unit, subType:string, desc:"celsius" (Celsius, default value), "fahrenheit" (Fahrenheit), "kelvin" (Kelvin)*/
"currTemperature": 1.0,
/*ro, opt, float, face temperature, desc:it should be accurate to one decimal place*/
"isAbnomalTemperature": true,
/*ro, opt, bool, whether the face temperature is abnormal*/
"RegionCoordinates": {
/*ro, opt, object, face temperature's coordinates*/
"positionX": 1,
/*ro, opt, int, X-coordinate, range:[0,1000]*/
Lt om
"positionY": 1
/*ro, opt, int, Y-coordinate, range:[0,1000]*/
},
t .c
"remoteCheck": true,
/*ro, opt, bool, whether remote verification is required, desc:it is not required by default*/
"mask": "test",
d
Pv l
/*ro, opt, string, whether the person wears a mask*/
"visibleLightURL": "test", ai
/*ro, opt, string, visible light picture URL of the thermal imaging camera*/
"thermalURL": "test",
gy gm
/*ro, opt, string, thermal imaging picture URL*/
"helmet": "unknown",
/*ro, opt, enum, whether the person is wearing hard hat, subType:string, desc:"unknown", "yes", "no"*/
lo n@
"picturesNumber": 1,
/*ro, opt, int, number of pictures, range:[0,2], step:1*/
no je
"HealthInfo": {
/*ro, opt, object, health information*/
"healthCode": 1,
ch ja
/*ro, opt, enum, health code status, subType:int, desc:0 (no request), 1 (no health code), 2 (green QR code), 3 (yellow QR code), 4 (red QR
code), 5 (no such person), 6 (other error, e.g., searching failed due to API exception), 7 (searching for the health code timed out)*/
"NADCode": 1,
Te la
/*ro, opt, enum, nucleic acid test result, subType:int, desc:0 (no result), 1 (negative, which means normal), 2 (positive, which means
diagnosed), 3 (the result has expired)*/
i su
"NADMsg": "test",
/*ro, opt, string, range:[0,64]*/
"travelCode": 1,
or ka
/*ro, opt, enum, trip code, subType:int, desc:0 (no trip in the past 14 days), 1 (once left in the past 14 days), 2 (has been to the high-risk
area in the past 14 days), 3 (other)*/
"travelInfo": "test",
/*ro, opt, string, trip information, desc:the empty string indicates that searching trip failed*/
"vaccineStatus": 1,
/*ro, opt, enum, whether the person is vaccinated, subType:int, desc:0 (not vaccinated), 1 (vaccinated)*/
"vaccineNum": 1,
/*ro, opt, int, step:1*/
"vaccineMsg": "test",
So
--<frontier>
Lt om
Content-Disposition: form-data; name=Parameter Name;filename=File Name
Content-Type: Parameter Type
Content-Length: ****
t .c
Content-ID: Content ID
Parameter Value
d
Pv l
ai
Parameter Name: the name property of Content-Disposition in the header of form unit; it refers to the form unit
name.
gy gm
Parameter Type (Content-Type): the Content-Type property in the header of form unit.
lo n@
File Name (filename): the filename property of Content-Disposition of form unit Headers. It exists only when the
no je
transmitted data of form unit is file, and it refers to the file name of form unit body.
Parameter Value: the body content of form unit.
ch ja
PUT /ISAPI/AccessControl/RemoteControl/door/<doorID>
Query Parameter
Parameter Name Parameter Type Description
So
doorID string --
Request Message
Lt om
GET /ISAPI/AccessControl/RemoteControl/door/capabilities
t .c
Query Parameter
d
Pv l
None
Request Message
ai
gy gm
None
lo n@
Response Message
no je
<!--ro, req, object, remote door status control, attr:version{req, float, protocolVersion}-->
<doorNo min="1" max="10">
<!--ro, opt, int, range of the door No., attr:min{req, int},max{req, int}-->1
Te la
</doorNo>
<cmd opt="open,close,alwaysOpen,alwaysClose,visitorCallLadder,householdCallLadder,resume">
<!--ro, req, enum, command, subType:string, attr:opt{req, string}, desc:"open" (open the door), "close" (close the door (controlled)), "alwaysOpen"
i su
(remain unlocked (free)), "alwaysClose" (remain locked (disabled)), "visitorCallLadder" (call elevator (visitor)), "householdCallLadder" (call elevator
(resident))-->open
</cmd>
or ka
</RemoteControlDoor>
Request URL
GET /ISAPI/AccessControl/remoteCheck/capabilities?format=json
Query Parameter
None
Request Message
None
Response Message
{
"RemoteCheck": {
/*ro, req, object*/
"serialNo": {
/*ro, opt, object, event serial No., desc:it should be the same as that in the uploaded event message*/
"@min": 1,
/*ro, opt, int, the minimum value*/
"@max": 2000000000
/*ro, opt, int, the maximum value*/
},
"checkResult": {
/*ro, opt, object, verification result, desc:"success"-verified, "failed"-verification failed*/
"@opt": ["success", "failed"]
/*ro, opt, array, options, subType:string*/
},
"info": {
/*ro, opt, object, additional information*/
"@min": 1,
/*ro, opt, int, the minimum value*/
"@max": 32
/*ro, opt, int, the maximum value*/
}
}
}
10.2.15.2 Verify the access control event remotely to control opening or closing the door
Lt om
Request URL
t .c
PUT /ISAPI/AccessControl/remoteCheck?format=json
d
Pv l
Query Parameter ai
Parameter Name Parameter Type Description
gy gm
security string --
lo n@
iv string --
no je
Request Message
ch ja
Te la
{
"RemoteCheck": {
/*req, object*/
i su
"serialNo": 1,
/*req, int, event serial No., desc:it should be the same as that in the uploaded event message*/
or ka
"checkResult": "success",
/*req, enum, verification result, subType:string, desc:"success"-verified, "failed"-verification failed*/
"info": "test"
/*opt, string, additional information, range:[1,32]*/
}
}
Response Message
So
{
"statusCode": 1,
/*ro, opt, int, status code, desc:1 (succeeded). It is required when an error occurred*/
"statusString": "ok",
/*ro, opt, string, status description, range:[1,64], desc:"ok" (succeeded). It is required when an error occurred*/
"subStatusCode": "ok",
/*ro, opt, string, sub status code, range:[1,64], desc:"ok" (succeeded). It is required when an error occurred*/
"errorCode": 1,
/*ro, opt, int, error code, desc:when the value of statusCode is not 1, it corresponds to subStatusCode*/
"errorMsg": "ok"
/*ro, opt, string, error information, desc:this field is required when the value of statusCode is not 1*/
}
{
"CardInfoCap": {
/*ro, req, object*/
"cardNo": {
/*ro, opt, object, card No.*/
"@min": 1,
/*ro, req, int, the minimum length, range:[1,32]*/
"@max": 32
/*ro, req, int, the maximum length, range:[1,32]*/
},
}
}
Lt om
10.3.2 Face Picture Online Adding
t .c
10.3.2.1 Collect face picture information
d
Pv l
Request URL
POST /ISAPI/AccessControl/CaptureFaceData
ai
gy gm
Query Parameter
lo n@
None
Request Message
no je
ch ja
<!--opt, bool, whether to collect infrared face pictures simultaneously, desc:"true"-yes, "false"-no-->true
</captureInfrared>
<dataType>
or ka
<!--opt, enum, data type of collected face pictures, subType:string, desc:"url" (default), "binary”-->url
</dataType>
<readerID>
<!--opt, int, range:[1,8]-->1
</readerID>
</CaptureFaceDataCond>
Response Message
So
<?xml version="1.0" encoding="UTF-8"?>
Lt om
</score>
<thermometryUnit>
<!--ro, opt, string-->test
t .c
</thermometryUnit>
<currTemperature>
d
Pv l
<!--ro, opt, float-->0.0
</currTemperature>
<visibleLightURL>
<!--ro, opt, string-->test
ai
gy gm
</visibleLightURL>
<thermalURL>
<!--ro, opt, string, thermal imaging picture URL-->test
lo n@
</thermalURL>
</CaptureFaceData>
no je
ch ja
[Message
CaptureFace
i su
application/xml -- -- --
content]
or ka
[Binary picture
FaceData image/jpeg FaceDatac --
data]
[Binary picture
InfraredFaceData image/jpeg InfraredFaceData.jpg --
data]
So
[Binary picture
faceMatting image/jpeg faceMatting.jpg --
data]
Note: The protocol is transmitted in form format. See Chapter 4.5.1.4 for form framework description, as shown in
the instance below.
--<frontier>
Content-Disposition: form-data; name=Parameter Name;filename=File Name
Content-Type: Parameter Type
Content-Length: ****
Content-ID: Content ID
Parameter Value
Parameter Name: the name property of Content-Disposition in the header of form unit; it refers to the form unit
name.
Parameter Type (Content-Type): the Content-Type property in the header of form unit.
File Name (filename): the filename property of Content-Disposition of form unit Headers. It exists only when the
transmitted data of form unit is file, and it refers to the file name of form unit body.
Parameter Value: the body content of form unit.
10.3.2.2 Get the capability of collecting face picture information.
Request URL
GET /ISAPI/AccessControl/CaptureFaceData/capabilities
Query Parameter
None
Request Message
None
Response Message
Lt om
</CaptureFaceDataCond>
<faceDataUrl min="1" max="768">
t .c
<!--ro, opt, string, face data URL, range:[1,768], attr:min{req, int},max{req, int}-->1
</faceDataUrl>
<captureProgress min="1" max="10">
d
Pv l
<!--ro, req, int, collection progress, range:[1,10], attr:min{req, int},max{req, int}-->1
</captureProgress>
<infraredFaceDataUrl min="1" max="100">
ai
<!--ro, req, string, infrared picture URL, range:[1,100], attr:min{req, int},max{req, int}-->test
gy gm
</infraredFaceDataUrl>
</CaptureFaceData>
lo n@
no je
GET /ISAPI/AccessControl/CaptureFaceData/Progress/capabilities
Te la
Query Parameter
i su
None
or ka
Request Message
None
Response Message
Lt om
Query Parameter
t .c
None
Request Message
d
Pv l
<?xml version="1.0" encoding="UTF-8"?>
ai
gy gm
<CaptureFingerPrintCond xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
<!--opt, object, Collect fingerprint information conditions, attr:version{req, string, protocolVersion}-->
lo n@
<fingerNo>
<!--req, int, finger No., range:[1,10]-->1
</fingerNo>
no je
</CaptureFingerPrintCond>
ch ja
Response Message
Te la
<fingerData>
<!--ro, opt, string, fingerprint data, range:[1,768], desc:which, should be encoded by Base64-->test
</fingerData>
<fingerNo>
<!--ro, req, int, finger No., range:[1,10]-->1
</fingerNo>
<fingerPrintQuality>
<!--ro, req, int, fingerprint quality, range:[1,100]-->1
</fingerPrintQuality>
So
</CaptureFingerPrint>
--<frontier>
Content-Disposition: form-data; name=Parameter Name;filename=File Name
Content-Type: Parameter Type
Content-Length: ****
Content-ID: Content ID
Parameter Value
Parameter Name: the name property of Content-Disposition in the header of form unit; it refers to the form unit
name.
Parameter Type (Content-Type): the Content-Type property in the header of form unit.
File Name (filename): the filename property of Content-Disposition of form unit Headers. It exists only when the
transmitted data of form unit is file, and it refers to the file name of form unit body.
Parameter Value: the body content of form unit.
Lt om
<?xml version="1.0" encoding="UTF-8"?>
t .c
<CaptureFingerPrint xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
<!--ro, req, object, collect fingerprint information, attr:version{req, string, protocolVersion}-->
d
Pv l
<CaptureFingerPrintCond>
<!--ro, req, object, finger No.-->
<fingerNo min="1" max="10"> ai
<!--ro, opt, int, fingerprint No., range:[1,10], attr:min{req, int},max{req, int}-->1
gy gm
</fingerNo>
</CaptureFingerPrintCond>
<fingerData min="1" max="768">
lo n@
</CaptureFingerPrint>
i su
GET /ISAPI/AccessControl/LocalAttendance/rule/capabilities?format=json
Query Parameter
None
Request Message
None
Response Message
{
"RuleCap": {
/*ro, opt, object*/
"NormalShift": {
/*ro, opt, object, time and attendance rule of the normal shift*/
"latestSignInTime": {
/*ro, opt, object, time available for late check-in*/
"@min": 1,
/*ro, req, int*/
"@max": 1
/*ro, req, int, unit:minutes*/
},
"earliestSignOutTime": {
/*ro, opt, object, time available for early check-out*/
"@min": 1,
/*ro, req, int*/
"@max": 1
/*ro, req, int, unit:minutes*/
},
},
"supportedMethods": ["get", "put"]
/*ro, req, array, array of string,supported operations on /ISAPI/AccessControl/LocalAttendance/rule?format=json, subType:string*/
}
}
Lt om
Request URL
t .c
GET /ISAPI/AccessControl/LocalAttendance/rule?format=json
d
Pv l
Query Parameter ai
None
gy gm
Request Message
lo n@
None
no je
Response Message
ch ja
{
"Rule": {
Te la
out time is between 0 and 1440 minutes. Combined with the normal shift period, if the latest check-out time is after 24:00, the attendance record will not
be saved*/
"latestSignInTime": 1,
or ka
Response Message
Lt om
"statusCode": 1,
/*ro, opt, int, status code, desc:1 (succeeded). It is required when an error occurred*/
"statusString": "ok",
t .c
/*ro, opt, string, status description, range:[1,64], desc:"ok" (succeeded). It is required when an error occurred*/
"subStatusCode": "ok",
d
Pv l
/*ro, opt, string, sub status code, range:[1,64], desc:"ok" (succeeded). It is required when an error occurred*/
"errorCode": 1,
ai
/*ro, opt, int, error code, desc:it is required when the value of statusCode is not 1, it corresponds to subStatusCode*/
"errorMsg": "ok"
gy gm
/*ro, opt, string, error description, desc:this field is required when the value of statusCode is not 1*/
}
lo n@
GET /ISAPI/AccessControl/LocalAttendance/weekPlan/capabilities?format=json
i su
Query Parameter
or ka
None
Request Message
None
Response Message
So
{
"WeekPlanCap": {
/*ro, req, object*/
"weekPlanName": {
/*ro, opt, object, weekly schedule name of local time and attendance*/
"@min": 1,
/*ro, req, int*/
"@max": 1
/*ro, req, int*/
},
"WeekPlanCfg": {
/*ro, opt, object, weekly schedule*/
"@size": 7,
/*ro, req, int*/
"week": {
/*ro, opt, object, day of the week*/
"@opt": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
/*ro, req, array, subType:string*/
},
"shiftId": {
/*ro, opt, object, shift No.*/
"@min": 1,
/*ro, req, int*/
"@max": 1
/*ro, req, int*/
}
},
"supportedMethods": ["post", "put", "delete"]
Lt om
/*ro, req, array, operation type supported by the device, "post" (add), "put" (edit), "delete", subType:string*/
}
}
t .c
d
Pv l
10.5 Elevator Control ai
gy gm
10.5.1 Elevator Parameters
lo n@
Request URL
ch ja
GET /ISAPI/VideoIntercom/Elevators/<elevatorID>/ControlCfg/capabilities?format=json
Query Parameter
Te la
elevatorID string --
or ka
Request Message
None
Response Message
So
{
"ElevatorControlCfg": {
/*ro, opt, object*/
"elevatorNo": {
/*ro, opt, object*/
"@min": 1,
/*ro, opt, int*/
"@max": 1
/*ro, opt, int*/
},
"enable": {
/*ro, opt, object*/
"@opt": "true,false"
/*ro, opt, string*/
},
"numOfNegFloors": {
/*ro, opt, object*/
"@min": 0,
/*ro, opt, int*/
"@max": 10
/*ro, opt, int*/
},
"interfaceType": {
/*ro, opt, object*/
"@opt": [1, 2]
/*ro, opt, array, subType:int*/
},
"deviceType": {
Lt om
/*ro, opt, object*/
"@opt": ["DS-K2201", "DS-K2210", "custom"]
/*ro, opt, array, subType:string*/
t .c
},
"ServerAddress": {
d
Pv l
/*ro, opt, object*/
"addressingFormatType": {
/*ro, opt, object*/
ai
"@opt": ["ipaddress", "hostname"]
gy gm
/*ro, opt, array, subType:string*/
},
"ipAddress": {
lo n@
"@max": 1
/*ro, opt, int*/
ch ja
},
},
"serverPort": {
Te la
"@max": 1
/*ro, opt, int*/
or ka
},
"userName": {
/*ro, opt, object*/
"@min": 0,
/*ro, opt, int*/
"@max": 128
/*ro, opt, int*/
},
"password": {
/*ro, opt, object*/
So
"@min": 1,
/*ro, opt, int*/
"@max": 1
/*ro, opt, int*/
},
"isSupportRS485": {
/*ro, opt, object*/
"@opt": ["DS-K2201", "DS-K2210"]
/*ro, opt, array, subType:string*/
},
"isSupportNetWork": {
/*ro, opt, object*/
"@opt": ["DS-K2201", "DS-K2210"]
/*ro, opt, array, subType:string*/
},
"isSupportNegativeFloor": {
/*ro, opt, object*/
"@opt": ["DS-K2201", "DS-K2210"]
/*ro, opt, array, subType:string*/
}
}
}
{
"ElevatorControlCfg": {
/*ro, opt, object*/
"enable": "true",
/*ro, opt, string*/
"numOfNegFloors": 1,
Lt om
/*ro, opt, int*/
"interfaceType": 1,
t .c
/*ro, opt, enum, subType:int*/
"deviceType": "DS-K2201",
/*ro, opt, enum, subType:string*/
d
Pv l
"ServerAddress": {
/*ro, opt, object*/
ai
"addressingFormatType": "ipaddress",
/*ro, req, enum, subType:string*/
gy gm
"ipAddress": "test",
/*ro, opt, string*/
},
lo n@
"serverPort": 0,
/*ro, opt, int*/
}
no je
}
ch ja
Request URL
i su
PUT /ISAPI/VideoIntercom/Elevators/<elevatorID>/ControlCfg?format=json
or ka
Query Parameter
Parameter Name Parameter Type Description
elevatorID string --
security string --
So
iv string --
Request Message
{
"ElevatorControlCfg": {
/*opt, object*/
"enable": "true",
/*opt, string*/
"numOfNegFloors": 1,
/*opt, int*/
"interfaceType": 1,
/*opt, enum, subType:int*/
"deviceType": "DS-K2201",
/*opt, enum, subType:string*/
"ServerAddress": {
/*opt, object*/
"addressingFormatType": "ipaddress",
/*req, enum, subType:string*/
"hostName": "test",
/*opt, string*/
"ipAddress": "test",
/*opt, string*/
"ipv6Address": "test"
/*opt, string*/
},
"serverPort": 0,
/*opt, int*/
"userName": "test",
/*opt, string*/
"password": "test"
/*opt, string*/
Lt om
}
}
t .c
d
Response Message
Pv l
{
ai
gy gm
"statusCode": 1,
/*ro, opt, int*/
"statusString": "ok",
lo n@
"errorCode": 1,
/*ro, opt, int*/
ch ja
"errorMsg": "ok"
/*ro, opt, string*/
}
Te la
i su
None
Request Message
None
Response Message
{
"CallerInfo": {
/*ro, req, object*/
"buildingNo": {
/*ro, opt, object, building No.*/
"@min": 0,
/*ro, opt, int, the minimum value*/
Lt om
"@max": 16
/*ro, opt, int, the maximum value*/
},
t .c
"floorNo": {
/*ro, opt, object, floor No.*/
"@min": 0,
d
Pv l
/*ro, opt, int, the minimum value*/
"@max": 16 ai
/*ro, opt, int, the maximum value*/
},
gy gm
"zoneNo": {
/*ro, opt, object, project No.*/
"@min": 0,
lo n@
"@max": 16
/*ro, opt, int, the maximum value*/
i su
},
"devNo": {
/*ro, opt, object, device No.*/
or ka
"@min": 0,
/*ro, opt, int, the minimum value*/
"@max": 16
/*ro, opt, int, the maximum value*/
},
"devType": {
/*ro, req, object, device type, desc:1-door station, 2-main station, 3-indoor station, 4-outer door station, 5-villa door station, 6-doorphone, 7-
Infosight Client Software, 8-iVMS-4200 Client Software, 9-APP, 10-doorbell, 11-VOIP Client Software, 12-network camera, 13-access control device*/
"@opt": "1,2,3,4,5,6,7,8,9,10,11,12,13,14"
So
{
"CallerInfo": {
/*ro, req, object*/
"buildingNo": 1,
/*ro, opt, int, building No., range:[0,16]*/
"floorNo": 1,
/*ro, opt, int, floor No., range:[0,16]*/
"zoneNo": 1,
/*ro, opt, int, project No., range:[0,16]*/
"unitNo": 1,
/*ro, opt, int, unit No., range:[0,16]*/
"devNo": 1,
/*ro, opt, int, device No., range:[0,16]*/
"devType": 1,
/*ro, req, int, device type, desc:1-door station, 2-main station, 3-indoor station, 4-outer door station, 5-villa door station, 6-doorphone, 7-
Infosight Client Software, 8-iVMS-4200 Client Software, 9-APP, 10-doorbell, 11-VOIP Client Software, 12-network camera, 13-access control device*/
"lockNum": 1,
/*ro, opt, int, number of locks, range:[0,16]*/
"status": "idle"
/*ro, req, string, status, desc:"idle", "ring", "onCall"-the call is in progress*/
}
Lt om
}
t .c
10.6.1.3 Get the capability of the call signaling interaction
d
Pv l
Request URL ai
GET /ISAPI/VideoIntercom/callSignal/capabilities?format=json
gy gm
Query Parameter
lo n@
None
no je
Request Message
None
ch ja
Response Message
Te la
{
i su
"CallSignal": {
/*ro, req, object*/
or ka
"cmdType": {
/*ro, req, object, signaling type*/
"@opt": ["request", "cancel", "answer", "reject", "bellTimeout", "hangUp", "deviceOnCall"]
/*ro, req, array, range, subType:string, range:[0,7], desc:"request" request for call, "cancel"-cancel the call, "answer"-answer the call,
"reject"-reject the call, "bellTimeout"-callee ringing timed out, "hangUp"-end call, "deviceOnCall"-the device is busy*/
},
"industryType": {
/*ro, opt, object*/
"@opt": ["builidings", "prison", "medicalTreatment", "broadcasting"]
So
{
"CallSignal": {
/*req, object, call signaling interaction parameters*/
"cmdType": "request",
/*req, enum, operation type, subType:string, desc:operation type: "request","cancel","answer","reject","bellTimeout","hangUp","deviceOnCall"*/
"sessionId": "test",
/*opt, string*/
"src": {
/*opt, object*/
/*opt, object*/
"periodNumber": 1,
/*opt, int, community number*/
"buildingNumber": 1,
/*opt, int, building number*/
"unitNumber": 1,
/*opt, int, unit number*/
"floorNumber": 1,
/*opt, int, floor No.*/
"roomNumber": 1,
/*opt, int, room No.*/
"devIndex": 1,
/*opt, int, device No.*/
"communityNumber": "test",
/*opt, string, community No.*/
"callNumber": "12312312311",
/*opt, string, range:[1,11]*/
"unitType": "indoor",
/*opt, enum, type, subType:string, desc:device type: "indoor"-indoor station,"villa"-door station (V series),"confirm"-doorphone,"outdoor"-door
station,"fence"-outer door station,"doorbell"-doorbell,"manage"-main station,"acs"-access control device*/
"personUUID": "test",
/*opt, string*/
"personType": "student",
/*opt, enum, person type, subType:string*/
"industryType": "builidings",
/*opt, enum, industry type, subType:string*/
"callType": "voice",
/*opt, enum, subType:string*/
"model": "DS-KD9403-A",
/*opt, string, device model, range:[1,64]*/
Lt om
"serialNumber": "test"
/*opt, string, device serial No., range:[9,48]*/
t .c
},
"target": {
/*opt, object, target information*/
d
Pv l
"periodNumber": 1,
/*opt, int, community number*/
"buildingNumber": 1,
/*opt, int, building number*/
ai
gy gm
"unitNumber": 1,
/*opt, int, unit number*/
"floorNumber": 1,
lo n@
"devIndex": 1,
/*opt, int, device No.*/
ch ja
"communityNumber": "test",
/*opt, string, community No.*/
"callNumber": "12312312311",
Te la
/*opt, string*/
"personType": "student",
/*opt, enum, person type, subType:string*/
"industryType": "builidings",
/*opt, enum, industry type, subType:string*/
"callType": "voice",
/*opt, enum, subType:string*/
"callWaitingDelayTime": 10,
/*opt, int, range:[10,60], unit:s*/
So
"serialNumber": "test"
/*opt, string, device serial No., range:[9,48]*/
},
"CallInfo": {
/*opt, object, call information*/
"STSPort": 7000,
/*opt, int*/
"STSIpV4Address": "test",
/*opt, string*/
"clientID": "test",
/*opt, string, client ID, range:[1,32]*/
"VCPort": 7000,
/*opt, int*/
"VCIpV4Address": "test",
/*opt, string*/
"roomID": 1,
/*opt, int, room No.*/
"password": "test",
/*opt, string, password, range:[8,16]*/
"conferenceMaxCount": 2
/*opt, int*/
},
"messageID": "test",
/*opt, string, range:[1,64]*/
"exceptionInfo": "test"
/*opt, string, range:[1,128]*/
}
}
Response Message
{
"statusCode": 1,
/*ro, opt, int, status code, desc:1 (succeeded). It is required when an error occurred*/
"statusString": "ok",
/*ro, opt, string, status description, range:[1,64], desc:"ok" (succeeded). It is required when an error occurred*/
"subStatusCode": "ok",
/*ro, opt, string, sub status code, range:[1,64], desc:"ok" (succeeded). It is required when an error occurred*/
"errorCode": 1,
/*ro, opt, int, error code, desc:when the value of statusCode is not 1, it corresponds to subStatusCode*/
"errorMsg": "ok"
/*ro, opt, string, error description, desc:this node is required when the value of statusCode is not 1*/
}
Lt om
Request Message
t .c
None
d
Response Message
Pv l
{
ai
gy gm
"CallStatus": {
/*ro, opt, object, call status*/
"status": {
lo n@
}
}
ch ja
}
Te la
Request URL
or ka
GET /ISAPI/VideoIntercom/callStatus?format=json
Query Parameter
None
Request Message
So
None
Response Message
{
"CallStatus": {
/*ro, opt, object, call status*/
"status": "idle"
/*ro, req, enum, status, subType:string, desc:"idle", "ring" (ringing), "onCall" (busy)*/
}
}
Lt om
</addressingFormatType>
<hostName>
t .c
<!--opt, string, host domain name, range:[0,128]-->test
</hostName>
<ipAddress>
d
Pv l
<!--opt, string, IPv4 address, range:[0,128]-->255.255.255.255
</ipAddress>
<ipv6Address>
ai
<!--opt, string, IPv6 address, range:[0,128]-->ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
gy gm
</ipv6Address>
</SIPServerAddress>
<centerPort>
lo n@
<ipv6Address>
<!--opt, string, IPv6 address, range:[0,128]-->ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
</ipv6Address>
</CenterAddress>
<MainRoomAddress>
<!--opt, object, IP address of indoor station-->
<addressingFormatType>
<!--req, enum, address type, subType:string, desc:"ipaddress", "hostname"-->ipaddress
</addressingFormatType>
So
<hostName>
<!--opt, string, host domain name, range:[0,128]-->test
</hostName>
<ipAddress>
<!--opt, string, IPv4 address, range:[0,128]-->255.255.255.255
</ipAddress>
<ipv6Address>
<!--opt, string, IPv6 address, range:[0,128]-->ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
</ipv6Address>
</MainRoomAddress>
<ManageAddress>
<!--opt, object, IP address of the main station-->
<addressingFormatType>
<!--req, enum, address type, subType:string, desc:"ipaddress", "hostname"-->ipaddress
</addressingFormatType>
<hostName>
<!--opt, string, host domain name, range:[0,128]-->test
</hostName>
<ipAddress>
<!--opt, string, IPv4 address, range:[0,128]-->255.255.255.255
</ipAddress>
<ipv6Address>
<!--opt, string, IPv6 address, range:[0,128]-->ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
</ipv6Address>
</ManageAddress>
</RelatedDeviceAddress>
Response Message
<?xml version="1.0" encoding="UTF-8"?>
Lt om
Query Parameter
t .c
None
d
Pv l
Request Message ai
None
gy gm
Response Message
lo n@
10.6.2.3 Get the configuration capability of the linked device address (linked network)
Request URL
GET /ISAPI/VideoIntercom/relatedDeviceAddress/capabilities
Query Parameter
None
Request Message
None
Response Message
<?xml version="1.0" encoding="UTF-8"?>
<RelatedDeviceAddress xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
<!--ro, opt, object, attr:version{req, string, protocolVersion}-->
<unitType opt="outdoor,fence ">
<!--ro, opt, enum, device type, subType:string, attr:opt{req, string}, desc:device type-->outdoor
</unitType>
<SIPServerAddress>
<!--ro, opt, object, SIP server address-->
<addressingFormatType opt="ipaddress,hostname">
<!--ro, req, enum, address type, subType:string, attr:opt{req, string}, desc:"ipaddress", "hostname"-->ipaddress
</addressingFormatType>
<ipAddress>
<!--ro, opt, string, IPv4 address, range:[0,128]-->255.255.255.255
</ipAddress>
</SIPServerAddress>
<ManageAddress>
<!--ro, opt, object, IP address of main station-->
<addressingFormatType opt="ipaddress,hostname">
<!--ro, req, enum, address type, subType:string, attr:opt{req, string}, desc:"ipaddress", "hostname"-->ipaddress
</addressingFormatType>
<ipAddress>
<!--ro, opt, string, IPv4 address, range:[0,128]-->255.255.255.255
</ipAddress>
</ManageAddress>
</RelatedDeviceAddress>
Lt om
10.6.3 Sub Module Management
t .c
10.6.3.1 Get the configuration capability of pressing the button to call
d
Pv l
Request URL ai
GET /ISAPI/VideoIntercom/keyCfg/<keyID>/capabilities?moduleId=<subModuleID>
gy gm
Query Parameter
lo n@
keyID string --
ch ja
subModuleID string --
Te la
Request Message
i su
None
or ka
Response Message
10.6.3.2 Get the parameters of pressing the button to call for a specific button
Request URL
GET /ISAPI/VideoIntercom/keyCfg/<keyID>?readerID=<readerID>&moduleId=<subModuleID>
Query Parameter
Parameter Name Parameter Type Description
keyID string --
readerID string --
subModuleID string --
Request Message
None
Response Message
Lt om
<moduleId>
<!--ro, opt, int, sub module ID, desc:this node is valid when <module> is "sub"-->1
</moduleId>
t .c
<callMethod>
<!--ro, opt, enum, calling method, subType:string, desc:"callNumber" (call by number), "manageCenter" (call the management center), "app" (call APP),
d
Pv l
"manualCallNumber" (manually call by number)-->callNumber
</callMethod>
<callNumber> ai
<!--ro, opt, string, called number, this field is valid when <callMethod> is "callNumber", dep:and,{$.KeyCfg.callMethod,eq,callNumber}-->101
gy gm
</callNumber>
<enableCallCenter>
<!--ro, opt, bool, whether to call the management center, dep:and,{$.KeyCfg.callMethod,eq,manageCenter}-->true
lo n@
</enableCallCenter>
<DifferentKeystrokesList>
<!--ro, opt, object-->
no je
<Item>
<!--ro, opt, object-->
<keyPress>
ch ja
<callNumber>
<!--ro, opt, string, called number, this field is valid when <callMethod> is "callNumber", range:[1,32], desc:called number,this field is valid when
<callMethod> is "callNumber"-->test
i su
</callNumber>
<enableCallCenterByLong>
<!--ro, opt, bool-->true
or ka
</enableCallCenterByLong>
</Item>
</DifferentKeystrokesList>
<templateNo>
<!--ro, opt, int, range:[1,32]-->1
</templateNo>
<customInfo>
<!--ro, opt, string, custom information, range:[0,128]-->test
</customInfo>
So
<callType>
<!--ro, opt, enum, subType:string-->normal
</callType>
</KeyCfg>
10.6.3.3 Set the parameters of pressing the button to call for a specific button
Request URL
PUT /ISAPI/VideoIntercom/keyCfg/<keyID>?readerID=<readerID>&moduleId=<subModuleID>
Query Parameter
Parameter Name Parameter Type Description
keyID string --
readerID string --
subModuleID string --
Request Message
<?xml version="1.0" encoding="UTF-8"?>
Lt om
<keyPress>
<!--req, enum, subType:string-->long
</keyPress>
t .c
<callNumber>
<!--opt, string, called number, range:[1,32], desc:this node is valid when <callMethod> is "callNumber"-->test
d
Pv l
</callNumber>
<enableCallCenterByLong>
<!--opt, bool-->true
</enableCallCenterByLong>
ai
gy gm
</Item>
</DifferentKeystrokesList>
<templateNo>
lo n@
<callType>
<!--opt, enum, subType:string-->normal
</callType>
Te la
</KeyCfg>
i su
Response Message
or ka
<!--ro, req, enum, status code, subType:int, desc:0 (OK), 1 (OK), 2 (Device Busy), 3 (Device Error), 4 (Invalid Operation), 5 (Invalid XML Format), 6
(Invalid XML Content), 7 (Reboot Required)-->0
</statusCode>
<statusString>
<!--ro, req, enum, status information, subType:string, desc:"OK" (succeeded), "Device Busy", "Device Error", "Invalid Operation", "Invalid XML Format",
"Invalid XML Content", "Reboot" (reboot device)-->OK
</statusString>
<subStatusCode>
<!--ro, req, string, sub status code, desc:sub status code description-->OK
</subStatusCode>
</ResponseStatus>
Lt om
<unitNumber min="0" max="10">
<!--ro, opt, int, unit number, attr:min{req, int},max{req, int}-->0
</unitNumber>
t .c
<floorNumber min="0" max="10">
<!--ro, opt, int, floor No., attr:min{req, int},max{req, int}-->0
d
</floorNumber>
Pv l
<deviceIndex min="0" max="10">
ai
<!--ro, opt, int, device No., attr:min{req, int},max{req, int}-->0
</deviceIndex>
<communityNumber min="0" max="10">
gy gm
<!--ro, opt, string, community No., attr:min{req, int},max{req, int}-->test
</communityNumber>
lo n@
</DeviceId>
no je
Request URL
Te la
GET /ISAPI/VideoIntercom/deviceId?readerID=<readerID>
i su
Query Parameter
or ka
Response Message
<?xml version="1.0" encoding="UTF-8"?>
<DeviceId xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
<!--ro, req, object, device No., attr:version{req, string, protocolVersion}-->
<unitType>
<!--ro, req, enum, device type, subType:string, desc:"villa"-door station (V series), "confirm"-doorphone, "outdoor"-door station, "fence"-outer door
station, "doorbell"-doorbell, "manage"-main station, "acs"-intelligent access control. If this node is set to "confirm", the following nodes do not need to
be configured-->villa
</unitType>
<periodNumber>
<!--ro, opt, int, community number-->0
</periodNumber>
<buildingNumber>
<!--ro, opt, int, building number-->0
</buildingNumber>
<unitNumber>
<!--ro, opt, int, unit number-->0
</unitNumber>
<floorNumber>
<!--ro, opt, int, floor No., it is between -10 and 10 and it cannot be 0, desc:floor No., it is between -10 and 10 and it cannot be 0-->0
</floorNumber>
<deviceIndex>
<!--ro, opt, int, device No., 0-main station, other value (from 0 to 99)-sub station. The device will reboot no matter <deviceIndex> is changed from 0
to other value or from other value to 0-->0
</deviceIndex>
<communityNumber>
<!--ro, opt, string, community No.-->test
</communityNumber>
</DeviceId>
Lt om
t .c
10.6.4.3 Set the video intercom device ID
d
Pv l
Request URL ai
PUT /ISAPI/VideoIntercom/deviceId?readerID=<readerID>
gy gm
Query Parameter
lo n@
readerID string --
ch ja
Request Message
Te la
i su
or ka
So
<?xml version="1.0" encoding="UTF-8"?>
Lt om
<customDeviceId>
<!--opt, string-->test
</customDeviceId>
t .c
<periodNumberName>
<!--opt, string, range:[0,32]-->test
d
Pv l
</periodNumberName>
<buildingNumberName>
<!--opt, string, range:[0,32]-->test
</buildingNumberName>
ai
gy gm
<unitNumberName>
<!--opt, string, range:[0,32]-->test
</unitNumberName>
lo n@
<floorNumberName>
<!--opt, string, range:[0,32]-->test
</floorNumberName>
no je
<roomNumberName>
<!--opt, string, range:[0,32]-->test
ch ja
</roomNumberName>
<deviceIndexName>
<!--opt, string, range:[0,32]-->test
Te la
</deviceIndexName>
<communityNumberName>
<!--opt, string, range:[0,128]-->test
i su
</communityNumberName>
<enabled>
or ka
<!--opt, bool-->true
</enabled>
<industryType>
<!--opt, enum, subType:string-->builidings
</industryType>
</DeviceId>
Response Message
So
{
"ReportCenterCfg": {
/*ro, req, object*/
Lt om
"enable": true,
/*ro, opt, bool, whether to enable the function*/
"ChanAlarmMode": [
t .c
/*ro, opt, array, alarm channel of the center group, subType:object*/
{
"id": 1,
d
Pv l
/*ro, opt, enum, channel ID, subType:int, desc:channel ID: 1-main channel,2-backup channel 1,3-backup channel 2,4-backup channel 3*/
"chanAlarmMode": "T1" ai
/*ro, opt, enum, alarm channel mode, subType:string, desc:"T1" (T1 channel), "T2" (T2 channel), "N1" (N1 channel), "N2" (N2 channel), "G1"
(G1 channel), "G2" (G2 channel), "N3" ()N3 channel, ”N4" (N4 channel)*/
gy gm
}
]
}
lo n@
}
no je
Request URL
Te la
PUT /ISAPI/SecurityCP/ReportCenterCfg/<centerID>?format=json
i su
Query Parameter
or ka
{
"ReportCenterCfg": {
/*req, object*/
"enable": true,
/*opt, bool, whether to enable uploading report*/
"ChanAlarmMode": [
/*opt, array, alarm channel of the center group, subType:object*/
{
"id": 1,
/*opt, enum, channel ID, subType:int, desc:1 (main channel), 2 (backup channel 1), 3 (backup channel 2), 4 (backup channel 3)*/
"chanAlarmMode": "T1"
/*opt, enum, alarm channel mode, subType:string, desc:"T1" (T1 channel), "T2" (T2 channel), "N1" (N1 channel), "N2" (N2 channel), "G1" (G1
channel), "G2" (G2 channel), "N3" ()N3 channel, ”N4" (N4 channel)*/
}
]
}
}
Response Message
{
"statusCode": 1,
/*ro, opt, int, status code, desc:1 (succeeded). It is required when an error occurred*/
"statusString": "ok",
/*ro, opt, string, status description, range:[1,64], desc:"ok" (succeeded). It is required when an error occurred*/
"subStatusCode": "ok",
/*ro, opt, string, sub status code, range:[1,64], desc:"ok" (succeeded). It is required when an error occurred*/
"errorCode": 1,
/*ro, opt, int, error code, desc:it is required when the value of statusCode is not 1, it corresponds to subStatusCode*/
"errorMsg": "ok"
/*ro, opt, string, error description, desc:this field is required when the value of statusCode is not 1*/
}
Lt om
None
t .c
Response Message
d
Pv l
{
"ReportCenterCfg": {
/*ro, req, object*/
ai
"CenterID": {
gy gm
/*ro, opt, object, center group No.*/
"@min": 1,
lo n@
},
"enable": "true,false",
/*ro, opt, string, whether to enable uploading report*/
ch ja
"ChanAlarmMode": {
/*ro, opt, object, alarm channel of the center group*/
Te la
"maxSize": 1,
/*ro, opt, int, the maximum number of channels*/
"id": {
i su
/*ro, opt, object, channel ID, desc:1 (main channel), 2 (backup channel 1), 3 (backup channel 2), 4 (backup channel 3)*/
"@min": 1,
/*ro, opt, int, the minimum value*/
or ka
"@max": 2
/*ro, opt, int, the maximum value*/
},
"chanAlarmMode": {
/*ro, opt, object, alarm channel mode, desc:"T1" (T1 channel), "T2" (T2 channel), "N1" (N1 channel), "N2" (N2 channel), "G1" (G1 channel), "G2"
(G2 channel), "N3" (N3 channel), "N4" (N4 channel)*/
"@opt": "T1,T2,N1,N2,G1,G2,N3,N4"
/*ro, opt, string*/
}
So
}
}
}
{
"SecurityCPCap": {
/*ro, req, object, capability node*/
"localZoneNum": 16,
/*ro, req, int, number of local zones*/
"localRelayNum": 1,
/*ro, req, int, number of local triggers*/
"userNum": 1,
/*ro, req, int, number of users*/
"isSptConfiguration": true,
/*ro, opt, bool, whether it supports configuring security control panel, desc:/ISAPI/SecurityCP/Configuration*/
}
}
Lt om
Request Message
t .c
None
d
Pv l
Response Message ai
gy gm
{
"HostConfigCap": {
/*ro, req, object, capability node*/
lo n@
"ExDevice": {
/*ro, opt, object, peripheral node*/
"isSptOutput": true,
no je
"isSptReportCenterCfg": true,
/*ro, opt, bool, whether it supports configuring the report uploading method, desc:/ISAPI/SecurityCP/ReportCenterCfg/<ID>?format=json*/
"isSptAlarmOutCfg": true,
Te la
/*ro, opt, bool, whether it supports configuring alarm output parameters, desc:/ISAPI/SecurityCP/AlarmOutCfg/<ID>?format=json*/
"isSptSetAlarmHostOut": true,
/*ro, opt, bool, whether it supports setting alarm output, desc:/ISAPI/SecurityCP/SetAlarmHostOut?format=json*/
i su
}
}
or ka
provide technical training and guidance resources for our partners. On this platform, you can find integration video
tutorials for various devices, enabling better understanding and learning of the integration process. To offer more
personalized service, our Training Center also supports filtering by integration protocols, devices, and applications.