Public API for iLOQ 5 Series locking system.
This is OpenApi documentation for iLOQ Public API.
Service is REST (Representational state transfer). Protocol used to transport the data is HTTP and JSON is used for data transfer.
Below is important information and notes about some business related concepts that have already been covered in you iLOQ training.
Below is a chart that illustrates relations between calendars and network module components.
Time limits are used to define when a key has access to a lock. Time limits are stored in the key.
Terms explained
- Time limit slot is a memory slot in a key.
- Time profile is a time limit slot that has a weekly clock.
- Time limit title is a preconfigured time profile that can be added to a key
- Time limit data is the weekly clock of a time profile
When adding fixed time profiles, the TimeLimitTitle start- and end dates and the weekly clocks need to be set with identical values to the preconfigured time profile.
- The weekly clock start- and end times are in milliseconds. You will need to convert the time to milliseconds when adding time profiles to a key.
Take into account that physical key has hardware limitations. Depending on locks versions, keys have max 10 up to 23 memory slots. This limits how many time limits can be stored to the key. C5 locks require minimum firmware version 138 and D5 locks require minimum firmware version 135 to support over 10 time limits.
Memory slot usage
- Start date takes one slot
- End date takes one slot
- Time profiles can take multiple slots
- Time profile start date takes one slot
- Time profile end date takes one slot
- Each time limit data takes one slot
Key's start and end date are stored in slots 0 and 1. These slots cannot be modified with any other endpoint than PUT /api/v2/Keys/{id}/SecurityAccesses.
Common use cases:
- An employee's employment start and end date.
- The time period when a technician has access to a certain site.
- A simple calendar reservations. For example, a single sports hall reservation on Friday 20.10.2023 from 19:00 to 23:00.
Example payload
{
\"TimeLimitSlots\": [
{
\"LimitDateLg\": \"2022-05-01T10:00:00\",
\"SlotNo\": 0
},
{
\"LimitDateLg\": \"2022-06-30T18:00:00\",
\"SlotNo\": 1
}
]
}
Common use cases are for example:
- Key holder makes a reservation in the calendar of a third party system and a time profile is added to the key. Time profile has start and end time.
- Recurring calendar reservation. In addition to start and end time, a weekly clock is added to the time profile.
- An employee transfered to a remote office for several days, but having access to office only on weekdays during office hours 08:00-16:00.
- Access to an office is limited to weekdays between 07:00 and 17:00.
Example payload
{
\"TimeLimitSlots\": [
{
\"SlotNo\": 2,
\"TimeLimitTitle_ID\":\"84c737d4-121e-4e4b-87f1-0d869a3fb161\",
\"TimeLimitData\": [
{
\"EndTimeMS\": 62100000,
\"StartTimeMS\": 31500000,
\"WeekDayMask\": 16
},
{
\"EndTimeMS\": 57600000,
\"StartTimeMS\": 28800000,
\"WeekDayMask\": 31
}
]
}
]
}
Example payload with start and end dates, fixed and editable time profiles.
{
\"TimeLimitSlots\": [
{
\"SlotNo\": 2,
\"TimeLimitData\": [
{
\"WeekDayMask\": 31,
\"StartTimeMS\": 32400000,
\"EndTimeMS\": 61200000
}
],
\"TimeLimitTitle_ID\": \"a4da99c5-102e-46f8-a64b-a51bcd5cb42b\",
\"TimeLimitTitleEndDateLg\": \"2022-06-15T19:30:00\",
\"TimeLimitTitleStartDateLg\": \"2022-06-01T04:00:00\"
},
{
\"SlotNo\": 2,
\"TimeLimitData\": [
{
\"WeekDayMask\": 31,
\"EndTimeMS\": 57600000,
\"StartTimeMS\": 28800000
}
],
\"TimeLimitTitle_ID\": \"103287c6-0757-4dec-b993-7b3fd616ae77\",
},
{
\"LimitDateLg\": \"2022-05-01T10:00:00\",
\"SlotNo\": 0,
},
{
\"LimitDateLg\": \"2022-06-30T18:00:00\",
\"SlotNo\": 1,
}
]
}
Notes:
- Remember to use correct slot numbers. SlotNo 0 is for start date, SlotNo 1 is for end date and SlotNo 2 is for time profiles.
- Request datetimes in format "yyyy-MM-ddTHH:mm:ss" using in locking system time zone.
- When editing time limit slots using PUT /api/v2/Keys/{id}/SecurityAccesses endpoint, remember to include all the needed slots, including start date, end date and time profiles. All the ones you omit will be deleted from the key.
- Also, remember to include any used security access ids in the SecurityAccessIds array. Otherwise they will be deleted from the key.
- For complex time limit configurations try use iLOQ 5 Series Manager create these time limits. Then request GET Keys/{id}/TimeLimitTitles to see how payloads of keys' time profiles should be defined.
Phone keys can be created and programming tasks ordered through Public API. Phone S50 app gets the programming task, programs itself, reports to server and after that, phone key is programmed.
First create a new phone key by requesting POST api/v2/Keys.
KeyTypeMask for phone key is 6 (S50 + PhoneKey).
Then update phone key information with phone number or email for registration SMS or email by requesting PUT api/v2/KeyPhones.
Check if main zone can be updated to the key by calling GET api/v2/Keys/{id}/CanUpdateMainZone.
If main zone can be updated, update by calling POST api/v2/Keys/{id}/UpdateMainZone.
Check first if access right can be added to the key by GET api/v2/Keys/{id}/SecurityAccesses/CanAdd.
Add access rights by calling POST api/v2/Keys/{id}/SecurityAccesses.
Check first if time profile can be added to the key by POST api/v2/Keys/{id}/TimeLimitTitles/CanAdd.
Add time profiles by calling POST api/v2/Keys/{id}/TimeLimitTitles.
Check if programming can be ordered through API by calling GET api/v2/Keys/{id}/CanOrder.
Do this step always before ordering programming task.
Order programming task for this new key by calling POST api/v2/Keys/{id}/Order.
External RFID tag keys can be created and instantly programmed on server side through Public API.
First create a new external tag key by requesting POST api/v2/Keys.
When creating a new key, KeyTypeMask for external RFID tag key is 384 (5 Series + Other than iLoq physical key).
Check if main zone can be updated to the key by calling GET api/v2/Keys/{id}/CanUpdateMainZone.
If main zone can be updated, update by calling POST api/v2/Keys/{id}/UpdateMainZone.
Check first if access right can be added to the key by GET api/v2/Keys/{id}/SecurityAccesses/CanAdd.
Add access rights by calling POST api/v2/Keys/{id}/SecurityAccesses.
Check first if time profile can be added to the key by POST api/v2/Keys/{id}/TimeLimitTitles/CanAdd.
Add time profiles by calling POST api/v2/Keys/{id}/TimeLimitTitles.
Check if programming can be ordered through API by calling GET api/v2/Keys/{id}/CanOrder.
Do this step always before ordering programming task.
Order programming task for this new key by calling POST api/v2/Keys/{id}/Order.
RFID external tg gets programmed on the server side and is ready to use. After programming, KeyTypeMask for external RFID tag key is 400 (5 Series + Other than iLoq physical key + Classic Mifare rfid).
Only S50 phone keys external RFID tag keys can be returned through API. Other types of keys require iLOQ 5 series Manager + programming key to return. Returning the key through API also deletes it from system. Returning the key does not require separate DELETE api/v2/Keys/{id} request.
You can check if key can be returned through API by calling GET api/v2/Keys/{id}/CanReturn.
If CanReturn reponse indicates that key can be returned with API then call POST api/v2/Keys/{id}/Return.
If returning is not possible, see CanReturn response for further information.
Public API also supports deleting the keys. If key has been programmed or issued to programming it cannot be deleted from locking system anymore. Try instead returning.
Check first if key can be deleted calling GET api/v2/Keys/{id}/CanDelete.
If response 0 Key can be deleted then proceed to call DELETE api/v2/Keys/{id}.
Any kind of non-programmed key type can be deleted throught API.
This OpenApi 3.0 documentation is for Public API version 2 for 5 Series locking systems. Other locking systems should use version 1.
For other versions use this endpoint documentation: https://s10.iloq.com/iloqwsapi/help
OpenApi Json document can be used to generate client library in multiple programming languages (C#, java, javascript, etc.). For more information about swagger, visit https://swagger.io/
To use the API, you first need to make sure your locking system is API enabled. If it isn't enabled, an error will occur during login. You can view if your locking system is API enabled by logging into 5 Series Manager and going to Edit locking system information window and then selecting Settings tab. A checkbox will appear if API is enabled. For further assistance, please contact iLOQ. Contact information can be found at https://www.iloq.com/en/sales/iloq-sales-support/
Before starting, it is recommended to get familiar with the general idea and principles behind iLOQ's locking system. You can contact iLOQ to book a training course about the locking system and iLOQ Manager software. This training takes from half a day to a day. Here is also some reading about the locking system:
The API is a RESTful service. Endpoints can be called with simple HTTP calls and HTTP protocols are mapped to CRUD operations:
- GET will retrieve data
- PUT updates data
- POST inserts new data (sometimes also used to just retrieve data if complex parameter is required)
- DELETE deletes data
NOTE! Headers
In all API calls, the Http header called "SessionId" is mandatory after step 2 Create session.
If you are using API Gateway, the header "x-api-key" must be included for every request.
Those header values you get from here:
- SessionID value from Create Session request
- x-api-key value from API Developer Portal on My Dashboard-Page.
Using iLOQ Public API is a six step process.
Steps | |
---|---|
1. Resolve url | Resolves which server url to use |
2. Create session | Creates session |
3. Get locking systems | Returns locking systems user has rights to use |
4. Set locking system | Logging to locking system |
5. Call endpoints | Use endpoints to manage locking system |
6. Kill session | Terminates session after it's no longer needed |
First step is to get the correct url to use for the rest of the API calls.
Use your iLOQ Manager server url to call POST Url/GetUrl endpoint with customer code. This endpoint returns you rest of url.
Calling this endpoint and resolving the url makes sure your application always uses the correct url to access the API.
Usually your iLOQ Manager server url is:
For example, after calling https://s5.iloq.com/iloqws/api/v2/Url/GetUrl endpoint, you might get https://s5.iloq.com/iloqwspool2/ as response. Use this new url to call rest of the API endpoints, e.g. https://s5.iloq.com/iloqwspool2/api/v2/CreateSession.
NOTE! If GetUrl returns a null or empty string, use original url that you used in POST Url/GetUrl request to call rest of the endpoints. Do not skip this first part in your integration, even if POST Url/GetUrl seems to always to return empty string.
After resolving the url, you can log in. Logging in must be done before calling any other API endpoint. This is done by calling POST CreateSession endpoint with credentials.
Credentials | Description |
---|---|
UserName | User name |
Password | Password |
CustomerCode | Customer code |
ApiKey | Leave empty for now |
ApiSecret | Leave empty for now |
Call returns response token with SessionId and result which tells if the session creation was successful. This token has to be used in all API calls in Http header called "SessionId".
After retrieving session id successfully, you need to set the locking system user uses for the duration of this session. Persons, keys, locks and other resources are always linked to a locking system. Before they can be accessed, user must be authenticated to a locking system.
First you need to get all the locking systems user has rights to. Call GET LockGroups endpoint to get all locking systems that user has rights. Resultset contains one or more locking systems. If only one locking system is returned, that can be used directly. Otherwise show locking systems to end user and let user to choose locking system.
To Authenticate to selected locking system call POST SetLockgroup with the chosen locking system.
SetLockgroup returns user's permission rights. You can use this bit mask value to enable/disable certain actions in your software. For example, if your application is used to book times using a calendar and user doesn't have permission to edit calendars (CanEditCalendars (2251799813685248)), you can disable calendar edit controls.
Now user can call the rest of the API endpoints.
Call endpoints to manage locking system.
Lastly when you have finished using Public API endpoints, terminate session with GET KillSession.
These samples describe what endpoints and in which order to call them. These use cases do not provide parameters or responses.
- <a href="/iLOQPublicApiDoc/use_cases/iLOQ_BlacklistingKeys.html" target="_blank">Blocklisting keys
- <a href="/iLOQPublicApiDoc/use_cases/iLOQ_CalendarSecurityAccessGroup.html" target="_blank">Code access groups to calendar controls
- <a href="/iLOQPublicApiDoc/use_cases/iLOQ_SessionAndLogging.html" target="_blank">Creating session and logging to locking system
- <a href="/iLOQPublicApiDoc/use_cases/iLOQ_Calendars.html" target="_blank">Managing calendars and time controls
- <a href="/iLOQPublicApiDoc/use_cases/iLOQ_ManagingCalendarControlledDoors.html" target="_blank">Manage calendar controlled doors
- <a href="/iLOQPublicApiDoc/use_cases/iLOQ_ManagingCalendarControlledDoorsSecurityCode.html" target="_blank">Manage calendar controlled doors with code access groups
- <a href="/iLOQPublicApiDoc/use_cases/iLOQ_ManagingCodeAccesGroups.html" target="_blank">Manage code access groups
- <a href="/iLOQPublicApiDoc/use_cases/iLOQ_ManangingKeys.html" target="_blank">Managing keys
- <a href="/iLOQPublicApiDoc/use_cases/iLOQ_ManageKeysSecurityAccessesRemotely.html" target="_blank">Manage key's security accesses remotely
- <a href="/iLOQPublicApiDoc/use_cases/iLOQ_ManageLocksSecurityAccessesRemotely.html" target="_blank">Manage lock's security accesses remotely
- <a href="/iLOQPublicApiDoc/use_cases/iLOQ_ManagingPersons.html" target="_blank">Manage persons
- <a href="/iLOQPublicApiDoc/use_cases/iLOQ_OrderingPhoneKeys.html" target="_blank">Managing phone keys
- <a href="/iLOQPublicApiDoc/use_cases/iLOQ_OrderingRFIDKeys.html" target="_blank">Managing external RFID tags
- <a href="/iLOQPublicApiDoc/use_cases/iLOQ_ManagingSecurityAccesses.html" target="_blank">Manage security accesses
- <a href="/iLOQPublicApiDoc/use_cases/iLOQ_ManagingTimeLimits.html" target="_blank">Manage time profiles
- <a href="/iLOQPublicApiDoc/use_cases/iLOQ_S5KeyTimeProfiles.html" target="_blank">Manage time restrictions for iLOQ S5 keys
Sample project is an UWP application written In C#. Project can be downloaded from <a href="iLOQPublicApiDoc/use_cases/PublicApiUseCases.zip">here. It shows you how to login to a locking system and it also covers these common use cases:
- Transferring person data from your system to iLOQ.
- Making calendar reservations for common area, like laundry room or sauna.
- Adding and configuring S5 keys for tenants.
- Managing iLOQ S50 phone keys.
-
New features
- Public API now supports creating, ordering, programming and returning external RFID tags
- Sample lists of requests can be found in samples section.
- More about programming of external RFID tag keys can be found here.
- Public API now supports creating, ordering, programming and returning external RFID tags
-
New endpoints
- GET Keys/{id}/LocationReporting
- Query if phone key records the last known valid location of mobile device to audit trail during lock open event.
- PUT Keys/{id}/LocationReporting
- Set if you want phone key to record the last known valid location of mobile device to audit trail during lock open event.
- GET Keys/{id}/LocationReporting
- New endpoints
- POST Keys/{id}/TimeLimitTitles/CanAdd
- This endpoint will replace previous version that was HTTP GET method
- GET PersonRoles/{id}/SecurityAccesses
- Gets security accesses by person role
- POST Keys/{id}/TimeLimitTitles/CanAdd
-
New features
- New webhook event for subcribing lock logs.
- This new feature will replace SignalR.
- Locks real estate can be updated through PUT Locks -endpoint
- Enum values and descriptions for Locks PhysicalState property
- GET Keys/{id}/TimeLimitTitles/CanAdd has new return value CanAddTimeLimit
- Two new read only properties for Keys
- ProgrammingState of the key. This new field equivalent to 5 series Manager's Programming State -field.
- IsProgrammed has key ever been programmed.
- New webhook event for subcribing lock logs.
-
New endpoints
- GET Persons/{id}/NortecActivationCode
- Gets Nortec laundry code
- GET Webhooks/Subscriptions/{id}/Payloads
- Gets payloads which have the given state. Returns most recent, maximum of 1000 payloads.
- GET Webhooks/Subscriptions/PendingPayloads
- Gets webhook subscriptions which have sent payloads that aren't sent successfully (state = 3 or 4).
- GET Persons/{id}/NortecActivationCode
-
Breaking changes
- From this version on S50 phone keys require Person_ID -link. Inserting and updating phone key without person link will cause validation error and key will not be inserted or updated.
-
New endpoints for key's security access and time profile management
-
Key's security access management
-
Key's time profile management
-
PUT Keys/{id}/SecurityAccesses works as before
-
-
New read-only property TagKeyHex for Keys
- RFID Tag presented as HEX. Empty if TagKey is absent.
-
- Webhooks allows subscribing to events happening in iLOQ Manager and iLOQ Public Api
-
New endpoint for re-registering phone keys
- New endpoints KeyTag
- Ticketing support
In this section you can find few useful tips and FAQ for using iLOQ API.
- Locking system has to be API enabled. See more in here.
- To make changes to key's security accesses and order them via API, type of the security acceess that is being changed, has to be API access. Changes to Standard access require Manager and Token to order.
- iLOQ Public API provides several CanAdd, CanAddKey, CanRemoveKey, CanRemove, CanOrder, CanReturn -methods. These endpoints may provide usefull information why something cannot be done. It also prevents unsuccessfull POST and DELETE requests.
- General rule is that integrator defines new GUIDs for ID fields for POST requests.
- Some POST endpoints may generate GUID or add 00000000-0000-0000-0000-000000000000 as GUID, but generate your own GUIDs also in these cases.
- KeyTypeMask describes type of the key.
- Accepts the following combinations: S10 + iLoqKey (S10 key), S50 + PhoneKey (S50 phone key), S50 + iLoqKey (S50 fob key), 5 Series + iLoqKey (S5 key), 5 Series + Other than iLoq physical key (External RFID tag key).
- We strongly advice to have sufficient logging on your side of integration. For security reasons iLOQ Public API does not log or store payloads of successfull requests. Errors are always logged in iLOQ Public API.
- Locking system administrator grants user rights for API user when creating user.
- Successfully logging to locking system with POST SetLockgroup return RightsMask that contains user's rights as a bit mask. List of rights can be found SetLockgroup.
- Contact your locking system administrator concerning insuffient user rights.
Here is some term differences between iLOQ 5 series Manager and iLOQ Public API
Manager | Public API |
---|---|
Access rights | SecurityAccesses |
Blocklist | Blacklist |
Calendar | CalendarDataTitles |
Calendar control | CalendarData |
Code access groups | SecurityRoles |
Service code | CustomerCode |
Time profile | TimeLimitTitles |
For API support, contact [email protected].
In problem situations provide payloads, possible error responses and service code to hasten support.
For non-API-related issues (like contract issues), contact other supports which can be found at https://www.iloq.com/en/sales/iloq-sales-support/
Webhooks allow you to build or set up integrations in a loosely coupled manner. Webhooks are created by subscribing to certain events happening in iLOQ. When one of those events is triggered, we will send a HTTP POST
payload to the URL that has been provided by you.
Once the subscription is created and active, payload will be sent each time the subscribed event occurs.
Up to 3 subscriptions can be created for each event per locking system.
When creating a subscription, you define which event you're interested in and http(s)://
endpoint where the payload will be sent. Following information needs to be provided:
- Endpoint URL that accepts
HTTP POST
requests - Starting date and time; when will this subscription start sending payloads
- Ending date and time; when will this subscription stop sending payloads. Maximum is one year ahead.
- Event; what occurring event will send the payload
- Subscription Id; guid generated by you
- Custom header (Optional); free text that will be sent as part of the payload header
- JSON path filter (Optional); filter out data you are not interested in
JSON path filter
-property allows you to filter out events by using JSON path. For example, by giving the following value $[?($.KeyTypeMask == 9 || $.KeyTypeMask == 4)]
, you receive only payloads that have KeyTypeMask
with value 4 or 9
, the rest will be ignored. See Events and Payloads for property names that can be used to filter out the webhooks.
Each event corresponds to a certain action that can happen within your iLOQ environment. For example, if you subscribe to the key_added
event, you will receive detailed payload every time an key has been added via iLOQ manager or iLOQ Public api. If you are interested in only certain keys, you can use Json path filter to filter the events.
For a complete list of available webhook events and their payloads, see Events and Payloads
Provide a public RESTFUL endpoint that accepts the HTTP POST
requests. If you use HTTPS
, make sure the certification is correctly setup and matches your domain. Design your endpoint in asynchronous manner. For ex. provide response with a http status code 2xx
instantly and do long-running tasks in the background. Format of the response is irrelevant, but it will be persisted for troubleshooting purposes and the content size is limited to 1MB
If the payload sent by iLOQ does not succesfully complete, iLOQ will try to resend the payloads in a following manner:
Failed attempts | Delay |
---|---|
1 | 5 minutes |
2 | 15 minutes |
3 | 1 hour |
4 | 6 hours |
5 | 12 hours |
6 | 24 hours |
This totals 7 requests, after that has been reached, this specific event is marked as obsolete and iLOQ stops sending the payload.
For troubleshooting purposes, each unique webhook (and related response given by your endpoint) is persisted for 30 days
and permanently removed after that threshold is reached
Webhook sender will check the status code endpoint gives in the response. If the response contains status code that's something else than 2xx, this specific event is marked as failed and iLOQ will try resending the payload later.
Webhook sender will timeout after 5 seconds if no response is given. Prepare your receiving endpoint in a asynchronous manner so that you can provide the response as soon as possible. If timeout occurs, this specific event is marked as failed and iLOQ will try resending the payload later.
If HTTPS-address is used and SSL verification fails, this specific event is marked as failed and iLOQ will try resending the payload later.
If host is unreachable, this specific event is marked as failed and iLOQ will try resending the payload later.
Each webhook sent by iLOQ has content-type of application/json; charset=utf-8
and contains following common properties:
Key | Type | Description | Example |
---|---|---|---|
Counter | number | Incremental counter that shows how many unique payloads has been sent to the endpoint provided in the subscription. Important: Resent requests won't increase the count |
2342 |
Event-Name | string | Name of the event | key_added |
Subscription-Id | string | Subscription Id that was provided when creating the subscription | 90B3B527-3667-4CF8-9930-5D744E5EA877 |
Webhook-Signature | string | Webhook Signature related to this payload | 3133e11d8b3087cf5c2b33c2c14ce4701f5b31a4746f9245681be32449958930 |
Custom-Header | string optional |
Free text given for the subscription. Is delivered as Base64 encoded string | dGVzdA== |
Key | Type | Description | Example |
---|---|---|---|
Data | object | Event related data provided See Events for detailed descriptions for each event |
{"Description": "string","ExpireDate": "2021-04-20T10:42:40.803Z","FNKey_ID": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "InfoText": "string", "KeyTypeMask": 0, "Person_ID": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "RealEstate_ID": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "ROM_ID": "string", "Stamp": "string", "StampSource": 0, "State": 0, "TagKey": "string", "TagKeySource": 0, "VersionCode": "string"} |
CreationTimeUtc | string | UTC timestamp when the payload was sent | 2021-04-29T09:08:31.6653347Z |
Each event has unique Data provided within the payload's BODY
Key added event occurs, when new key has been added via iLOQ Manager or iLOQ Public api
Key | Type | Description |
---|---|---|
Description | string | Description text |
ExpireDate | string? | Expiration date. Null if the key doesn't expire |
FNKey_ID | string(Guid) | Key Id |
InfoText | string | Additional info text |
KeyTypeMask | number | Key's types in bitmask |
Person_ID | string?(Guid) | Person to whom the key is linked to. Null if the key isn't linked to anyone |
RealEstate_ID | string(Guid) | Id of the real estate where this key belongs to |
ROM_ID | string | ROM ID |
Stamp | string | Number consisting of 4 digits written to the physical key |
StampSource | number | The source of the key labeling (Stamp) |
State | number | Current state |
TagKey | string | RFID Tag. Empty string if not given |
TagKeySource | int | The source of the key's tagkey enumeration |
VersionCode | string | Version information |
Key Added payload example (prettified)
{
\"Data\": {
\"Description\": \"string\",
\"ExpireDate\": \"2021-04-20T10:42:40.803Z\",
\"FNKey_ID\": \"3fa85f64-5717-4562-b3fc-2c963f66afa6\",
\"InfoText\": \"string\",
\"KeyTypeMask\": 0,
\"Person_ID\": \"3fa85f64-5717-4562-b3fc-2c963f66afa6\",
\"RealEstate_ID\": \"3fa85f64-5717-4562-b3fc-2c963f66afa6\",
\"ROM_ID\": \"string\",
\"Stamp\": \"string\",
\"StampSource\": 0,
\"State\": 0,
\"TagKey\": \"string\",
\"TagKeySource\": 0,
\"VersionCode\": \"string\"
},
\"CreationTimeUtc\": \"2021-04-27T14:54:06.747\"
}
Full Request example
POST http://10.0.1.6/iLOQWebhookReceiver/api/testing/key-added HTTP/1.1
Host: 10.0.1.6
Webhook-Signature: 8e67b39b6507f0ac9b559ba9c57a1efb12b40e632eabd99c316213fdaf4261f1
Event-Name: key_added
Custom-Header: VGVzdCBoZWFkZXI=
Subscription-Id: 449226d9-bb2f-41f2-be90-32ec2b9b00c4
Counter: 5304
Content-Type: application/json; charset=utf-8
Content-Length: 433
{\"Data\":{\"Description\":\"string\",\"ExpireDate\":\"2021-04-20T10:42:40.803Z\",\"FNKey_ID\":\"3fa85f64-5717-4562-b3fc-2c963f66afa6\",\"InfoText\":\"string\",\"KeyTypeMask\":0,\"Person_ID\":\"3fa85f64-5717-4562-b3fc-2c963f66afa6\",\"RealEstate_ID\":\"3fa85f64-5717-4562-b3fc-2c963f66afa6\",\"ROM_ID\":\"string\",\"Stamp\":\"string\",\"StampSource\":0,\"State\":0,\"TagKey\":\"string\",\"TagKeySource\":0,\"VersionCode\":\"string\"},\"CreationTimeUtc\":\"2021-04-29T09:08:31.6653347Z\"}
Key blocklisted event occurs, when key has been blocklisted via iLOQ Manager or iLOQ Public api
Key | Type | Description |
---|---|---|
Description | string | Description text |
ExpireDate | string? | Expiration date. Null if the key doesn't expire |
FNKey_ID | string(Guid) | Key Id |
InfoText | string | Additional info text |
KeyTypeMask | number | Key's types in bitmask |
Person_ID | string?(Guid) | Person to whom the key is linked to. Null if the key isn't linked to anyone |
RealEstate_ID | string(Guid) | Id of the real estate where this key belongs to |
ROM_ID | string | ROM ID |
Stamp | string | Number consisting of 4 digits written to the physical key |
StampSource | number | The source of the key labeling (Stamp) |
State | number | Current state |
TagKey | string | RFID Tag. Empty string if not given |
TagKeySource | int | The source of the key's tagkey enumeration |
VersionCode | string | Version information |
Key Blocklisted payload example (prettified)
{
\"Data\": {
\"Description\": \"string\",
\"ExpireDate\": \"2021-04-20T10:42:40.803Z\",
\"FNKey_ID\": \"3fa85f64-5717-4562-b3fc-2c963f66afa6\",
\"InfoText\": \"string\",
\"KeyTypeMask\": 0,
\"Person_ID\": \"3fa85f64-5717-4562-b3fc-2c963f66afa6\",
\"RealEstate_ID\": \"3fa85f64-5717-4562-b3fc-2c963f66afa6\",
\"ROM_ID\": \"string\",
\"Stamp\": \"string\",
\"StampSource\": 0,
\"State\": 0,
\"TagKey\": \"string\",
\"TagKeySource\": 0,
\"VersionCode\": \"string\"
},
\"CreationTimeUtc\": \"2021-04-27T14:54:06.747Z\"
}
Full Request example
POST http://10.0.1.6/iLOQWebhookReceiver/api/testing/key-added HTTP/1.1
Host: 10.0.1.6
Webhook-Signature: 8e67b39b6507f0ac9b559ba9c57a1efb12b40e632eabd99c316213fdaf4261f1
Event-Name: key_blocklisted
Custom-Header: VGVzdCBoZWFkZXI=
Subscription-Id: 3fa85f64-5717-4562-b3fc-2c963f66afa6
Counter: 5304
Content-Type: application/json; charset=utf-8
Content-Length: 433
{\"Data\":{\"Description\":\"string\",\"ExpireDate\":\"2021-04-20T10:42:40.803Z\",\"FNKey_ID\":\"3fa85f64-5717-4562-b3fc-2c963f66afa6\",\"InfoText\":\"string\",\"KeyTypeMask\":0,\"Person_ID\":\"3fa85f64-5717-4562-b3fc-2c963f66afa6\",\"RealEstate_ID\":\"3fa85f64-5717-4562-b3fc-2c963f66afa6\",\"ROM_ID\":\"string\",\"Stamp\":\"string\",\"StampSource\":0,\"State\":0,\"TagKey\":\"string\",\"TagKeySource\":0,\"VersionCode\":\"string\"},\"CreationTimeUtc\":\"2021-04-29T09:08:31.6653347Z\"}
Device log arrived event occurs, when lock, key or network module sends audit trails or other device logs to server
Key | Type | Description |
---|---|---|
DeviceLogTypeMask | int | Lock log types as bit mask values. For example 1028 would be successful S10 key access. 12 would be successful phone access etc. |
FLock_ID | string(Guid)? | Id of the lock. Null if the event isn't related to lock |
FNKey_ID | string(Guid)? | Id of the key. Null if the event isn't related to key |
GoingDateUtc | string? | Date and time of log access. Null if the event isn't related to key or lock access |
KeyTypeMask | number? | Key's types in bitmask. Null if the event isn't related to key |
LanguageCode | string? | Language code for person linked to key. Null if the event isn't related to key or this information is not available |
LockSerialNumber | int? | Serial number for the lock. Null if the event isn't related to lock |
Person_ID | string? | Id of the person to whom the key is linked to. Null if the key isn't linked to anyone or the event isn't related to key |
PersonFullName | string) | Full name of the person to whom the key is linked to. Null if the key isn't linked to anyone or the event isn't related to key |
PhoneEmail | string) | Email linked to the phone key. Null if the event isn't related to phone key |
PhoneNo | string) | Phone number linked to the phone key. Null if the event isn't related to phone key |
RealEstate_ID | string? | Id of the real estate where lock belongs to. Null if the event isn't related to lock |
Device Log Arrived payload example (prettified)
{
\"Data\": {
\"DeviceLogTypeMask\": 12,
\"FLock_ID\": \"3589CBEB-C801-41C9-BB06-B7A51C1F346B\",
\"fnKey_ID\": \"FD051B34-5DDC-485A-915A-205016EA74D6\",
\"GoingDateUtc\": \"2022-05-09T14:54:06.747Z\",
\"KeyTypeMask\": 4,
\"Person_ID\": \"36FCDD5C-D306-43EC-845D-DB424568F38B\",
\"RealEstate_ID\": \"0565B189-9474-4E06-94F6-DAD33F2863F5\",
\"LanguageCode\": \"FIN\",
\"LockSerialNumber\": 123456,
\"PersonFullName\": \"Foo Bar\",
\"PhoneEmail\": \"[email protected]\",
\"PhoneNo\": \"555-12345678\"
},
\"CreationTimeUtc\": \"2022-05-11T14:54:06.747Z\"
}
Full Request example
POST http://10.0.1.6/iLOQWebhookReceiver/api/testing/device-log-arrived HTTP/1.1
Host: 10.0.1.6
Webhook-Signature: 8e67b39b6507f0ac9b559ba9c57a1efb12b40e632eabd99c316213fdaf4261f1
Event-Name: device_log_arrived
Custom-Header: VGVzdCBoZWFkZXI=
Subscription-Id: 3fa85f64-5717-4562-b3fc-2c963f66afa6
Counter: 1204
Content-Type: application/json; charset=utf-8
Content-Length: 433
{\"Data\":{\"DeviceLogTypeMask\":12,\"FLock_ID\":\"3589CBEB-C801-41C9-BB06-B7A51C1F346B\",\"fnKey_ID\":\"FD051B34-5DDC-485A-915A-205016EA74D6\",\"GoingDateUtc\":\"2022-05-09T14:54:06.747Z\",\"KeyTypeMask\":4,\"Person_ID\":\"36FCDD5C-D306-43EC-845D-DB424568F38B\",\"RealEstate_ID\":\"0565B189-9474-4E06-94F6-DAD33F2863F5\",\"LanguageCode\":\"FIN\",\"LockSerialNumber\":123456,\"PersonFullName\":\"Foo Bar\",\"PhoneEmail\":\"[email protected]\",\"PhoneNo\":\"555-12345678\"},\"CreationTimeUtc\":\"2022-05-11T14:54:06.747Z\"}
Webhook service will create unique signature for each sent webhook.
By recreating and comparing this hex digest to the one sent within the headers, payload receiver can make sure that the payload has remained intact and is sent from a trusty source.
Signature is within the HEADER Webhook-Signature
To recreate this hex digest, you will need following info:
SignKey
linked to the subscriptionBODY
of the payload
Webhook-Signature
is the HMAC hex digest of the request body, and is generated using the SHA-256 hash function and the SignKey
as the HMAC key.
Body of the payload:
{\"Data\":{\"Description\":\"kuvaus\",\"ExpireDate\":\"2021-04-20T10:42:40.803Z\",\"FNKey_ID\":\"3fa85f64-5717-4562-b3fc-2c963f66afa6\",\"InfoText\":\"infoa\",\"KeyTypeMask\":0,\"Person_ID\":\"3fa85f64-5717-4562-b3fc-2c963f66afa6\",\"RealEstate_ID\":\"3fa85f64-5717-4562-b3fc-2c963f66afa6\",\"ROM_ID\":\"string\",\"Stamp\":\"string\",\"StampSource\":0,\"State\":0,\"TagKey\":\"string\",\"TagKeySource\":0,\"VersionCode\":\"string\"},\"CreationTimeUtc\":\"2021-01-05T12:15:30Z\"}
SignKey:
EFE3FD29-0B3E-405F-98EE-0CC5385DF5D5
With the above data, following Webhook-Signature
is generated:
0468a4741fc1445f9b70805456016c88ad5b61544dd8c38502be546f3e05b4e8
public static string ComputeWebhookSignature(string signKey, string body)
{
var bytes = Encoding.UTF8.GetBytes(signKey);
using (var hasher = new HMACSHA256(bytes))
{
var data = Encoding.UTF8.GetBytes(body);
return BitConverter.ToString(hasher.ComputeHash(data)).ToLower().Replace(\"-\", \"\");
}
}
Each payload body will contain property CreationTimeUtc
. This timestamp is generated just before sending the request. This will allow the receiver to secure themselves from Replay-attacks, for ex. by validating that the CreationTimeUtc
is below some threshold.
PHP 7.4 and later. Should also work with PHP 8.0.
To install the bindings via Composer, add the following to composer.json
:
{
"repositories": [
{
"type": "vcs",
"url": "https://github.com/GIT_USER_ID/GIT_REPO_ID.git"
}
],
"require": {
"GIT_USER_ID/GIT_REPO_ID": "*@dev"
}
}
Then run composer install
Download the files and include autoload.php
:
<?php
require_once('/path/to/OpenAPIClient-php/vendor/autoload.php');
Please follow the installation procedure and then run the following:
<?php
require_once(__DIR__ . '/vendor/autoload.php');
$apiInstance = new OpenAPI\Client\Api\AuthenticationApi(
// If you want use custom http client, pass your client which implements `GuzzleHttp\ClientInterface`.
// This is optional, `GuzzleHttp\Client` will be used as default.
new GuzzleHttp\Client()
);
$create_session_param = new \OpenAPI\Client\Model\CreateSessionParam(); // \OpenAPI\Client\Model\CreateSessionParam
try {
$result = $apiInstance->authenticationCreateSession($create_session_param);
print_r($result);
} catch (Exception $e) {
echo 'Exception when calling AuthenticationApi->authenticationCreateSession: ', $e->getMessage(), PHP_EOL;
}
All URIs are relative to http://localhost
Class | Method | HTTP request | Description |
---|---|---|---|
AuthenticationApi | authenticationCreateSession | POST /api/v2/CreateSession | /api/v2/CreateSession |
AuthenticationApi | authenticationKillSession | GET /api/v2/KillSession | /api/v2/KillSession |
AuthenticationApi | authenticationSetLockgroup | POST /api/v2/SetLockgroup | /api/v2/SetLockgroup |
AuthenticationApi | authenticationTest | GET /api/v2/Test | /api/v2/Test |
AuthenticationApi | authenticationVersion | GET /api/v2/Version | /api/v2/Version |
BlacklistsApi | blacklistsAddKey | POST /api/v2/Blacklists/AddKey/{fnkeyId} | /api/v2/Blacklists/AddKey/{fnkeyId} |
BlacklistsApi | blacklistsCanAddKey | GET /api/v2/Blacklists/CanAddKey/{fnkeyId} | /api/v2/Blacklists/CanAddKey/{fnkeyId} |
BlacklistsApi | blacklistsCanOrderS40Blacklist | GET /api/v2/Blacklists/CanOrderS40Blacklist | /api/v2/Blacklists/CanOrderS40Blacklist |
BlacklistsApi | blacklistsCanRemoveKey | GET /api/v2/Blacklists/CanRemoveKey/{fnkeyId} | /api/v2/Blacklists/CanRemoveKey/{fnkeyId} |
BlacklistsApi | blacklistsGetAll | GET /api/v2/Blacklists | /api/v2/Blacklists |
BlacklistsApi | blacklistsOrderS40Blacklist | POST /api/v2/Blacklists/OrderS40Blacklist | /api/v2/Blacklists/OrderS40Blacklist |
BlacklistsApi | blacklistsRemoveKey | DELETE /api/v2/Blacklists/RemoveKey/{fnkeyId} | /api/v2/Blacklists/RemoveKey/{fnkeyId} |
CalendarDataSecurityRoleLinksApi | calendarDataSecurityRoleLinksDeleteLinks | POST /api/v2/CalendarDatas/{id}/CalendarDataSecurityRoleLinks/Delete | /api/v2/CalendarDatas/{id}/CalendarDataSecurityRoleLinks/Delete |
CalendarDataSecurityRoleLinksApi | calendarDataSecurityRoleLinksGetLinksByCalendarDataId | GET /api/v2/CalendarDatas/{id}/CalendarDataSecurityRoleLinks | /api/v2/CalendarDatas/{id}/CalendarDataSecurityRoleLinks |
CalendarDataSecurityRoleLinksApi | calendarDataSecurityRoleLinksGetLinksBySecurityRoleId | GET /api/v2/SecurityRoles/{id}/CalendarDataSecurityRoleLinks | /api/v2/SecurityRoles/{id}/CalendarDataSecurityRoleLinks |
CalendarDataSecurityRoleLinksApi | calendarDataSecurityRoleLinksInsertLinks | POST /api/v2/CalendarDatas/{id}/CalendarDataSecurityRoleLinks | /api/v2/CalendarDatas/{id}/CalendarDataSecurityRoleLinks |
CalendarDataSecurityRoleLinksApi | calendarDataSecurityRoleLinksSetLinks | PUT /api/v2/CalendarDatas/{id}/CalendarDataSecurityRoleLinks | /api/v2/CalendarDatas/{id}/CalendarDataSecurityRoleLinks |
CalendarDataTitlesApi | calendarDataTitlesDelete | DELETE /api/v2/CalendarDataTitles/{id} | /api/v2/CalendarDataTitles/{id} |
CalendarDataTitlesApi | calendarDataTitlesGetAll | GET /api/v2/CalendarDataTitles | /api/v2/CalendarDataTitles |
CalendarDataTitlesApi | calendarDataTitlesGetById | GET /api/v2/CalendarDataTitles/{id} | /api/v2/CalendarDataTitles/{id} |
CalendarDataTitlesApi | calendarDataTitlesInsert | POST /api/v2/CalendarDataTitles | /api/v2/CalendarDataTitles |
CalendarDataTitlesApi | calendarDataTitlesUpdate | PUT /api/v2/CalendarDataTitles | /api/v2/CalendarDataTitles |
CalendarDatasApi | calendarDatasDelete | DELETE /api/v2/CalendarDatas/{id} | /api/v2/CalendarDatas/{id} |
CalendarDatasApi | calendarDatasGetByCalendarDataId | GET /api/v2/CalendarDatas/{id} | /api/v2/CalendarDatas/{id} |
CalendarDatasApi | calendarDatasGetByCalendarId | GET /api/v2/CalendarDataTitles/{id}/CalendarDatas | /api/v2/CalendarDataTitles/{id}/CalendarDatas |
CalendarDatasApi | calendarDatasInsert | POST /api/v2/CalendarDatas | /api/v2/CalendarDatas |
CalendarDatasApi | calendarDatasUpdate | PUT /api/v2/CalendarDatas | /api/v2/CalendarDatas |
CalendarNetworkModuleRelayLinksApi | calendarNetworkModuleRelayLinksGetLinksByCalendarId | GET /api/v2/CalendarDataTitles/{id}/CalendarNetworkModuleDeviceRelayLinks | /api/v2/CalendarDataTitles/{id}/CalendarNetworkModuleDeviceRelayLinks |
CalendarNetworkModuleRelayLinksApi | calendarNetworkModuleRelayLinksGetLinksByNetworkModuleRelayId | GET /api/v2/NetworkModuleDeviceRelays/{id}/CalendarNetworkModuleDeviceRelayLinks | /api/v2/NetworkModuleDeviceRelays/{id}/CalendarNetworkModuleDeviceRelayLinks |
CalendarNetworkModuleRelayLinksApi | calendarNetworkModuleRelayLinksSetLinks | PUT /api/v2/CalendarDataTitles/{id}/CalendarNetworkModuleDeviceRelayLinks | /api/v2/CalendarDataTitles/{id}/CalendarNetworkModuleDeviceRelayLinks |
KeyPhonesApi | keyPhonesGetByKeyId | GET /api/v2/Keys/{id}/KeyPhone | /api/v2/Keys/{id}/KeyPhone |
KeyPhonesApi | keyPhonesSendPhoneRegistration | POST /api/v2/KeyPhones/{id}/ReRegister | /api/v2/KeyPhones/{id}/ReRegister |
KeyPhonesApi | keyPhonesUpdate | PUT /api/v2/KeyPhones | /api/v2/KeyPhones |
KeyTagsApi | keyTagsDelete | DELETE /api/v2/KeyTags/{id} | /api/v2/KeyTags/{id} |
KeyTagsApi | keyTagsGetAll | GET /api/v2/KeyTags | /api/v2/KeyTags |
KeyTagsApi | keyTagsGetById | GET /api/v2/KeyTags/{id} | /api/v2/KeyTags/{id} |
KeyTagsApi | keyTagsGetTagsByFNKey | GET /api/v2/Keys/{id}/KeyTags | /api/v2/Keys/{id}/KeyTags |
KeyTagsApi | keyTagsInsert | POST /api/v2/KeyTags | /api/v2/KeyTags |
KeyTagsApi | keyTagsUpdate | PUT /api/v2/KeyTags | /api/v2/KeyTags |
KeysApi | keysCanAddSecurityAccess | GET /api/v2/Keys/{id}/SecurityAccesses/CanAdd | /api/v2/Keys/{id}/SecurityAccesses/CanAdd |
KeysApi | keysCanAddTimeLimitTitle | POST /api/v2/Keys/{id}/TimeLimitTitles/CanAdd | /api/v2/Keys/{id}/TimeLimitTitles/CanAdd |
KeysApi | keysCanAddTimeLimitTitleObsolete | GET /api/v2/Keys/{id}/TimeLimitTitles/CanAdd | /api/v2/Keys/{id}/TimeLimitTitles/CanAdd |
KeysApi | keysCanDeleteKey | GET /api/v2/Keys/{id}/CanDelete | /api/v2/Keys/{id}/CanDelete |
KeysApi | keysCanDeleteSecurityAccess | GET /api/v2/Keys/{id}/SecurityAccesses/{securityAccessId}/CanDelete | /api/v2/Keys/{id}/SecurityAccesses/{securityAccessId}/CanDelete |
KeysApi | keysCanOrderKey | GET /api/v2/Keys/{id}/CanOrder | /api/v2/Keys/{id}/CanOrder |
KeysApi | keysCanReturnKey | GET /api/v2/Keys/{id}/CanReturn | /api/v2/Keys/{id}/CanReturn |
KeysApi | keysCanUpdateKeyMainZone | GET /api/v2/Keys/{id}/CanUpdateMainZone | /api/v2/Keys/{id}/CanUpdateMainZone |
KeysApi | keysDelete | DELETE /api/v2/Keys/{id} | /api/v2/Keys/{id} |
KeysApi | keysDeleteSecurityAccess | DELETE /api/v2/Keys/{id}/SecurityAccesses/{securityAccessId} | /api/v2/Keys/{id}/SecurityAccesses/{securityAccessId} |
KeysApi | keysDeleteTimeLimit | DELETE /api/v2/Keys/{id}/TimeLimitTitles/{timeLimitTitleId} | /api/v2/Keys/{id}/TimeLimitTitles/{timeLimitTitleId} |
KeysApi | keysGetAllKeys | GET /api/v2/Keys | /api/v2/Keys |
KeysApi | keysGetKey | GET /api/v2/Keys/{id} | /api/v2/Keys/{id} |
KeysApi | keysGetKeyLocationReportingInAuditTrail | GET /api/v2/Keys/{id}/LocationReporting | /api/v2/Keys/{id}/LocationReporting |
KeysApi | keysGetKeysByPerson | GET /api/v2/Persons/{id}/Keys | /api/v2/Persons/{id}/Keys |
KeysApi | keysGetKeysByRomIds | GET /api/v2/Keys/GetByRomIds | /api/v2/Keys/GetByRomIds |
KeysApi | keysGetSecurityAccesses | GET /api/v2/Keys/{id}/SecurityAccesses | /api/v2/Keys/{id}/SecurityAccesses |
KeysApi | keysGetTimeLimit | GET /api/v2/Keys/{id}/TimeLimitTitles/{timeLimitTitleId} | /api/v2/Keys/{id}/TimeLimitTitles/{timeLimitTitleId} |
KeysApi | keysGetTimeLimits | GET /api/v2/Keys/{id}/TimeLimitTitles | /api/v2/Keys/{id}/TimeLimitTitles |
KeysApi | keysGetZones | GET /api/v2/Keys/{id}/Zones | /api/v2/Keys/{id}/Zones |
KeysApi | keysInsert | POST /api/v2/Keys | /api/v2/Keys |
KeysApi | keysInsertSecurityAccess | POST /api/v2/Keys/{id}/SecurityAccesses | /api/v2/Keys/{id}/SecurityAccesses |
KeysApi | keysInsertTimeLimitTitle | POST /api/v2/Keys/{id}/TimeLimitTitles | /api/v2/Keys/{id}/TimeLimitTitles |
KeysApi | keysOrderKey | POST /api/v2/Keys/{id}/Order | /api/v2/Keys/{id}/Order |
KeysApi | keysReturnKey | POST /api/v2/Keys/{id}/Return | /api/v2/Keys/{id}/Return |
KeysApi | keysSetKeyLocationReportingInAuditTrail | PUT /api/v2/Keys/{id}/LocationReporting | /api/v2/Keys/{id}/LocationReporting |
KeysApi | keysUpdate | PUT /api/v2/Keys | /api/v2/Keys |
KeysApi | keysUpdateMainZone | PUT /api/v2/Keys/{id}/UpdateMainZone | /api/v2/Keys/{id}/UpdateMainZone |
KeysApi | keysUpdateSecurityAccesses | PUT /api/v2/Keys/{id}/SecurityAccesses | /api/v2/Keys/{id}/SecurityAccesses |
KeysApi | keysUpdateTimeLimit | PUT /api/v2/Keys/{id}/TimeLimitTitles/{timeLimitTitleId} | /api/v2/Keys/{id}/TimeLimitTitles/{timeLimitTitleId} |
LockGroupsApi | lockGroupsGenerateAccessToken | POST /api/v2/LockGroups/GenerateAccessToken | /api/v2/LockGroups/GenerateAccessToken |
LockGroupsApi | lockGroupsGetAllLockGroups | GET /api/v2/LockGroups | /api/v2/LockGroups |
LockGroupsApi | lockGroupsGetConnectionSettings | GET /api/v2/LockGroups/ConnectionSettings | /api/v2/LockGroups/ConnectionSettings |
LockLogsApi | lockLogsGetLockLogDataByGoingDates | POST /api/v2/LockLogs/GetLockLogDataByGoingDates | /api/v2/LockLogs/GetLockLogDataByGoingDates |
LockLogsApi | lockLogsGetLockLogDataByTimestamp | POST /api/v2/LockLogs/GetLockLogDataByTimestamp | /api/v2/LockLogs/GetLockLogDataByTimestamp |
LockLogsApi | lockLogsGetLockLogs | POST /api/v2/LockLogs | /api/v2/LockLogs |
LocksApi | locksCanOrderLock | GET /api/v2/Locks/{id}/CanOrder | /api/v2/Locks/{id}/CanOrder |
LocksApi | locksDelete | DELETE /api/v2/Locks/{id} | /api/v2/Locks/{id} |
LocksApi | locksGetAllLocks | GET /api/v2/Locks | /api/v2/Locks |
LocksApi | locksGetLockById | GET /api/v2/Locks/{id} | /api/v2/Locks/{id} |
LocksApi | locksGetLockOptions | GET /api/v2/Locks/{id}/Options | /api/v2/Locks/{id}/Options |
LocksApi | locksGetSecurityAccesses | GET /api/v2/Locks/{id}/SecurityAccesses | /api/v2/Locks/{id}/SecurityAccesses |
LocksApi | locksGetTimeLimits | GET /api/v2/Locks/{id}/TimeLimitTitles | /api/v2/Locks/{id}/TimeLimitTitles |
LocksApi | locksInsert | POST /api/v2/Locks | /api/v2/Locks |
LocksApi | locksOrderLock | POST /api/v2/Locks/{id}/Order | /api/v2/Locks/{id}/Order |
LocksApi | locksUpdate | PUT /api/v2/Locks | /api/v2/Locks |
LocksApi | locksUpdateSecurityAccesses | PUT /api/v2/Locks/{id}/SecurityAccesses | /api/v2/Locks/{id}/SecurityAccesses |
NetworkModuleDeviceRelaysApi | networkModuleDeviceRelaysGetById | GET /api/v2/NetworkModuleDeviceRelays/{id} | /api/v2/NetworkModuleDeviceRelays/{id} |
NetworkModuleDeviceRelaysApi | networkModuleDeviceRelaysGetByNetworkModuleDeviceId | GET /api/v2/NetworkModuleDevices/{id}/NetworkModuleDeviceRelays | /api/v2/NetworkModuleDevices/{id}/NetworkModuleDeviceRelays |
NetworkModuleDeviceRelaysApi | networkModuleDeviceRelaysGetByNetworkModuleId | GET /api/v2/NetworkModules/{id}/NetworkModuleDeviceRelays | /api/v2/NetworkModules/{id}/NetworkModuleDeviceRelays |
NetworkModuleDevicesApi | networkModuleDevicesGetAll | GET /api/v2/NetworkModuleDevices | /api/v2/NetworkModuleDevices |
NetworkModuleDevicesApi | networkModuleDevicesGetById | GET /api/v2/NetworkModuleDevices/{id} | /api/v2/NetworkModuleDevices/{id} |
NetworkModuleDevicesApi | networkModuleDevicesGetByNetworkModuleId | GET /api/v2/NetworkModules/{id}/NetworkModuleDevices | /api/v2/NetworkModules/{id}/NetworkModuleDevices |
NetworkModulesApi | networkModulesGetAll | GET /api/v2/NetworkModules | /api/v2/NetworkModules |
NetworkModulesApi | networkModulesGetById | GET /api/v2/NetworkModules/{id} | /api/v2/NetworkModules/{id} |
PersonRolesApi | personRolesGetAllPersonRoles | GET /api/v2/PersonRoles | /api/v2/PersonRoles |
PersonRolesApi | personRolesGetPersonRolesByPersonResult | GET /api/v2/Persons/{id}/PersonRoles | /api/v2/Persons/{id}/PersonRoles |
PersonRolesApi | personRolesGetRoleById | GET /api/v2/PersonRoles/{id} | /api/v2/PersonRoles/{id} |
PersonRolesApi | personRolesGetSecurityAccessesByPersonRoleId | GET /api/v2/PersonRoles/{id}/SecurityAccesses | /api/v2/PersonRoles/{id}/SecurityAccesses |
PersonsApi | personsCanDelete | GET /api/v2/Persons/{id}/CanDelete | /api/v2/Persons/{id}/CanDelete |
PersonsApi | personsDelete | DELETE /api/v2/Persons/{id} | /api/v2/Persons/{id} |
PersonsApi | personsGetAllPersons | GET /api/v2/Persons | /api/v2/Persons |
PersonsApi | personsGetNortecCode | GET /api/v2/Persons/{id}/NortecActivationCode | /api/v2/Persons/{id}/NortecActivationCode |
PersonsApi | personsGetPerson | GET /api/v2/Persons/{id} | /api/v2/Persons/{id} |
PersonsApi | personsGetPersonsByExternalPersonIds | GET /api/v2/Persons/GetByExternalPersonIds | /api/v2/Persons/GetByExternalPersonIds |
PersonsApi | personsInsert | POST /api/v2/Persons | /api/v2/Persons |
PersonsApi | personsUpdate | PUT /api/v2/Persons | /api/v2/Persons |
RealEstatesApi | realEstatesGetValues | GET /api/v2/RealEstates | /api/v2/RealEstates |
SecurityAccessApi | securityAccessDelete | DELETE /api/v2/SecurityAccesses/{id} | /api/v2/SecurityAccesses/{id} |
SecurityAccessApi | securityAccessGetAllSecurityAccesses | GET /api/v2/SecurityAccesses | /api/v2/SecurityAccesses |
SecurityAccessApi | securityAccessInsert | POST /api/v2/SecurityAccesses | /api/v2/SecurityAccesses |
SecurityAccessApi | securityAccessUpdate | PUT /api/v2/SecurityAccesses | /api/v2/SecurityAccesses |
SecurityRolesApi | securityRolesCanDelete | GET /api/v2/SecurityRoles/{id}/CanDelete | /api/v2/SecurityRoles/{id}/CanDelete |
SecurityRolesApi | securityRolesDelete | DELETE /api/v2/SecurityRoles/{id} | /api/v2/SecurityRoles/{id} |
SecurityRolesApi | securityRolesGetAll | GET /api/v2/SecurityRoles | /api/v2/SecurityRoles |
SecurityRolesApi | securityRolesGetById | GET /api/v2/SecurityRoles/{id} | /api/v2/SecurityRoles/{id} |
SecurityRolesApi | securityRolesInsert | POST /api/v2/SecurityRoles | /api/v2/SecurityRoles |
SecurityRolesApi | securityRolesUpdate | PUT /api/v2/SecurityRoles | /api/v2/SecurityRoles |
TimeLimitDataApi | timeLimitDataGetByTimeLimitTitleId | GET /api/v2/TimeLimitTitles/{id}/TimeLimitData | /api/v2/TimeLimitTitles/{id}/TimeLimitData |
TimeLimitTitlesApi | timeLimitTitlesCanDelete | GET /api/v2/TimeLimitTitles/{id}/CanDelete | /api/v2/TimeLimitTitles/{id}/CanDelete |
TimeLimitTitlesApi | timeLimitTitlesDelete | DELETE /api/v2/TimeLimitTitles/{id} | /api/v2/TimeLimitTitles/{id} |
TimeLimitTitlesApi | timeLimitTitlesGetAll | GET /api/v2/TimeLimitTitles | /api/v2/TimeLimitTitles |
TimeLimitTitlesApi | timeLimitTitlesGetById | GET /api/v2/TimeLimitTitles/{id} | /api/v2/TimeLimitTitles/{id} |
TimeLimitTitlesApi | timeLimitTitlesInsert | POST /api/v2/TimeLimitTitles | /api/v2/TimeLimitTitles |
TimeLimitTitlesApi | timeLimitTitlesUpdate | PUT /api/v2/TimeLimitTitles | /api/v2/TimeLimitTitles |
UrlApi | urlGetUrl | POST /api/v2/Url/GetUrl | /api/v2/Url/GetUrl |
WebhooksApi | webhooksAddSubscription | POST /api/v2/Webhooks/Subscriptions | /api/v2/Webhooks/Subscriptions |
WebhooksApi | webhooksDeleteSubscription | DELETE /api/v2/Webhooks/Subscriptions/{id} | /api/v2/Webhooks/Subscriptions/{id} |
WebhooksApi | webhooksGetEvents | GET /api/v2/Webhooks/Events | /api/v2/Webhooks/Events |
WebhooksApi | webhooksGetPayloadsForSubscription | GET /api/v2/Webhooks/Subscriptions/{id}/Payloads | /api/v2/Webhooks/Subscriptions/{id}/Payloads |
WebhooksApi | webhooksGetPendingEventsForSubscription | GET /api/v2/Webhooks/Subscriptions/{id}/PendingEvents | /api/v2/Webhooks/Subscriptions/{id}/PendingEvents |
WebhooksApi | webhooksGetSubscription | GET /api/v2/Webhooks/Subscriptions/{id} | /api/v2/Webhooks/Subscriptions/{id} |
WebhooksApi | webhooksGetSubscriptions | GET /api/v2/Webhooks/Subscriptions | /api/v2/Webhooks/Subscriptions |
WebhooksApi | webhooksGetSubscriptionsWithPendingEvents | GET /api/v2/Webhooks/Subscriptions/PendingEvents | /api/v2/Webhooks/Subscriptions/PendingEvents |
WebhooksApi | webhooksGetSubscriptionsWithPendingPayloads | GET /api/v2/Webhooks/Subscriptions/PendingPayloads | /api/v2/Webhooks/Subscriptions/PendingPayloads |
WebhooksApi | webhooksUpdateSubscription | PUT /api/v2/Webhooks/Subscriptions | /api/v2/Webhooks/Subscriptions |
ZonesApi | zonesGetAllZones | GET /api/v2/Zones | /api/v2/Zones |
- AccessTokenTypeMask
- AddSecurityAccessParam
- AddSubscriptionParam
- AllowedSocketRequestTypeMask
- BlackList
- BlackListChangeType
- BlackListKeyTypeMask
- BlacklistPacket
- BlacklistPacketState
- BlocklistChangeType
- CalendarDataEntry
- CalendarDataEntryType
- CalendarDataGetByCalendarDataIdResult
- CalendarDataGetByCalendarDataIdResultEntry
- CalendarDataGetByCalendarDataIdResultRecurringEntry
- CalendarDataGetByCalendarDataIdResultRecurringEntryException
- CalendarDataGetByCalendarIdResult
- CalendarDataInsertParam
- CalendarDataRecurringEntry
- CalendarDataRecurringEntryException
- CalendarDataSecurityRoleLink
- CalendarDataSecurityRoleLinksDeleteLinksParam
- CalendarDataSecurityRoleLinksInsertLinksParam
- CalendarDataSecurityRoleLinksSetLinksParam
- CalendarDataTitle
- CalendarDataTitleInsert
- CalendarDataTitleInsertOptionMask
- CalendarDataTitleInsertReservationTargetType
- CalendarDataTitleInsertType
- CalendarDataTitleOptionMask
- CalendarDataTitleReservationTargetType
- CalendarDataTitleType
- CalendarDataTitleUpdate
- CalendarDataType
- CalendarDataUpdateParam
- CalendarNetworkModuleDeviceRelayLinksSetLinksParam
- CalendarNetworkModuleRelayLink
- CanAddSecurityAccessLink
- CanAddTimeLimit
- CanDeleteKeyResult
- CanDeleteSecurityAccessLink
- CanDeleteSecurityRole
- CanDeleteTimeLimitTitleResult
- CanOrderKeyResultType
- CanOrderLockResultType
- CanOrderS40BlacklistResult
- CanReturnKeyResultType
- CanUpdateKeyMainZoneResult
- CreateSessionParam
- CreateSessionResult
- CreateSessionResultResult
- CreateSessionResultType
- DeviceLogFNKey
- DeviceLogFNKeyKeyTypeMask
- DeviceLogFNKeyOptionMask
- DeviceLogFlock
- DeviceLogFlockLockType
- DeviceLogLocationData
- DeviceLogTypeMask
- EnuCalendarDataState
- EnuLockType
- EnuSecurityAccessMode
- EventState
- FNKeyDeviceLogOptionMask
- FNKeyPhoneOptionMask
- FNKeyPhoneRequestTypeMask
- FNKeyTag
- FprogKeyStateMask
- GenerateAccessTokenParam
- GenerateAccessTokenParamTypeMask
- GenerateAccessTokenResult
- GetConnectionSettingsResult
- GetKeySecurityAccessesResult
- GetKeysByPersonResult
- GetKeysByPersonResult1
- GetLockLogDataParam
- GetLockLogDataResult
- GetLockLogsParam
- GetLockLogsParamTypeMask
- GetLockSecurityAccessesResult
- GetLockTimeLimitsResult
- GetS40BlacklistResult
- GetS40BlacklistResultBlacklistPacket
- GetSecurityAccessesView
- GetSubscriptionsWithPendingPayloadsResult
- GetTimeLimitsResult
- GetTimeLimitsResultKeyScheduler
- GetTimeLimitsView
- GetZonesResult
- InsertKeyParam
- InsertKeyParam1
- InsertKeyParam1Key
- InsertKeyParamKey
- InsertKeyTimeLimitSlotParam
- InsertKeyTimeLimitSlotParamTimeLimitSlot
- InsertLockParam
- InsertLockParam1
- InsertLockParam1Lock
- InsertLockParam1LockRelay
- InsertLockParam1TimeLimit
- InsertLockParamLockOptions
- InsertPersonParam
- InsertPersonParamPerson
- InsertResult
- InsertSecurityAccessParam
- InsertSecurityAccessParamSecurityAccess
- InsertSecurityAccessResult
- InsertSecurityAccessResultSecurityAccess
- InsertTimeLimitTitlesParam
- InsertTimeLimitTitlesParamTimeLimitTitle
- Key
- Key1
- KeyHolderResponseType
- KeyInsert
- KeyInsert1
- KeyInsertKeyTypeMask
- KeyKeyTypeMask
- KeyPhone
- KeyPhoneOptionMask
- KeyPhoneRequestTypeMask
- KeyProgrammingState
- KeyScheduler
- KeySchedulerRenewGapType
- KeyTimeLimit
- KeyTimeLimitData
- KeyTimeLimitSlot
- KeyTypeMask
- LLockOptionMaskParam
- LNKeyTimeLimitData
- LNKeyTimeLimitSlot
- LNKeyTimeLimitSlotSlotNo
- LNKeyTimelimitSlotNo
- LocationInfoMask
- Lock
- Lock2
- Lock2LockType
- Lock2PhysicalState
- LockGroup
- LockInsert
- LockLockType
- LockLogData
- LockLogDataAccessTypeMask
- LockPhysicalState
- LockRelay
- LockRelayRelayMode
- LockRelayRelayQuasarMode
- LockSecurityAccessInsert
- LockSocketRequestTypeMask
- LockStateConfirmation
- LockStateConfirmationKeyHolderResponse
- LockTimeLimit
- LockUpdate
- LockUpdateState
- NetworkModule
- NetworkModuleAllowedSocketRequest
- NetworkModuleCalendarDataState
- NetworkModuleDevice
- NetworkModuleDeviceRelay
- NetworkModuleDeviceStateMask
- NetworkModuleDeviceType
- NetworkModuleRequestType
- NetworkModuleState
- NetworkModuleStateMask
- NetworkModuleType
- Payload
- PayloadState
- Person
- PersonInsert
- PersonInsertState
- PersonRole
- PersonState
- PersonUpdate
- PniFLockState
- PniLogicalState
- PniPersonCanDeleteErrorType
- PniPersonState
- PniProgrammingKeyState
- PniProgrammingKeyType
- PniSecurityAccessDefaultAccess
- PniSecurityAccessExt
- PniSecurityAccessStatus
- PniSecurityAccessType
- PublicApiDeviceLogData
- PublicApiDeviceLogDataFLock
- PublicApiDeviceLogDataFNKey
- PublicApiDeviceLogDataLocationData
- PublicApiDeviceLogDataLocationInfoMask
- PublicApiDeviceLogDataLockStateConfirmation
- PublicApiDeviceLogDataTypeMask
- PublicApiGetKeyLocationReportingInAuditTrailQueryResult
- PublicApiGetLockLogsResult
- PublicApiGetUrlParam
- PublicApiSetKeyLocationReportingInAuditTrailParam
- QuasarModeMask
- RealEstate
- RelayMode
- RenewGapType
- SecurityAccess
- SecurityAccess2
- SecurityAccess2Status
- SecurityAccess2Type
- SecurityAccessAccessMode
- SecurityAccessDefaultAccess
- SecurityAccessExt
- SecurityAccessInsert
- SecurityAccessRelay
- SecurityAccessStatus
- SecurityAccessType
- SecurityAccessUpdate
- SecurityRole
- SecurityRoleTypeMask
- SetLockgroupParam
- SetLockgroupResult
- Subscription
- SubscriptionState
- TimeLimitData
- TimeLimitTitle
- TimeLimitTitleOptionMask
- TimeLimitTitleOptionMaskEnum
- UpdateKeyMainZoneParam
- UpdateKeyParam
- UpdateKeyParam1
- UpdateKeyParam1Key
- UpdateKeyParamKey
- UpdateKeyPhoneParam
- UpdateKeyPhoneParamOptionMask
- UpdateKeySecurityAccessesParam
- UpdateKeySecurityAccessesParam1
- UpdateKeyTimeLimitSlotParam
- UpdateLockParam
- UpdateLockParamLock
- UpdateLockSecurityAccessesParam
- UpdateLockSecurityAccessesParam1
- UpdateLockSecurityAccessesParam1LockRelay
- UpdateLockSecurityAccessesParam1TimeLimit
- UpdateLockSecurityAccessesParamLockOptions
- UpdatePersonParam
- UpdatePersonParamPerson
- UpdateSecurityAccessParam
- UpdateSecurityAccessParamSecurityAccess
- UpdateTimeLimitTitlesParam
- UpdateTimeLimitTitlesParamTimeLimitTitle
- WebhookEvent
- Zone
Endpoints do not require authorization.
To run the tests, use:
composer install
vendor/bin/phpunit
This PHP package is automatically generated by the OpenAPI Generator project:
- API version:
v2
- Generator version:
7.10.0
- Generator version:
- Build package:
org.openapitools.codegen.languages.PhpClientCodegen