IntroductionAPI's Introduction This API uses HTTP protocol for data exchange - REST architecture. Each command is a HTTP POST with Content-Type set as application/json and an unique URL. Parameters and returns are preferably JSON, except when mentioned otherwise. e.g.: The command login has the URL: http://192.168.0.129/login.fcgi and the following parameters: { login: 'admin', password: ádmin' }Every command requires a valid session, except session_is_valid and login. The requisition's body needs UTF-8 encoding. In case there are no special characters (ASCII) been sent, the requisition's body does not need to be encoded.Windows systems use Windows-1252 (A.K.A CP-1252) encoding by default. Please verify how to use the correct encoding.
Running the examples
The examples in this document are written in JavaScript, utilizing the Jquery library. To run the examples, access the IP address of the device in any web browser, and use its developer tools to send the requisitions. Every example shown here can be verified by copying the code and pasting it into the developer tools console. Futhermore, more examples in different programming languages can be found at Control iD's official GitHub, click here for more information.
A complete command example
The code below is a functional example that can be used for the familiarization with the browser's developer tools. $.ajax({ url: "/login.fcgi", type: 'POST', contentType: 'application/json', data: JSON.stringify({ login: 'admin', password: 'admin' }), success: function(data) { session = data.session; } }); Please verify the login documentation for more details.
Running the examples in other languages
Below are some examples that illustrate how the API can be used with other programming languages. In this example, the IP address 192.168.0.129, when shown, represents the IP address of the device. Attention: the option HTTP "Expect: 100- continue" must be disabled, otherwise, the function calls will not work. The only example that explicitly does that, is the one in C#. Please verify the need to disable this option in the language of your preference.procedure TFrmTTWebserviceTester.Button1Click(Sender: TObject); var lJSO : ISuperObject; lRequest: TStringStream; lResponse: String; begin lJSO := SO('{"login": "admin", "password": "admin"}'); lRequest := TStringStream.Create(lJSO.AsString, TEncoding.UTF8); try IdHTTP.Request.ContentType := 'application/json'; IdHTTP.Request.Charset := 'utf-8'; try lResponse := IdHTTP.Post('http://192.168.0.129/login.fcgi', lRequest); ShowMessage(lResponse); except on E: Exception do ShowMessage('Error on request:'#13#10 + E.Message); end; finally lRequest.Free; end; lJSO := nil; end;This example in Delphi utilizes the open source library Indy.try { URL url = new URL("http://192.168.0.129/login.fcgi"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST"); conn.setRequestProperty("Content-type", "application/json"); conn.setDoInput(true); conn.setDoOutput(true); OutputStream os = conn.getOutputStream(); os.write("{\"login\":\"admin\",\"password\":\"admin\"}".getBytes()); if (conn.getResponseCode() != 200) { BufferedReader br = new BufferedReader(new InputStreamReader(conn.getErrorStream())); String output, result = ""; System.out.println("Output from Server .... \n"); while ((output = br.readLine()) != null) { result += output; } throw new RuntimeException("Failed : " + result); } BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); String output; System.out.println("Output from Server .... \n"); while ((output = br.readLine()) != null) { System.out.println(output); } conn.disconnect(); } catch (Exception e) { e.printStackTrace(); }System.Net.ServicePointManager.Expect100Continue = false; try { var request = (HttpWebRequest)WebRequest.Create("http://192.168.0.129/login.fcgi"); request.ContentType = "application/json"; request.Method = "POST"; using (var streamWriter = new StreamWriter(request.GetRequestStream())) { streamWriter.Write("{\"login\":\"admin\",\"password\":\"admin\"}"); } var response = (HttpWebResponse)request.GetResponse(); using (var streamReader = new StreamReader(response.GetResponseStream())) { Console.WriteLine(streamReader.ReadToEnd()); } } catch (WebException e) { using (WebResponse response = e.Response) { HttpWebResponse httpResponse = (HttpWebResponse)response; Console.WriteLine("Error code: {0}", httpResponse.StatusCode); using (Stream data = response.GetResponseStream()) using (var reader = new StreamReader(data)) { string text = reader.ReadToEnd(); Console.WriteLine(text); } } }
Sequence diagramRequest/response flow to the devices The diagram below shows, in a simple way, the flow of requests to the device.

The example below shows the process to open the relay 1, for more information about the objects visit objects.



