PMS integration guide

This will guide you through integrating your Property Management System (PMS) / Channel Manager with Akiles. Following this guide, your integration will allow the user to:

Tip

Why map rooms to Akiles groups and not to Akiles locks/doors? A few reasons:

  • Guests often need access to multiple doors. For example a reservation for “Room 301” might need access to “Street door”, “Floor 3” and “Room 301”. A single group can configure access to multiple doors, so you can make your mapping “1 room = 1 group” instead of “1 room = N doors”, which is simpler to implement.
  • In Akiles, there’s no way to associate members to doors directly. You’d have to create a temporary groups for each reservation with the right list of doors and delete it after the reservation ends. It’d be more work!
  • Groups have an advanced permission system that your users can take advantage of. If you manage doors directly you’d have to reimplement all of it from scratch.

User experience

Demo app screenshot

Add a section for the Akiles integration. We recommend it shows the “status” of the integration: connected or not connected. When not connected, show a button the user can click to start the connection process. When clicked, redirect the user to the OAuth authorization flow.

Demo app screenshot

Once connected, we recommend displaying the following:

Getting started

API calls

The goal of the integration is to sync reservations to Akiles members. When reservations are created or edited, do API calls to Akiles to create or update the corresponding member. Here’s a list of the API calls you need to do:

On reservation created

Warning

Pay attention to time zones for the check-in and check-out times! They’re typically specified by the owner in local time, so you have to convert them to UTC. See here for more info.

  1. POST /members
    • name
    • starts_at: check-in date and time, in UTC.
    • ends_at: check-out date and time, in UTC.
    • metadata: store the reservation ID or another metadata you might want to use to find the member later.
  2. POST /members/{id}/group_associations
    • member_group_id: the group corresponding to the room/listing that the user configured in the mapping.
    • IMPORTANT: do NOT fill starts_at, ends_at here! Only fill them in the member.
  3. Create credentials for the member, for the types the user enabled when configuring the integration:
    • POST /members/{id}/magic_links
    • POST /members/{id}/emails
    • POST /members/{id}/pins
    • POST /members/{id}/cards
  4. If desired, send PIN/link to guest via your preferred method (email, SMS…)

On reservation dates changed

  1. PATCH /members/{id} (update dates if needed)

On reservation room/listing/property changed

  1. Delete the old member_group_association. DELETE /members/{id}/group_associations/{id}
  2. Create a new member_group_association with the new group ID. POST /members/{id}/group_associations

On reservation cancel

  1. DELETE /members/{id} (immediately revokes all access)

No need to delete credentials or group associations, just deleting the member is enough.

On reservation end

When the check-out time arrives you don’t have to do anything. There’s no need to delete the member, it automatically loses all access when the ends_at time arrives. It will be auto-deleted 1 day after ends_at passes.