Connecting Skedda to Kisi will allow you to automate your booking and access control work flows. Automatically unlock a door or send an access link to allow users to get into the spaces they've booked in Skedda.
This automation can allow access for the duration of the booking, first few minutes of the booking, etc, but it will always be dependant on the booking. If you would like to give all of your Skedda users access to Kisi all of the time or not dependant on their bookings, then we can be used as two standalone platforms without an integration.
Since every Skedda venue is unique and has differing needs, we created this tutorial for you to make your own integration using Zapier. To allow for this flexibility there is a little bit of coding involved, but this article gives you all the information you'll need to get started!
After choosing the right trigger, set up the rest of the Zap actions to communicate with Kisi. Based on your situation, we have 3 examples of Kisi actions:
Unlock a lock right at the time of the booking for 3-30 seconds.
Create a scheduled unlock to last the duration of the booking.
Send an access link that is valid for the duration of the booking.
Refer to Kisi's API documentation for extra information or if you run into strange errors.
All of the Kisi API interactions are done through Zapier's Webhooks, specifically a Custom Request > POST
This requires a Starter Zapier plan or above (depending on how many Zap tasks you do per month).
Create a Webhooks by Zapier action to talk to Kisi
Choose Webooks by Zapier and pick Custom Request:
The Method is POST, the URL and Data will depend on what Kisi action you are doing. Various actions are described below.
Kisi documentation: Headers
Each POST needs to have at least 3 headers:
accept = application/json
content-type = application/json
X-Kisi-Integration-Identifier = Skedda
Kisi can react and reach out to us in case of any issues with your integration
Each POST after the log in step needs to have an additional authorization header:
Authorization = KISI-LOGIN authentication token from login
The authentication token is labelled "Secret:" in the log in step.
See below for how to login and get this value.
Create Kisi login to get your authentication token
This is the first POST required before any other Kisi API interactions. The Kisi authentication token output from this step needs to be included in the headers of following POSTs.
Kisi documentation: Create login
"domain": "YOUR ORGANIZATION",
"email": "YOUR EMAIL",
"password": "YOUR PASSWORD"
Unique Kisi values (ID numbers) needed
To tell Kisi which items to do the actions to, find the following IDs in the URL of various pages in your Kisi dashboard. Include these where necessary in your Zap actions.
Door page: https://web.kisi.io/places/12345/locks/67890
Place ID = 12345
Lock ID = 67890
Team page: https://web.kisi.io/organization/123/groups/45678
Organization ID = 123
Group ID = 45678
Locks vs. Groups
You can perform some Kisi actions on individual locks or groups of locks. If you can group locks to avoid doing multiple actions each Zap, then you'll cut down on the number of Zap tasks you run!
Add doors/locks to a Team in the Kisi dashboard and take note of the Group ID in the URL.
Example Kisi Actions
Unlock a lock
This unlocks the lock at the time of the Zap action for the duration set in the lock settings (3 - 30 seconds).
Anyone standing at the door at the exact time of this unlock action can get inside. This means it's fairly secure, but doesn't leave much flexibility for your booking holders. They can't be even 30 seconds late!
Kisi documentation: Unlock a lock
You only need to input the lock ID in the URL and include the 4 headers. No code in the data section is necessary for this action.
Create a scheduled unlock
This unlocks a lock or group of locks for the duration of the booking or another duration that you set (ex. first 10 minutes of the booking). You can run this Zap to create the schedule a set time before the booking starts, ideally once the booking is locked-in in Skedda. If you use the external calendar (synced to Skedda) trigger, you just need to allow time for the calendar to sync with Skedda before running this Zap.
Creating a scheduled unlock can be done manually from Kisi in the lock page:
Example workflow: Skedda > Speedy script > Google Calendar > Webhooks Zap > Kisi
Skedda 2 hour lock-in policy (users cannot edit or cancel their booking if it starts in less that 2 hours)
Speedy script syncs your Google Calendar to Skedda every 30 minutes
Create the scheduled unlock through Zapier 1 hour before the event start in Google Calendar
This option gives the most flexibility to your booking holders and anyone attending the booking; however, it is the least secure. If the booking holder doesn't show up there is no way for Skedda/Kisi to know and the door will still be unlocked automatically. If you do choose this option, it is recommended that you require your users to notify you if they won't be coming to their booking in your terms and conditions. That way you can manually cancel the Zap or delete the scheduled unlock in Kisi to prevent unintended users from accessing your space.
Kisi documentation: Create a scheduled opening for the duration of the booking
"scheduleable_type": "GROUP OR LOCK",
"scheduleable_id": ID OF THE GROUP OR LOCK,
"starts_at": "EVENT START FROM TRIGGER",
"ends_at": "EVENT END FROM TRIGGER"
Here is what it will look like in Zapier for a Lock with ID 22281 and Google Calendar trigger:
Send group access link
This will email a link to the booking holder (or another email that you collect in a custom field) that is valid for the duration of the booking to unlock a lock or group of locks. This can be done manually in Kisi from the Teams page > Access Links:
The link can be forwarded by them to anyone else who needs access to the space. This is the most secure option, but is not suitable for users that do not have internet access when they are standing at the door. For example, if they run out of data on their mobile plan, or if their device runs out of battery, they will be locked out.
Google Calendar trigger - Send team access link to email collected in custom field (with filtering by space)
Kisi documentation: Send access link
"name": "NAME OF THE USER or generic label SKEDDA BOOKING",
"email": "BOOKING HOLDER EMAIL",
"valid_from": "BOOKING START TIME",
"valid_until": "BOOKING END TIME",
"group_id": ID OF THE GROUP
Here is what it will look like in Zapier for a Group with ID 32693 and Google Calendar trigger with a formatting step to extract the booking holder's email (step 2 output):
Skedda/Outlook → Kisi: Create unlock schedule based on a Skedda booking synced to Outlook: https://zapier.com/shared/e9ea6159c48a734c9211d1f5d0da2f808a584ccd
Skedda→ Kisi: Create unlock schedule based on a Skedda booking: https://zapier.com/shared/6de0101be4ef8dc8776373b588c98c368416bb02
Skedda/Google Calendar → Kisi: Send access link based on a Skedda booking synced to Google Calendar: https://zapier.com/shared/de1c76f515c68adc447ba90c646ca2677abba596