Diagrama de Sequência
C#C# examples For these examples the library RestSharp is being used, for more information on how to use the library, visit: http://restsharp.org/using System; using RestSharp; namespace ExampleToDevelopment { class Program { public string Session() { var client = new RestClient("http://192.168.2.183/login.fcgi"); var request = new RestRequest(Method.POST); request.AddHeader("content-type", "application/json"); request.AddParameter("application/json", "{\"login\": \"admin\", \"password\": \"admin\"}", ParameterType.RequestBody); IRestResponse response = client.Execute(request); return response.Content; } } }public string CreateUser() { var client = new RestClient("http://192.168.2.183/create_objects.fcgi"); var request = new RestRequest(Method.POST); request.AddHeader("cookie", "session=QnnlmLcEBCE06mwKkh/7SOEM"); request.AddHeader("content-type", "application/json"); request.AddParameter("application/json", "{\"object\":\"users\",\"fields\":[\"name\", \"registration\"],\"values\":[{\"name\": \"Daenerys Targaryen\", \"registration\": \"\"}]}", ParameterType.RequestBody); IRestResponse response = client.Execute(request); return response.Content; }public string ExecuteAction() { var client = new RestClient("http://192.168.2.183/execute_actions.fcgi?session=zm3WJhwbFawo1wX9B4YRnLY4"); var request = new RestRequest(Method.POST); request.AddHeader("content-type", "application/json"); request.AddParameter("application/json", "{\n\t\n\t\"actions\": [ { \"action\": \"door\", \"parameters\": \"door=1\" } ]\n\t\n}", ParameterType.RequestBody); IRestResponse response = client.Execute(request); return response.Content; }public string GetAccessLogs() { var client = new RestClient("http://192.168.2.183/load_objects.fcgi"); var request = new RestRequest(Method.POST); request.AddHeader("cookie", "session=o7JRuZQckN10lz66MHfX69iY"); request.AddHeader("content-type", "application/json"); request.AddParameter("application/json", "{\n \"object\":\"access_logs\"\n}", ParameterType.RequestBody); IRestResponse response = client.Execute(request); return response.Content; }
NodeJSNodeJS Examples For these exampless the module request is being used, for more information, visit:https://www.npmjs.com/package/requestvar request = require("request"); var options = { method: 'post', url: 'http://192.168.2.183/login.fcgi', headers: { 'content-type': 'application/json' }, body: { login: 'admin', password: 'admin' }, json: true }; request(options, function (error, response, body) { if (error) throw new Error(error); console.log(body); });var request = require("request"); var options = { method: 'POST', url: 'http://192.168.2.183/create_objects.fcgi', headers: { cookie: 'session=QnnlmLcEBCE06mwKkh/7SOEM', 'content-type': 'application/json' }, body: { object: 'users', values: [{ id: 454, name: 'Daenerys Targaryen', registration: '' }] }, json: true }; request(options, function (error, response, body) { if (error) throw new Error(error); console.log(body); });var request = require("request"); var options = { method: 'POST', url: 'http://192.168.2.183/execute_actions', headers: { cookie: 'session=QnnlmLcEBCE06mwKkh/7SOEM', 'content-type': 'application/json' }, body: { "actions": [ { "action": "door", "parameters": "door=1" } ] }, json: true }; request(options, function (error, response, body) { if (error) throw new Error(error); console.log(body); });var request = require("request"); var options = { method: 'POST', url: 'http://192.168.2.183/load_objects.fcgi', headers: { cookie: 'session=QnnlmLcEBCE06mwKkh/7SOEM', 'content-type': 'application/json' }, body: { object: 'access_logs' }, json: true }; request(options, function (error, response, body) { if (error) throw new Error(error); console.log(body); });
LoginCreates a sessionlogin Creates the session that is required by all other commands, except session_is_valid. The HTTP method POST is used to send data. loginstringThe default value is admin.passwordstringThe default value is admin.sessionstringCode of the initialized session.$.ajax({ url: "/login.fcgi", type: 'POST', contentType: 'application/json', data: JSON.stringify({ login: 'admin', password: 'admin' }), success: function(data) { session = data.session; } });
Session's validity verificationCommand used to verify the validity of a sessionsession_is_valid Verifies the validity of the session. this call does not possess any parameter. session_is_validbooleanIndicates if the session is valid.$.ajax({ url: "/session_is_valid.fcgi?session=" + session, type: 'POST', contentType: 'application/json' });
Change login's informationCommand that changes the login's username and/or passwordchange_login Changes the username and/or password used in the device's login. This call has no return. loginstring Username used in the device's login. passwordstring User's password used in the device's login. Must be a simple text, without Hash. $.ajax({ url: "/change_login.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ login: "WalterWhite", password: "Heisenberg" }) });
LogoutCommand that finalizes a sessionlogout Finalizes the session. The HTTP method POST is utilized to send data. This call has no return. $.ajax({ url: "/logout.fcgi?session=" + session, type: 'POST', contentType: 'application/json' });
ObjectsDescription of all objectsusersRepresents an user.id64 bits integerUnique identifier of an user. Required field.registrationstringText representing the registration of an user. Required field.namestringText that contains the name of an user. Required field.passwordstringString that represents the password of an user after the Hashing process. This parameter cannot be defined by a simple text typed by the user. The text must be Hashed through the command user_hash_password. Additionally, the recovery of this parameter through the command load_objects returns the Hashed password.saltstringString representing the Salt used to calculate the Hash of the password of an user.templatesBiometric data of user's fingerprints (referred from here on as biometries)id64 bits integerUnique identifier of a biometry. Required field.finger_positionintegerReserved field.finger_typeintegerType of biometry: ordinary finger(value 0) or panic finger (value 1). Required field.templateblobBinary data that represents a biometric template. Required field.user_id64 bits integerUnique identifier of an user to whom this biometry belongs. Required field.cardsRepresents the proximity identification cards.id64 bits integerUnique identifier of a identification card. Required field.value64 bits unsigned integerCard's number.
For proximity cards (ASK, FSK), also known as wiegand cards, the value that must be sent is [number before comma] * 2^32 + [number after comma]. Example: The value for a card number 123,45678 is 123 * 2^32 + 45678, or, 528281023086. This is how the device sends the card values. Required field.
This is an unique value. There cannot be two cards with the same value in the database.
user_id64 bits integerUnique identifier of an user to whom this identification card belongs. Required field.
alarm_zonesAlarm zones' data.zoneintegerUnique identifier of an alarm zone. Required field.enabledintegerIndicates whether the alarm of this zone is enabled (value 1) or not (value 0). Required field.active_levelintegerIndicates whether the alarm of this zone is configured as 'active high' (1) or 'active low' (0). Required field.alarm_delayintegerTime delay before the alarm is activated once a signal has been detected in this alarm zone. Required field.user_rolesrelates users to privilege levels. Only Includes users that have any privilege level other than the default.user_id64 bits integeruser id. Required field.roleinteger If this field is set to 1, this user is an administrator. Required field.groupsRepresents the access' groups. In the device's built-in and web interfaces, this object is referred as a department.id64 bits integerUnique identifier of the access' group. Required field.nameintegerName of the access' group. Required field.user_groupsRelates users to access' groups.user_id64 bits integeruser's id. Required field.group_id64 bits integerid of the access' group. Required field.identification_rulesRepresents the identification's scripts.id64 bits integerUnique identifier of the identification's scripts in the database. Required field.identificationstringName of the identification's scripts.has_one_to_nintegerReserved field.parametersstringParameters of the identification's scripts.user_identification_rulesRestricts the identification's scripts users can use. If the user is not in this table, they can use all identification's scripts (default behaviour). In case the user is on the table, they can only use the scripts associated to they. The pair user_id, identification_rule_id is unique. This implies that cannot exist more than one object in the table having the same values in these fields at the same time.user_id64 bits integerUnique identifier of the user. Required field.identification_rule_id64 bits integerid of the identification's scripts in the database. Required field.typeintegerReserved field.group_identification_rulesRestricts the identification's scripts access' groups can use. If the access' group is not in this table, it can use all identification's scripts (default behaviour). In case the access' group is on the table, it can only use the scripts associated to it. The pair group_id, identification_rule_id is unique. This implies that cannot exist more than one object in the table having the same values in these fields at the same time.group_id64 bits integerUnique identifier of the access' group. Required field.identification_rule_id64 bits integerid of the identification's scripts in the database. Required field.typeintegerReserved field.actionsRepresents the action's scripts.id64 bits integerUnique identifier of the action's script in the database.namestringAction's descriptive name. Required field.actionstringFile name of the action's script. Required field.parametersstringParameters of the action's script. Required field.run_atintegerThere are 3 possible values. Case 0, the script will be executed in the device in which the identification occurred. Case 1, the script will be executed in all connected devices. Case 2, the script will be executed in the identification's server. Required field.validationsRepresents the validation's scripts of an user access.id64 bits integerUnique identifier of the validation's script in the database.namestringValidation's descriptive name. Required field.validationstringFile name of the validation's script. Required field.parametersstringParameters of the validation's script. Required field.areasRepresents areas that are going to have its access controlled.id64 bits integerUnique identifier of an area.namestringArea's descriptive name. Required field.portalsRepresents portals. A portal has two areas and an unique direction.id64 bits integerUnique identifier of a portal.namestringPortal's descriptive name Required field.area_from_id64 bits integerSource area's id. Required field.area_to_id64 bits integerDestination area'sid. Required field.portal_actionsRelates portals and actions.portal_id64 bits integerPortal'sid. Required field.action_id64 bits integerAction's id. Required field.access_rulesRepresents the access' rules. The rules' evaluation happens in the following order: When there is an access' attempt, all blocking rules are evaluated before the liberation rules. In case there are one or more blocking rules with matched criteria, their actions will be executed. The liberation rules will only be evaluated if none of the blocking rules have matched criteria, and if the liberation rules have matched criteria, their actions will be executed. id64 bits integerid of the access' rule.namestringDescriptive name of the access' rule. Required field.typeintegerAccess' rule type: 0 for a blocking rule, 1 for a liberation rule. Required field.priorityintegerReserved field.Required field.portal_access_rulesRelates portals and access' rules.portal_id64 bits integerPortal's id. Required field.access_rule_id64 bits integerid of the access' rule. Required field.group_access_rulesRelates groups and access' rules.portal_id64 bits integerGroup's id. Required field.access_rule_id64 bits integerid of the access' rule. Required field.access_rules_actionsRelates actions and Access' rules.access_rule_id64 bits integerid of the access' rules. Required field.action_id64 bits integerAction's id. Required field.access_rules_validationsRelates actions and access' rules.access_rule_id64 bits integerid of the access' rule. Required field.validation_id64 bits integerid of the validation script in the database. Required field.time_zonesSet of intervals that represents a time criterion for an access' rule.id64 bits integerid of the time zone. Required field.namestringDescriptive name of the time zone. Required field.time_spansOne of the intervals that represents a time criterion for an access' rule.id64 bits integerInterval's id. Required field.namestringInterval's descriptive name. Required field.time_zone_id64 bits integerTime zone to which this interval belongs. Required field.startintegerInterval's start time. It is stored in seconds beginning at 00:00 am of the day. e.g.: 01:00 am is 3600, as 1*60*60 = 3600. 01:00 pm is 46800, as 13*60*60 = 46800. Required field.endintegerInterval's end time. It is stored in seconds beginning at 00:00 am of the day. Required field.sunintegerIndicates if the interval is active Sundays. Required field.monintegerIndicates if the interval is active Mondays. Required field.tueintegerIndicates if the interval is active Tuesdays. Required field.wedintegerIndicates if the interval is active Wednesdays. Required field.thuintegerIndicates if the interval is active Thursdays. Required field.friintegerIndicates if the interval is active Fridays. Required field.satintegerIndicates if the interval is active Saturdays. Required field.hol1integerIndicates if the interval is active on Holidays of type 1.hol2integerIndicates if the interval is active on Holidays of type 2.hol3integerIndicates if the interval is active on Holidays of type 3.contingency_cards List of cards that will have access to the device when in contingency mode.idintegerUnique card id auto-increment.value64 bits integerCard value liberated in contingency mode Required field.contingency_card_access_rulesLink an access rule that will validate the cards that are enrolled in contingency_cards.access_rule_id64 bits integerId of the access rule that will be used when in contingency mode, default value is 1 (Access rule: Always liberated). Required field.group_access_rulesLinks Groups and Access rules.group_id64 bits integerGroup id. Required field.access_rule_id64 bits integerAccess rule id. Required field.holidaysThis table contains the list of holidays, as well as, to what type they belong to..namestringHoliday name.startinteger The date and time the holiday starts, in UNIX timestamp.endintegerThe date and time the holiday ends, in UNIX timestamp.hol1integerIf the holiday belongs to the holiday type 1. Valid values are 0 or 1.hol2integerIf the holiday belongs to the holiday type 2. Valid values are 0 or 1.hol3integerIf the holiday belongs to the holiday type 3. Valid values are 0 or 1.repeatsintegerIf the holiday repeats yearly. Valid values are 0 or 1.alarm_zone_time_zonesRelates Alarm zones and Time zones.alarm_zone_id64 bits integerid of the alarm zone. Required field.time_zone_id64 bits integerid of the time zone. Required field.access_rule_time_zonesRelates access' rules and time zones.access_rule_id64 bits integerid of the access' rule. Required field.time_zone_id64 bits integerid of the time zone. Required field.portal_rulesRepresents the portal's rules. Given that a person was authorized by an access' rule, they still have to be authorized by the portal's rules. The portal's rules are enforced upon all that try to cross the portal. For instance, an user authorized by an access' rule still needs to satisfy the rules for each specific portal in order to cross them. access_rule_id64 bits integerid of the access' rule. Required field.time_zone_id64 bits integerid of the time zone. Required field.portal_portal_rulesRelates portals and portal's rules.portal_id64 bits integerPortal's id. Required field.portal_rules_id64 bits integerid of the portal's rule. Required field.portal_rules_groupsRelates portal's rules and groups.portal_rules_id64 bits integerid of the portal's rule. Required field.group_id64 bits integerGroup's id. Required field.portal_rules_usersRelates portal's rules and users.portal_rules_id64 bits integerid of the portal's rule. Required field.user_id64 bits integeruser's id. Required field.portal_rules_actionsRelates portal's rules and actions.portal_rules_id64 bits integerid of the portal's rule. Required field.action_id64 bits integeraction's id. Required field.portal_rules_validationsRelates portal's rules and access' validation scripts.portal_rules_id64 bits integerid of the portal's rule. Required field.validation_id64 bits integerid of the validation script in the database.Required field.portal_rules_time_zonesRelates portal's rules and time zones.portal_rules_id64 bits integerid of portal's rule. Required field.action_id64 bits integerid of the time zone. Required field.access_logsDevice access' logs.id64 bits integerid of the access' log.timeintegerEvent's time in Unix Timestamp.eventintegerType of event. It can be: 1 - Invalid device 2 - Identification rule's invalid parameters 3 - Not identified 4 - Pending identification 5 - Identification timeout 6 - Not authorized 7 - Authorized 8 - Pending access (Used when the access depends of more than one person) 9 - User is not an administrtor (Used when an user tries to acces the menu, but does not have administrator privilege) 10 - Access not identified (When the portal is open thought the API, but a reason is not informed) 11 - REX access 12 - WEB access 13 - Access abandonment (Used by the turnstile) device_id64 bits integerid of the device in which the event happened.identifier_idintegerid of the identification's module that recorded the event.user_idintegerid of the user involved in the event.portal_idintegerid of the portal involved in the event.identification_rule_idintegerid of the identification rule involved in the eventcard_value64 bits integerCard number used during identification.access_log_access_rulesAccess' rules of an access' log. The pair access_log_id, access_rule_id is unique. In other words, There cannot be more than one element with the same pair at the same time.access_log_id64 bits integerid of the access' log. Required field.access_rule_id64 bits integerid of access' rule. Required field.access_log_portal_rulesPortal's rules of an access' log. The pair access_log_id, portal_rule_id is unique. In other words, There cannot be more than one element with the same pair at the same time.access_log_id64 bits integerid of the access' log. Required field.portal_rule_id64 bits integerid of the portal's rule. Required field.alarm_logsDevice alarm's logs.id64 bits integerid of the alarm's log. Required field.eventintegerType of event. It can be: 1 - Alarm activated 2 - Alarm deactivated Required field.causeintegerCause of the event. It can be: 1 - Alarm zone 1 2 - Alarm zone 2 3 - Alarm zone 3 4 - Alarm zone 4 5 - Alarm zone 5 6 - Door opened 7 - Burglary 8 - Panic finger 9 - Tamper Required field.user_id64 bits integerid of the portal's rule.timeintegerEvent's time in Unix Timestamp.Required field.devicesRepresents the devices registered in this device. This is used for the communication between devices through the network.id64 bits integerDevice's id. Required field.namestringDevice's name. Required field.ipstringIP address of the device. e.g.: 192.168.0.129 or example.controlid.com Required field.public_keystringDevice's public cryptographic key used for the authentication between devices. Required field.device_identification_rulesRelates devices and identification rules. The pair device_id, identification_rule_id is unique. In other words, There cannot be more than one element with the same pair at the same time.device_id64 bits integerDevice's id. Required field.identification_rule_id64 bits integerid of the identification rule. Required field.device_actionsRelates devices and actions. The pair device_id, action_id is unique. In other words, There cannot be more than one element with the same pair at the same time.device_id64 bits integerDevice's id. Required field.action_id64 bits integerAction's id. Required field.
Create ObjectsCreates objects of the type specifiedcreate_objects Creates objects of the type specified. HTTP POST method is used. objectstring Type of object to be created. Please, refer to objects for the entire list of available objects. valuesarray of JSON objects Each element must be an JSON object representing an object to be created. Each key must be a valid field of the object and the values must be of the appropriate type. All JSON objects must have the same fields. ids64 bits integer arrayids of the objects created.$.ajax({ url: "/create_objects.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ object: "users", values: [{name: 'Walter White', password: 'Heisenberg'}] }) });
Load ObjectsLoads all objects of the type specifiedload_objects Loads all objects of type specified. HTTP POST method is used. objectstring Type of the object to be created. Please, refer to objects for an exhaustive list of the types of available objects. fields (optional)strings' array Fields of the object that are going to be received. If this parameter is not present, all fields are sent. limit (optional)integer Maximum number of objects to be acquired. offset (optional)integer Skips the first offset objects that would have been acquired. Useful for a paging implementation. The parameter limit must defined. Otherwise, offset will be ignored. order (optional)strings' arrays Which fields must be used to order the objects. If any of the elements have the special value ascending or descending, the ordering will be ascending or descending, respectively. If multiple ascending or descending values are defined, only the last definition will be considered. In case the specified field must be from a different object than the one been loaded, a JSON object can be passed with the following parameters: { object: 'object', field: 'field' } Where object and field are the object and field by which the ordering is desired. group (optional)array de strings This field determines how the rows should be grouped (very similar to the group by cluase in as SQL database). It is an array that may contain the name of the field that that will be grouped or an object, in the case that the field does not belong to the original table.{ object: 'object', field: 'field' }join (optional)string This field determines how the tables should be grouped. This filed is a string that may have either of 2 values: "LEFT" or "INNER". where (optional)JSON object What objects are going to be retrieved. Through this parameter, it is possible to specify filters. Each key must be the type of object to be retrieved and each value must be a JSON object. e.g.: where: { users: {} } The key of each JSON object must be a field of the object and the value is the filter used. e.g.: where: { users: { id: 1 } } In the above example, only users that have an id equal to 1 (one) will be filtered. Note that the type of the object's attribute (integer, string, etc.) must be of the same type been used as filter.
Comparison Operators
The filter can also specify one of the following comparison operators:
  • The equal to operator ('=', '==', 'LIKE'). This is the default operator and does not need to be specified.
  • The not equal operator ('!=', '<>', 'NOT LIKE').
  • The greater than operator('>').
  • The less than operator ('<').
  • The greater than or equal to operator ('>=').
  • The less than or equal to operator ('<=').
  • The in operator ('IN').
  • The not in operator ('NOT IN').
Operators can be defined using a JSON object in which the key is the operator and the value is the value of the restriction. e.g.: where: { users: { id: {"!=": 1} } } In the above example, only users that poss an id different than 1 will be retrieved. It is also possible to define more than one restriction. e.g.: where: { users: { id: {">=": 1, "<=": 2} } } In the above example, only users that possess an id greater than or equal to 1 (one) and less than or equal to 2 (two) will be retrieved.
OBJECT_NAMEJSON object's arrayEach JSON object represents a loaded object. OBJECT_NAME is the name of the loaded object.
$.ajax({ url: "/load_objects.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ object: "users" }) });
Modify ObjectsModifies objects of the specified typemodify_objects Modifies objects of the specified type. HTTP POST method is used. objectstring Type of the object to be modified. Please, refer to objects for an exhaustive list of the available objects. valuesJSON object JSON object representing the object to be modified. Each key must be a valid field of the object and each value must be of the appropriate type. whereJSON object Please, refer to load_objects for a complete description of the parameter where. Only the same object can be used as a filter. changesintegerTotal number of changes.$.ajax({ url: "/modify_objects.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ object: "users", values: {name: 'Walter Hartwell White'}, where: { users: {name: 'Walter White'} } }) });
Destroy ObjectsDestroys objects of the specified typedestroy_objects Destroys objects of the specified type. HTTP POST method is used. objectstring Type of the object to be modified. Please, refer to objects for an exhaustive list of the available objects. whereJSON object Please, refer to load_objects for a complete description of the parameter where. Only the same object can be used as a filter. changesintegerTotal number of changes.$.ajax({ url: "/destroy_objects.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ object: "users", where: { users: {name: 'Walter White'} } }) });
Create Hash of a user's passwordCreates a Hash of a given user's passworduser_hash_password Given a password in plain text, returns a hash that represents a password of the user and the salt that was used to generate it. HTTP POST method is used. Notice that if this command is called twice on the same plain text password, the resulting Hash is not going to be same, because the salt generated is random and will be different each time this command is called.passwordstring Password in plain text. passwordstringHash of the given password.saltstringSalt utilized to generate the password's hash.$.ajax({ url: "/user_hash_password.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ password: "abc123", }) });
Get an user's imageGets an image of an user specified by iduser_get_image Gets an image of an user specified by id. HTTP method used is irrelevant. The specified id can be passed through the Query String or the request body. user_id64 bits integer user's id. image/jpegUser's image.$.ajax({ url: "/user_get_image.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({user_id: 123}) });
Set an user's imageSet's an user's image specified by iduser_set_image Sets an user's image specified by id. HTTP POST method is used. Different from most commands in this API, in this command the Content-Type has to be application/octet-stream. Therefore, the image is passed in the Content of the POST method, and the user's id is passed in the Query String. Attention: The Content-Type of this command is application/octet-stream. This command has no return. user_id64 bits integer User's id. This parameter is passed through the Query String$.ajax({ url: "/user_set_image.fcgi?user_id=123&session=" + session, type: 'POST', contentType: 'application/octet-stream', data: [Image bytes] });
Destroy an user's imageDestroys an user's image specified by the iduser_destroy_image Destroys an user's image specified by the id. HTTP POST method is used. This command has no return. user_id64 bits integer user's id. $.ajax({ url: "/user_destroy_image.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ user_id: "123" }) });
Export reportExporting reportsreport_generate The report will be generated according to the setted fields. The search parameters are equal to the ones in the method load_objects. HTTP POST method is used. objectstring This field specifies the type of report that will be genrated, e.g.: "users". file_namestringThis field specifies the output file's name. Optional.delimiterstring This field specifies the delimiter, similar to the CSV structure. e.g.: ";" or ",". Optionalheaderstring This field specifies the header of the report.Optional.line_breakstring This field specifies the end-of-line character. e.g.: "\n". Optional.columnsJSON object This filed specifies the columns that will be shown in the report. (Very similar to the field "field" from the method load_objects). Esse campo determina as colunas que serão mostradas no relatorio. (Muito similar ao campo fields do método load_objects). This field is an array that contains objects. These objects contains the following fields: fieldstring This field belongs to the object columns and specifies the name of the field that will be generated. typestring This field belongs to the obejct columns and specifies the type of the column. It can be: "object_fileld" (regular column values), "counter" (register counter) and "fixed" (Fixed value) object_fieldstring This object specifies a regular column. This object has two fields, "fields" and "type", of type string that specifies the column and tables, repctively counterstring This object has 2 optional integer fields: offset (specifies the initial value of the counter, default: 0) and step (specifies the step of the counter, defautl: 1) fixedstring This object has a required field of type string that specifies a fixed value. formatJSON object This object belongs to the object "columns". It specifies how the column will be formatted and presented and has the following fields: Optional.adjustmentstring This field represent if the column should be aligned to the left, right or no adjustment should be made. Optional.fillstring This field specifies the value that should be used to fill the white spaces. e.g.: "0" Optionalformatstring This field represents the format of the column, e.g.: "%d : day, %m : month, %Y : year, %H : hours, %M : minutes, %S: seconds" Optionalwidthinteger This field specifies the width of the column. Optional$.ajax({ url: "/report_generate.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ order:["ascending","name"], "where":{ "users":{}, "groups":{}, "time_zones":{} }, object:"users", delimiter:";", line_break:"\\r\\n", header:"Name (Users);Id (Users)", file_name:"", join:"LEFT", columns:[ { type:"object_field", object:"users", field:"name", format:{ adjustment:1, width:50,"fill":" ", format:"%s" } }, { type:"object_field", object:"users", field:"id", format:{ adjustment:2, width:5, fill:"0", format:"%s" } } ] }) });
Read GPIO stateReads the state of a processor's general purpose pingpio_state Reads the state of a GPIO specified by the parameter gpio. gpiointeger General purpose pin's (GPIO) number pin 0 - alarm zone 1 pin 1 - alarm zone 2 pin 2 - alarm zone 3 pin 3 - alarm zone 4 pin 4 - alarm zone 5 pin 5 - door sensor 1 pin 6 - door sensor 2 pin 7 - REX(Rquest for exit) 1 pin 8 - REX(Rquest for exit) 2 pin 9 - alarm out pin 10 - biometry's LED pin 11 - relay 1 pin 12 - relay 2 pin 13 - tamper pin 20 - wiegand out 1 pin 21 - wiegand out 0 pin 22 - wiegand in 1 pin 23 - wiegand in 0 enabledinteger Indicates if the GPIO is enabled (1) or disabled (0). Attempting to read or write from/to a disabled GPIO has an undefined effect. ininteger Indicates if the GPIO is defined as an input (1) or output (0) pin. pinstring GPIO's name. idleinteger GPIO's value when idle. pullupinteger Indicates if the GPIO's pullup resistor is enabled (1) or disabled (0). valueinteger GPIO's current value. notifyinteger Indicates if the access' software will be notified of any variation in the GPIO's state (1) or not (0). notifiedinteger Indicates how many times the GPIO notified the access' software of a variation. $.ajax({ url: "/gpio_state.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ gpio: 1 }) });
Reload LED's configurationNotifies the access' application to reload the configuration of the device's LEDled_rgb_refresh Once the LED's configuration has been altered, notifies the access' application to refresh it. This command has no return. $.ajax({ url: "/led_rgb_refresh.fcgi?session=" + session, type: 'POST', contentType: 'application/json' });
Read System's InformationReads System's information and statisticssystem_information Reads the following system's statistics: uptime, device's date and time, used and total RAM and flash memory, license, network information (IP address, network mask and default gateway), device's serial number, firmware's version and mode of operation (online or offline). Returns a JSON object containing the following keys: uptimeJSON object Indicates the time during which the device is in operation. Contains the following keys: daysinteger uptime's days. hoursinteger uptime's hours (values range from 0 to 23). minutesinteger uptime's minutes (values range from 0 to 59). secondsinteger uptime's seconds (values range from 0 to 59). timeinteger Device's date and time in Unix Timestamp. memoryJSON object Device's memory information. diskJSON object Device's non volatile memory information. Contains the following keys: freeinteger Free memory (in bytes). totalinteger Total memory size (in bytes). ramJSON object Device's volatile memory information. Contains the following keys: freeinteger Free memory (in bytes). totalinteger Total memory size (in bytes). licenseJSON object License's information. Contains the following keys: usersinteger Maximum number of users allowed by the license in use. deviceinteger Maximum number of devices that can be controlled by this device according to the license in use. typestring License type. networkJSON object Network information. Contains the following keys: macstring Device's physical address (MAC). ipstring Device's IP address. netmaskstring Device's network mask (netmask). gatewaystring Device's default gateway. serialstring Device's serial number. versionstring Firmware's version. onlineBoolean Indicates if the device is in online mode. $.ajax({ url: "/system_information.fcgi?session=" + session, type: 'POST', contentType: 'application/json' });
Set network configurationSets the device's network configurationset_system_network Sets the device's network configuration. HTTP POST method is used. This command has no return. ipstring Text that represents the device's IP address. e.g.: "192.168.0.33". netmaskstring Text that represents the device's network mask. e.g.: "255.255.255.0". gatewaystring Text that represents the device's gateway. e.g.: "192.168.0.1". web_server_portstring Embedded web server's port number. e.g.: 80 $.ajax({ url: "/set_system_network.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ ip: "192.168.0.33", netmask: "255.255.255.0", gateway: "192.168.0.1", web_server_port: 80 }) });
Set date and timeSets the system's date and timeset_system_time Sets the system's date and time. HTTP POST method is used. This command has no return. dayinteger Value representing the day of the month. monthinteger Value representing the month (values range from 1 to 12). yearinteger Value representing the year. e.g.: 2014 hourinteger Value representing the hour (values range from 0 to 23). minuteinteger Value representing the minutes (values range from 0 to 59). secondinteger Value representing the seconds (values range from 0 to 59). $.ajax({ url: "/set_system_time.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ day: 10, month: 12, year: 1983, hour: 21, minute: 30, second: 00 }) });
Factory resetRestores all system's settings to their original manufacturer valuesreset_to_factory_default Resets all system's settings to their original manufacturer values. Restores the device to its original system state by erasing all of the information stored on the device. This command has no return nor parameters. Attention: This command erases all data, including, but not limited to, users and network configurations. Also, resets all device's settings to its original manufacturer settings$.ajax({ url: "/reset_to_factory_default.fcgi?session=" + session, type: 'POST', contentType: 'application/json' });
Remove AdministratorsRemoves all administrators from the devicedelete_admins Removes all administrators from the device. This command has no return nor parameters. $.ajax({ url: "/delete_admins.fcgi?session=" + session, type: 'POST', contentType: 'application/json' });
Reboot in Update ModeReboots the device in Update modereboot_recovery Reboots the device in Update mode This command has no return nor parameters. $.ajax({ url: "/reboot_recovery.fcgi?session=" + session, type: 'POST', contentType: 'application/json' });
RebootReboots the devicereboot Reboots the device. This command has no return nor parameters. $.ajax({ url: "/reboot.fcgi?session=" + session, type: 'POST', contentType: 'application/json' });
Execute ActionExecutes actions on the deviceexecute_actions Executes actions on the device. Currently, the only action available is door which opens one of the relays of the device. Refer to the example bellow on how to use it. HTTP POST method is used. This command has no return. actionsarray of JSON objects Each element of this array has 2 keys, both strings: action and parameters. action is an action to be executed and parameters are the action's parameters. $.ajax({ url: "/execute_actions.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ actions: [ { action: "door", parameters: "door=1" } ] }) });
Remote enroll Biometry/CardExecute an action on the deviceremote_enroll Enroll a biometry or card remotely. HTTP POST method is used. This requests no response. typestring Specifies what will be enrolled. Could be "card" or "biometry" (Rquired field) saveboolean This parameter indicates if the object (card or biometry) should be saved locally. If save is false, the object will be sent to the monitor configured in the device or to the server (in case the device is in online mode). Default: false user_idint The id of the user. (Required in case save is true) panic_fingerint If the biometry being enrolled is a panic finger. Valid values are 0 or 1. Default: 0 messagestring The message that will be presented to the user when enrolling. When empty, the default message is shown. $.ajax({ url: "/remote_enroll.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ type:"biometry", user_id:123, message:"Test", save:true }) });
Configurations Description of the configurations availablegeneral General device configuration.beep_enabledstring Enables the device's beep sound. Valid values are: "0" and "1".relay1_enabledstring Enables the relay 1. Valid values are: "0" and "1".relay2_enabledstringEnables the relay 2. Valid values are: "0" and "1".relay1_timeoutstringAtivation time (in milliseconds) for the relay 1. e.g.: "3000".relay2_timeoutstringAtivation time (in milliseconds) for the relay 2. e.g.: "3000".bell_enabledstringEnables the door bell. Valid values are: "0" and "1".bell_relayinteiroTo which relay the door bell is connected. Default value is "2".catra_timeoutstring Warning: This configuration only exists for the turnstile Time duration that the turnstile is open to be "turned". When this is set to "0", it means the tunstile will be free until it is turned (infinite time), e.g.: "3000".local_identificationstring This parameter should be set when the device is on online_mode and the identification happens on the device. Valid values are "1" and "0".exception_modestring This parameter should be setted when the device needs to remain with its portals always opened or always closed, the available options are "emergency" and "lock_down". To exit these modes, this configuration should be setted to any other value. Default value is "".

When "emergency" is enabled, this device will remain with its portals opened and its screen and identifications will be locked. When "lock_down" is enabled, this device will remain with its portals closed and its screen and identifications will be locked.

alarmDevice's alarm configurations.siren_enabledstringEnables a siren. Valid values: "0" and "1"siren_relaystringTo which relay the siren is connected. Default value is "2".identifierIdentifier's configurationsverbose_loggingstring When actived, the device will persist all types of access events, including not identified. This setting uses more memory.
When deactivated, the device will only persist authorized and unathorized access events.
Valid values: "0" and "1".
bio_idConfiguração especifica do equipamento.similarity_threshold_1tonstring The higher this number is, the more rigorous the identification will be. Turning this value up will decrease the false acceptance rate and increase the false rejection rate, turning this value down will have the opposite effect. Default value: "12300".online_clientConfiguration of the online clientextract_templatestring Sets if, in case of an identification though biometry, the device will extract the fingerprint template or send an image of the fingerpriont.
Valid values: "0" and "1".
max_request_attemptsstring Number of request attempts the device makes to the server before entering contingency mode.
Get configurationsReads the device's configurationget_configuration Reads the specified configurations from the device. The available configurations are detailed in Configurations.
The HTTP POST method is used. The contentType is application/json.
generalJSON ObjectConfigurations requested.
$.ajax({ url: "/get_configuration.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ general: ["beep_enabled", "relay1_timeout"] }) });
Set ConfigurationsSets devices's configurationsset_configuration Sets the specified configurations to the device. The available configurations are detailed in Configurations.
The HTTP POST method is used. The contentType is application/json.
$.ajax({ url: "/set_configuration.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ general: {"beep_enabled": "1", "relay1_timeout": "3000"} }) });
MonitorMonitor's configurationsmonitor The monitor, as the name suggests, monitors the devices's events. The events are described below in endpoints.request_timeoutstringThe time it takes for the request to timeouthostnamestring The address where the request will be sent, e.g.: the IP of the server.portstringThe port to where the request will be sent.endpointsA web server's endpoint is an URL where the service can be accessed by the client's application. Therefore, the endpoints are interfaces between the API and the consumer aplication. The final URL created is: hostname + ":" + port + "/" + end_pointapi/notification/daostring Sent when there is any modification to the access logs table. (insertion, alteration or deletion) api/notification/templatestring Sent when a template is enrolled remotelly. See Remote enroll Biometry/Card for more informations. api/notification/cardstring Sent when a card is enrolled remotelly. See Remote enroll Biometry/Card for more informations. api/notification/catra_eventstring This endpoint is exclusive to the turnstile. It sends a request every time the turnstile is "turned" (or failed to be "turned"). The events ca be EVENT_TURN_LEFT, EVENT_TURN_RIGHT or EVENT_GIVE_UP. e.g.: { "event": { "type": 7, "name": 'TURN LEFT', "time": 1484126902 }, "device_id": 935107 } /api/notification/operation_modestring A request is sent every time there is a change in the operation mode of the device (e.g.: enter or exit contingency mode). When the device first boots, it sends a request with the field "last_offline" set to 0. e.g.: { "operation_mode": { "mode": 0, "mode_name": "DEFAULT", "time": 1490271121, "last_offline": 1490261121 }, "device_id": 123456 }
Identification eventsMessages sent to the server in case of an identificationWhen an identification occours, the events described below are sent automatically by a device that is on online mode. The server should process these events.new_biometric_image Biometry identification. This event is sent in case extract_template configuration is disabled.
The HTTP method POST is used. The contentType is application/octet-stream. All parameters are sent through the query string, except the image.
sessionstringSession's hash created on logindevice_id64 bits integerDevice's unique ididentifier_id64 bits integerIdentifier's id (wiegand, RFID, biometry)widthintegerImage width in pixels.heightinteiro de 32 bitsImage height in pixels.Imagembinary (octet-stream)This is the only parameter sent in the message body
Fingerprint's image in binary. It has one byte per pixel, in grayscale.
resultJSON ObjectDetailed in return message.
new_biometric_template Biometry identification. This event is sent in case extract_template configuration is enabled.
The HTTP method POST is used. The contentType is application/octet-stream. All parameters are sent through the query string, except the template.
sessionstringSession's hash created on logindevice_id64 bits integerDevice's unique ididentifier_id64 bits integerIdentifier's id (wiegand, RFID, biometry)Templatebinary (octet-stream)This is the only parameter sent in the message body
Biometric template in the Innovatrics format (http://www.innovatrics.com/) .
resultJSON ObjectDetailed in return message.
new_card Proximity card identification.
The HTTP method POST is used. The contentType is application/x-www-form-urlencoded. All parameters are sent through the query string.
sessionstringSession's hash created on logindevice_id64 bits integerDevice's unique ididentifier_id64 bits integerIdentifier's id (wiegand, RFID, biometry)card_value64 bits integerCard valueresultJSON ObjectDetailed in return message.
new_user_id_and_password Id and password identification.
The HTTP method POST is used. The contentType is application/x-www-form-urlencoded. All parameters are sent through the query string.
sessionstringSession's hash created on logindevice_id64 bits integerDevice's unique ididentifier_id64 bits integerIdentifier's id (wiegand, RFID, biometry)user_idintegerUser's idpasswordstringUser's passwordresultJSON ObjectDetailed in return message.
new_user_identified This event is sent in case local_identification configuration is enabled.
In this mode, when an user attempts an identification, the device threats the identification locally, and sends the user id to the server. The server process the access rules and send commands to the device (e.g.: open door). In this mode the server must always syncronize the user's data with the devices. The server must also adhere to the template limit of each device.
The HTTP method POST is used. The contentType is application/x-www-form-urlencoded. All parameters are sent through the query string.
sessionstringSession's hash created on logindevice_id64 bits integerDevice's unique ididentifier_id64 bits integerIdentifier's id (wiegand, RFID, biometry)eventintegerIdentification result event, (e.g.:3 for not identified)user_id64 bits integerUser's idresultObjeto JSONDescrito em Mensagem de Retorno.
get_user_image Device did not find the photo locally and requests the photo to the server. The HTTP method GET is used. sessionstringSession's hash created on loginuser_id64 bits integerUser's idImagebinary (octet-stream)Photo of the userdevice_is_alive If the device is not able to comunicate with the server after 3 (configurable) attempts, the device will enter contingency mode. In this mode, all identification are evaluated on the local database, wich needs to be previously configured. Futhermore, each minute, the device sends a {ip}/device_is_alive.fcgi?device_id={value} request to the server with the number of access_logs available. If this request is responded (HTTP status OK), the device returns to the default mode (online). The HTTP method POST is used. The contentType is application/json. access_logsintegerNumber of available access logs
Online remote enroll Biometry/CardOnline remote enroll Biometry/Card When the device is configured to extract templates, the endpoint that is called is template_create.fcgi that contains the templates extracted by the device.card_create This endpoint will be called when there is a card remote enroll while the device is in online mode. How to configure the remote_enroll is detailed in Remote enroll The HTTP method POST is used. The contentType is application/json. user_id64 bits integerUser's IDcard_value64 bits integerCard numberdevice_id64 bits integerDevice's unique IDEndPoint: /card_create.fcgi { "user_id": 1, "card_value": 132456789, "device_id": 935107 }fingerprint_create This endpoint will be called when there is a biometry remote enroll and the device is configured to not extract templates while the device is in online mode. How to configure the remote_enroll is detailed in Remote enroll The HTTP method POST is used. The contentType is application/json. user_id64 bits integerUser's IDfinger_typeinteger1 for panic, 0 otherwisedevice_id64 bits integerDevice's unique IDfingerprintsJSON Object's arrayimagestring Binary of the image in base64 format. This binary is a bitmap of single color (grayscale) where each byte is a pixel. Therefore, it is image that must contain width*height bytes widthintegerImage's width heightintegerImage's height EndPoint: /fingerprint_create.fcgi { "user_id": 1, "finger_type": 0, "device_id": 935107, "fingerprints": [ { "image": "Base64" "width": 300, "height": 200 }, { "image": "Base64" "width": 300, "height": 200 }, { "image": "Base64" "width": 300, "height": 200 } ] }
Return message Return message from the server to the device after an identification attempt.resultResult of the identification attempteventinteger Type of event that took place
1 - Invalid device
2 - Invalid identification rule parameters
3 - Not identified
4 - Identification pending
5 - Identification timeout
6 - Access not authorized
7 - Access granted
8 - Access pending
Required field
user_id64 bits integerUser's ID, case it was identifieduser_namestringUser's name, case it was identifieduser_imagebooleanIdentified user has photouser_image_hashstring In case the user was identified, this is the hash (SHA1) of the photo.
The device uses this value to cache previous photos, saving the extra request on every identification.
portal_idstringPortal's IDactionsJSON Object's array Actions that should be performed by the device. e.g.:
[ {"action":"door", "parameters":"door=1"},
{"action":"door", "parameters":"door=2"} ]
{"result": {"event":7, "user_id":6, "user_name":"Neal Caffrey", "user_image":false, "portal_id":1, "actions":[ {"action":"door", "parameters":"door=1"}, {"action":"door", "parameters":"door=2"} ] } }
Turnstile's configurationsDescribe the available turnstile's specific configurations.generalTurnstile's general configurationscatra_timeoutstring Time duration that the turnstile is open to be "turned". When this is set to "0", it means the tunstile will be free until it is turned (infinite time), e.g.: "3000". catraTurnstile's specific configurationsanti_passbackstring Enables or disables anti-passback daily_resetstring Enables the daily reset of the entrance logs for the anti-passback. Access will be revoked every midnight. Valid values: "0" and "1" gatewaystring Entrance direction, must be "clockwise" or "anticlockwise" operation_modestring Turnstile's operation mode. Controls which direction the turnstile should control. Must be "blocked", "entrance_open", "exit_open", "both_open" (Both controlled, Entrance open, Exit open e Always open, respectively)
Execute actionsExecutes actions on the deviceexecute_actionsExecute actions on the turnstileopen_collectorstringOpens the collector. No parameterscatrastring Opens the turnstile one way. It takes one parameter (allow="direction") "direction" must be "anticlockwise", "clockwise" or "both" $.ajax({ url: "/execute_actions.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ actions: [ { action: "catra", parameters: "allow=clockwise" } ] }) });$.ajax({ url: "/execute_actions.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ actions: [ { action: "open_collector", parameters: "" } ] }) });
IntroduçãoIntrodução à API

Este documento tem como finalidade apresentar as diferentes formas de integração com os equipamentos da linha de acesso da Control iD, por exemplo, para cadastro de usuários, identificação, consulta a registros etc. Os dispositivos de acesso da Control iD oferecem uma interface de comunicação moderna (API - Application Programming Interface) baseada em TCP/IP (Ethernet) com uma arquitetura REST. Sendo assim, a integração é simples e independente do sistema operacional e linguagem de programação utilizados. São oferecidos 3 modos de funcionamento para a API: Autônomo, Centralizado ou Push (nuvem), tudos baseados em TCP/IP.

Modo Standalone

Nesse modo de funcionamento o equipamento precisa que a sua base de dados seja configurada com todas as informações que ele precisa para funcionar, isto é, cadastro de usuarios, biometrias/cartões e regras de acesso. Para fazer isso basta realizar o request diretamente para a API do equipamento, portanto a informação é sempre enviada do servidor para o equipamento em uma unica direção.

Diagrama de Modo Offline
Modo Enterprise

Se a solução é desenvolvida com o modo enterprise dos equipamentos, ou seja, a lógica estará no servidor ou parcialmente no servidor, nesse modo a comunicação ocorre em ambos os sentidos o equipamento aceita que seja realizado requests para ele e o equipamento também realiza POSTS no Servidor para uma URL especifica e existem duas formas de implementar esse modo:

  • 1. Apenas leitura da digital no equipamento. Nesse modo, quando o usuário coloca o dedo no equipamento, este envia apenas a 'foto' da digital para o servidor, cabendo a ele usar QUALQUER algoritmo biométrico de sua preferência para fazer a extração e o matching. Tratamento biométrico: totalmente no servidor
  • 2. Leitura, extração e matching no equipamento. Nesse modo, quando o usuário coloca o dedo no equipamento, este lê o dedo e encontra o usuário correspondente no seu banco de dados local, enviando o ID do usuário ao servidor. O servidor processa as regras de acesso e diz se deve abrir a porta ou não. Repare que nesse método o servidor tem que sempre atualizar os usuários e biometrias no equipamento, tendo a limitação de 2000 templates por equipamento. Tratamento biométrico: totalmente no equipamento.
Diagrama de Modo Online
Modo Push

Nesse modo de funcionamento o equipamento inicia a comunicação, isto é, o equipamento faz uma requisição HTTP ao servidor para verificar se há algum comando para ser executado. Se receber uma resposta vazia, significa que não há nada para fazer, e depois de um certo período de tempo, o equipamento faz novamente a requisição. Caso contrário, o equipamento executa o comando e faz uma outra requisição enviando o resultado da operação. Essa requisição recebe uma resposta vazia, e logo em seguida faz uma outra requisição de push.

Diagrama de Modo Push
Primeiros Passos

Esta API usa o protocolo HTTP para a transferência de dados - arquitetura REST. Cada comando é uma chamada HTTP POST com Content-Type application/json e possui uma URL própria. Seus parâmetros e seus retornos são passados preferencialmente por JSON, exceto em menção contrária. Como exemplo, o comando login pode possuir a URL:

http://192.168.0.129/login.fcgi e os seguintes parâmetros: { login: 'admin', password: 'admin' } Todos os comandos requerem uma sessão válida, exceto session_is_valid e login. O corpo da requisição deve possuir a codificação UTF-8. Caso os caracteres enviados não possuam nenhum caractere especial (ASCII), o corpo da requisição não precisa ser codificado.Por padrão, a codificação utilizada por sistemas Windows é a Windows-1252 (também conhecida como CP-1252). Verificar como utilizar a codificação correta.
Executando os Exemplos
Os exemplos dessa documentação são escritos em JavaScript, utilizando a biblioteca jQuery. Para testá-los, acesse o endereço IP do equipamento em um navegador web e use as ferramentas do desenvolvedor (developer tools) deste para realizar requisições. Todos os exemplos fornecidos podem ser verificados copiando seus códigos e colando no console das ferramentas de desenvolvimento, além disso muitos exemplos em algumas linguagens de programação podem ser encontrados no github oficial da Control iD Clique e saiba mais.
Um exemplo completo de um comando
No código abaixo há um primeiro exemplo funcional que pode ser usado para a familiarização com as ferramentas do desenvolvedor - developer tools - do navegador. $.ajax({ url: "/login.fcgi", type: 'POST', contentType: 'application/json', data: JSON.stringify({ login: 'admin', password: 'admin' }), success: function(data) { session = data.session; } }); Para mais detalhes sobre o login, favor verificar a sua documentação aqui.
Executando os Exemplos em Outras Linguagens
Seguem abaixo alguns exemplos que ilustram como a API pode ser usada em outras linguagens de programação. Nesses exemplos, o endereço 192.168.0.129, quando aparecer, representa o endereço IP do equipamento. Atenção: a opção HTTP "Expect: 100- continue" deve estar desabilitada para as chamadas funcionarem. O único dos exemplos abaixo que o faz explicitamente é o em C#. Por favor, verifique a necessidade de fazê-lo em sua linguagem de preferência. procedure TFrmTTWebserviceTester.Button1Click(Sender: TObject); var lJSO : ISuperObject; lRequest: TStringStream; lResponse: String; begin lJSO := SO('{"login": "admin", "password": "admin"}'); lRequest := TStringStream.Create(lJSO.AsString, TEncoding.UTF8); try IdHTTP.Request.ContentType := 'application/json'; IdHTTP.Request.Charset := 'utf-8'; try lResponse := IdHTTP.Post('http://192.168.0.129/login.fcgi', lRequest); ShowMessage(lResponse); except on E: Exception do ShowMessage('Error on request:'#13#10 + E.Message); end; finally lRequest.Free; end; lJSO := nil; end;Esse exemplo em Delphi utiliza a biblioteca de código aberto Indy. try { URL url = new URL("http://192.168.0.129/login.fcgi"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST"); conn.setRequestProperty("Content-type", "application/json"); conn.setDoInput(true); conn.setDoOutput(true); OutputStream os = conn.getOutputStream(); os.write("{\"login\":\"admin\",\"password\":\"admin\"}".getBytes()); if (conn.getResponseCode() != 200) { BufferedReader br = new BufferedReader(new InputStreamReader(conn.getErrorStream())); String output, result = ""; System.out.println("Output from Server .... \n"); while ((output = br.readLine()) != null) { result += output; } throw new RuntimeException("Failed : " + result); } BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); String output; System.out.println("Output from Server .... \n"); while ((output = br.readLine()) != null) { System.out.println(output); } conn.disconnect(); } catch (Exception e) { e.printStackTrace(); } System.Net.ServicePointManager.Expect100Continue = false; try { var request = (HttpWebRequest)WebRequest.Create("http://192.168.0.129/login.fcgi"); request.ContentType = "application/json"; request.Method = "POST"; using (var streamWriter = new StreamWriter(request.GetRequestStream())) { streamWriter.Write("{\"login\":\"admin\",\"password\":\"admin\"}"); } var response = (HttpWebResponse)request.GetResponse(); using (var streamReader = new StreamReader(response.GetResponseStream())) { Console.WriteLine(streamReader.ReadToEnd()); } } catch (WebException e) { using (WebResponse response = e.Response) { HttpWebResponse httpResponse = (HttpWebResponse)response; Console.WriteLine("Error code: {0}", httpResponse.StatusCode); using (Stream data = response.GetResponseStream()) using (var reader = new StreamReader(data)) { string text = reader.ReadToEnd(); Console.WriteLine(text); } } }
Diagrama de SequênciaFluxo de Request/Response com os equipamentosEsse diagrama demonstra de forma simples o fluxo de requisições realizadas ao equipamento.

O exemplo abaixo mostra o processo de liberação do relê 1, para mais informações sobre os objetos, consulte objects.



Diagrama de Sequência
Exemplos práticosPrimeiros PassosA API de dados da linha Acesso permite a incorporação de funções normalmente executadas no próprio equipamento em seu proprio site ou aplicativo.A lista abaixo identifica alguns dos diferentes tipos de funções que você pode utilizar usando a API e também suporta métodos para inserir, atualizar, buscar e excluir muito desses recursos.

Chamando a API

Os seguintes requisitos aplicam-se as solicitações de dados da API da linha Acesso:

  • Cada solicitação deve especificar uma sessão de API(com parâmetro session) essa sessão deve ser reaproveitada para todas as requisições que você realizar para o equipamento.
  • O retorno do método de login é um json como o exemplo abaixo: { "session":"apx7NM2CErTcvXpuvExuzaZ" }


Realizar login.

O login é o primeiro método que deve ser utilizado pois ele é responsável por gerar a sessão que será utilizada em todas as requisições para o dispositivo.

Para o desenvolvimento do exemplo está sendo utilizado a biblioteca RestSharp , para mais informações sobre como utiliza-la, consultar este link:http://netcoders.com.br/blog/servicos-restful-com-a-biblioteca-restsharp/ using System; using RestSharp; namespace ExampleToDevelopment { class Program { public string Session() { var client = new RestClient("http://192.168.2.183/login.fcgi"); var request = new RestRequest(Method.POST); request.AddHeader("content-type", "application/json"); request.AddParameter("application/json", "{\"login\": \"admin\", \"password\": \"admin\"}", ParameterType.RequestBody); IRestResponse response = client.Execute(request); return response.Content; } } }
Para o desenvolvimento do exemplo está sendo utilizado o modulo request, para mais informações sobre como utiliza-lo, consultar este link:https://www.npmjs.com/package/request var request = require("request"); var options = { method: 'post', url: 'http://192.168.2.183/login.fcgi', headers: { 'content-type': 'application/json' }, body: { login: 'admin', password: 'admin' }, json: true }; request(options, function (error, response, body) { if (error) throw new Error(error); console.log(body); });


Acionar relê.

O método execute_actions execute_actions é responsável por realizar a execução de comandos no dispositivo nesse exemplo foi utilizado para abrir a porta, mais detalhes você encontra na documentação.

Para o desenvolvimento do exemplo está sendo utilizado a biblioteca RestSharp , para mais informações sobre como utiliza-la, consultar este link:http://netcoders.com.br/blog/servicos-restful-com-a-biblioteca-restsharp/ public string ExecuteAction() { var client = new RestClient("http://192.168.2.183/execute_actions.fcgi?session=zm3WJhwbFawo1wX9B4YRnLY4"); var request = new RestRequest(Method.POST); request.AddHeader("content-type", "application/json"); request.AddParameter("application/json", "{\n\t\n\t\"actions\": [ { \"action\": \"door\", \"parameters\": \"door=1\" } ]\n\t\n}", ParameterType.RequestBody); IRestResponse response = client.Execute(request); return response.Content; }
Para o desenvolvimento do exemplo está sendo utilizado o modulo request, para mais informações sobre como utiliza-lo, consultar este link:https://www.npmjs.com/package/request var request = require("request"); var options = { method: 'POST', url: 'http://192.168.2.183/execute_actions', headers: { cookie: 'session=QnnlmLcEBCE06mwKkh/7SOEM', 'content-type': 'application/json' }, body: { "actions": [ { "action": "door", "parameters": "door=1" } ] }, json: true }; request(options, function (error, response, body) { if (error) throw new Error(error); console.log(body); });


Coletar logs.

O método load_objects é utilizado para coletar informações do dispositivo nesse exemplo foi utilizado para coletar os logs de acesso que estavam armaenzados no equipamento, mais detalhes você encontra na documentação.

Para o desenvolvimento do exemplo está sendo utilizado a biblioteca RestSharp , para mais informações sobre como utiliza-la, consultar este link:http://netcoders.com.br/blog/servicos-restful-com-a-biblioteca-restsharp/ public string GetAccessLogs() { var client = new RestClient("http://192.168.2.183/load_objects.fcgi"); var request = new RestRequest(Method.POST); request.AddHeader("cookie", "session=o7JRuZQckN10lz66MHfX69iY"); request.AddHeader("content-type", "application/json"); request.AddParameter("application/json", "{\n \"object\":\"access_logs\"\n}", ParameterType.RequestBody); IRestResponse response = client.Execute(request); return response.Content; }
Para o desenvolvimento do exemplo está sendo utilizado o modulo request, para mais informações sobre como utiliza-lo, consultar este link:https://www.npmjs.com/package/request var request = require("request"); var options = { method: 'POST', url: 'http://192.168.2.183/load_objects.fcgi', headers: { cookie: 'session=QnnlmLcEBCE06mwKkh/7SOEM', 'content-type': 'application/json' }, body: { object: 'access_logs' }, json: true }; request(options, function (error, response, body) { if (error) throw new Error(error); console.log(body); });
LoginComando para criar uma sessãologin Cria a sessão, que é necessária para todos os outros comandos, exceto session_is_valid. O método HTTP usado para o envio dos dados é o POST. loginstringO valor padrão é admin.passwordstringO valor padrão é admin.sessionstringCódigo da sessão iniciada.$.ajax({ url: "/login.fcgi", type: 'POST', contentType: 'application/json', data: JSON.stringify({ login: 'admin', password: 'admin' }), success: function(data) { session = data.session; } });
Verificar a validade da sessãoComando para verificar a validade de uma sessãosession_is_valid Verifica a validade da sessão. Essa chamada não possui parâmetros. session_is_validbooleanoIndica se a sessão é válida.$.ajax({ url: "/session_is_valid.fcgi?session=" + session, type: 'POST', contentType: 'application/json' });
Alterar usuário e/ou senha de loginComando para alterar o usuário e/ou a senha de loginchange_login Altera o usuário e/ou a senha utilizados para o login no equipamento. Essa chamada não retorna nada. loginstring Nome do usuário a ser usado para o login no equipamento. passwordstring Senha do usuário a ser usada para o login no equipamento. Deve ser um texto simples, sem Hash. $.ajax({ url: "/change_login.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ login: "WalterWhite", password: "Heisenberg" }) });
LogoutComando para finalizar uma sessãologout Finaliza a sessão. O método HTTP usado para o envio dos dados é o POST. Essa chamada não retorna nada. $.ajax({ url: "/logout.fcgi?session=" + session, type: 'POST', contentType: 'application/json' });
ObjetosDescrição de todos os objetosusersRepresenta um usuário.idinteiro de 64 bitsIdentificador único de um usuário. Campo Obrigatório.registrationstringTexto representando o registro de um usuário. Campo Obrigatório.namestringTexto contendo o nome de um usuário. Campo Obrigatório.passwordstringString que representa a senha do usuário após o processo de Hash. Para definir esse parâmetro, portanto, não se deve usar o texto simples digitado pelo usuário: deve-se gerar seu Hash através do comando user_hash_password. Da mesma forma, a aquisição desse parâmetro através do comando load_objects retorna a senha após o Hash. saltstringString representando o Salt usado para calcular o Hash da senha do usuário.begin_timeintInteiro representando a partir de que data e hora (unix timestamp) o usuário é válido.end_timeintInteiro rperesentando até que data e hora (unix timestamp) o usuário é válido.templatesDados biométricos das impressões digitais dos usuários (referidas a seguir como biometrias)idinteiro de 64 bitsIdentificador único de uma biometria. Campo Obrigatório.finger_positioninteiroCampo reservado.finger_typeinteiroTipo de biometria: dedo comum (valor 0) ou dedo de pânico (valor 1). Campo Obrigatório.templateblobDados binários representando um template biométrico. Campo Obrigatório.user_idinteiro de 64 bitsIdentificador único do usuário a quem essa biometria pretence. Campo Obrigatório.cardsRepresenta os cartões de identificação por proximidade.idinteiro de 64 bitsIdentificador único de uma cartão de identificação. Campo Obrigatório.valueinteiro sem sinal de 64 bitsNumeração do cartão.
Para cartões de proximidade (ASK, FSK, PSK), também chamados de Wiegand, o valor a ser enviado pela API é [parte antes da vírgula] * 2^32 + [parte depois da vírgula]. Exemplo: Para o cartão 123,45678 deve-se enviar o valor 123 * 2^32 + 45678, ou seja, 528281023086. Este também é o valor a ser recebido da API.Campo Obrigatório.Esse valor é único, não podem existir dois cartões com mesmo value no banco de dados.
user_idinteiro de 64 bitsIdentificador único do usuário ao qual pertence o cartão de identificação. Campo Obrigatório.
alarm_zonesDados referentes às zonas de alarmes.zoneinteiroIdentificador único de uma zona de alarme. Campo Obrigatório.enabledinteiroIndica se a entrada de alarme referente à zona está habilitada (valor 1) ou não (valor 0). Campo Obrigatório.active_levelinteiroIndica se a entrada de alarme referente à zona esta configurada como 'ativo alto' (1) ou 'ativo baixo' (0). Campo Obrigatório.alarm_delayinteiroTempo de atraso no disparo do alarme uma vez que um sinal de alarme tenha sido detectado nesta zona. Campo Obrigatório.user_rolesRelaciona usuários a níveis de privilégio. Contém apenas usuários que tenham algum nível de privilégio diferente do padrão.user_idinteiro de 64 bitsid do usuário. Campo Obrigatório.roleinteiroSe este campo estiver definido como 1, o usuário é um administrador. Campo Obrigatório.groupsRepresenta os grupos de acesso. Nas interfaces nativa do equipamento e na interface web, esse tipo de objeto é referido por departamento.idinteiro de 64 bitsIdentificador único do grupo de acesso. Campo Obrigatório.nameinteiroNome do grupo de acesso. Campo Obrigatório.user_groupsRelaciona os usuários as grupos de acesso.user_idinteiro de 64 bitsid do usuário. Campo Obrigatório.group_idinteiro de 64 bitsid do grupo de acesso. Campo Obrigatório.identification_rulesRepresenta os scripts de identificação.idinteiro de 64 bitsIdentificador único do script de identificação no banco dedados. Campo Obrigatório.identificationstringNome do arquivo do script de identificação.has_one_to_ninteiroCampo reservado.parametersstringParâmetros do script de identificação.user_identification_rulesRestringe os scripts de identificação que os usuários podem usar. Caso o usuário não esteja nessa tabela, então ele(a) poderá usar todas os scripts de identificação (comportamento padrão). Caso o usuário esteja na tabela, ele(a) só poderá usar os scripts aos quais estiver associado(a). O par user_id e identification_rule_id é único, ou seja, não pode haver mais de um objeto nesta tabela com mesmos valores nesses campos ao mesmo tempo.user_idinteiro de 64 bitsIdentificador único do usuário. Campo Obrigatório.identification_rule_idinteiro de 64 bitsid do script de identificação no banco dedados. Campo Obrigatório.typeinteiroCampo reservado.group_identification_rulesRestringe os scripts de identificação que os grupos de acesso podem usar. Caso o grupo não esteja nessa tabela, então ele poderá usar todas os scripts de identificação (comportamento padrão). Caso o grupo esteja na tabela, ele só poderá usar os scripts aos quais que estiver associado. O par group_id e identification_rule_id é único, ou seja, não pode haver mais de um objeto nesta tabela com mesmos valores nesses campos ao mesmo tempo.group_idinteiro de 64 bitsIdentificador único do grupo de acesso. Campo Obrigatório.identification_rule_idinteiro de 64 bitsid do script de identificação no banco dedados. Campo Obrigatório.typeinteiroCampo reservado.actionsRepresenta os scripts de ação.idinteiro de 64 bitsIdentificador único do script de ação no banco de dados.namestringNome descritivo da ação. Campo Obrigatório.actionstringNome do arquivo do script de ação. Campo Obrigatório.parametersstringParâmetros do script de ação. Campo Obrigatório.run_atinteiroPode assumir 3 valores. Caso seja 0, o script é executado no equipamento que o usuário utilizou para a identifação. Caso seja 1, o script é executado em todos os equipamentos conectados. Caso seja 2, o script é executado no servidor de identifação. Campo Obrigatório.validationsRepresenta os scripts de validação do acesso dos usuários.idinteiro de 64 bitsIdentificador único do script de validação no banco de dados.namestringNome descritivo do script de validação. Campo Obrigatório.validationstringNome do arquivo do script de validação. Campo Obrigatório.parametersstringParâmetros do script de validação. Campo Obrigatório.areasRepresenta as áreas cujo acesso se deseja controlar.idinteiro de 64 bitsIdentificador único da área.namestringNome descritivo da área. Campo Obrigatório.portalsRepresenta os portais. Um portal liga duas áreas e tem uma única direção.idinteiro de 64 bitsIdentificador único do portal.namestringNome descritivo do portal. Campo Obrigatório.area_from_idinteiro de 64 bitsid da área de origem. Campo Obrigatório.area_to_idinteiro de 64 bitsid da área de destino. Campo Obrigatório.portal_actionsRelaciona portais e ações.portal_idinteiro de 64 bitsid do portal. Campo Obrigatório.action_idinteiro de 64 bitsid da ação. Campo Obrigatório.access_rulesRepresenta as regras de acesso. A avaliação das regras de acesso acontece na seguinte ordem: Dada uma tentativa de acesso, todas as regras de bloqueio são avaliadas antes das regras de liberação. Caso uma ou mais regras de bloqueio tenham seus critérios atendidos, suas ações serão executadas. Apenas caso nenhuma das regras de bloqueio tenham seus critérios atendidos, as regras de liberação são avaliadas e suas ações são executadas caso seus critérios sejam atendidos. idinteiro de 64 bitsid da regra de acesso.namestringNome descritivo da regra de acesso. Campo Obrigatório.typeinteiroTipo da regra de acesso: caso valha 0, é uma regra de bloqueio, e caso valha 1, é uma regra de permissão. Campo Obrigatório.priorityinteiroCampo reservado. Campo Obrigatório.portal_access_rulesRelaciona portais e regras de acesso.portal_idinteiro de 64 bitsid do portal. Campo Obrigatório.access_rule_idinteiro de 64 bitsid da regra de acesso. Campo Obrigatório.group_access_rulesRelaciona grupos e regras de acesso.portal_idinteiro de 64 bitsid do grupo. Campo Obrigatório.access_rule_idinteiro de 64 bitsid da regra de acesso. Campo Obrigatório.access_rules_actionsRelaciona ações e regras de acesso.access_rule_idinteiro de 64 bitsid da regra de acesso. Campo Obrigatório.action_idinteiro de 64 bitsid da ação. Campo Obrigatório.access_rules_validationsRelaciona ações e regras de acesso.access_rule_idinteiro de 64 bitsid da regra de acesso. Campo Obrigatório.validation_idinteiro de 64 bitsid do script de validação no banco de dados. Campo Obrigatório.time_zonesConjunto de intervalos que representa o critério de horário de uma regra de acesso.idinteiro de 64 bitsid do horário. Campo Obrigatório.namestringNome descritivo do horário. Campo Obrigatório.time_spansUm dos intervalos de um horário, o qual representa o critério de horário de uma regra de acesso.idinteiro de 64 bitsid do intervalo. Campo Obrigatório.namestringNome descritivo do intervalo. Campo Obrigatório.time_zone_idinteiro de 64 bitsHorário ao qual esse intervalo pertence. Campo Obrigatório.startinteiroHorário de início do intervalo. É armazenado em segundos desde às 0 horas do dia. Exemplo: Uma hora da manhã será 3600, já que 1*60*60 = 3600. Duas horas da manhã será 7200, já que 2*60*60 = 7200. Campo Obrigatório.endinteiroHorário de término do intervalo. É armazenado em segundos desde às 0 horas do dia. Campo Obrigatório.suninteiroIndica se o intervalo está ativo para os domingos. Campo Obrigatório.moninteiroIndica se o intervalo está ativo para as segundas-feiras. Campo Obrigatório.tueinteiroIndica se o intervalo está ativo para as terças-feiras. Campo Obrigatório.wedinteiroIndica se o intervalo está ativo para as quartas-feiras. Campo Obrigatório.thuinteiroIndica se o intervalo está ativo para as quintas-feiras. Campo Obrigatório.friinteiroIndica se o intervalo está ativo para as sextas-feiras. Campo Obrigatório.satinteiroIndica se o intervalo está ativo para os sábados. hol1inteiroIndica se o intervalo está ativo para os feriados do tipo 1.hol2inteiroIndica se o intervalo está ativo para os feriados do tipo 2.hol3inteiroIndica se o intervalo está ativo para os feriados do tipo 3.contingency_cardsCadastra uma lista de cartões que estará disponivel em modo contingência para acesso aos equipamentos.idinteiroid único do cartão, auto-incremental.valueinteiro de 64 bitsNúmero do cartão liberado no modo de contingência.contingency_card_access_rulesVincula a regra de acesso que será válida para os cartões que estiverem cadastrados em contingency_cards.access_rule_idinteiroCorresponde ao id da regra de acesso que será utilizada em modo de contingência, por padrão é: 1 (Regra de acesso sempre liberado).group_access_rulesRelaciona grupos e regras de acesso.group_idinteiro de 64 bitsid do grupo. Campo Obrigatório.access_rule_idinteiro de 64 bitsid da regra de acesso. Campo Obrigatório.holidaysEssa tabela contem os feriados, assim como indica a qual tipo eles pertencem.namestringO nome do feriado.startinteiroA data e hora que o feriado começa em formato UNIX timestamp.endinteiroA data e hora que o feriado termina em formato UNIX timestamp.hol1inteiroSe o feriado pertence ao grupo 1. O valor é 0 ou 1.hol2inteiroSe o feriado pertence ao grupo 1. O valor é 0 ou 1.hol3inteiroSe o feriado pertence ao grupo 1. O valor é 0 ou 1.repeatsinteiroSe o feriado deve repetir anualmente. O valor é 0 ou 1.alarm_zone_time_zonesRelaciona zonas de alarme e horários.alarm_zone_idinteiro de 64 bitsid da zona de alarme. Campo Obrigatório.time_zone_idinteiro de 64 bitsid do horário. Campo Obrigatório.access_rule_time_zonesRelaciona regras de acesso e horários.access_rule_idinteiro de 64 bitsid da regra de acesso. Campo Obrigatório.time_zone_idinteiro de 64 bitsid do horário. Campo Obrigatório.portal_rulesRepresenta as regras do portal. Dado que uma pessoa foi autorizada por uma regra de acesso, ela ainda está sujeita às regras do portal. As regras do portal são aplicadas sobre todos que tentarem passar por esse portal. Se, por exemplo, um usuário possui uma regra de acesso 'Sempre liberado', ainda assim ele deverá satisfazer as regras de cada portal específico para passar por ele.access_rule_idinteiro de 64 bitsid da regra de acesso. Campo Obrigatório.time_zone_idinteiro de 64 bitsid do horário. Campo Obrigatório.portal_portal_rulesRelaciona portais e regras de portais.portal_idinteiro de 64 bitsid do portal. Campo Obrigatório.portal_rules_idinteiro de 64 bitsid da regra de portal. Campo Obrigatório.portal_rules_groupsRelaciona regras de portais e grupos.portal_rules_idinteiro de 64 bitsid da regra de portal. Campo Obrigatório.group_idinteiro de 64 bitsid do grupo. Campo Obrigatório.portal_rules_usersRelaciona regras de portais e usuários.portal_rules_idinteiro de 64 bitsid da regra de portal. Campo Obrigatório.user_idinteiro de 64 bitsid do usuário. Campo Obrigatório.portal_rules_actionsRelaciona regras de portais e ações.portal_rules_idinteiro de 64 bitsid da regra de portal. Campo Obrigatório.action_idinteiro de 64 bitsid da ação. Campo Obrigatório.portal_rules_validationsRelaciona regras de portais e scripts de validação de acesso.portal_rules_idinteiro de 64 bitsid da regra de portal. Campo Obrigatório.validation_idinteiro de 64 bitsid do script de validação no banco de dados.Campo Obrigatório.portal_rules_time_zonesRelaciona regras de portais e horários.portal_rules_idinteiro de 64 bitsid da regra de portal. Campo Obrigatório.action_idinteiro de 64 bitsid do horário. Campo Obrigatório.access_logsContém os logs de acesso do equipamento.idinteiro de 64 bitsid do log de acesso.timeinteiroHorário da ocorrência em Unix Timestamp.eventinteiroTipo do evento, pode ser: 1 - Equipamento inválido 2 - Parâmetros de regra de identificação inválidos 3 - Não identificado 4 - Identificação pendente 5 - Timeout na identificação 6 - Acesso negado 7 - Acesso autorizado 8 - Acesso pendente(utilizado quando o acesso depende de mais de uma pessoa) 9 - Usuário não é administrador (utilizado quando um usuário tenta acessar o menu mas não é administrador) 10 - Acesso não identificado (Quando o portal é aberto através da API e o motivo não é informado) 11 - Acesso através de botoeira 12 - Acesso através da interface WEB 13 - Desistência de entrada. (Somente utilizado pela catraca) device_idinteiro de 64 bitsid do equipamento onde o evento de acesso ocorreu.identifier_idinteiroid do módulo de identificação que registrou o evento no equipamento.user_idinteiroid do usuário envolvido na ocorrência.portal_idinteiroid do portal envolvido na ocorrência.identification_rule_idinteiroid da regra de identificação envolvida na ocorrênciacard_valueinteiro de 64 bitsnumero do cartão utilizado durante a identificação.access_log_access_rulesRegras de acesso de um log de acesso. O par access_log_id e access_rule_id é unico, ou seja, não pode haver nessa mais de um elemento com o mesmo par dessas propriedades.access_log_idinteiro de 64 bitsid do log de acesso. Campo Obrigatório.access_rule_idinteiro de 64 bitsid da regra de acesso. Campo Obrigatório.access_log_portal_rulesRegras de portal de um log de acesso O par access_log_id e portal_rule_id é unico, ou seja, não pode haver nessa mais de um elemento com o mesmo par dessas propriedades.access_log_idinteiro de 64 bitsid do log de acesso. Campo Obrigatório.portal_rule_idinteiro de 64 bitsid da regra de portal. Campo Obrigatório.alarm_logsContém os logs de alarmes do equipamento.idinteiro de 64 bitsid do log de alarme. Campo Obrigatório.eventinteiroTipo do evento, pode ser: 1 - Alarm ativado 2 - Alarm desativado Campo obrigatório.causeinteiroCausa do evento, pode ser: 1 - Zona de alarme 1 2 - Zona de alarme 2 3 - Zona de alarme 3 4 - Zona de alarme 4 5 - Zona de alarme 5 6 - Porta aberta 7 - Arrombamento 8 - Dedo de pânico 9 - Tamper Campo obrigátorio.user_idinteiro de 64 bitsid do user.timeinteiroHorário da ocorrência em Unix Timestamp.Campo Obrigatório.devicesRepresenta os equipamentos cadastrados neste equipamento. Usado somente na comunicação via rede entre equipamentos.idinteiro de 64 bitsid do equipamento. Campo Obrigatório.namestringNome do equipamento. Campo Obrigatório.ipstringEndereço do equipamento. Exemplo: 192.168.0.129 ou exemplo.controlid.com.br Campo Obrigatório.public_keystringChave criptográfica pública do equipamento, usada para a autenticação entre equipamentos. Campo Obrigatório.device_identification_rulesRelaciona equipamentos e regras de identificação. O par device_id e identification_rule_id é unico, ou seja, não pode haver nessa mais de um elemento com o mesmo par dessas propriedades.device_idinteiro de 64 bitsid do equipamento. Campo Obrigatório.identification_rule_idinteiro de 64 bitsid da regra de identificação. Campo Obrigatório.device_actionsRelaciona equipamentos e ações. O par device_id e action_id é unico, ou seja, não pode haver nessa mais de um elemento com o mesmo par dessas propriedades.device_idinteiro de 64 bitsid do equipamento. Campo Obrigatório.action_idinteiro de 64 bitsid da ação. Campo Obrigatório.
Criar ObjetosCria objetos do tipo especificadocreate_objects Cria objetos do tipo especificado. O método HTTP usado é o POST. objectstring Tipo do objeto a ser criado. Por favor, consulte objects para a lista completa dos tipos de objeto disponíveis. valuesarray de objetos JSON Cada elemento deve ser um objeto JSON representando o objeto a ser criado. Cada chave deve ser um campo válido do objeto e os valores devem ter o tipo apropriado. Todos os objetos JSON devem ter os mesmos campos. idsarray de inteiros de 64 bitsids dos objetos criados.$.ajax({ url: "/create_objects.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ object: "users", values: [{name: 'Walter White', password: 'Heisenberg'}] }) });
Carregar ObjetosCarrega todos os objetos do tipo especificadosload_objects Carrega todos os objetos do tipo especificado. O método HTTP usado é o POST. objectstring Tipo do objeto a ser criado. Por favor, consulte objects para a lista completa dos tipos de objeto disponíveis. fields (opcional)array de strings Campos a serem recebidos do objeto. Se esse parâmetro não estiver presente, todos os campos serão recebidos. limit (opcional)inteiro Máximo número de objetos a adquirir. offset (opcional)inteiro Pula os primeiros offset objetos que seriam adquiridos. Útil para implementar paginação. O parâmetro limit deve estar definido. Em caso contrário, offset será ignorado. order (opcional)array de strings Quais campos devem ser usados para ordenar os objetos. Se algum dos elementos tem o valor especial ascending ou descending, a ordenação será ascendente ou descendente, respectivamente. Se forem definidos múltiplos valores ascending ou descending, apenas a última definição será levada em consideração. Caso o campo especificado deva ser de algum objeto diferente do que está sendo carregado, pode-se passar um objeto JSON com os seguintes parâmetros:{ object: 'object', field: 'field' } Onde object e field são o objeto e campo pelo qual se quer ordenar. group (opcional)array de strings Este campo determina o agrupanemeto dos campos (muito similar ao group_by de um banco de dados). É um array que pode conter: o nome do campo que será agrupado ou o objeto caso o campo não pertença a tabela original.{ object: 'object', field: 'field' }join (opcional)string Este campo determina como as tableas serão agrupadas. Este campo é uma string que pode ter dois valores:"LEFT" ou "INNER". where (opcional)objeto JSON Quais objetos devem ser adquiridos. Através desse parâmetro, é possível especificar filtros para receber apenas alguns objetos. Cada chave deve ser o tipo do objeto a ser adquirido, e cada valor deve ser um objeto JSON. Por exemplo:where: { users: {} } A chave de cada objeto JSON deve ser o campo do objeto, e o valor deve ser o filtro usado. Por exemplo:where: { users: { id: 1 } } No exemplo acima, apenas users que tem um id igual a 1 (um) serão filtrados. Note que o tipo do atributo do objeto (inteiro, string, etc.) deve ser do mesmo tipo que está sendo usado como filtro.
Operadores de Comparação
O filtro também pode especificar um dos seguintes operadores de comparação:
  • O operador igual a ('=', '==', 'LIKE'). Esse é o operador padrão e não precisa ser especificado.
  • O operador diferente de ('!=', '<>', 'NOT LIKE').
  • O operador maior que ('>').
  • O operador menor que ('<').
  • O operador maior ou igual a ('>=').
  • O operador menor ou igual a ('<=').
  • O operador em ('IN').
  • O operador não em ('NOT IN').
Operadores podem ser especificados usando um objeto JSON cuja chave é o operador e o valor é o valor da restrição. Por exemplo: where: { users: { id: {"!=": 1} } } No exemplo acima, apenas users que possuem um id diferente de 1 (um) serão adquiridos. Também é possível especificar múltiplas restrições. Por exemplo: where: { users: { id: {">=": 1, "<=": 2} } } No exemplo acima, apenas users que possuem um id maior que 1 (um) e menor que 2 (dois) serão adquiridos.
NOME_DO_OBJETOarray de objetos JSONCada objeto JSON representa um objeto carregado.NOME_DO_OBJETO é o nome do objeto que foi carregado.
$.ajax({ url: "/load_objects.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ object: "users" }) });
Modificar ObjetosModifica objetos do tipo especificadomodify_objects Modifica objetos do tipo especificado. O método HTTP usado é o POST. objectstring Tipo do objeto a ser modificado. Por favor, consulte objects para a lista completa dos tipos de objeto disponíveis. valuesobjeto JSON Objeto JSON representando o objeto a ser modificado. Cada chave deve ser um campo válido do objeto enquanto cada valor deve ter o tipo apropriado. whereobjeto JSON Por favor, consulte a referência de load_objects para a descrição completa do parâmetro where. Apenas o mesmo objeto pode ser usado como filtro. changesinteiroNúmero de mudanças efetuadas.$.ajax({ url: "/modify_objects.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ object: "users", values: {name: 'Walter Hartwell White'}, where: { users: {name: 'Walter White'} } }) });
Destruir ObjetosDestrói objetos do tipo especificadodestroy_objects Destrói objetos do tipo especificado. O método HTTP usado é o POST. O resultado é um inteiro cujo valor será o número de mudanças efetuadas. objectstring Tipo do objeto a ser modificado. Por favor, consulte objects para a lista completa dos tipos de objeto disponíveis. whereobjeto JSON Por favor, consulte a referência de load_objects para a descrição completa do parâmetro where. Apenas o próprio objeto pode ser usado como filtro. changesinteiroNúmero de mudanças efetuadas.$.ajax({ url: "/destroy_objects.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ object: "users", where: { users: {name: 'Walter White'} } }) });
Criar Hash de Senha de UsuárioCria um Hash para uma Dada Senha de Usuáriouser_hash_password Dada uma senha em texto simples, retorna um hash que representa uma senha de usuário e o salt que foi usado para gerá-lo. O método HTTP usado é o POST. Note que ao se usar esse comando duas vezes para a mesma senha em texto simples, o Hash resultante não será o mesmo, pois o salt gerado é aleatório e será diferente a cada chamada.passwordstring Senha do usuário em texto simples para a qual se quer gerar o Hash. passwordstringContém o hash da senha fornecida.saltstringContém o salt utilizado para gerar o hash da senha.$.ajax({ url: "/user_hash_password.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ password: "abc123", }) });
Obter imagens de usuáriosObtém a imagem de um usuário especificado pelo seu iduser_get_image Obtém a imagem de um usuário especificado pelo seu id. O método HTTP usado é irrelevante. O id especificado pode ser passado tanto na Query String quanto no corpo da requisição. user_idinteiro de 64 bitsid do usuário cuja imagem será obtida. image/jpegImagem do usuário.$.ajax({ url: "/user_get_image.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({user_id: 123}) });user_list_images Obtem a lista de ids dos usuários que possuem fotos, implementado a partir da versão do firmware 3.10.0. O método HTTP usado é POST. user_idsinteiro de 64 bitsids dos usuários que possui fotos. $.ajax({ url: "/user_list_images.fcgi?session=" + session, type: 'POST', contentType: 'application/json' });
Definir a imagem de um usuárioSalva a imagem de um usuário especificado pelo seu iduser_set_image Salva a imagem de um usuário especificado pelo seu id. O método HTTP usado é o POST. Diferentemente da grande maioria dos comandos desta API, nesse comando, o Content-Type necessariamente é application/octet-stream. Portanto, a imagem é passada no Content do método POST, e o id do usuário é passado na Query String. Atenção: atente ao parágrafo acima. O Content-Type desse comando é application/octet-stream. E o tamanho da imagem deve ser menor que 1MB. Esse comando não retorna nada. user_idinteiro de 64 bitsid do usuário cuja imagem será atribuída. Esse parâmetro é passado na Query String$.ajax({ url: "/user_set_image.fcgi?user_id=123&session=" + session, type: 'POST', contentType: 'application/octet-stream', data: [bytes da imagem enviada] });user_set_image_list Este endpoint insere fotos a usuários em massa. Lembrando que o acesso tem um limite de 1MB por request. Recebe um array de ids e imagens. user_imagesArray Este endpoint insere fotos a usuários em massa. Lembrando que o acesso tem um limite de 1MB por request. Recebe um array de ids e imagens. user_idinteiroid do usuário cuja imagem será atribuída. imagestring em base 64 Imagem do usuário em base64. $.ajax({ url: "/user_set_image_list.fcgi?user_id=123&session=" + session, type: 'POST', contentType: 'application/json', data: { user_images: [ { user_id: , image: } ] } });
Exclui a imagem de um usuárioRemove a imagem de um usuário especificado pelo seu iduser_destroy_image Exclui a imagem de um usuário especificado pelo seu id, um array de ids ou uma flag "all" para remover todos . O método HTTP usado é o POST. Esse comando não retorna nada como resultado. user_idinteiro de 64 bitsid do usuário cuja imagem será removida. user_idsinteiro de 64 bits O arrayids de usuários cuja as imagens serão removidas. danglingbool Se for setado como 'true' remove as imagens não vinculadas a usuários. allbool Se for setado como 'true' todos os usuários terão as imagens excluidas. $.ajax({ url: "/user_destroy_image.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ user_id: "123" }) });
Exportar RelatorioExportando Relatórioreport_generate O relatorio será gerado conforme as configurações dos campos setados. Os parâmetros de busca são os mesmos do método load_objects. O método HTTP usado é o POST. objectstring Esse campo representa o tipo de relatorio que será gerado, por exemplo, "users". file_namestringEsse campo representa o nome do arquivo de saída. Opcional.delimiterstring Esse campo representa o tipo de delimitador de campo, similar a estrutura de um arquivo .csv, por exemplo: ";" ou ",". Opcional.headerstring Esse campo representa o cabeçalho do relatorio. Opcional.line_breakstring Esse campo representa a quebra de linha, podendo ser um simples "\n". Opcional.columnsobjeto JSON Esse campo determina as colunas que serão mostradas no relatorio. (Muito similar ao campo fields do método load_objects). Este campo é um array que contém objetos. Estes objetos possuem os seguintes campos: fieldstring Esse campo pertence ao objeto columns e representa o nome do campo que será gerado. typestring Este campo pertence ao objeto columns e determina o tipo da coluna. Pode ser: "object_fileld" (Campo de coluna normal), "counter" (Contador de registros) e "fixed" (Campo fixo). object_fieldstring Este é um campo de coluna normal. Este objeto terá dois campos, field e object, do tipo string, que representam a coluna e tabela respectivamente. counterstring este objeto terá dois campo opcionais inteiros: offset (representa valor inicial do contador. Padrão: 0) e step (representa o passo do contador. Padrão: 1) fixedstring Este objeto contem um campo obrigatório do tipo string que repesenta o valor fixo da coluna. formatobjeto JSON Este campo pertence ao objeto columns, e determina como a coluna será formatada e apresenta os seguintes campos: Opcional.adjustmentstring Esse campo representa se a coluna deve estar alinha a esquerda, direita ou nenhum ajuste deve ser feito. Opcional.fillstring Esse campo determina o valor do preenchimento dos espaços vazios, por exemplo: "0" Opcionalformatstring Esse campo representa a formatação do coluna, por exemplo: "%d : dia, %m : mês, %Y : ano, %H : horas, %M : minutos, %S: segundos". Opcionalwidthinteiro Esse campo representa o ajuste do tamanho da coluna. Opcional$.ajax({ url: "/report_generate.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ order:["ascending","name"], "where":{ "users":{}, "groups":{}, "time_zones":{} }, object:"users", delimiter:";", line_break:"\\r\\n", header:"Nome (Usuário);Código (Usuário)", file_name:"", join:"LEFT", columns:[ { type:"object_field", object:"users", field:"name", format:{ adjustment:1, width:50,"fill":" ", format:"%s" } }, { type:"object_field", object:"users", field:"id", format:{ adjustment:2, width:5, fill:"0", format:"%s" } } ] }) });
Ler estado de GPIOLê o estado de um dado pino de propósito geral do processadorgpio_state Lê o estado do GPIO especificado pelo parâmetro gpio. gpiointeiro Número do pino de propósito geral (GPIO) cujo estado deseja-se ler.
pino 0 - zona de alarme 1 pino 1 - zona de alarme 2 pino 2 - zona de alarme 3 pino 3 - zona de alarme 4 pino 4 - zona de alarme 5 pino 5 - sensor de porta 1 pino 6 - sensor de porta 2 pino 7 - botoeira 1 pino 8 - botoeira 2 pino 9 - saída de alarme pino 10 - LED da biometria pino 11 - relé 1 pino 12 - relé 2 pino 13 - sensor de violação pino 20 - Saída Wiegand 1 pino 21 - Saída Wiegand 0 pino 22 - Entrada Wiegand 1 pino 23 - Entrada Wiegand 0
enabledinteiro Indica se o GPIO está habilitado (1) ou desabilitado (0). Uma tentativa de leitura ou escrita em um GPIO desabilitado possui efeito indefinido. ininteiro Indica se o GPIO está configurado como pino de entrada (1) ou saída (0). pinstring Contém o nome do GPIO. idleinteiro Contém o valor do GPIO quando ocisoso. pullupinteiro Indica se o pullup do GPIO está habilitado (1) ou desabilitado (0). valueinteiro contém o valor atual do GPIO. notifyinteiro Indica se o software de acesso será avisado (1) de alterações nesse GPIO ou não (0). notifiedinteiro Indica quantas vezes o GPIO notificou o software de acesso de uma alteração.
$.ajax({ url: "/gpio_state.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ gpio: 1 }) });
Reler configuração do LEDSinalizada para o aplicativo de acesso reler a configuração do LED do equipamentoled_rgb_refresh Uma vez que a configuração do LED RGB tenha sido alterada, sinaliza ao software de acesso que ela deve ser recarregada. Essa chamada não tem resposta. $.ajax({ url: "/led_rgb_refresh.fcgi?session=" + session, type: 'POST', contentType: 'application/json' });
Obter Informações do SistemaObtém informações e estatísticas do sistemasystem_information Obtém as seguintes informações e estatísticas do sistema: tempo ligado, horário do equipamento, tamanho e utilização das memórias RAM e flash, licença, informações da rede (endereço IP, máscara de rede e gateway), número de série do equipamento, versão do firmware e modo de operação online ou offline. O resultado é um objeto JSON que contém as seguintes chaves: uptimeobjeto JSON Indica a quanto tempo o equipamento está ligado. Contém as seguintes chaves: daysinteiro Contém os dias do uptime. hoursinteiro Contém as horas do uptime (valores entre 0 e 23). minutesinteiro Contém os minutos do uptime (valores entre 0 e 59). secondsinteiro Contém os segundos do uptime (valores entre 0 e 59). timeinteiro Contém a data e hora do equipamento em Unix Timestamp. memoryobjeto JSON Contém informações sobre memória do equipamento. diskobjeto JSON Contém informações sobre memória não volátil do equipamento. Contém as seguintes chaves: freeinteiro Espaço livre da memória não volátil (em bytes). totalinteiro Tamanho total da memória não volátil (em bytes). ramobjeto JSON Contém informações sobre memória volátil do equipamento. Contém as seguintes chaves: freeinteiro Espaço livre da memória não volátil (em bytes). totalinteiro Tamanho total da memória não volátil (em bytes). licenseobjeto JSON Contém informações sobre a licença. Contém as seguintes chaves: usersinteiro Contém o número máximo de usuários permitidos pela licença em uso. deviceinteiro Contém o número máximo de equipamentos controlados por este equipamento, de acordo com o limite imposto pela licença. typestring Contém o tipo da licença. networkobjeto JSON Contém informações sobre a rede. Contém as seguintes chaves: macstring Contém o endereço físico (MAC) do equipamento. ipstring Contém o endereço IP do equipamento. netmaskstring Contém a máscara de rede (netmask) do equipamento. gatewaystring Contém o endereço do roteador (gateway) do equipamento. serialstring Contém o número de série do equipamento. versionstring Contém a versão do firmware em uso. onlinebooleano Indica se o equipamento está funcionando no modo online. $.ajax({ url: "/system_information.fcgi?session=" + session, type: 'POST', contentType: 'application/json' });
Alterar configurações de redeAltera as configurações de rede do equipamentoset_system_network Altera as configurações de rede do equipamento. O método HTTP usado é o POST. Essa chamada não tem resposta. ipstring Texto representando o endereço IP que o equipamento deve assumir. Exemplo: "192.168.0.33". netmaskstring Texto representando a máscara de rede que o equipamento deve assumir. Exemplo: "255.255.255.0". gatewaystring Endereço IP do gateway da rede. Exemplo: "192.168.0.1". web_server_portint Número da porta de comunicação do Acesso. Exemplo: 80. $.ajax({ url: "/set_system_network.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ ip: "192.168.0.33", netmask: "255.255.255.0", gateway: "192.168.0.1", web_server_port: 80 }) });
Alterar data e horaAltera a data e a hora do sistemaset_system_time Altera a data e a hora do sistema. O método HTTP usado é o POST. Essa chamada não tem resposta. dayinteiro Valor numérico representando o dia do mês. monthinteiro Valor numérico representando o mês. Valores válidos entre 1 e 12. yearinteiro Valor numérico representando o ano. Exemplo: 2014 hourinteiro Valor numérico representando a hora. Valores válidos entre 0 e 23. minuteinteiro Valor numérico representando os minutos. Valores válidos entre 0 e 59. secondinteiro Valor numérico representando os segundos. Valores válidos entre 0 e 59. $.ajax({ url: "/set_system_time.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ day: 10, month: 12, year: 1983, hour: 21, minute: 30, second: 00 }) });
Redefinir as configurações do sistemaRedefine as configurações do sistema para os valores de fábricareset_to_factory_default Redefine as configurações do sistema para o valor de fábrica. O equipamento volta para o estado que saiu da fábrica e todos os dados do usuário são perdidos. Essa chamada não tem resposta nem requer parâmetros. Atenção: essa chamada apaga todos os dados e redefine todas as configurações do equipamento para as de fábrica, incluindo os usuários e as configurações de rede, por exemplo.keep_network_infobool Se o parâmetro "keep_network_info" estiver setado em true, as informações de rede serão mantidas. $.ajax({ url: "/reset_to_factory_default.fcgi?session=" + session, type: 'POST', contentType: 'application/json' });
Remover AdministradoresRemove todos os administradores do equipamentodelete_admins Remove todos os administradores do equipamento. Essa chamada não tem resposta nem requer parâmetros. $.ajax({ url: "/delete_admins.fcgi?session=" + session, type: 'POST', contentType: 'application/json' });
Reiniciar em Modo de UpdateReinicia o equipamento em Modo de Updatereboot_recovery Reinicia o equipamento em modo de update. Essa chamada não tem resposta nem requer parâmetros. $.ajax({ url: "/reboot_recovery.fcgi?session=" + session, type: 'POST', contentType: 'application/json' });
ReiniciarReinicia o equipamentoreboot Reinicia o equipamento. Essa chamada não tem resposta nem requer parâmetros. $.ajax({ url: "/reboot.fcgi?session=" + session, type: 'POST', contentType: 'application/json' });
Executar açãoExecuta uma ação do equipamentoexecute_actions Executa as ações arbitrárias no equipamento. Atualmente, a única ação existente é door que abre um dos relés do equipamento. Verificar no exemplo no fim desta página como usá-la. O método HTTP usado é o POST. Essa chamada não tem resposta. actionsarray de objetos JSON Cada elemento deste array possui 2 chaves, ambas strings: action e parameters. action é uma ação a ser executada e parameters são os parâmetros dessa ação. $.ajax({ url: "/execute_actions.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ actions: [ { action: "door", parameters: "door=1" } ] }) });$.ajax({ url: "/execute_actions.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ actions: [ { action: "sec_box", parameters: "id=65793, reason=3" } ] }) });
Cadastrar Biometria/Cartão RemotoExecuta uma ação do equipamentoremote_enroll Realiza o cadastro de biometria ou cartão remotamente. O método HTTP usado é o POST. Essa chamada não tem resposta. typestring Parâmetro que define a forma que será realizada o cadastro, sendo "card" ou "biometry" (obrigatório), se for setado como biometry o retorno será: template: {"template" : , "user_id": , "finger_type": , "device_id" : } se for setado como card será: card: {"value" : , "user_id": , "device_id" : } saveboolean O parâmetro "save" indica se o objeto (cartão ou biometria) deverá ser salvo no equipamento ou não. Caso save == false, o objeto será enviado ao gerenciador cadastrado, ou ao servidor (caso o equipamento esteja em modo online). Padrão: false user_idint O parâmetro "user_id" recebe o id do usuário (Obrigatório quando save == true). panic_fingerint O parâmetro "panic_finger" recebe se o dedo a ser cadastrado é um dedo de pânico, sendo os parametros 0 ou 1 registrationstring (opcional) O parâmetro "registration" corresponde a matricula da pessoa que está realizando o cadastro de biometria. msgstring O parâmetro "message" é a mensagem que será mostrada ao usuário durante o cadastramento. Quando vazia, a mensagem padrão é mostrada. syncbool O parâmetro "sync" corresponde se a forma de cadastro de biometria remoto será síncrono ou assíncrono, isto é quando o cadastro é feito de forma síncrona no request que é feito para o dispositivo, o retorno será o template com a estrutura acima, agora quando o cadastro é feito de forma assincrona o equipamento envia um POST com a estrutura de parâmetros acima, dessa forma será necessario configurar um endpoint no seu servidor para receber essa requisição. Caso ocorra um problema na execução o parâmetro sync retornará false junto com o parâmetro "error" que especifica qual o motivo do erro. $.ajax({ url: "/remote_enroll.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ type:"biometry", user_id:123, message:"Teste", save:true }) });
ConfiguraçõesDescrição de configurações disponíveisgeneralConfigurações gerais do equipamento.beep_enabledstringAtiva o som de beep do equipamento. Valores: "0" ou "1".relay1_enabledstringHabilita o uso do relé 1. Valores: "0" ou "1".relay2_enabledstringHabilita o uso do relé 2. Valores: "0" ou "1".relay1_timeoutstringTempo de ativação do relé 1 em milisegundos. Exemplo: "3000".relay2_timeoutstringTempo de ativação do relé 2 em milisegundos. Exemplo: "3000".relayN_auto_closeinteiro A configuração do relay permite que seja configurado de duas formas neste caso N é o número da porta em questão (No caso do iDAccess pode ser 0 ou 1, no caso da catraca é sempre 0 enquanto a iDBox vai de 0 a 3) e a sua configuração pode ser "0" (Funcionamento normal) e "1" (Quando sensor de porta abrir, o relê fechará) - Evita que a porta fique aberta mais tempo do que o necessário. bell_enabledstringHabilita ou desabilita a campainha.bell_relaystringRelê no qual a campainha está conectada, o padrão é "2".catra_timeoutstring Atenção: Esse método é especifico para a catraca. Tempo que a catraca fica liberada para um giro em ms. timeout igual a zero significa tempo infinito, ou seja, liberada até o próximo giro, Exemplo: "3000".local_identificationstring Esse parametro deve ser setado quando o equipamento está no modo online e a identificação está sendo feita no proprio equipamento, os valores são "1" e "0". exception_modestring Esse parametro deve ser setado quando o equipamento precisa permanecer com a entrada sempre liberada ou sempre bloqueada, as opções são "emergency" e "lock_down". Para sair destes modos basta setar esta configuração para qualquer outro valor. Valor padrão é "".

Quando "emergency" está habilitado o equipamento permanece com a entrada sempre liberada e a tela e identificações permanecem travadas. Quando "lock_down" está habilitado o equipamento permanece com a entrada sempre bloqueada e a tela e identificações permanecem travadas.

languagestring Para alterar o idioma padrão do equipamento é necessário setar através do parâmetro language, os valores são:

Quando o "pt_BR" está habilitado o idioma do equipamento é o Português.

Quando o "spa_SPA" está habilitado o idioma do equipamento é o Espanhol.

Quando o "en_US" está habilitado o idioma do equipamento é o Inglês.

Após a alteração do idioma do equipamento é necessário reinicia-lo.
daylight_savings_time_startinteiro UNIX Timestamp

A data de inicio do horário de verão

daylight_savings_time_endinteiro UNIX Timestamp

A data de fim do horário de verão

opening_timesEssa configuração permite definir qual o tempo de abertura da porta em milissegundos.idinteiro 64Chave primariauser_idinteiro 64Inteiro indicando o usuário (referência a tabela users)door_idinteiroInteiro indicando a porta (valor inicial 1)timeinteiro UNIX TimestampTempo diferenciado de abertura em milisegundosmifareA configuração do modulo mifare permite que a quantidade de bits que a leitora do device vai ler seja configurável, podendo ser 24 ou 32 bits.byte_orderstrings O parametro byte_order possui dois possiveis valores "W_26" (Módulo mifare lê 24 bits. Usado para manter compatibilidade com plantas antigas) e "LSB" (Least Significant Byte. Lê 32 bits e inverte a ordem dos bytes)qualquer outro valor (Lê 32 bits). w_inNA configuração w_inN nesse caso o N significa o numero da wiegand in, por exemplo, o iDAccess é sempre zero. O iDAccess será sempre 0. A iDBlock pode ter duas opções, podendo ser 0 para a wiegand principal e 1 para wiegand da urna. A iDBox pode ter 4 opções, sendo de (0 a 3) correspondendo a quantidade de leitoras wiegand. byte_orderstringA configuração byte_order, pode ter dois estados, LSB (Least Significant Byte. Quando a leitura for wiegand 34, inverte a ordem dos bytes) qualquer outro valor("") a inversão não será realizada. alarmConfigurações de alarme do equipamento.siren_enabledstringHabilita ou desabilita a sirene. Valores: "0" ou "1".siren_relaystringRelê no qual a sirene está conectada, o padrão é "2".identifierConfigurações do identificadorverbose_loggingstringSe ativado, registra todos os tipos de acesso, inclusive não identificados. Utiliza mais memória.
Se desativado, registra apenas acessos autorizados e não-autorizados.
Valores: "0" ou "1".
log_typeboolEsta configuração só é válida para o iDFlex ponto. (Apesar dela existir para os outros dispositivos) e determina se as batidas customizadas estão habilitadas. (Tipos de batidas) multi_factor_authenticationboolEsta configuração determina se a autenticação multipla deve ser utilizada (cartão + biometria).
bio_idConfigurações da biometria do equipamento.similarity_threshold_1tonstringQuanto maior o numero setado, mais rigorosa será a identificação. Aumentar este número irá diminuir a taxa de falsas aceitações e aumentar a taxa de falsas rejeições, diminuí-la terá o efeito inverso. Valor padrão: "12300".online_clientConfigurações do cliente no modo online.extract_templatestringConfigura se, em caso de identificação por biometria, o equipamento irá extrair o template da digital e enviá-lo ou se irá enviar a imagem da digital.
Valores: "0" ou "1".
max_request_attemptsstringQuantidade de tentativas que o equipamento faz para se comunicar com o servidor antes de entrar no modo de contigência.
sec_boxsConfigura o modulo de acionamento externo do iDFlex (Secbox). idinteiro de 64 bitsid da secbox. Esse valor sempre será 65793. Campo Obrigatório.versionintCorresponde a versão da secbox. Campo Obrigatório.namestringCorresponde ao nome da Secbox. Campo Obrigatório.enabledboolIndica se a secbox está habilitada ou não. Campo Obrigatório.relay_timeoutinteiroEsse campo representa o tempo de abertura do relê da secbox em (ms). Campo Obrigatório.door_sensor_enabledboolEsse campo representa se o sensor de porta está habilitado ou não. Campo Obrigatório.door_sensor_idleboolEsse campo representa se o sensor de porta está NO = 1 ou NC = 0. Campo Obrigatório.auto_close_enabledinteiro Inteiro (0 ou 1) indicando se o relê deverá fechar quando o sensor de porta abrir.
Configuração do PushConfiguração do Push O push do servidor funciona da seguinte forma: o equipamento faz uma requisição HTTP ao servidor para verificar se há algum comando para ser executado. Se receber uma resposta vazia, significa que não há nada para fazer, e depois de um certo período de tempo, o equipamento faz novamente a requisição. Caso contrário, o equipamento executa o comando e faz uma outra requisição enviando o resultado da operação. Essa requisição recebe uma resposta vazia, e logo em seguida faz uma outra requisição de push. Para configurar o push do servidor, é necessário definir alguns parâmetros de configuração (push_server) descritos abaixo:push_serverpush_request_timeoutTimeout das requisições do equipamento para o servidorpush_request_periodPeríodo entre as requisições de pushpush_remote_addressEndereço ip e porta em que o servidor está rodando separados por ':'. Exemplo: 192.168.120.94:80.PushEquipamento faz requisições periódicas ao servidor para verificar se há algum pushpushRequisição para verificar se há algum push do servidor. O método HTTP utilizado é o GET.uuidintAdição de "uuid", alfanumérico aleatório.deviceIdintId do equipamento que está fazendo a request. É um query param.verb (opcional)stringEspecifica o método HTTP (GET ou POST) que será utilizado para executar o comando no equipamento. O valor padrão é POST.endpoint (obrigatório)stringEspecifica o comando que será executado no equipamento. Consulte as seções de API para obter todos os comandos possíveis.body (opcional)stringEspecifica os parâmetros necessários para a execução do comando no equipamento. Consulte a documentação do comando para obter os parâmetros necessários.contentType (opcional)stringEspecifica o tipo de dados que será enviado no body. O valor padrão é application/json.queryString (opcional)stringEspecifica os query params necessários para executar o comando.Uma resposta vazia significa que não há nenhum push para ser executado. { verb: "POST", endpoint: "load_objects", body: { object: "users" }, contentType: "application/json" }Envia o resultado da execução do push para o servidorresultRequisição que contém o resultado push executado no equipamento. O método HTTP utilizado é o POST.deviceIdintId do equipamento que está fazendo a request. É um query param.responsestring Contém a resposta dada pela API com a execução do push. Consulte a documentação do comando para informações do formato da resposta. Note que este parâmetro estará presente somente se não ocorrer erro durante a operação.errorstring Especifica o erro que ocorreu durante a execução do push. Note que este parâmetro estará presente somente se ocorrer algum erro.A resposta para essa requisição é vazia $.ajax({ url: device_address + "/result?=deviceId=" + deviceId, type: 'POST', contentType: 'application/json', data: JSON.stringfy({ response: '{ "users": [{ "id":1, "registration": "Teste", "name": "Walter White", "password": "Heisenberg", "salt": "", "expires": 0, "user_type_id": 0, "begin_time": 0, "end_time": 0 }] } }) });
Obter ConfiguraçõesObtêm configurações do equipamentoget_configuration Obtêm as configurações especificadas do equipamento. Elas estão explicadas em Configurações.
O método HTTP usado é o POST. O contentType é application/json.
generalObjeto JSONConfigurações pedidas pelo servidor.
$.ajax({ url: "/get_configuration.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ general: ["beep_enabled", "relay1_timeout"] }) });
Modificar ConfiguraçõesModifica configurações do equipamentoset_configuration Modifica as configurações do equipamento. Elas estão explicadas em Configurações.
O método HTTP usado é o POST. O contentType é application/json.
$.ajax({ url: "/set_configuration.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ general: {"beep_enabled": "1", "relay1_timeout": "3000"} }) });
Update iDFlexRealiza o update do iDFlex para o modo OnlinepasswordstringRecebe uma senha que deve ser fornecida pela Control iD para habilitar o modo online no equipamento.$.ajax({ url: "/idflex_upgrade_enterprise.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ password: }) });
Monitorconfigurações do monitormonitorO monitor,como o próprio nome sugere, monitora eventos do equipamento. Os eventos estão descritos no topico endpoints.request_timeoutstringO tempo em ms para o request dar timeout.hostnamestringO endereço para onde a request será enviada, por exemplo, o IP do servidor.portstringA porta para onde a request será enviada.endpointsUm endpoint de um web server é a URL onde seu serviço pode ser acessado por uma aplicação cliente, portanto os endpoints são interfaces entre a API e a aplicação consumidora. A URL final será: hostname + ":" + port + "/" + end_point api/notification/daostring Enviado quando há alterações nos logs de acesso (inserção, alteração ou deleção) e também monitora as alterações realizadas na tabela alarm_logs (inserção, alteração ou deleção). Formato do JSON que o equipamento envia para o servidor: { "object_changes": [ { "object":"access_logs", "type":"inserted", "values":{ "id":"519", "time":"1532977090", "event":"12", "device_id":"478435", "identifier_id":"0", "user_id":"0", "portal_id":"1", "identification_rule_id":"0", "card_value":"0", "log_type_id":"-1" } } ], "device_id":478435 } api/notification/templatestring Enviado quando um template é cadastrado remotamente. Veja Cadastrar Biometria/Cartão Remoto para mais informações. api/notification/cardstring Enviado quando um cartão é cadastrado remotamente. Veja Cadastrar Biometria/Cartão Remoto para mais informações. api/notification/catra_eventstring Esse endpoint é exclusivo para a catraca iDBlock, ele envia a confirmação do giro, podendo ser EVENT_TURN_LEFT, EVENT_TURN_RIGHT ou EVENT_GIVE_UP. { "event": { "type": 7, "name": 'TURN LEFT', "time": 1484126902 }, "device_id": 935107 } api/notification/operation_modestring Um request é enviado quando há mudança no modo de operação do equipamento (e.g.: entra ou sai do modo de contingência). Quando o equipamento liga, este request é enviado com o campo "last_offline": 0, além disso temos o campo exception_mode que indica se o equipamento está no modo exceção (podendo ser vazio). { "operation_mode": { "mode": 0, "mode_name": "DEFAULT", "time": 1490271121, "last_offline": 1490261121 "exception_mode":"" }, "device_id": 123456 } api/notification/doorstring Nesse end point, é enviada uma mensagem quando o relê do equipamento muda de estado (aberta ou fechada). Na mensagem consta o id do relê que mudou de estado e o estado atual (aberta ou fechada). O id da porta é representado por um número inteiro de 1 ao número de portas, no caso da iDBox podendo chegar até a 4, O estado da porta é um valor booleano: verdadeiro se estiver aberta e falso se fechada. { "door": { "id" : , "open" : } } api/notification/secboxstring Nesse end point, é enviada uma mensagem quando a security box muda de estado (aberta ou fechada). O corpo da mensagem consta o id da security box que mudou de estado e o estado atual. O id da security box é representado por um número inteiro enquanto O estado da security box é um valor booleano: verdadeiro se estiver aberta e falso se fechada. { "secbox": { "id" : , "open" : } }
Eventos de IdentificaçãoMensagens enviadas para o servidor em caso de tentativa de identificaçãoQuando uma tentaiva de identificação ocorre, os eventos descritos abaixo são enviados automaticamente pelo equipamento no modo online. Cabe ao servidor tratar esses eventos.new_biometric_image Tentativa de identificação por biometria. Esse evento é enviado apenas se a configuração extract_template estiver desativada.
O método HTTP usado é o POST. O contentType é application/octet-stream. Todos os parametros são enviados através da query string, exceto o binário da imagem.
sessionstringHash de sessão gerado no login.device_idinteiro de 64 bitsID único do equipamento.identifier_idinteiro de 64 bitsid do identificador (wiegand, RFID, biometria).widthinteiroLargura, em pixels, da imagem enviada.heightinteiroAltura, em pixels, da imagem enviada.Imagembinário (octet-stream)Este é o único parâmetro enviado no corpo da mensagem.
Imagem da digital em formato binário. É enviado 1 byte por pixel, em escala de cinza.
resultObjeto JSONDescrito em Mensagem de Retorno.
new_biometric_template Tentativa de identificação por biometria. Esse evento é enviado apenas se a configuração extract_template estiver ativada.
O método HTTP usado é o POST. O contentType é application/octet-stream. Todos os parametros são enviados através da query string, exceto o binário do template.
sessionstringHash de sessão gerado no login.device_idinteiro de 64 bitsID único do equipamento.identifier_idinteiro de 64 bitsMétodo de identificação.Templatebinário (octet-stream)Este é o único parâmetro enviado no corpo da mensagem.
Template biométrico no formato Innovatrics (http://www.innovatrics.com/) .
resultObjeto JSONDescrito em Mensagem de Retorno.
new_card Tentativa de identificação por cartão de proximidade.
O método HTTP usado é o POST. O contentType é application/x-www-form-urlencoded. Todos os parametros são enviados através da query string.
sessionstringHash de sessão gerado no login.device_idinteiro de 64 bitsID único do equipamento.identifier_idinteiro de 64 bitsMétodo de identificação.card_valueinteiro de 64 bitsNúmero do cartão.resultObjeto JSONDescrito em Mensagem de Retorno.
new_user_id_and_password Tentativa de identificação por id e senha.
O método HTTP usado é o POST. O contentType é application/x-www-form-urlencoded. Todos os parametros são enviados através da query string.
sessionstringHash de sessão gerado no login.device_idinteiro de 64 bitsID único do equipamento.identifier_idinteiro de 64 bitsMétodo de identificação.user_idinteiroID informado pelo usuário.passwordstringSenha informada pelo usuário.resultObjeto JSONDescrito em Mensagem de Retorno.
new_user_identified Esse evento é enviado apenas se a configuração local_identification estiver ativada.
Nesse modo, quando o usuário se identifica no equipamento, este relaiza a identificação de forma local, enviando o ID do usuario ao servidor. O servidor processa as regras de acesso e diz se deve abrir a porta ou não. Repare que nesse metodo o servidor tem que sempre atualzar os usuários e biometrias dos equipamentos, tendo a limitação de templates dos equipamentos.
O método HTTP usado é o POST. O contentType é application/x-www-form-urlencoded. Todos os parametros são enviados através da query string.
sessionstringHash de sessão gerado no login.device_idinteiro de 64 bitsID único do equipamento.identifier_idinteiro de 64 bitsMétodo de identificação.eventinteiroEvento do resultado da identificação, (e.g.: 3 para não identificado)user_idinteiro de 64 bitsID do usuário.duressinteiroEsse parâmetro retorna um inteiro que indica se é dedo do pânico ou uma simples identificação (1 ser for dedo de pânico ou 0 para identificação comum).resultObjeto JSONDescrito em Mensagem de Retorno.
get_user_image Equipamento não encontrou foto do usuário no cache a partir do hash e solicita envio pelo servidor.
O método HTTP usado é o GET.
sessionstringHash de sessão.user_idinteiro de 64 bitsID do usuário.Imagembinário (octet-stream)Envia foto do usuário requisitado.
device_is_alive Se o equipamento não tiver êxito em se comunicar com o servidor nas três (Configurável) tentativas que realizar, o equipamento entrará em modo de contigência. Neste modo todas as identificações são feitas no banco local do equipamento, que deve ser previamento configurado, além disso a cada minuto o equipamento envia o comando {ip}/device_is_alive.fcgi?device_id={valor} ao servidor com o número de logs disponíveis no corpo da mensagem (JSON). Assim que obter uma resposta (HTTP status code OK), ele volta ao modo online. O método HTTP usado é o POST. O contentType é application/json. access_logsinteiroNúmero de logs disponíveis
Cadastro de biometria/cartão remoto onlineCadastro de biometria/cartão remoto online. Caso o equipamento esteja configurado para extrair templates, o endpoint chamado será template_create.fcgi que contém os templates extraídos pelo equipamento.card_create Quando ocorrer o cadastro de cartão remoto no modo online esse endpoint que será chamado. Como configurar o remote_enroll pode ser visto em Cadastro Remoto O método HTTP usado é o POST. O contentType é application/json. user_idinteiro de 64 bitsEsse número representa o id do usuário.card_valueinteiro de 64 bitsNúmero do cartão.device_idinteiro de 64 bitsEsse número representa o id do device.EndPoint: /card_create.fcgi { "user_id": 1, "card_value": 132456789, "device_id": 935107 }fingerprint_create Quando ocorrer o cadastro de biometria remoto no modo online. O endpoint que será chamado é o fingerprint_create.fcgi que contém as imagens (fotos) do dedo capturadas pelo equipamento. Além disso como configurar o remote_enroll pode ser visto aqui Cadastro Remoto.
O método HTTP usado é o POST. O contentType é application/json.
user_idinteiro de 64 bitsEsse número representa o id do usuário.finger_typeinteiroOnde 1 se for dedo de pânico, ou 0 caso não.device_idinteiro de 64 bits Esse número representa o id do device que está ocorrendo o cadastro de cartão remoto. fingerprintsarray de objetos JSONimagestring É o binario da imagem convertido para base64. Este binario é um bitmap de única cor onde cada byte representa um pixel. Portanto, um image deve conter width*height bytes. widthinteiroLargura da imagem. heightinteiroAltura da imagem.
EndPoint: /fingerprint_create.fcgi { "user_id": 1, "finger_type": 0, "device_id": 935107, "fingerprints": [ { "image": "Base64" "width": 300, "height": 200 }, { "image": "Base64" "width": 300, "height": 200 }, { "image": "Base64" "width": 300, "height": 200 } ] }
Mensagem de RetornoMensagem de retorno do servidor para o equipamentos após um evento de tentativa de identificação.resultResultado da análise da tentativa de identificação.eventinteiro Registra o tipo de evento ocorrido
1 - equipamento inválido
2 - parâmetros de regra de identificação inválidos
3 - não identificado
4 - identificação pendente
5 - timeout na identificação
6 - acesso negado
7 - acesso autorizado
8 - acesso pendente
Campo Obrigatório.
user_idinteiroID do usuário, em caso de identificação.user_namestringNome do usuário, em caso de identificação.user_imagebooleanoUsuário identificado possui ou não foto.user_image_hashstring Caso o usuário identificado possua imagem, envia o hash (SHA1) da mesma.
O equipamento usa esse valor para saber se ele possui a imagem em cache ou se precisa pedí-la ao servidor.
portal_idstringID do portal correspondente.actionsArray de Objetos JSON Ações que devem ser executas pelo equipamento. Exemplo:
[ {"action":"door", "parameters":"door=1"},
{"action":"door", "parameters":"door=2"} ]
{"result": {"event":7, "user_id":6, "user_name":"Neal Caffrey", "user_image":false, "portal_id":1, "actions":[ {"action":"door", "parameters":"door=1"}, {"action":"door", "parameters":"door=2"} ] } }
Configurações da catracaDescrição das configurações disponiveis para a catraca.generalConfigurações gerais da catracacatra_timeoutstring Tempo que a catraca fica liberada para um giro em ms. timeout igual a zero significa tempo infinito, ou seja, liberada até o próximo giro.catraConfigurações específicas da catracaanti_passbackstring Habilita ou desabilita o controle de anti-dupla entrada. daily_resetstring "0" ou "1". Habilita o resete de logs para o controle de anti-dupla entrada. Os acessos serão resetados todos os dias a meia-noite. gatewaystring Sentido da entrada. deve ser "clockwise" ou "anticlockwise" (horário ou anti-horário respectivamente) operation_modestring Modo de operação da catraca. Controla quais sentidos da catraca serão controlados ou liberados. Deve ser "blocked", "entrance_open", "exit_open", "both_open" (Ambas controladas, entrada liberada, saída liberada e ambas liberadas respectivamente)
Executar açãoExecuta ações do equipamento.execute_actionsExecuta as ações na catraca.open_collectorstringAbre o coletor (urna) não recebe nenhum parâmetro.catrastring Libera a catraca para um lado. Recebe 1 parâmetro (allow="direction") "direction" deve ser "anticlockwise", "clockwise" ou "both". A catraca será liberada para o sentido anti-horário, horário ou ambos respectivamente. $.ajax({ url: "/execute_actions.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ actions: [ { action: "catra", parameters: "allow=clockwise" } ] }) });$.ajax({ url: "/execute_actions.fcgi?session=" + session, type: 'POST', contentType: 'application/json', data: JSON.stringify({ actions: [ { action: "open_collector", parameters: "" } ] }) });