Skip to content

Enkora/iloq_api

Repository files navigation

OpenAPIClient-php

Public API for iLOQ 5 Series locking system.

Introduction

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.

Calendar reservations

Below is a chart that illustrates relations between calendars and network module components. Calendar chart

Time limits

General information

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

Time limit slot

A key's time limit slot is either the key's start date, end date or a time profile added to the key.

Time profile

Time profile need to be preconfigured in the locking system before it can be added to a key. This is done by creating a TimeLimitTitle. When adding time profiles to a key, you need to provide the TimeLimitTitle_ID of the preconfigured time profile you want to add. Time profiles can be either fixed or editable.
  • Fixed time profiles cannot be modified as they are being added to the key.
  • Editable time profiles can be modified as they are being added to the key.
  • 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.

    Time limit title

    Time limit title can be either a fixed or editable time profile. You need to create a time limit title before you can add time profiles to a key.

    POST /api/v2/TimeLimitTitles.

    Time limit data

    Time limit data is the weekly clock of a time profile. Do not add time limit data to a time limit slots 0 or 1.

    Limitations to be considered

    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 start date and end date -- slots 0 and 1

    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
            }
        ]
    }
    

    Key time profiles -- slot 2

    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

    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.

    Creating a new phone key to locking system

    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.

    Setting main zone for the phone 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.

    Adding access rights and time profiles for the phone key

    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.

    First time registration and ordering programming task

    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

    External RFID tag keys can be created and instantly programmed on server side through Public API.

    Creating a new external tag key to locking system

    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).

    Setting main zone for the external tag 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.

    Adding access rights and time profiles for the external tag key

    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.

    Program the external RFID tag key

    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).

    Returning the keys through API

    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.

    Public API

    API Documentation

    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/

    Usage

    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

    Getting started

    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.

    General process

    Using iLOQ Public API is a six step process.

    Session handling chart

    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

    1. Resolve url

    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.

    2. Create session

    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".

    3. Get locking systems

    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.

    4. Set 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.

    5. Call endpoints

    Call endpoints to manage locking system.

    6. Kill session

    Lastly when you have finished using Public API endpoints, terminate session with GET KillSession.

    Samples

    Common use cases

    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

    UWP application

    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.

    Change history

    Version 7.5

    • 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.
    • New endpoints

    Version 7.4

    Version 7.1.8200.35003

    Version 6.9.1.0

    Version 6.8.0.16

    Version 6.5.0.1

    • New endpoints KeyTag
      • Ticketing support

    General advice and FAQ

    In this section you can find few useful tips and FAQ for using iLOQ API.

    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.

    Can-methods

    • 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.

    GUIDs and ID fields

    • 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

    • 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).

    Logging

    • 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.

    Rights

    • 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.

    Terms

    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

    Contact

    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/

    Webhook (Beta)

    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.

    Subscription

    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:

    1. Endpoint URL that accepts HTTP POST requests
    2. Starting date and time; when will this subscription start sending payloads
    3. Ending date and time; when will this subscription stop sending payloads. Maximum is one year ahead.
    4. Event; what occurring event will send the payload
    5. Subscription Id; guid generated by you
    6. Custom header (Optional); free text that will be sent as part of the payload header
    7. JSON path filter (Optional); filter out data you are not interested in

    JSON path filter

    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.

    Event

    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

    Preparing to receive webhooks

    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

    Error handling & limitations

    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

    Errors in response

    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.

    Timeout

    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.

    SSL verification error

    If HTTPS-address is used and SSL verification fails, this specific event is marked as failed and iLOQ will try resending the payload later.

    Host unreachable

    If host is unreachable, this specific event is marked as failed and iLOQ will try resending the payload later.

    Payload common properties

    Each webhook sent by iLOQ has content-type of application/json; charset=utf-8 and contains following common properties:

    Headers

    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==

    Payload body

    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

    Events

    Each event has unique Data provided within the payload's BODY

    key_added

    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

    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

    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 signature

    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 subscription
    • BODY 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.

    Example

    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

    Code example (C#)

    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(\"-\", \"\");
        }
    }
    

    Additional security

    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.

    Installation & Usage

    Requirements

    PHP 7.4 and later. Should also work with PHP 8.0.

    Composer

    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

    Manual Installation

    Download the files and include autoload.php:

    <?php
    require_once('/path/to/OpenAPIClient-php/vendor/autoload.php');

    Getting Started

    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;
    }

    API Endpoints

    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

    Models

    Authorization

    Endpoints do not require authorization.

    Tests

    To run the tests, use:

    composer install
    vendor/bin/phpunit

    Author

    About this package

    This PHP package is automatically generated by the OpenAPI Generator project:

    • API version: v2
      • Generator version: 7.10.0
    • Build package: org.openapitools.codegen.languages.PhpClientCodegen

    About

    iLOQ Public API

    Resources

    Stars

    Watchers

    Forks

    Packages

    No packages published

    Languages