Kadence Public API (1.3.0)

Getting started

Kadence is the all-in-one software platform that helps your team thrive at hybrid work. With our public API you can integrate your own applications with Kadence, boosting employee productivity, enabling in-person collaboration, and maximizing your workspace to do more with less. To get started, check out our developer getting started guide. You can also check out our sample applications on GitHub.

Authentication

Every request needs an access token. We use the OAuth 2.0 client credentials flow, so your application authenticates as itself rather than as a person.

A Global Admin creates the credentials in Kadence under Settings → Developer → API keys. The secret is shown once, when the key is created, and cannot be retrieved afterwards. Store it somewhere safe, and regenerate the key if you lose it or it leaks.

To get a token, post to /oauth2/token on the auth host for your region, form-encoded:

POST https://login.onkadence.co/oauth2/token
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials
&client_id=YOUR_CLIENT_ID
&client_secret=YOUR_CLIENT_SECRET
&scope=public

The public scope covers everything in this document except the audit export, which uses its own keys and the audit scope — see that section for how to set it up.

Send the token on every request to the API host:

Authorization: Bearer YOUR_ACCESS_TOKEN

The token response includes expires_in, the number of seconds the token stays valid. Read that value rather than assuming a fixed lifetime, and ask for a new token when it runs out. There are no refresh tokens in this flow, so getting a new token means repeating the request above.

Rate limits

These limits cover the endpoints in this document apart from the audit export, which has its own, lower allowance counted per key rather than per account.

You can make 5,000 requests per hour. The allowance is per Kadence account and is shared by every API key in it, so two integrations on the same account draw from the same pool. We measure it over a sliding hour rather than resetting on the hour.

Every response carries your current position:

Header Meaning
X-RateLimit-Limit The total number of requests allowed in the window.
X-RateLimit-Remaining How many requests you have left.
X-RateLimit-Retry-After When the allowance next frees up, as a Unix timestamp.

Go over the limit and we answer 429 Too Many Requests with an empty body. The same three headers come back with it, so read X-RateLimit-Retry-After to work out when to try again. Watching X-RateLimit-Remaining and slowing down before you reach zero is kinder to your own integration than waiting to be turned away.

Regions

Kadence supports dedicated environments for different geographical regions. When setting up your API integration, make sure you're using the correct base URLs for your region.

Region Auth API
EU (default) https://login.onkadence.co https://api.onkadence.co
US https://login.us.onkadence.co https://api.us.onkadence.co

Your region is determined by where your Kadence account was set up. If you're unsure which region you're on, contact your account administrator or reach out to Kadence support.

Use the correct auth URL when obtaining your access token, and the correct endpoint for all subsequent requests. Mixing URLs across regions will result in authentication errors.

Bookable Day

Which days a person can book in a building, and what limits apply to each one.

Get a collection of Bookable Days

Get a list of all days that a booking can be made for a specific user in a specific building.

Authorizations:
oauth
query Parameters
buildingId
required
string
Example: buildingId=01CBCV1CT3BM8A52SEJ2J5F4EB

The building identifier to get a collection of bookable days for.

userId
required
string
Example: userId=01CADV1CT3BM8A52SEJ2J5F4EB

The user identifier to get a collection of bookable days for.

header Parameters
Accept
required
string
Example: application/ld+json

The format you want the response in.

Responses

Response Schema: application/ld+json
required
Array of objects
Array
start
string <date-time>

The start of the bookable day (in UTC). If the bookable day is "today", and the building is currently open, this will be the earliest time at which the API will accept a booking.

end
string <date-time>

The end of the bookable day (in UTC).

hydra:totalItems
integer >= 0

Response samples

Content type
application/ld+json
{
  • "hydra:member": [
    • {
      • "start": "2023-07-01T09:00:00+00:00",
      • "end": "2023-07-01T17:00:00+00:00"
      }
    ],
  • "hydra:totalItems": 0
}

Bookable Onsite Pass

How much onsite capacity a building has left over a period, so you can tell whether someone can come in before you try to book them a space.

Get a description of onsite availability for a building in a time period

Check whether a building has onsite capacity for a time period before you create a booking. If the building doesn't cap how many people can be onsite, we report availability without a count.

Authorizations:
oauth
query Parameters
buildingId
required
string
Example: buildingId=01CBCV1CT3BM8A52SEJ2J5F4EB

The building identifier to get onsite pass information for

startDateTime
required
string
Example: startDateTime=2023-07-03T09:00:00

Proposed UTC booking start date time in format YYYY-MM-DDThh:mm:ss

endDateTime
required
string
Example: endDateTime=2023-07-03T09:00:00

Proposed UTC booking end date time in format YYYY-MM-DDThh:mm:ss

Responses

Response Schema: application/ld+json
string or object
One of
string
@id
string
@type
string
numPassesAvailable
integer or null

The number of passes available. If the building does not limit onsite availability, this will be null, unless there is no availability for some other reason, in which case it will be 0.

available
boolean

Whether any passes are available.

startDateTime
string <date-time>

The date and time for the start of the pass.

endDateTime
string <date-time>

The date and time for the end of the pass.

unavailabilityReason
string or null
Enum: "buildingClosure" "openingHours" "buildingClosed" "noCapacity" "unknown" null

Why no passes are available. Null when there is availability.

Response samples

Content type
application/ld+json
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "numPassesAvailable": 25,
  • "available": true,
  • "startDateTime": "2017-07-21T09:30:00+00:00",
  • "endDateTime": "2017-07-21T17:00:00+00:00",
  • "unavailabilityReason": "buildingClosure"
}

Bookable Space

Spaces a person can book, filtered to what is actually available to them.

Get Bookable Spaces

Get a list of all the spaces on a specific floor, which may be booked for a specific user during a specific time period.

Authorizations:
oauth
query Parameters
floorId
required
string
Example: floorId=01GTBV1CT3BM8A42SEJ2J5F4EG

Floor identifier

userId
required
string
Example: userId=01GTBV1CT3BM8A42SEJ2J5F4EG

User identifier

startDateTime
required
string
Example: startDateTime=2023-07-03T09:00:00

UTC Booking start date time in format YYYY-MM-DDThh:mm:ss

endDateTime
required
string
Example: endDateTime=2023-07-03T17:00:00

UTC Booking start date time in format YYYY-MM-DDThh:mm:ss

spaceType
string
Enum: "desk" "private_office" "room" "onsite" "locker" "pod" "parking"
Example: spaceType=desk

The type of resource that you require. Defaults to desk

header Parameters
Accept
required
string
Example: application/ld+json

The format you want the response in.

Responses

Response Schema: application/ld+json
required
Array of objects
Array
@id
string
@type
string
id
string

The ULID of the space.

name
string

The name of the space.

type
string

The type of space.

capacity
integer

How many people the space holds. A desk is 1. A room is its seating capacity.

object or null

The neighborhood the space belongs to, if it is in one.

Any of
string or object
@id
string
@type
string
id
string

The ULID of the neighborhood.

name
string

The name of the neighborhood.

hydra:totalItems
integer >= 0

Response samples

Content type
application/ld+json
{
  • "hydra:member": [
    • {
      • "@id": "string",
      • "@type": "string",
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "name": "Desk 01",
      • "type": "desk",
      • "capacity": 8,
      • "neighborhood": {
        • "@context": "string",
        • "@id": "string",
        • "@type": "string",
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Sales"
        }
      }
    ],
  • "hydra:totalItems": 0
}

Booking

Read, create and cancel bookings, and check people in and out. This is the group most integrations spend their time in, and every booking here is a desk, a room or an onsite day.

Get a collection of bookings

Get a collection of bookings for your company.

Authorizations:
oauth
query Parameters
id
string
Example: id=01GTBV1CT3BM8A42SEJ2J5F4EG

Booking identifier

startDate
string
Deprecated
Example: startDate=2023-01-01

Booking start date, date granularity only, in format YYYY-MM-DD. Matches the whole UTC day; any time component is ignored. Deprecated: use startDateTime for precise, timezone-aware filtering.

endDate
string
Deprecated
Example: endDate=2023-01-02

Booking end date, date granularity only, in format YYYY-MM-DD. Matches the whole UTC day; any time component is ignored. Deprecated: use endDateTime for precise, timezone-aware filtering.

startDateTime[local_before]
string
Example: startDateTime[local_before]=2023-01-01T14:00:00

Filter by Booking start date-time on or before this date-time (adjusted to building timezone)

endDateTime[local_before]
string
Example: endDateTime[local_before]=2023-01-01T14:00:00

Filter by Booking end date-time on or before this date-time (adjusted to building timezone)

endDateTime[local_strictly_before]
string
Example: endDateTime[local_strictly_before]=2023-01-01T14:00:00

Filter by Booking end date-time before this date-time (adjusted to building timezone)

endDateTime[local_after]
string
Example: endDateTime[local_after]=2023-01-01T14:00:00

Filter by Booking end date-time on or after this date-time (adjusted to building timezone)

endDateTime[local_strictly_after]
string
Example: endDateTime[local_strictly_after]=2023-01-01T14:00:00

Filter by Booking end date-time after this date-time (adjusted to building timezone)

endDateTime[before]
string
Example: endDateTime[before]=2023-01-01T14:00:00

Filter by Booking end date-time on or before this date-time

endDateTime[strictly_before]
string
Example: endDateTime[strictly_before]=2023-01-01T14:00:00

Filter by Booking end date-time before this date-time

endDateTime[after]
string
Example: endDateTime[after]=2023-01-01T14:00:00

Filter by Booking end date-time on or after this date-time

endDateTime[strictly_after]
string
Example: endDateTime[strictly_after]=2023-01-01T14:00:00

Filter by Booking end date-time after this date-time

startDateTime[local_strictly_before]
string
Example: startDateTime[local_strictly_before]=2023-01-01T14:00:00

Filter by Booking start date-time before this date-time (adjusted to building timezone)

startDateTime[local_after]
string
Example: startDateTime[local_after]=2023-01-01T14:00:00

Filter by Booking start date-time on or after this date-time (adjusted to building timezone)

startDateTime[local_strictly_after]
string
Example: startDateTime[local_strictly_after]=2023-01-01T14:00:00

Filter by Booking start date-time after this date-time (adjusted to building timezone)

startDateTime[before]
string
Example: startDateTime[before]=2023-01-01T14:00:00

Filter by Booking start date-time on or before this date-time

startDateTime[strictly_before]
string
Example: startDateTime[strictly_before]=2023-01-01T14:00:00

Filter by Booking start date-time before this date-time

startDateTime[after]
string
Example: startDateTime[after]=2023-01-01T14:00:00

Filter by Booking start date-time on or after this date-time

startDateTime[strictly_after]
string
Example: startDateTime[strictly_after]=2023-01-01T14:00:00

Filter by Booking start date-time after this date-time

type
string
Enum: "desk" "private_office" "room" "onsite" "locker" "pod" "parking"
Example: type=desk

Booking type. If booking type is a room, we are interacting with Google or Microsoft's APIs.

status
string
Enum: "booked" "checkedIn" "checkedOut" "completed" "cancelled" "noCheckIn"
Example: status=booked

Booking status.

buildingId
string
Example: buildingId=02GTBV1CT3BM8A42SEJ2J5F4EB

Building identifier

floorId
string
Example: floorId=01BTBV1CT3BM8A42SEJ2J5F4EB

Floor identifier

neighbourhoodId
string
Example: neighbourhoodId=01BTBV1CT3BM8A42SEJ2J5F4EB

Neighbourhood identifier

spaceId
string
Example: spaceId=01CBCV1CT3BM8A52SEJ2J5F4EB

Space identifier

order[startDate]
string
Enum: "asc" "desc"
Example: order[startDate]=asc

Order by start date

order[endDate]
string
Enum: "asc" "desc"
Example: order[endDate]=asc

Order by end date

page
integer
Default: 1

The collection page number

itemsPerPage
integer [ 0 .. 500 ]
Default: 50

The number of items per page

header Parameters
Accept
required
string
Example: application/ld+json

The format you want the response in.

Responses

Response Schema: application/ld+json
required
Array of objects
Array
@id
string
@type
string
id
string

The ULID of the booking.

createdUserId
string or null

The IRI of the user who created the booking.

userId
string or null

The IRI of the user who the booking is for.

object or null

The space that was booked.

Any of
string or object
@id
string
@type
string
id
string

The ULID of the space.

name
string

The name of the space.

type
string

The type of space.

capacity
integer

How many people the space holds. A desk is 1. A room is its seating capacity.

object or null

The floor the space is on.

object or null

The neighborhood the space belongs to, if it is in one.

photo
string or null

The UUID of the photo of the space.

photoUrl
string or null

A link to the photo, ready to use. Null when there is no photo.

photoTemplateUrl
string or null

The same link with the size left as a placeholder, so you can ask for the dimensions you need. Null when there is no photo.

startDate
string <date-time>

The date and time of the beginning of the booking.

endDate
string <date-time>

The date and time of the end of the booking.

createdAt
string <date-time>

The date and time the booking was created at.

updatedAt
string <date-time>

The date and time the booking was last updated at.

checkedInUserId
string or null

The IRI of the user who checked into the booking.

checkedInDate
string <date-time>

The date and time the booking was checked in at.

checkedInSource
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was checked in from.

checkInMethod
string or null
Enum: "doorAccess" "wifi" "geofence" "sensor"

If checked in from the public API, the method used during check in.

checkOutMethod
string or null
Enum: "doorAccess" "wifi" "geofence" "sensor"

If checked out from the public API, the method used during check out.

checkedOutUser
string or null

The IRI of the user who checked out of the booking.

checkedOutDate
string <date-time>

The date and time the booking was checked out at.

checkOutSource
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was checked out from.

permanent
boolean

Whether this booking came from an assigned space.

hasGuests
boolean

Whether this booking has guests.

guestBooking
boolean

Whether this booking is for a guest.

recurringBooking
boolean

Whether this booking is part of a recurring series.

selfCertifiedDate
string <date-time>

The date and time the booking was self-certified at.

selfCertifySource
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was self-certified from.

source
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was created from.

autoReleasedDate
string or null <date-time>

The date and time the booking was auto released.

cancelledUserId
string or null

The IRI of the user who cancelled the booking.

bookingUserEmail
string or null

The email of the user who the booking is for.

bookingCreatedByUserEmail
string or null

The email of the user who created the booking.

cancelledDate
string or null <date-time>

If cancelled, the date and time the booking was cancelled.

cancellationReason
string or null
Enum: "byUser" "byUserInBulk" "autoSpaceRelease" "permanentDesk" "changeInBuildingPolicy" "changeInCompanyPolicy" "removedFromCalendarByProvider" "removedFromCalendarByKadence" "calendarSyncError" "spaceNoLongerAvailable" "spaceRestricted" "spaceNotRestrictedAnymore" "userDeleted" "buildingClosure"

If cancelled, the reason for the cancellation.

title
string or null

If a room booking, the title of the associated calendar event.

status
string
Enum: "booked" "checkedIn" "checkedOut" "cancelled" "completed" "noCheckIn" "unknown"

The current booking status.

type
string
Enum: "desk" "private_office" "room" "onsite" "locker" "pod" "parking"

The type of booking.

onlineMeeting
boolean or null

For a room booking, whether the linked calendar event is an online meeting.

onlineMeetingUrl
boolean or null

For a room booking, the online meeting joining URL, if available.

icalUid
boolean or null

If a room booking, the associated iCal UID of the calendar event.

building
string

The IRI of the building.

hydra:totalItems
integer >= 0

Response samples

Content type
application/ld+json
{
  • "hydra:member": [
    • {
      • "@id": "/v1/public/bookings/01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "@type": "Booking",
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "createdUserId": "/v1/public/users/01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "userId": "/v1/public/users/01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "space": {
        • "@context": "string",
        • "@id": "string",
        • "@type": "string",
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Desk 01",
        • "type": "desk",
        • "capacity": 8,
        • "floor": {
          },
        • "neighborhood": {
          },
        • "photo": "b74b830a-cf26-47bd-9dbc-237571c79fc3",
        • "photoTemplateUrl": "string"
        },
      • "startDate": "2017-07-21T17:32:28+00:00",
      • "endDate": "2017-07-21T17:32:28+00:00",
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "updatedAt": "2017-07-21T17:32:28+00:00",
      • "checkedInUserId": "/v1/public/users/01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "checkedInDate": "2017-07-21T17:32:28+00:00",
      • "checkedInSource": "web",
      • "checkInMethod": "doorAccess",
      • "checkOutMethod": "doorAccess",
      • "checkedOutUser": "/v1/public/users/01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "checkedOutDate": "2017-07-21T17:32:28+00:00",
      • "checkOutSource": "web",
      • "permanent": false,
      • "hasGuests": false,
      • "guestBooking": false,
      • "recurringBooking": false,
      • "selfCertifiedDate": "2017-07-21T17:32:28+00:00",
      • "selfCertifySource": "web",
      • "source": "web",
      • "autoReleasedDate": "2017-07-21T17:32:28+00:00",
      • "cancelledUserId": "/v1/public/users/01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "bookingUserEmail": "john@example.com",
      • "bookingCreatedByUserEmail": "john@example.com",
      • "cancelledDate": "2017-07-21T17:32:28+00:00",
      • "cancellationReason": "byUser",
      • "title": null,
      • "status": "booked",
      • "type": "desk",
      • "onlineMeeting": null,
      • "onlineMeetingUrl": null,
      • "icalUid": null,
      • "building": "/v1/public/buildings/01GTBV1CT3BM8A42SEJ2J5F4EG"
      }
    ],
  • "hydra:totalItems": 0
}

Create a booking

Create a desk or onsite booking.

Authorizations:
oauth
Request Body schema: application/json
optional

The new Booking resource

userId
required
string

The user identifier of the user the booking is for

startDateTime
required
string

UTC Booking start date time in format YYYY-MM-DDThh:mm:ss

endDateTime
required
string

UTC Booking end date time in format YYYY-MM-DDThh:mm:ss

buildingId
string

Required for onsite bookings only - the id of the Building the booking is for.

spaceId
string

Required for desk bookings only - the id of the Space the booking is for.

title
string <= 255 characters

Used only for room bookings. Required for room bookings. The title.

description
string <= 4000 characters

Used only for room bookings. A detailed description of the booking.

onlineMeeting
boolean

Used only for room bookings. Indicates if the booking includes an online meeting link.

Array of objects

Used only for room bookings. List of attendees for the booking, including their details.

Array
One of
userId
required
string

Attendee ID

Responses

Response Schema: application/ld+json
@id
string
@type
string
id
string

The ULID of the booking.

createdUserId
string or null

The IRI of the user who created the booking.

userId
string or null

The IRI of the user who the booking is for.

object or null

The space that was booked.

Any of
string or object
One of
string
@id
string
@type
string
id
string

The ULID of the space.

name
string

The name of the space.

type
string

The type of space.

capacity
integer

How many people the space holds. A desk is 1. A room is its seating capacity.

object or null

The floor the space is on.

Any of
string or object
One of
string
@id
string
@type
string
id
string

The ULID of the floor.

name
string

The name of the floor.

object or null

The neighborhood the space belongs to, if it is in one.

Any of
string or object
One of
string
@id
string
@type
string
id
string

The ULID of the neighborhood.

name
string

The name of the neighborhood.

photo
string or null

The UUID of the photo of the space.

photoUrl
string or null

A link to the photo, ready to use. Null when there is no photo.

photoTemplateUrl
string or null

The same link with the size left as a placeholder, so you can ask for the dimensions you need. Null when there is no photo.

startDate
string <date-time>

The date and time of the beginning of the booking.

endDate
string <date-time>

The date and time of the end of the booking.

createdAt
string <date-time>

The date and time the booking was created at.

updatedAt
string <date-time>

The date and time the booking was last updated at.

checkedInUserId
string or null

The IRI of the user who checked into the booking.

checkedInDate
string <date-time>

The date and time the booking was checked in at.

checkedInSource
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was checked in from.

checkInMethod
string or null
Enum: "doorAccess" "wifi" "geofence" "sensor"

If checked in from the public API, the method used during check in.

checkOutMethod
string or null
Enum: "doorAccess" "wifi" "geofence" "sensor"

If checked out from the public API, the method used during check out.

checkedOutUser
string or null

The IRI of the user who checked out of the booking.

checkedOutDate
string <date-time>

The date and time the booking was checked out at.

checkOutSource
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was checked out from.

permanent
boolean

Whether this booking came from an assigned space.

hasGuests
boolean

Whether this booking has guests.

guestBooking
boolean

Whether this booking is for a guest.

recurringBooking
boolean

Whether this booking is part of a recurring series.

selfCertifiedDate
string <date-time>

The date and time the booking was self-certified at.

selfCertifySource
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was self-certified from.

source
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was created from.

autoReleasedDate
string or null <date-time>

The date and time the booking was auto released.

cancelledUserId
string or null

The IRI of the user who cancelled the booking.

bookingUserEmail
string or null

The email of the user who the booking is for.

bookingCreatedByUserEmail
string or null

The email of the user who created the booking.

cancelledDate
string or null <date-time>

If cancelled, the date and time the booking was cancelled.

cancellationReason
string or null
Enum: "byUser" "byUserInBulk" "autoSpaceRelease" "permanentDesk" "changeInBuildingPolicy" "changeInCompanyPolicy" "removedFromCalendarByProvider" "removedFromCalendarByKadence" "calendarSyncError" "spaceNoLongerAvailable" "spaceRestricted" "spaceNotRestrictedAnymore" "userDeleted" "buildingClosure"

If cancelled, the reason for the cancellation.

title
string or null

If a room booking, the title of the associated calendar event.

status
string
Enum: "booked" "checkedIn" "checkedOut" "cancelled" "completed" "noCheckIn" "unknown"

The current booking status.

type
string
Enum: "desk" "private_office" "room" "onsite" "locker" "pod" "parking"

The type of booking.

onlineMeeting
boolean or null

For a room booking, whether the linked calendar event is an online meeting.

onlineMeetingUrl
boolean or null

For a room booking, the online meeting joining URL, if available.

icalUid
boolean or null

If a room booking, the associated iCal UID of the calendar event.

building
string

The IRI of the building.

Request samples

Content type
application/json
{
  • "userId": "01H59ZGH7HDQ4KAAN6RR1X8V7V",
  • "startDateTime": "2023-07-03T09:00:00",
  • "endDateTime": "2023-07-03T17:00:00",
  • "buildingId": "01H59ZGH7HDQ4KAAN6RR1X8V7V",
  • "spaceId": "01H59ZGH7HDQ4KAAN6RR1X8V7V",
  • "title": "Room booking for Room 001",
  • "description": "",
  • "onlineMeeting": true,
  • "attendees": [
    • {
      • "userId": "01GTBV1CT3BM8A42SEJ2J5FJ2J"
      }
    ]
}

Response samples

Content type
application/ld+json
{
  • "@id": "/v1/public/bookings/01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "@type": "Booking",
  • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "createdUserId": "/v1/public/users/01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "userId": "/v1/public/users/01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "space": {
    • "@context": "string",
    • "@id": "string",
    • "@type": "string",
    • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
    • "name": "Desk 01",
    • "type": "desk",
    • "capacity": 8,
    • "floor": {
      • "@context": "string",
      • "@id": "string",
      • "@type": "string",
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "name": "Floor 01"
      },
    • "neighborhood": {
      • "@context": "string",
      • "@id": "string",
      • "@type": "string",
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "name": "Sales"
      },
    • "photo": "b74b830a-cf26-47bd-9dbc-237571c79fc3",
    • "photoTemplateUrl": "string"
    },
  • "startDate": "2017-07-21T17:32:28+00:00",
  • "endDate": "2017-07-21T17:32:28+00:00",
  • "createdAt": "2017-07-21T17:32:28+00:00",
  • "updatedAt": "2017-07-21T17:32:28+00:00",
  • "checkedInUserId": "/v1/public/users/01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "checkedInDate": "2017-07-21T17:32:28+00:00",
  • "checkedInSource": "web",
  • "checkInMethod": "doorAccess",
  • "checkOutMethod": "doorAccess",
  • "checkedOutUser": "/v1/public/users/01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "checkedOutDate": "2017-07-21T17:32:28+00:00",
  • "checkOutSource": "web",
  • "permanent": false,
  • "hasGuests": false,
  • "guestBooking": false,
  • "recurringBooking": false,
  • "selfCertifiedDate": "2017-07-21T17:32:28+00:00",
  • "selfCertifySource": "web",
  • "source": "web",
  • "autoReleasedDate": "2017-07-21T17:32:28+00:00",
  • "cancelledUserId": "/v1/public/users/01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "bookingUserEmail": "john@example.com",
  • "bookingCreatedByUserEmail": "john@example.com",
  • "cancelledDate": "2017-07-21T17:32:28+00:00",
  • "cancellationReason": "byUser",
  • "title": null,
  • "status": "booked",
  • "type": "desk",
  • "onlineMeeting": null,
  • "onlineMeetingUrl": null,
  • "icalUid": null,
  • "building": "/v1/public/buildings/01GTBV1CT3BM8A42SEJ2J5F4EG"
}

Get a single booking by identifier

Get a single booking if you know its identifier.

Authorizations:
oauth
path Parameters
id
required
string
Example: 01GTBV1CT3BM8A42SEJ2J5F4EG

Booking identifier

header Parameters
Accept
required
string
Example: application/ld+json

The format you want the response in.

Responses

Response Schema: application/ld+json
@id
string
@type
string
id
string

The ULID of the booking.

createdUserId
string or null

The IRI of the user who created the booking.

userId
string or null

The IRI of the user who the booking is for.

object or null

The space that was booked.

Any of
string or object
One of
string
@id
string
@type
string
id
string

The ULID of the space.

name
string

The name of the space.

type
string

The type of space.

capacity
integer

How many people the space holds. A desk is 1. A room is its seating capacity.

object or null

The floor the space is on.

Any of
string or object
One of
string
@id
string
@type
string
id
string

The ULID of the floor.

name
string

The name of the floor.

object or null

The neighborhood the space belongs to, if it is in one.

Any of
string or object
One of
string
@id
string
@type
string
id
string

The ULID of the neighborhood.

name
string

The name of the neighborhood.

photo
string or null

The UUID of the photo of the space.

photoUrl
string or null

A link to the photo, ready to use. Null when there is no photo.

photoTemplateUrl
string or null

The same link with the size left as a placeholder, so you can ask for the dimensions you need. Null when there is no photo.

startDate
string <date-time>

The date and time of the beginning of the booking.

endDate
string <date-time>

The date and time of the end of the booking.

createdAt
string <date-time>

The date and time the booking was created at.

updatedAt
string <date-time>

The date and time the booking was last updated at.

checkedInUserId
string or null

The IRI of the user who checked into the booking.

checkedInDate
string <date-time>

The date and time the booking was checked in at.

checkedInSource
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was checked in from.

checkInMethod
string or null
Enum: "doorAccess" "wifi" "geofence" "sensor"

If checked in from the public API, the method used during check in.

checkOutMethod
string or null
Enum: "doorAccess" "wifi" "geofence" "sensor"

If checked out from the public API, the method used during check out.

checkedOutUser
string or null

The IRI of the user who checked out of the booking.

checkedOutDate
string <date-time>

The date and time the booking was checked out at.

checkOutSource
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was checked out from.

permanent
boolean

Whether this booking came from an assigned space.

hasGuests
boolean

Whether this booking has guests.

guestBooking
boolean

Whether this booking is for a guest.

recurringBooking
boolean

Whether this booking is part of a recurring series.

selfCertifiedDate
string <date-time>

The date and time the booking was self-certified at.

selfCertifySource
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was self-certified from.

source
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was created from.

autoReleasedDate
string or null <date-time>

The date and time the booking was auto released.

cancelledUserId
string or null

The IRI of the user who cancelled the booking.

bookingUserEmail
string or null

The email of the user who the booking is for.

bookingCreatedByUserEmail
string or null

The email of the user who created the booking.

cancelledDate
string or null <date-time>

If cancelled, the date and time the booking was cancelled.

cancellationReason
string or null
Enum: "byUser" "byUserInBulk" "autoSpaceRelease" "permanentDesk" "changeInBuildingPolicy" "changeInCompanyPolicy" "removedFromCalendarByProvider" "removedFromCalendarByKadence" "calendarSyncError" "spaceNoLongerAvailable" "spaceRestricted" "spaceNotRestrictedAnymore" "userDeleted" "buildingClosure"

If cancelled, the reason for the cancellation.

title
string or null

If a room booking, the title of the associated calendar event.

status
string
Enum: "booked" "checkedIn" "checkedOut" "cancelled" "completed" "noCheckIn" "unknown"

The current booking status.

type
string
Enum: "desk" "private_office" "room" "onsite" "locker" "pod" "parking"

The type of booking.

onlineMeeting
boolean or null

For a room booking, whether the linked calendar event is an online meeting.

onlineMeetingUrl
boolean or null

For a room booking, the online meeting joining URL, if available.

icalUid
boolean or null

If a room booking, the associated iCal UID of the calendar event.

building
string

The IRI of the building.

Response samples

Content type
application/ld+json
{
  • "@id": "/v1/public/bookings/01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "@type": "Booking",
  • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "createdUserId": "/v1/public/users/01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "userId": "/v1/public/users/01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "space": {
    • "@context": "string",
    • "@id": "string",
    • "@type": "string",
    • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
    • "name": "Desk 01",
    • "type": "desk",
    • "capacity": 8,
    • "floor": {
      • "@context": "string",
      • "@id": "string",
      • "@type": "string",
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "name": "Floor 01"
      },
    • "neighborhood": {
      • "@context": "string",
      • "@id": "string",
      • "@type": "string",
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "name": "Sales"
      },
    • "photo": "b74b830a-cf26-47bd-9dbc-237571c79fc3",
    • "photoTemplateUrl": "string"
    },
  • "startDate": "2017-07-21T17:32:28+00:00",
  • "endDate": "2017-07-21T17:32:28+00:00",
  • "createdAt": "2017-07-21T17:32:28+00:00",
  • "updatedAt": "2017-07-21T17:32:28+00:00",
  • "checkedInUserId": "/v1/public/users/01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "checkedInDate": "2017-07-21T17:32:28+00:00",
  • "checkedInSource": "web",
  • "checkInMethod": "doorAccess",
  • "checkOutMethod": "doorAccess",
  • "checkedOutUser": "/v1/public/users/01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "checkedOutDate": "2017-07-21T17:32:28+00:00",
  • "checkOutSource": "web",
  • "permanent": false,
  • "hasGuests": false,
  • "guestBooking": false,
  • "recurringBooking": false,
  • "selfCertifiedDate": "2017-07-21T17:32:28+00:00",
  • "selfCertifySource": "web",
  • "source": "web",
  • "autoReleasedDate": "2017-07-21T17:32:28+00:00",
  • "cancelledUserId": "/v1/public/users/01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "bookingUserEmail": "john@example.com",
  • "bookingCreatedByUserEmail": "john@example.com",
  • "cancelledDate": "2017-07-21T17:32:28+00:00",
  • "cancellationReason": "byUser",
  • "title": null,
  • "status": "booked",
  • "type": "desk",
  • "onlineMeeting": null,
  • "onlineMeetingUrl": null,
  • "icalUid": null,
  • "building": "/v1/public/buildings/01GTBV1CT3BM8A42SEJ2J5F4EG"
}

Cancel a booking

Cancel a booking. Cancellation will not be possible if the booking has already been cancelled or completed. By adding a userId to the body of the request the public API can attempt this operation on behalf of a specific user.

Authorizations:
oauth
path Parameters
id
required
string
Example: 01GTBV1CT3BM8A42SEJ2J5F4EG

Booking identifier

header Parameters
Accept
required
string
Example: application/ld+json

The format you want the response in.

Request Body schema: application/json
optional

The new Booking resource

userId
string

The user identifier of the user the request is on behalf of. If set the API will check to ensure this user has the permission to cancel this booking.

Responses

Response Schema: application/ld+json
@id
string
@type
string
id
string

The ULID of the booking.

createdUserId
string or null

The IRI of the user who created the booking.

userId
string or null

The IRI of the user who the booking is for.

object or null

The space that was booked.

Any of
string or object
One of
string
@id
string
@type
string
id
string

The ULID of the space.

name
string

The name of the space.

type
string

The type of space.

capacity
integer

How many people the space holds. A desk is 1. A room is its seating capacity.

object or null

The floor the space is on.

Any of
string or object
One of
string
@id
string
@type
string
id
string

The ULID of the floor.

name
string

The name of the floor.

object or null

The neighborhood the space belongs to, if it is in one.

Any of
string or object
One of
string
@id
string
@type
string
id
string

The ULID of the neighborhood.

name
string

The name of the neighborhood.

photo
string or null

The UUID of the photo of the space.

photoUrl
string or null

A link to the photo, ready to use. Null when there is no photo.

photoTemplateUrl
string or null

The same link with the size left as a placeholder, so you can ask for the dimensions you need. Null when there is no photo.

startDate
string <date-time>

The date and time of the beginning of the booking.

endDate
string <date-time>

The date and time of the end of the booking.

createdAt
string <date-time>

The date and time the booking was created at.

updatedAt
string <date-time>

The date and time the booking was last updated at.

checkedInUserId
string or null

The IRI of the user who checked into the booking.

checkedInDate
string <date-time>

The date and time the booking was checked in at.

checkedInSource
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was checked in from.

checkInMethod
string or null
Enum: "doorAccess" "wifi" "geofence" "sensor"

If checked in from the public API, the method used during check in.

checkOutMethod
string or null
Enum: "doorAccess" "wifi" "geofence" "sensor"

If checked out from the public API, the method used during check out.

checkedOutUser
string or null

The IRI of the user who checked out of the booking.

checkedOutDate
string <date-time>

The date and time the booking was checked out at.

checkOutSource
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was checked out from.

permanent
boolean

Whether this booking came from an assigned space.

hasGuests
boolean

Whether this booking has guests.

guestBooking
boolean

Whether this booking is for a guest.

recurringBooking
boolean

Whether this booking is part of a recurring series.

selfCertifiedDate
string <date-time>

The date and time the booking was self-certified at.

selfCertifySource
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was self-certified from.

source
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was created from.

autoReleasedDate
string or null <date-time>

The date and time the booking was auto released.

cancelledUserId
string or null

The IRI of the user who cancelled the booking.

bookingUserEmail
string or null

The email of the user who the booking is for.

bookingCreatedByUserEmail
string or null

The email of the user who created the booking.

cancelledDate
string or null <date-time>

If cancelled, the date and time the booking was cancelled.

cancellationReason
string or null
Enum: "byUser" "byUserInBulk" "autoSpaceRelease" "permanentDesk" "changeInBuildingPolicy" "changeInCompanyPolicy" "removedFromCalendarByProvider" "removedFromCalendarByKadence" "calendarSyncError" "spaceNoLongerAvailable" "spaceRestricted" "spaceNotRestrictedAnymore" "userDeleted" "buildingClosure"

If cancelled, the reason for the cancellation.

title
string or null

If a room booking, the title of the associated calendar event.

status
string
Enum: "booked" "checkedIn" "checkedOut" "cancelled" "completed" "noCheckIn" "unknown"

The current booking status.

type
string
Enum: "desk" "private_office" "room" "onsite" "locker" "pod" "parking"

The type of booking.

onlineMeeting
boolean or null

For a room booking, whether the linked calendar event is an online meeting.

onlineMeetingUrl
boolean or null

For a room booking, the online meeting joining URL, if available.

icalUid
boolean or null

If a room booking, the associated iCal UID of the calendar event.

building
string

The IRI of the building.

Request samples

Content type
application/json
{
  • "userId": "01GTBV1CT3BM8A42SEJ2J5F4EG"
}

Response samples

Content type
application/ld+json
{
  • "@id": "/v1/public/bookings/01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "@type": "Booking",
  • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "createdUserId": "/v1/public/users/01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "userId": "/v1/public/users/01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "space": {
    • "@context": "string",
    • "@id": "string",
    • "@type": "string",
    • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
    • "name": "Desk 01",
    • "type": "desk",
    • "capacity": 8,
    • "floor": {
      • "@context": "string",
      • "@id": "string",
      • "@type": "string",
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "name": "Floor 01"
      },
    • "neighborhood": {
      • "@context": "string",
      • "@id": "string",
      • "@type": "string",
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "name": "Sales"
      },
    • "photo": "b74b830a-cf26-47bd-9dbc-237571c79fc3",
    • "photoTemplateUrl": "string"
    },
  • "startDate": "2017-07-21T17:32:28+00:00",
  • "endDate": "2017-07-21T17:32:28+00:00",
  • "createdAt": "2017-07-21T17:32:28+00:00",
  • "updatedAt": "2017-07-21T17:32:28+00:00",
  • "checkedInUserId": "/v1/public/users/01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "checkedInDate": "2017-07-21T17:32:28+00:00",
  • "checkedInSource": "web",
  • "checkInMethod": "doorAccess",
  • "checkOutMethod": "doorAccess",
  • "checkedOutUser": "/v1/public/users/01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "checkedOutDate": "2017-07-21T17:32:28+00:00",
  • "checkOutSource": "web",
  • "permanent": false,
  • "hasGuests": false,
  • "guestBooking": false,
  • "recurringBooking": false,
  • "selfCertifiedDate": "2017-07-21T17:32:28+00:00",
  • "selfCertifySource": "web",
  • "source": "web",
  • "autoReleasedDate": "2017-07-21T17:32:28+00:00",
  • "cancelledUserId": "/v1/public/users/01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "bookingUserEmail": "john@example.com",
  • "bookingCreatedByUserEmail": "john@example.com",
  • "cancelledDate": "2017-07-21T17:32:28+00:00",
  • "cancellationReason": "byUser",
  • "title": null,
  • "status": "booked",
  • "type": "desk",
  • "onlineMeeting": null,
  • "onlineMeetingUrl": null,
  • "icalUid": null,
  • "building": "/v1/public/buildings/01GTBV1CT3BM8A42SEJ2J5F4EG"
}

Check in to a booking

Check in to a booking on behalf of a user using a specified method. Check in will not be possible if self-certification is required by the building and the user whose booking it is has not self-certified for the day of the booking.

Authorizations:
oauth
path Parameters
id
required
string
Example: 01GTBV1CT3BM8A42SEJ2J5F4EG

Booking identifier

header Parameters
Accept
required
string
Example: application/ld+json

The format you want the response in.

Request Body schema: application/json
optional

The new Booking resource

userId
required
string

The user identifier to check in on behalf of. This would be the user performing an action like the user using the door access system.

method
string or null
Enum: "doorAccess" "wifi" "geofence" "sensor"

The method used to check in.

Responses

Response Schema: application/ld+json
@id
string
@type
string
id
string

The ULID of the booking.

createdUserId
string or null

The IRI of the user who created the booking.

userId
string or null

The IRI of the user who the booking is for.

object or null

The space that was booked.

Any of
string or object
One of
string
@id
string
@type
string
id
string

The ULID of the space.

name
string

The name of the space.

type
string

The type of space.

capacity
integer

How many people the space holds. A desk is 1. A room is its seating capacity.

object or null

The floor the space is on.

Any of
string or object
One of
string
@id
string
@type
string
id
string

The ULID of the floor.

name
string

The name of the floor.

object or null

The neighborhood the space belongs to, if it is in one.

Any of
string or object
One of
string
@id
string
@type
string
id
string

The ULID of the neighborhood.

name
string

The name of the neighborhood.

photo
string or null

The UUID of the photo of the space.

photoUrl
string or null

A link to the photo, ready to use. Null when there is no photo.

photoTemplateUrl
string or null

The same link with the size left as a placeholder, so you can ask for the dimensions you need. Null when there is no photo.

startDate
string <date-time>

The date and time of the beginning of the booking.

endDate
string <date-time>

The date and time of the end of the booking.

createdAt
string <date-time>

The date and time the booking was created at.

updatedAt
string <date-time>

The date and time the booking was last updated at.

checkedInUserId
string or null

The IRI of the user who checked into the booking.

checkedInDate
string <date-time>

The date and time the booking was checked in at.

checkedInSource
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was checked in from.

checkInMethod
string or null
Enum: "doorAccess" "wifi" "geofence" "sensor"

If checked in from the public API, the method used during check in.

checkOutMethod
string or null
Enum: "doorAccess" "wifi" "geofence" "sensor"

If checked out from the public API, the method used during check out.

checkedOutUser
string or null

The IRI of the user who checked out of the booking.

checkedOutDate
string <date-time>

The date and time the booking was checked out at.

checkOutSource
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was checked out from.

permanent
boolean

Whether this booking came from an assigned space.

hasGuests
boolean

Whether this booking has guests.

guestBooking
boolean

Whether this booking is for a guest.

recurringBooking
boolean

Whether this booking is part of a recurring series.

selfCertifiedDate
string <date-time>

The date and time the booking was self-certified at.

selfCertifySource
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was self-certified from.

source
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was created from.

autoReleasedDate
string or null <date-time>

The date and time the booking was auto released.

cancelledUserId
string or null

The IRI of the user who cancelled the booking.

bookingUserEmail
string or null

The email of the user who the booking is for.

bookingCreatedByUserEmail
string or null

The email of the user who created the booking.

cancelledDate
string or null <date-time>

If cancelled, the date and time the booking was cancelled.

cancellationReason
string or null
Enum: "byUser" "byUserInBulk" "autoSpaceRelease" "permanentDesk" "changeInBuildingPolicy" "changeInCompanyPolicy" "removedFromCalendarByProvider" "removedFromCalendarByKadence" "calendarSyncError" "spaceNoLongerAvailable" "spaceRestricted" "spaceNotRestrictedAnymore" "userDeleted" "buildingClosure"

If cancelled, the reason for the cancellation.

title
string or null

If a room booking, the title of the associated calendar event.

status
string
Enum: "booked" "checkedIn" "checkedOut" "cancelled" "completed" "noCheckIn" "unknown"

The current booking status.

type
string
Enum: "desk" "private_office" "room" "onsite" "locker" "pod" "parking"

The type of booking.

onlineMeeting
boolean or null

For a room booking, whether the linked calendar event is an online meeting.

onlineMeetingUrl
boolean or null

For a room booking, the online meeting joining URL, if available.

icalUid
boolean or null

If a room booking, the associated iCal UID of the calendar event.

building
string

The IRI of the building.

Request samples

Content type
application/json
{
  • "userId": "01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "method": "doorAccess"
}

Response samples

Content type
application/ld+json
{
  • "@id": "/v1/public/bookings/01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "@type": "Booking",
  • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "createdUserId": "/v1/public/users/01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "userId": "/v1/public/users/01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "space": {
    • "@context": "string",
    • "@id": "string",
    • "@type": "string",
    • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
    • "name": "Desk 01",
    • "type": "desk",
    • "capacity": 8,
    • "floor": {
      • "@context": "string",
      • "@id": "string",
      • "@type": "string",
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "name": "Floor 01"
      },
    • "neighborhood": {
      • "@context": "string",
      • "@id": "string",
      • "@type": "string",
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "name": "Sales"
      },
    • "photo": "b74b830a-cf26-47bd-9dbc-237571c79fc3",
    • "photoTemplateUrl": "string"
    },
  • "startDate": "2017-07-21T17:32:28+00:00",
  • "endDate": "2017-07-21T17:32:28+00:00",
  • "createdAt": "2017-07-21T17:32:28+00:00",
  • "updatedAt": "2017-07-21T17:32:28+00:00",
  • "checkedInUserId": "/v1/public/users/01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "checkedInDate": "2017-07-21T17:32:28+00:00",
  • "checkedInSource": "web",
  • "checkInMethod": "doorAccess",
  • "checkOutMethod": "doorAccess",
  • "checkedOutUser": "/v1/public/users/01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "checkedOutDate": "2017-07-21T17:32:28+00:00",
  • "checkOutSource": "web",
  • "permanent": false,
  • "hasGuests": false,
  • "guestBooking": false,
  • "recurringBooking": false,
  • "selfCertifiedDate": "2017-07-21T17:32:28+00:00",
  • "selfCertifySource": "web",
  • "source": "web",
  • "autoReleasedDate": "2017-07-21T17:32:28+00:00",
  • "cancelledUserId": "/v1/public/users/01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "bookingUserEmail": "john@example.com",
  • "bookingCreatedByUserEmail": "john@example.com",
  • "cancelledDate": "2017-07-21T17:32:28+00:00",
  • "cancellationReason": "byUser",
  • "title": null,
  • "status": "booked",
  • "type": "desk",
  • "onlineMeeting": null,
  • "onlineMeetingUrl": null,
  • "icalUid": null,
  • "building": "/v1/public/buildings/01GTBV1CT3BM8A42SEJ2J5F4EG"
}

Check out of a booking

Check out of a booking on behalf of a user using a specified method. Check out will not be possible if self-certification is required by the building and the user whose booking it is has not self-certified for the day of the booking.

Authorizations:
oauth
path Parameters
id
required
string
Example: 01GTBV1CT3BM8A42SEJ2J5F4EG

Booking identifier

header Parameters
Accept
required
string
Example: application/ld+json

The format you want the response in.

Request Body schema: application/json
optional

The new Booking resource

userId
required
string

The user identifier to check out on behalf of. This would be the user performing an action like the user using the door access system.

method
string or null
Enum: "doorAccess" "wifi" "geofence" "sensor"

The method used to check out.

Responses

Response Schema: application/ld+json
@id
string
@type
string
id
string

The ULID of the booking.

createdUserId
string or null

The IRI of the user who created the booking.

userId
string or null

The IRI of the user who the booking is for.

object or null

The space that was booked.

Any of
string or object
One of
string
@id
string
@type
string
id
string

The ULID of the space.

name
string

The name of the space.

type
string

The type of space.

capacity
integer

How many people the space holds. A desk is 1. A room is its seating capacity.

object or null

The floor the space is on.

Any of
string or object
One of
string
@id
string
@type
string
id
string

The ULID of the floor.

name
string

The name of the floor.

object or null

The neighborhood the space belongs to, if it is in one.

Any of
string or object
One of
string
@id
string
@type
string
id
string

The ULID of the neighborhood.

name
string

The name of the neighborhood.

photo
string or null

The UUID of the photo of the space.

photoUrl
string or null

A link to the photo, ready to use. Null when there is no photo.

photoTemplateUrl
string or null

The same link with the size left as a placeholder, so you can ask for the dimensions you need. Null when there is no photo.

startDate
string <date-time>

The date and time of the beginning of the booking.

endDate
string <date-time>

The date and time of the end of the booking.

createdAt
string <date-time>

The date and time the booking was created at.

updatedAt
string <date-time>

The date and time the booking was last updated at.

checkedInUserId
string or null

The IRI of the user who checked into the booking.

checkedInDate
string <date-time>

The date and time the booking was checked in at.

checkedInSource
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was checked in from.

checkInMethod
string or null
Enum: "doorAccess" "wifi" "geofence" "sensor"

If checked in from the public API, the method used during check in.

checkOutMethod
string or null
Enum: "doorAccess" "wifi" "geofence" "sensor"

If checked out from the public API, the method used during check out.

checkedOutUser
string or null

The IRI of the user who checked out of the booking.

checkedOutDate
string <date-time>

The date and time the booking was checked out at.

checkOutSource
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was checked out from.

permanent
boolean

Whether this booking came from an assigned space.

hasGuests
boolean

Whether this booking has guests.

guestBooking
boolean

Whether this booking is for a guest.

recurringBooking
boolean

Whether this booking is part of a recurring series.

selfCertifiedDate
string <date-time>

The date and time the booking was self-certified at.

selfCertifySource
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was self-certified from.

source
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was created from.

autoReleasedDate
string or null <date-time>

The date and time the booking was auto released.

cancelledUserId
string or null

The IRI of the user who cancelled the booking.

bookingUserEmail
string or null

The email of the user who the booking is for.

bookingCreatedByUserEmail
string or null

The email of the user who created the booking.

cancelledDate
string or null <date-time>

If cancelled, the date and time the booking was cancelled.

cancellationReason
string or null
Enum: "byUser" "byUserInBulk" "autoSpaceRelease" "permanentDesk" "changeInBuildingPolicy" "changeInCompanyPolicy" "removedFromCalendarByProvider" "removedFromCalendarByKadence" "calendarSyncError" "spaceNoLongerAvailable" "spaceRestricted" "spaceNotRestrictedAnymore" "userDeleted" "buildingClosure"

If cancelled, the reason for the cancellation.

title
string or null

If a room booking, the title of the associated calendar event.

status
string
Enum: "booked" "checkedIn" "checkedOut" "cancelled" "completed" "noCheckIn" "unknown"

The current booking status.

type
string
Enum: "desk" "private_office" "room" "onsite" "locker" "pod" "parking"

The type of booking.

onlineMeeting
boolean or null

For a room booking, whether the linked calendar event is an online meeting.

onlineMeetingUrl
boolean or null

For a room booking, the online meeting joining URL, if available.

icalUid
boolean or null

If a room booking, the associated iCal UID of the calendar event.

building
string

The IRI of the building.

Request samples

Content type
application/json
{
  • "userId": "01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "method": "doorAccess"
}

Response samples

Content type
application/ld+json
{
  • "@id": "/v1/public/bookings/01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "@type": "Booking",
  • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "createdUserId": "/v1/public/users/01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "userId": "/v1/public/users/01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "space": {
    • "@context": "string",
    • "@id": "string",
    • "@type": "string",
    • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
    • "name": "Desk 01",
    • "type": "desk",
    • "capacity": 8,
    • "floor": {
      • "@context": "string",
      • "@id": "string",
      • "@type": "string",
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "name": "Floor 01"
      },
    • "neighborhood": {
      • "@context": "string",
      • "@id": "string",
      • "@type": "string",
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "name": "Sales"
      },
    • "photo": "b74b830a-cf26-47bd-9dbc-237571c79fc3",
    • "photoTemplateUrl": "string"
    },
  • "startDate": "2017-07-21T17:32:28+00:00",
  • "endDate": "2017-07-21T17:32:28+00:00",
  • "createdAt": "2017-07-21T17:32:28+00:00",
  • "updatedAt": "2017-07-21T17:32:28+00:00",
  • "checkedInUserId": "/v1/public/users/01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "checkedInDate": "2017-07-21T17:32:28+00:00",
  • "checkedInSource": "web",
  • "checkInMethod": "doorAccess",
  • "checkOutMethod": "doorAccess",
  • "checkedOutUser": "/v1/public/users/01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "checkedOutDate": "2017-07-21T17:32:28+00:00",
  • "checkOutSource": "web",
  • "permanent": false,
  • "hasGuests": false,
  • "guestBooking": false,
  • "recurringBooking": false,
  • "selfCertifiedDate": "2017-07-21T17:32:28+00:00",
  • "selfCertifySource": "web",
  • "source": "web",
  • "autoReleasedDate": "2017-07-21T17:32:28+00:00",
  • "cancelledUserId": "/v1/public/users/01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "bookingUserEmail": "john@example.com",
  • "bookingCreatedByUserEmail": "john@example.com",
  • "cancelledDate": "2017-07-21T17:32:28+00:00",
  • "cancellationReason": "byUser",
  • "title": null,
  • "status": "booked",
  • "type": "desk",
  • "onlineMeeting": null,
  • "onlineMeetingUrl": null,
  • "icalUid": null,
  • "building": "/v1/public/buildings/01GTBV1CT3BM8A42SEJ2J5F4EG"
}

Get a user's bookings

Get a list of all the bookings made by a user.

Authorizations:
oauth
path Parameters
id
required
string
Example: 01GTBV1CT3BM8A42SEJ2J5F4EG

User identifier

query Parameters
type
string
Enum: "desk" "private_office" "room" "onsite" "locker" "pod" "parking"
Example: type=desk

Booking type. If booking type is a room, we are interacting with Google or Microsoft's APIs.

status
string
Enum: "booked" "checkedIn" "checkedOut" "completed" "cancelled" "noCheckIn"
Example: status=booked

Booking status.

startDateTime[local_before]
string
Example: startDateTime[local_before]=2023-01-01T14:00:00

Filter by booking start date-time on or before this date-time (adjusted to building timezone)

endDateTime[local_before]
string
Example: endDateTime[local_before]=2023-01-01T14:00:00

Filter by booking end date-time on or before this date-time (adjusted to building timezone)

cancelledDateTime[local_before]
string
Example: cancelledDateTime[local_before]=2023-01-01T14:00:00

Filter by booking cancelled date-time on or before this date-time (adjusted to building timezone)

checkedInDateTime[local_before]
string
Example: checkedInDateTime[local_before]=2023-01-01T14:00:00

Filter by booking checked in date-time on or before this date-time (adjusted to building timezone)

checkedOutDateTime[local_before]
string
Example: checkedOutDateTime[local_before]=2023-01-01T14:00:00

Filter by booking checked out date-time on or before this date-time (adjusted to building timezone)

selfCertifiedDateTime[local_before]
string
Example: selfCertifiedDateTime[local_before]=2023-01-01T14:00:00

Filter by booking self-certified date-time on or before this date-time (adjusted to building timezone)

selfCertifiedDateTime[local_strictly_before]
string
Example: selfCertifiedDateTime[local_strictly_before]=2023-01-01T14:00:00

Filter by booking self-certified date-time before this date-time (adjusted to building timezone)

selfCertifiedDateTime[local_after]
string
Example: selfCertifiedDateTime[local_after]=2023-01-01T14:00:00

Filter by booking self-certified date-time on or after this date-time (adjusted to building timezone)

selfCertifiedDateTime[local_strictly_after]
string
Example: selfCertifiedDateTime[local_strictly_after]=2023-01-01T14:00:00

Filter by booking self-certified date-time after this date-time (adjusted to building timezone)

selfCertifiedDateTime[before]
string
Example: selfCertifiedDateTime[before]=2023-01-01T14:00:00

Filter by booking self-certified date-time on or before this date-time

selfCertifiedDateTime[strictly_before]
string
Example: selfCertifiedDateTime[strictly_before]=2023-01-01T14:00:00

Filter by booking self-certified date-time before this date-time

selfCertifiedDateTime[after]
string
Example: selfCertifiedDateTime[after]=2023-01-01T14:00:00

Filter by booking self-certified date-time on or after this date-time

selfCertifiedDateTime[strictly_after]
string
Example: selfCertifiedDateTime[strictly_after]=2023-01-01T14:00:00

Filter by booking self-certified date-time after this date-time

checkedOutDateTime[local_strictly_before]
string
Example: checkedOutDateTime[local_strictly_before]=2023-01-01T14:00:00

Filter by booking checked out date-time before this date-time (adjusted to building timezone)

checkedOutDateTime[local_after]
string
Example: checkedOutDateTime[local_after]=2023-01-01T14:00:00

Filter by booking checked out date-time on or after this date-time (adjusted to building timezone)

checkedOutDateTime[local_strictly_after]
string
Example: checkedOutDateTime[local_strictly_after]=2023-01-01T14:00:00

Filter by booking checked out date-time after this date-time (adjusted to building timezone)

checkedOutDateTime[before]
string
Example: checkedOutDateTime[before]=2023-01-01T14:00:00

Filter by booking checked out date-time on or before this date-time

checkedOutDateTime[strictly_before]
string
Example: checkedOutDateTime[strictly_before]=2023-01-01T14:00:00

Filter by booking checked out date-time before this date-time

checkedOutDateTime[after]
string
Example: checkedOutDateTime[after]=2023-01-01T14:00:00

Filter by booking checked out date-time on or after this date-time

checkedOutDateTime[strictly_after]
string
Example: checkedOutDateTime[strictly_after]=2023-01-01T14:00:00

Filter by booking checked out date-time after this date-time

checkedInDateTime[local_strictly_before]
string
Example: checkedInDateTime[local_strictly_before]=2023-01-01T14:00:00

Filter by booking checked in date-time before this date-time (adjusted to building timezone)

checkedInDateTime[local_after]
string
Example: checkedInDateTime[local_after]=2023-01-01T14:00:00

Filter by booking checked in date-time on or after this date-time (adjusted to building timezone)

checkedInDateTime[local_strictly_after]
string
Example: checkedInDateTime[local_strictly_after]=2023-01-01T14:00:00

Filter by booking checked in date-time after this date-time (adjusted to building timezone)

checkedInDateTime[before]
string
Example: checkedInDateTime[before]=2023-01-01T14:00:00

Filter by booking checked in date-time on or before this date-time

checkedInDateTime[strictly_before]
string
Example: checkedInDateTime[strictly_before]=2023-01-01T14:00:00

Filter by booking checked in date-time before this date-time

checkedInDateTime[after]
string
Example: checkedInDateTime[after]=2023-01-01T14:00:00

Filter by booking checked in date-time on or after this date-time

checkedInDateTime[strictly_after]
string
Example: checkedInDateTime[strictly_after]=2023-01-01T14:00:00

Filter by booking checked in date-time after this date-time

cancelledDateTime[local_strictly_before]
string
Example: cancelledDateTime[local_strictly_before]=2023-01-01T14:00:00

Filter by booking cancelled date-time before this date-time (adjusted to building timezone)

cancelledDateTime[local_after]
string
Example: cancelledDateTime[local_after]=2023-01-01T14:00:00

Filter by booking cancelled date-time on or after this date-time (adjusted to building timezone)

cancelledDateTime[local_strictly_after]
string
Example: cancelledDateTime[local_strictly_after]=2023-01-01T14:00:00

Filter by booking cancelled date-time after this date-time (adjusted to building timezone)

cancelledDateTime[before]
string
Example: cancelledDateTime[before]=2023-01-01T14:00:00

Filter by booking cancelled date-time on or before this date-time

cancelledDateTime[strictly_before]
string
Example: cancelledDateTime[strictly_before]=2023-01-01T14:00:00

Filter by booking cancelled date-time before this date-time

cancelledDateTime[after]
string
Example: cancelledDateTime[after]=2023-01-01T14:00:00

Filter by booking cancelled date-time on or after this date-time

cancelledDateTime[strictly_after]
string
Example: cancelledDateTime[strictly_after]=2023-01-01T14:00:00

Filter by booking cancelled date-time after this date-time

endDateTime[local_strictly_before]
string
Example: endDateTime[local_strictly_before]=2023-01-01T14:00:00

Filter by booking end date-time before this date-time (adjusted to building timezone)

endDateTime[local_after]
string
Example: endDateTime[local_after]=2023-01-01T14:00:00

Filter by booking end date-time on or after this date-time (adjusted to building timezone)

endDateTime[local_strictly_after]
string
Example: endDateTime[local_strictly_after]=2023-01-01T14:00:00

Filter by booking end date-time after this date-time (adjusted to building timezone)

endDateTime[before]
string
Example: endDateTime[before]=2023-01-01T14:00:00

Filter by booking end date-time on or before this date-time

endDateTime[strictly_before]
string
Example: endDateTime[strictly_before]=2023-01-01T14:00:00

Filter by booking end date-time before this date-time

endDateTime[after]
string
Example: endDateTime[after]=2023-01-01T14:00:00

Filter by booking end date-time on or after this date-time

endDateTime[strictly_after]
string
Example: endDateTime[strictly_after]=2023-01-01T14:00:00

Filter by booking end date-time after this date-time

startDateTime[local_strictly_before]
string
Example: startDateTime[local_strictly_before]=2023-01-01T14:00:00

Filter by booking start date-time before this date-time (adjusted to building timezone)

startDateTime[local_after]
string
Example: startDateTime[local_after]=2023-01-01T14:00:00

Filter by booking start date-time on or after this date-time (adjusted to building timezone)

startDateTime[local_strictly_after]
string
Example: startDateTime[local_strictly_after]=2023-01-01T14:00:00

Filter by booking start date-time after this date-time (adjusted to building timezone)

startDateTime[before]
string
Example: startDateTime[before]=2023-01-01T14:00:00

Filter by booking start date-time on or before this date-time

startDateTime[strictly_before]
string
Example: startDateTime[strictly_before]=2023-01-01T14:00:00

Filter by booking start date-time before this date-time

startDateTime[after]
string
Example: startDateTime[after]=2023-01-01T14:00:00

Filter by booking start date-time on or after this date-time

startDateTime[strictly_after]
string
Example: startDateTime[strictly_after]=2023-01-01T14:00:00

Filter by booking start date-time after this date-time

startDate
string
Deprecated
Example: startDate=2023-01-02

Booking start date in format YYYY-MM-DD (deprecated for startDateTime)

endDate
string
Deprecated
Example: endDate=2023-01-02

Booking end date in format YYYY-MM-DD (deprecated for endDateTime)

page
integer >= 1
Example: page=1

The page of bookings to get

itemsPerPage
integer [ 1 .. 500 ]
Example: itemsPerPage=30

Number of bookings to get per page

id
string
Example: id=01GTBV1CT3BM8A42SEJ2J5F4EG

Booking identifier

floor.id
string
Example: floor.id=01GABC1CT3BM8A42SEJ2J5F4EG

Booking Floor identifier

neighborhood.id
string
Example: neighborhood.id=01GADV1CT3BM8A42SEJ2J5F4EG

Booking Neighborhood identifier

space.id
string
Example: space.id=01GADV1CT3BM8A42SEJ2J5F4EG

Booking Space identifier

building.id
string
Example: building.id=01GADV1CT3BM8A42SEJ2J5F4EG

Filter bookings by building ULID

header Parameters
Accept
required
string
Example: application/ld+json

The format you want the response in.

Responses

Response Schema: application/ld+json
required
Array of objects
Array
@id
string
@type
string
id
string

The ULID of the booking.

createdUserId
string or null

The IRI of the user who created the booking.

userId
string or null

The IRI of the user who the booking is for.

object or null

The space that was booked.

Any of
string or object
@id
string
@type
string
id
string

The ULID of the space.

name
string

The name of the space.

type
string

The type of space.

capacity
integer

How many people the space holds. A desk is 1. A room is its seating capacity.

object or null

The floor the space is on.

object or null

The neighborhood the space belongs to, if it is in one.

photo
string or null

The UUID of the photo of the space.

photoUrl
string or null

A link to the photo, ready to use. Null when there is no photo.

photoTemplateUrl
string or null

The same link with the size left as a placeholder, so you can ask for the dimensions you need. Null when there is no photo.

startDate
string <date-time>

The date and time of the beginning of the booking.

endDate
string <date-time>

The date and time of the end of the booking.

createdAt
string <date-time>

The date and time the booking was created at.

updatedAt
string <date-time>

The date and time the booking was last updated at.

checkedInUserId
string or null

The IRI of the user who checked into the booking.

checkedInDate
string <date-time>

The date and time the booking was checked in at.

checkedInSource
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was checked in from.

checkInMethod
string or null
Enum: "doorAccess" "wifi" "geofence" "sensor"

If checked in from the public API, the method used during check in.

checkOutMethod
string or null
Enum: "doorAccess" "wifi" "geofence" "sensor"

If checked out from the public API, the method used during check out.

checkedOutUser
string or null

The IRI of the user who checked out of the booking.

checkedOutDate
string <date-time>

The date and time the booking was checked out at.

checkOutSource
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was checked out from.

permanent
boolean

Whether this booking came from an assigned space.

hasGuests
boolean

Whether this booking has guests.

guestBooking
boolean

Whether this booking is for a guest.

recurringBooking
boolean

Whether this booking is part of a recurring series.

selfCertifiedDate
string <date-time>

The date and time the booking was self-certified at.

selfCertifySource
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was self-certified from.

source
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was created from.

autoReleasedDate
string or null <date-time>

The date and time the booking was auto released.

cancelledUserId
string or null

The IRI of the user who cancelled the booking.

bookingUserEmail
string or null

The email of the user who the booking is for.

bookingCreatedByUserEmail
string or null

The email of the user who created the booking.

cancelledDate
string or null <date-time>

If cancelled, the date and time the booking was cancelled.

cancellationReason
string or null
Enum: "byUser" "byUserInBulk" "autoSpaceRelease" "permanentDesk" "changeInBuildingPolicy" "changeInCompanyPolicy" "removedFromCalendarByProvider" "removedFromCalendarByKadence" "calendarSyncError" "spaceNoLongerAvailable" "spaceRestricted" "spaceNotRestrictedAnymore" "userDeleted" "buildingClosure"

If cancelled, the reason for the cancellation.

title
string or null

If a room booking, the title of the associated calendar event.

status
string
Enum: "booked" "checkedIn" "checkedOut" "cancelled" "completed" "noCheckIn" "unknown"

The current booking status.

type
string
Enum: "desk" "private_office" "room" "onsite" "locker" "pod" "parking"

The type of booking.

onlineMeeting
boolean or null

For a room booking, whether the linked calendar event is an online meeting.

onlineMeetingUrl
boolean or null

For a room booking, the online meeting joining URL, if available.

icalUid
boolean or null

If a room booking, the associated iCal UID of the calendar event.

building
string

The IRI of the building.

hydra:totalItems
integer >= 0

Response samples

Content type
application/ld+json
{
  • "hydra:member": [
    • {
      • "@id": "/v1/public/bookings/01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "@type": "Booking",
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "createdUserId": "/v1/public/users/01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "userId": "/v1/public/users/01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "space": {
        • "@context": "string",
        • "@id": "string",
        • "@type": "string",
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Desk 01",
        • "type": "desk",
        • "capacity": 8,
        • "floor": {
          },
        • "neighborhood": {
          },
        • "photo": "b74b830a-cf26-47bd-9dbc-237571c79fc3",
        • "photoTemplateUrl": "string"
        },
      • "startDate": "2017-07-21T17:32:28+00:00",
      • "endDate": "2017-07-21T17:32:28+00:00",
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "updatedAt": "2017-07-21T17:32:28+00:00",
      • "checkedInUserId": "/v1/public/users/01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "checkedInDate": "2017-07-21T17:32:28+00:00",
      • "checkedInSource": "web",
      • "checkInMethod": "doorAccess",
      • "checkOutMethod": "doorAccess",
      • "checkedOutUser": "/v1/public/users/01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "checkedOutDate": "2017-07-21T17:32:28+00:00",
      • "checkOutSource": "web",
      • "permanent": false,
      • "hasGuests": false,
      • "guestBooking": false,
      • "recurringBooking": false,
      • "selfCertifiedDate": "2017-07-21T17:32:28+00:00",
      • "selfCertifySource": "web",
      • "source": "web",
      • "autoReleasedDate": "2017-07-21T17:32:28+00:00",
      • "cancelledUserId": "/v1/public/users/01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "bookingUserEmail": "john@example.com",
      • "bookingCreatedByUserEmail": "john@example.com",
      • "cancelledDate": "2017-07-21T17:32:28+00:00",
      • "cancellationReason": "byUser",
      • "title": null,
      • "status": "booked",
      • "type": "desk",
      • "onlineMeeting": null,
      • "onlineMeetingUrl": null,
      • "icalUid": null,
      • "building": "/v1/public/buildings/01GTBV1CT3BM8A42SEJ2J5F4EG"
      }
    ],
  • "hydra:totalItems": 0
}

Building

Your buildings, including their address and time zone. A building time zone is what turns a booking time into a local one.

Get buildings

Get a list of all the buildings within your company.

Authorizations:
oauth
query Parameters
countryCode
string
Example: countryCode=GB

Filter buildings by the ISO 3166-1 alpha-2 code of the country where the building is located

city
string
Example: city=London

Filter buildings by the city where the building is located

name
string
Example: name=Bell Yard

Filter buildings by name

page
integer >= 1
Example: page=1

The page of buildings to get

itemsPerPage
integer [ 1 .. 500 ]
Example: itemsPerPage=30

Number of buildings to get per page

id
string
Example: id=01GTBV1CT3BM8A42SEJ2J5F4EG

Building identifier

header Parameters
Accept
required
string
Example: application/ld+json

The format you want the response in.

Responses

Response Schema: application/ld+json
required
Array of objects
Array
@id
string
@type
string
id
string

The ULID of the building.

name
string

The name of the building.

timeZone
string

The IANA time zone that the building is in.

latitude
number <float>

The latitude of the building's location.

longitude
number <float>

The longitude of the building's location.

addressLine1
string

The first line of the building address.

addressLine2
string or null

The second line of the building address.

city
string

The name of the city that the building is in.

county
string or null

The name of the county that the building is in.

countryCode
string

The ISO 3166-1 alpha-2 country code that the building is in.

postalCode
string or null

The postal or ZIP code that the building is in.

photo
string or null

The UUID of the photo of the building.

createdAt
string <date-time>

The date and time that the building was created at.

modifiedAt
string <date-time>

The date and time that the building was last modified at.

photoUrl
string or null

A link to the photo, ready to use. Null when there is no photo.

photoTemplateUrl
string or null

The same link with the size left as a placeholder, so you can ask for the dimensions you need. Null when there is no photo.

hydra:totalItems
integer >= 0

Response samples

Content type
application/ld+json
{
  • "hydra:member": [
    • {
      • "@id": "/v1/public/buildings/01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "@type": "Building",
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "name": "London Office",
      • "timeZone": "Europe/London",
      • "latitude": 51.509865,
      • "longitude": -0.118092,
      • "addressLine1": "20 Fenchurch Street",
      • "addressLine2": null,
      • "city": "London",
      • "county": null,
      • "countryCode": "GB",
      • "postalCode": "SE1 8PB",
      • "photo": "b74b830a-cf26-47bd-9dbc-237571c79fc3",
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "photoTemplateUrl": "string"
      }
    ],
  • "hydra:totalItems": 0
}

Get a single building by identifier

Get a single building if you know its identifier.

Authorizations:
oauth
path Parameters
id
required
string
Example: 01GTBV1CT3BM8A42SEJ2J5F4EG

Building identifier

header Parameters
Accept
required
string
Example: application/ld+json

The format you want the response in.

Responses

Response Schema: application/ld+json
@id
string
@type
string
id
string

The ULID of the building.

name
string

The name of the building.

timeZone
string

The IANA time zone that the building is in.

latitude
number <float>

The latitude of the building's location.

longitude
number <float>

The longitude of the building's location.

addressLine1
string

The first line of the building address.

addressLine2
string or null

The second line of the building address.

city
string

The name of the city that the building is in.

county
string or null

The name of the county that the building is in.

countryCode
string

The ISO 3166-1 alpha-2 country code that the building is in.

postalCode
string or null

The postal or ZIP code that the building is in.

photo
string or null

The UUID of the photo of the building.

createdAt
string <date-time>

The date and time that the building was created at.

modifiedAt
string <date-time>

The date and time that the building was last modified at.

photoUrl
string or null

A link to the photo, ready to use. Null when there is no photo.

photoTemplateUrl
string or null

The same link with the size left as a placeholder, so you can ask for the dimensions you need. Null when there is no photo.

Response samples

Content type
application/ld+json
{
  • "@id": "/v1/public/buildings/01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "@type": "Building",
  • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "name": "London Office",
  • "timeZone": "Europe/London",
  • "latitude": 51.509865,
  • "longitude": -0.118092,
  • "addressLine1": "20 Fenchurch Street",
  • "addressLine2": null,
  • "city": "London",
  • "county": null,
  • "countryCode": "GB",
  • "postalCode": "SE1 8PB",
  • "photo": "b74b830a-cf26-47bd-9dbc-237571c79fc3",
  • "createdAt": "2017-07-21T17:32:28+00:00",
  • "modifiedAt": "2017-07-21T17:32:28+00:00",
  • "photoTemplateUrl": "string"
}

Floor

The floors in a building, and the plan image for each one.

Get a collection of floors

Get a list of all the floors within your company from all the buildings.

Authorizations:
oauth
query Parameters
buildingId
string
Example: buildingId=01CBCV1CT3BM8A52SEJ2J5F4EB

Filter by building identifier

page
integer >= 1
Example: page=1

The page of floors to get

itemsPerPage
integer [ 1 .. 500 ]
Example: itemsPerPage=30

Number of floors to get per page

header Parameters
Accept
required
string
Example: application/ld+json

The format you want the response in.

Responses

Response Schema: application/ld+json
required
Array of objects
Array
@id
string
@type
string
id
string

The ULID of the floor.

name
string

The name of the floor.

floorPlanUrl
string

The URL of the floor plan SVG.

hydra:totalItems
integer >= 0

Response samples

Content type
application/ld+json
{}

Get a single floor by identifier

Get a floor if you know its identifier.

Authorizations:
oauth
path Parameters
id
required
string
Example: 01GTBV1CT3BM8A42SEJ2J5F4EG

Floor identifier

header Parameters
Accept
required
string
Example: application/ld+json

The format you want the response in.

Responses

Response Schema: application/ld+json
@id
string
@type
string
id
string

The ULID of the floor.

name
string

The name of the floor.

floorPlanUrl
string

The URL of the floor plan SVG.

Response samples

Content type
application/ld+json
{}

Neighborhood

Named groups of spaces within a floor, usually owned by a team.

Get neighborhoods

Get a list of all the neighborhoods within your company from all the floors.

Authorizations:
oauth
query Parameters
buildingId
string
Example: buildingId=01CBCV1CT3BM8A52SEJ2J5F4EB

Filter by building identifier

floorId
string
Example: floorId=01H57KGTPZ50STX5N62Q991JNM

Filter by floor identifier

page
integer >= 1
Example: page=1

The page of neighborhoods to get

itemsPerPage
integer [ 1 .. 500 ]
Example: itemsPerPage=30

Number of neighborhoods to get per page

header Parameters
Accept
required
string
Example: application/ld+json

The format you want the response in.

Responses

Response Schema: application/ld+json
required
Array of objects
Array
@id
string
@type
string
id
string

The ULID of the neighborhood.

name
string

The name of the neighborhood.

hydra:totalItems
integer >= 0

Response samples

Content type
application/ld+json
{
  • "hydra:member": [
    • {
      • "@id": "/v1/public/neighborhoods/01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "@type": "Neighborhood",
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "name": "Sales"
      }
    ],
  • "hydra:totalItems": 0
}

Get a single neighborhood by identifier

Get a neighborhood if you know its identifier.

Authorizations:
oauth
path Parameters
id
required
string
Example: 01GTBV1CT3BM8A42SEJ2J5F4EG

Neighborhood identifier

header Parameters
Accept
required
string
Example: application/ld+json

The format you want the response in.

Responses

Response Schema: application/ld+json
@id
string
@type
string
id
string

The ULID of the neighborhood.

name
string

The name of the neighborhood.

Response samples

Content type
application/ld+json
{
  • "@id": "/v1/public/neighborhoods/01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "@type": "Neighborhood",
  • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "name": "Sales"
}

Space

Individual desks, rooms and other bookable spaces, with their capacity and where they sit in the building.

Get spaces

Get a list of all the spaces within your company from all the floors.

Authorizations:
oauth
query Parameters
page
integer >= 1
Example: page=1

The page of spaces to get

itemsPerPage
integer [ 1 .. 500 ]
Example: itemsPerPage=30

Number of spaces to get per page

neighborhoodId
string
Example: neighborhoodId=01AZMC4F598J6RRG449TRTRK20

Filter by neighborhood identifier

floorId
string
Example: floorId=01CBCV1CT3BM8A52SEJ2J5F4EB

Filter by floor identifier

buildingId
string
Example: buildingId=01H4E18A4C7K1GD4BEM9NCNJAW

Filter by building identifier

header Parameters
Accept
required
string
Example: application/ld+json

The format you want the response in.

Responses

Response Schema: application/ld+json
required
Array of objects
Array
@id
string
@type
string
id
string

The ULID of the space.

name
string

The name of the space.

type
string

The type of space.

capacity
integer

How many people the space holds. A desk is 1. A room is its seating capacity.

object or null

The floor the space is on.

Any of
string or object
@id
string
@type
string
id
string

The ULID of the floor.

name
string

The name of the floor.

object or null

The neighborhood the space belongs to, if it is in one.

Any of
string or object
@id
string
@type
string
id
string

The ULID of the neighborhood.

name
string

The name of the neighborhood.

photo
string or null

The UUID of the photo of the space.

photoUrl
string or null

A link to the photo, ready to use. Null when there is no photo.

photoTemplateUrl
string or null

The same link with the size left as a placeholder, so you can ask for the dimensions you need. Null when there is no photo.

hydra:totalItems
integer >= 0

Response samples

Content type
application/ld+json
{
  • "hydra:member": [
    • {
      • "@id": "/v1/public/spaces/01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "@type": "Space",
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "name": "Desk 01",
      • "type": "desk",
      • "capacity": 8,
      • "floor": {
        • "@context": "string",
        • "@id": "string",
        • "@type": "string",
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 01"
        },
      • "neighborhood": {
        • "@context": "string",
        • "@id": "string",
        • "@type": "string",
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Sales"
        },
      • "photo": "b74b830a-cf26-47bd-9dbc-237571c79fc3",
      • "photoTemplateUrl": "string"
      }
    ],
  • "hydra:totalItems": 0
}

Get a single space by identifier

Get a space if you know its identifier.

Authorizations:
oauth
path Parameters
id
required
string
Example: 01GTBV1CT3BM8A42SEJ2J5F4EG

Space identifier

header Parameters
Accept
required
string
Example: application/ld+json

The format you want the response in.

Responses

Response Schema: application/ld+json
@id
string
@type
string
id
string

The ULID of the space.

name
string

The name of the space.

type
string

The type of space.

capacity
integer

How many people the space holds. A desk is 1. A room is its seating capacity.

object or null

The floor the space is on.

Any of
string or object
One of
string
@id
string
@type
string
id
string

The ULID of the floor.

name
string

The name of the floor.

object or null

The neighborhood the space belongs to, if it is in one.

Any of
string or object
One of
string
@id
string
@type
string
id
string

The ULID of the neighborhood.

name
string

The name of the neighborhood.

photo
string or null

The UUID of the photo of the space.

photoUrl
string or null

A link to the photo, ready to use. Null when there is no photo.

photoTemplateUrl
string or null

The same link with the size left as a placeholder, so you can ask for the dimensions you need. Null when there is no photo.

Response samples

Content type
application/ld+json
{
  • "@id": "/v1/public/spaces/01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "@type": "Space",
  • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "name": "Desk 01",
  • "type": "desk",
  • "capacity": 8,
  • "floor": {
    • "@context": "string",
    • "@id": "string",
    • "@type": "string",
    • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
    • "name": "Floor 01"
    },
  • "neighborhood": {
    • "@context": "string",
    • "@id": "string",
    • "@type": "string",
    • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
    • "name": "Sales"
    },
  • "photo": "b74b830a-cf26-47bd-9dbc-237571c79fc3",
  • "photoTemplateUrl": "string"
}

User

The people in your organisation. You can read them, update their details and replace a profile picture.

Get users

Get a list of all the users within your company.

Authorizations:
oauth
query Parameters
email
string
Example: email=john.smith@example.com

Partial match of users by email address

emailExact
string
Example: emailExact=john.smith@example.com

Exact match of users by email address

firstName
string
Example: firstName=John

Filter users by first name

lastName
string
Example: lastName=Smith

Filter users by last name

page
integer >= 1
Example: page=1

The page of users to get

itemsPerPage
integer [ 1 .. 500 ]
Example: itemsPerPage=30

Number of users to get per page

id
string
Example: id=01GTBV1CT3BM8A42SEJ2J5F4EG

User identifier

Responses

Response Schema: application/ld+json
required
Array of objects
Array
@id
string
@type
string
id
string

The user's ULID within the Kadence platform.

email
string <email>

The user's email address.

firstName
string

The user's given name.

lastName
string

The user's family name.

jobTitle
string or null

The user's job title.

invitationPending
boolean

Whether the user's invitation to join Kadence is still pending. false once they have signed up.

preferredFloor
object

The user's preferred floor for booking when going into the office.

createdAt
string <date-time>

The date and time of when the user was created.

modifiedAt
string <date-time>

The date and time of when the user was last modified.

locale
string

An IETF language tag of the user's preferred locale.

timePreference
string
Enum: "default" "24H" "12H"

The user's preferred time format. default will follow the user's locale.

locationCityName
string or null

The city name of the user's usual location.

locationCountryCode
string or null

The ISO 3166-1 alpha-2 country code of the user's usual location.

locationLatitude
number or null <float>

The latitude of the user's usual location, based on their city.

locationLongitude
number or null <float>

The longitude of the user's usual location, based on their city.

locationTimezone
string or null

The usual IANA time zone of the user, based on their city.

biography
string or null

A short biography.

monogram
string

A two-letter identifier made from the user's full name or email address.

hydra:totalItems
integer >= 0

Response samples

Content type
application/ld+json
{
  • "hydra:member": [
    • {
      • "@id": "/v1/public/users/01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "@type": "User",
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "email": "john.smith@example.com",
      • "firstName": "John",
      • "lastName": "Smith",
      • "jobTitle": "Head of Marketing",
      • "invitationPending": true,
      • "preferredFloor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 1"
        },
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "locale": "en-GB",
      • "timePreference": "default",
      • "locationCityName": "London",
      • "locationCountryCode": "GB",
      • "locationLatitude": 51.509865,
      • "locationLongitude": -0.118092,
      • "locationTimezone": "Europe/London",
      • "biography": "Head of Marketing, based in London.",
      • "monogram": "JS"
      }
    ],
  • "hydra:totalItems": 0
}

Get a single user by identifier

Get a single user if you know their identifier.

Authorizations:
oauth
path Parameters
id
required
string
Example: 01GTBV1CT3BM8A42SEJ2J5F4EG

User identifier

header Parameters
Accept
required
string
Example: application/ld+json

The format you want the response in.

Responses

Response Schema: application/ld+json
@id
string
@type
string
id
string

The user's ULID within the Kadence platform.

email
string <email>

The user's email address.

firstName
string

The user's given name.

lastName
string

The user's family name.

jobTitle
string or null

The user's job title.

invitationPending
boolean

Whether the user's invitation to join Kadence is still pending. false once they have signed up.

preferredFloor
object

The user's preferred floor for booking when going into the office.

createdAt
string <date-time>

The date and time of when the user was created.

modifiedAt
string <date-time>

The date and time of when the user was last modified.

locale
string

An IETF language tag of the user's preferred locale.

timePreference
string
Enum: "default" "24H" "12H"

The user's preferred time format. default will follow the user's locale.

locationCityName
string or null

The city name of the user's usual location.

locationCountryCode
string or null

The ISO 3166-1 alpha-2 country code of the user's usual location.

locationLatitude
number or null <float>

The latitude of the user's usual location, based on their city.

locationLongitude
number or null <float>

The longitude of the user's usual location, based on their city.

locationTimezone
string or null

The usual IANA time zone of the user, based on their city.

biography
string or null

A short biography.

monogram
string

A two-letter identifier made from the user's full name or email address.

Response samples

Content type
application/ld+json
{
  • "@id": "/v1/public/users/01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "@type": "User",
  • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "email": "john.smith@example.com",
  • "firstName": "John",
  • "lastName": "Smith",
  • "jobTitle": "Head of Marketing",
  • "invitationPending": true,
  • "preferredFloor": {
    • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
    • "name": "Floor 1"
    },
  • "createdAt": "2017-07-21T17:32:28+00:00",
  • "modifiedAt": "2017-07-21T17:32:28+00:00",
  • "locale": "en-GB",
  • "timePreference": "default",
  • "locationCityName": "London",
  • "locationCountryCode": "GB",
  • "locationLatitude": 51.509865,
  • "locationLongitude": -0.118092,
  • "locationTimezone": "Europe/London",
  • "biography": "Head of Marketing, based in London.",
  • "monogram": "JS"
}

Update a user

Update user information.

Authorizations:
oauth
path Parameters
id
required
string
Example: 01GTBV1CT3BM8A42SEJ2J5F4EG

User identifier

header Parameters
Accept
required
string
Example: application/ld+json

The format you want the response in.

Content-Type
required
string
Example: application/merge-patch+json

The format of the body you are sending.

Request Body schema: application/merge-patch+json
optional

User fields to update

firstName
string
lastName
string
jobTitle
string or null
biography
string or null
locationTimezone
string or null
locationCountryCode
string or null
locationCityName
string or null
locationLatitude
number or null
locationLongitude
number or null

Responses

Response Schema: application/ld+json
@id
string
@type
string
id
string

The user's ULID within the Kadence platform.

email
string <email>

The user's email address.

firstName
string

The user's given name.

lastName
string

The user's family name.

jobTitle
string or null

The user's job title.

invitationPending
boolean

Whether the user's invitation to join Kadence is still pending. false once they have signed up.

preferredFloor
object

The user's preferred floor for booking when going into the office.

createdAt
string <date-time>

The date and time of when the user was created.

modifiedAt
string <date-time>

The date and time of when the user was last modified.

locale
string

An IETF language tag of the user's preferred locale.

timePreference
string
Enum: "default" "24H" "12H"

The user's preferred time format. default will follow the user's locale.

locationCityName
string or null

The city name of the user's usual location.

locationCountryCode
string or null

The ISO 3166-1 alpha-2 country code of the user's usual location.

locationLatitude
number or null <float>

The latitude of the user's usual location, based on their city.

locationLongitude
number or null <float>

The longitude of the user's usual location, based on their city.

locationTimezone
string or null

The usual IANA time zone of the user, based on their city.

biography
string or null

A short biography.

monogram
string

A two-letter identifier made from the user's full name or email address.

Request samples

Content type
application/merge-patch+json
{
  • "firstName": "string",
  • "lastName": "string",
  • "jobTitle": "string",
  • "biography": "string",
  • "locationTimezone": "string",
  • "locationCountryCode": "string",
  • "locationCityName": "string",
  • "locationLatitude": 0,
  • "locationLongitude": 0
}

Response samples

Content type
application/ld+json
{
  • "@id": "/v1/public/users/01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "@type": "User",
  • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "email": "john.smith@example.com",
  • "firstName": "John",
  • "lastName": "Smith",
  • "jobTitle": "Head of Marketing",
  • "invitationPending": true,
  • "preferredFloor": {
    • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
    • "name": "Floor 1"
    },
  • "createdAt": "2017-07-21T17:32:28+00:00",
  • "modifiedAt": "2017-07-21T17:32:28+00:00",
  • "locale": "en-GB",
  • "timePreference": "default",
  • "locationCityName": "London",
  • "locationCountryCode": "GB",
  • "locationLatitude": 51.509865,
  • "locationLongitude": -0.118092,
  • "locationTimezone": "Europe/London",
  • "biography": "Head of Marketing, based in London.",
  • "monogram": "JS"
}

Update a user profile picture

Update user profile picture.

Authorizations:
oauth
path Parameters
id
required
string
Example: 01GTBV1CT3BM8A42SEJ2J5F4EG

User identifier

header Parameters
Accept
required
string
Example: application/ld+json

The format you want the response in.

Content-Type
required
string
Example: multipart/form-data

The format of the body you are sending.

Request Body schema: multipart/form-data
required

The image to use as the profile picture.

file
required
string <binary>

The image file to upload.

Responses

Response Schema: application/ld+json
@id
string
@type
string
id
string

The user's ULID within the Kadence platform.

email
string <email>

The user's email address.

firstName
string

The user's given name.

lastName
string

The user's family name.

jobTitle
string or null

The user's job title.

invitationPending
boolean

Whether the user's invitation to join Kadence is still pending. false once they have signed up.

preferredFloor
object

The user's preferred floor for booking when going into the office.

createdAt
string <date-time>

The date and time of when the user was created.

modifiedAt
string <date-time>

The date and time of when the user was last modified.

locale
string

An IETF language tag of the user's preferred locale.

timePreference
string
Enum: "default" "24H" "12H"

The user's preferred time format. default will follow the user's locale.

locationCityName
string or null

The city name of the user's usual location.

locationCountryCode
string or null

The ISO 3166-1 alpha-2 country code of the user's usual location.

locationLatitude
number or null <float>

The latitude of the user's usual location, based on their city.

locationLongitude
number or null <float>

The longitude of the user's usual location, based on their city.

locationTimezone
string or null

The usual IANA time zone of the user, based on their city.

biography
string or null

A short biography.

monogram
string

A two-letter identifier made from the user's full name or email address.

Response samples

Content type
application/ld+json
{
  • "@id": "/v1/public/users/01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "@type": "User",
  • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "email": "john.smith@example.com",
  • "firstName": "John",
  • "lastName": "Smith",
  • "jobTitle": "Head of Marketing",
  • "invitationPending": true,
  • "preferredFloor": {
    • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
    • "name": "Floor 1"
    },
  • "createdAt": "2017-07-21T17:32:28+00:00",
  • "modifiedAt": "2017-07-21T17:32:28+00:00",
  • "locale": "en-GB",
  • "timePreference": "default",
  • "locationCityName": "London",
  • "locationCountryCode": "GB",
  • "locationLatitude": 51.509865,
  • "locationLongitude": -0.118092,
  • "locationTimezone": "Europe/London",
  • "biography": "Head of Marketing, based in London.",
  • "monogram": "JS"
}

Visit

Guest visits. A visit is a booking seen from the guest side, so the same activity also appears under Booking.

Get visits

Get a collection of visits (guest bookings) for your company.

Authorizations:
oauth
query Parameters
buildingId
string
Example: buildingId=01GTBV1CT3BM8A42SEJ2J5F4EG

Filter visits by building identifier

status
string
Enum: "booked" "checkedIn" "checkedOut" "completed" "cancelled" "noCheckIn"
Example: status=booked

Filter visits by booking status

startDateTime[local_before]
string
Example: startDateTime[local_before]=2024-01-01T09:00:00

Filter by Visit start date-time on or before this date-time (adjusted to building timezone)

endDateTime[local_before]
string
Example: endDateTime[local_before]=2024-01-01T17:00:00

Filter by Visit end date-time on or before this date-time (adjusted to building timezone)

endDateTime[local_strictly_before]
string
Example: endDateTime[local_strictly_before]=2024-01-01T17:00:00

Filter by Visit end date-time before this date-time (adjusted to building timezone)

endDateTime[local_after]
string
Example: endDateTime[local_after]=2024-01-01T17:00:00

Filter by Visit end date-time on or after this date-time (adjusted to building timezone)

endDateTime[local_strictly_after]
string
Example: endDateTime[local_strictly_after]=2024-01-01T17:00:00

Filter by Visit end date-time after this date-time (adjusted to building timezone)

endDateTime[before]
string
Example: endDateTime[before]=2024-01-01T17:00:00

Filter by Visit end date-time on or before this date-time

endDateTime[strictly_before]
string
Example: endDateTime[strictly_before]=2024-01-01T17:00:00

Filter by Visit end date-time before this date-time

endDateTime[after]
string
Example: endDateTime[after]=2024-01-01T17:00:00

Filter by Visit end date-time on or after this date-time

endDateTime[strictly_after]
string
Example: endDateTime[strictly_after]=2024-01-01T17:00:00

Filter by Visit end date-time after this date-time

startDateTime[local_strictly_before]
string
Example: startDateTime[local_strictly_before]=2024-01-01T09:00:00

Filter by Visit start date-time before this date-time (adjusted to building timezone)

startDateTime[local_after]
string
Example: startDateTime[local_after]=2024-01-01T09:00:00

Filter by Visit start date-time on or after this date-time (adjusted to building timezone)

startDateTime[local_strictly_after]
string
Example: startDateTime[local_strictly_after]=2024-01-01T09:00:00

Filter by Visit start date-time after this date-time (adjusted to building timezone)

startDateTime[before]
string
Example: startDateTime[before]=2024-01-01T09:00:00

Filter by Visit start date-time on or before this date-time

startDateTime[strictly_before]
string
Example: startDateTime[strictly_before]=2024-01-01T09:00:00

Filter by Visit start date-time before this date-time

startDateTime[after]
string
Example: startDateTime[after]=2024-01-01T09:00:00

Filter by Visit start date-time on or after this date-time

startDateTime[strictly_after]
string
Example: startDateTime[strictly_after]=2024-01-01T09:00:00

Filter by Visit start date-time after this date-time

page
integer >= 1
Example: page=1

The page of visits to get

itemsPerPage
integer [ 1 .. 500 ]
Example: itemsPerPage=30

Number of visits to get per page

Responses

Response Schema: application/ld+json
required
Array of objects
Array
string or object
One of
string
@id
string
@type
string
id
string

The ULID of the visit.

host
string or null

The IRI of the host who the visit is for.

building
object or null

The building the visit takes place in.

startDate
string <date-time>

The date and time of the beginning of the visit.

endDate
string <date-time>

The date and time of the end of the visit.

status
string
Enum: "booked" "checkedIn" "checkedOut" "completed" "cancelled" "noCheckIn"

The current status of the visit.

visitors
Array of arrays

Every attendee of the visit, including the host/organizer, as visitors.

hydra:totalItems
integer >= 0

Response samples

Content type
application/ld+json
{
  • "hydra:member": [
    • {
      • "@context": "string",
      • "@id": "string",
      • "@type": "string",
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "host": "/v1/public/users/01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "building": { },
      • "startDate": "2017-07-21T17:32:28+00:00",
      • "endDate": "2017-07-21T17:32:28+00:00",
      • "status": "booked",
      • "visitors": [ ]
      }
    ],
  • "hydra:totalItems": 0
}

Get a single visit by identifier

Get a single visit (guest booking) if you know its identifier.

Authorizations:
oauth
path Parameters
id
required
string
Example: 01GTBV1CT3BM8A42SEJ2J5F4EG

Visit identifier

header Parameters
Accept
required
string
Example: application/ld+json

The format you want the response in.

Responses

Response Schema: application/ld+json
string or object
One of
string
@id
string
@type
string
id
string

The ULID of the visit.

host
string or null

The IRI of the host who the visit is for.

building
object or null

The building the visit takes place in.

startDate
string <date-time>

The date and time of the beginning of the visit.

endDate
string <date-time>

The date and time of the end of the visit.

status
string
Enum: "booked" "checkedIn" "checkedOut" "completed" "cancelled" "noCheckIn"

The current status of the visit.

visitors
Array of arrays

Every attendee of the visit, including the host/organizer, as visitors.

Response samples

Content type
application/ld+json
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "host": "/v1/public/users/01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "building": { },
  • "startDate": "2017-07-21T17:32:28+00:00",
  • "endDate": "2017-07-21T17:32:28+00:00",
  • "status": "booked",
  • "visitors": [ ]
}

Visitor

The individual guests attending a visit, including whether they have arrived.

Get visitors

Get a deduplicated directory of everyone who has visited your company as a guest.

Authorizations:
oauth
query Parameters
email
string
Example: email=john.smith@example.com

Partial match of visitors by email address

emailExact
string
Example: emailExact=john.smith@example.com

Exact match of visitors by email address

firstName
string
Example: firstName=John

Filter visitors by first name. Matches the visitor's display name (the serialized firstName may differ, as it prefers a linked User's name for internal users).

lastName
string
Example: lastName=Smith

Filter visitors by last name. Matches the visitor's display name (the serialized lastName may differ, as it prefers a linked User's name for internal users).

buildingId
string
Example: buildingId=01GTBV1CT3BM8A42SEJ2J5F4EG

Filter visitors by the building of any of their visits

status
string
Enum: "none" "accepted" "declined" "tentatively_accepted" "not_responded" "organizer"
Example: status=accepted

Filter by the visitor's RSVP/attendance status (accepted, declined, tentatively_accepted, not_responded, organizer, none) on any of their visits. This is the attendee response status, distinct from the visit's booking lifecycle status. To filter by the visit's booking status instead, use visitStatus. (Note: unlike /visits, where status IS the booking status, on /visitors status is the RSVP status.)

visitStatus
string
Enum: "booked" "checkedIn" "checkedOut" "completed" "cancelled" "noCheckIn"
Example: visitStatus=checkedIn

Filter by the visit's booking status (booked, checkedIn, checkedOut, completed, cancelled, noCheckIn) on any of their visits. This is the booking lifecycle status, distinct from the visitor's RSVP status filter (status). This is the equivalent of the status filter on /visits.

startDateTime[local_before]
string
Example: startDateTime[local_before]=2024-01-01T09:00:00

Filter by Visitor visit start date-time on or before this date-time (adjusted to building timezone)

endDateTime[local_before]
string
Example: endDateTime[local_before]=2024-01-01T17:00:00

Filter by Visitor visit end date-time on or before this date-time (adjusted to building timezone)

endDateTime[local_strictly_before]
string
Example: endDateTime[local_strictly_before]=2024-01-01T17:00:00

Filter by Visitor visit end date-time before this date-time (adjusted to building timezone)

endDateTime[local_after]
string
Example: endDateTime[local_after]=2024-01-01T17:00:00

Filter by Visitor visit end date-time on or after this date-time (adjusted to building timezone)

endDateTime[local_strictly_after]
string
Example: endDateTime[local_strictly_after]=2024-01-01T17:00:00

Filter by Visitor visit end date-time after this date-time (adjusted to building timezone)

endDateTime[before]
string
Example: endDateTime[before]=2024-01-01T17:00:00

Filter by Visitor visit end date-time on or before this date-time

endDateTime[strictly_before]
string
Example: endDateTime[strictly_before]=2024-01-01T17:00:00

Filter by Visitor visit end date-time before this date-time

endDateTime[after]
string
Example: endDateTime[after]=2024-01-01T17:00:00

Filter by Visitor visit end date-time on or after this date-time

endDateTime[strictly_after]
string
Example: endDateTime[strictly_after]=2024-01-01T17:00:00

Filter by Visitor visit end date-time after this date-time

startDateTime[local_strictly_before]
string
Example: startDateTime[local_strictly_before]=2024-01-01T09:00:00

Filter by Visitor visit start date-time before this date-time (adjusted to building timezone)

startDateTime[local_after]
string
Example: startDateTime[local_after]=2024-01-01T09:00:00

Filter by Visitor visit start date-time on or after this date-time (adjusted to building timezone)

startDateTime[local_strictly_after]
string
Example: startDateTime[local_strictly_after]=2024-01-01T09:00:00

Filter by Visitor visit start date-time after this date-time (adjusted to building timezone)

startDateTime[before]
string
Example: startDateTime[before]=2024-01-01T09:00:00

Filter by Visitor visit start date-time on or before this date-time

startDateTime[strictly_before]
string
Example: startDateTime[strictly_before]=2024-01-01T09:00:00

Filter by Visitor visit start date-time before this date-time

startDateTime[after]
string
Example: startDateTime[after]=2024-01-01T09:00:00

Filter by Visitor visit start date-time on or after this date-time

startDateTime[strictly_after]
string
Example: startDateTime[strictly_after]=2024-01-01T09:00:00

Filter by Visitor visit start date-time after this date-time

page
integer >= 1
Example: page=1

The page of visitors to get

itemsPerPage
integer [ 1 .. 500 ]
Example: itemsPerPage=30

Number of visitors to get per page

Responses

Response Schema: application/ld+json
required
Array of objects
Array
string or object
One of
string
@id
string
@type
string
visitCount
integer or null

The total number of visits this visitor has made. Null when embedded inside a visit.

id
string

The ULID of the visitor.

displayName
string or null

The display name of the visitor.

firstName
string or null

The visitor's given name.

lastName
string or null

The visitor's family name.

email
string <email>

The visitor's email address.

type
string
Enum: "external" "user"

Whether the visitor is an external guest or an internal Kadence user.

userId
string or null

The internal Kadence user this visitor maps to, when the visitor is a user rather than an external guest.

status
string
Enum: "none" "organizer" "tentatively_accepted" "accepted" "declined" "not_responded"

The attendance status of the visitor.

checkedInDate
string or null <date-time>

The date and time the visitor checked in.

checkedOutDate
string or null <date-time>

The date and time the visitor checked out.

visitId
string or null

The ULID of the visitor's latest visit.

host
string or null

The host of the visitor's latest visit.

building
object or null

The building of the visitor's latest visit.

startDate
string or null <date-time>

The start date and time of the visitor's latest visit.

endDate
string or null <date-time>

The end date and time of the visitor's latest visit.

visitStatus
string or null
Enum: "booked" "checkedIn" "checkedOut" "completed" "cancelled" "noCheckIn"

The status of the visitor's latest visit.

hydra:totalItems
integer >= 0

Response samples

Content type
application/ld+json
{
  • "hydra:member": [
    • {
      • "@context": "string",
      • "@id": "string",
      • "@type": "string",
      • "visitCount": 3,
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "displayName": "John Smith",
      • "firstName": "John",
      • "lastName": "Smith",
      • "email": "john.smith@example.com",
      • "type": "external",
      • "userId": "/v1/public/users/01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "status": "accepted",
      • "checkedInDate": "2017-07-21T17:32:28+00:00",
      • "checkedOutDate": "2017-07-21T17:32:28+00:00",
      • "visitId": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "host": "/v1/public/users/01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "building": { },
      • "startDate": "2017-07-21T17:32:28+00:00",
      • "endDate": "2017-07-21T17:32:28+00:00",
      • "visitStatus": "booked"
      }
    ],
  • "hydra:totalItems": 0
}

Get a single visitor by identifier

Get a single visitor if you know the identifier of any of their visits.

Authorizations:
oauth
path Parameters
id
required
string
Example: 01GTBV1CT3BM8A42SEJ2J5F4EG

Visitor identifier

header Parameters
Accept
required
string
Example: application/ld+json

The format you want the response in.

Responses

Response Schema: application/ld+json
string or object
One of
string
@id
string
@type
string
visitCount
integer or null

The total number of visits this visitor has made. Null when embedded inside a visit.

id
string

The ULID of the visitor.

displayName
string or null

The display name of the visitor.

firstName
string or null

The visitor's given name.

lastName
string or null

The visitor's family name.

email
string <email>

The visitor's email address.

type
string
Enum: "external" "user"

Whether the visitor is an external guest or an internal Kadence user.

userId
string or null

The internal Kadence user this visitor maps to, when the visitor is a user rather than an external guest.

status
string
Enum: "none" "organizer" "tentatively_accepted" "accepted" "declined" "not_responded"

The attendance status of the visitor.

checkedInDate
string or null <date-time>

The date and time the visitor checked in.

checkedOutDate
string or null <date-time>

The date and time the visitor checked out.

visitId
string or null

The ULID of the visitor's latest visit.

host
string or null

The host of the visitor's latest visit.

building
object or null

The building of the visitor's latest visit.

startDate
string or null <date-time>

The start date and time of the visitor's latest visit.

endDate
string or null <date-time>

The end date and time of the visitor's latest visit.

visitStatus
string or null
Enum: "booked" "checkedIn" "checkedOut" "completed" "cancelled" "noCheckIn"

The status of the visitor's latest visit.

Response samples

Content type
application/ld+json
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "visitCount": 3,
  • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "displayName": "John Smith",
  • "firstName": "John",
  • "lastName": "Smith",
  • "email": "john.smith@example.com",
  • "type": "external",
  • "userId": "/v1/public/users/01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "status": "accepted",
  • "checkedInDate": "2017-07-21T17:32:28+00:00",
  • "checkedOutDate": "2017-07-21T17:32:28+00:00",
  • "visitId": "01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "host": "/v1/public/users/01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "building": { },
  • "startDate": "2017-07-21T17:32:28+00:00",
  • "endDate": "2017-07-21T17:32:28+00:00",
  • "visitStatus": "booked"
}

Webhooks

Webhooks send Kadence activity to your systems as it happens, so you don't need to keep asking the API whether anything has changed.

A global admin sets up a webhook in Kadence under Settings → Developer → Webhooks. They choose which events to receive, and we'll give them a signing secret. You can subscribe to any event listed below.

The signing secret is shown once, when the webhook is created. No later read returns it, so store it when you see it. If you lose it, rotate the secret to get a new one. Both values are accepted while a rotation is in progress, so rotating does not drop deliveries.

webhook.test works a little differently. You can't subscribe to it. We send it when someone selects Send test event on a webhook, so it's a good way to check that your endpoint is reachable and your signature check works.

When something is deleted

Deleting one thing in Kadence can remove others with it. You get one event for the thing that was deleted, and no events for what went with it.

  • Delete a building and its floors, spaces, neighbourhoods, bookings and visitors go too. You get building.deleted.
  • Delete a floor and its spaces and neighbourhoods go too, along with the bookings and visitors on those spaces. You get floor.deleted.
  • Delete a space and its bookings and visitors go too. You get space.deleted.
  • Delete a neighbourhood and its spaces stay. Those spaces are no longer in a neighbourhood, and we don't send space.updated to tell you.

So treat a deletion as covering everything below it. When you receive building.deleted, drop that building and its floors, spaces, neighbourhoods and bookings from your copy. When you receive floor.deleted or space.deleted, do the same for what sat inside it.

A booking removed this way does not produce booking.cancelled, and a visitor removed this way does not produce a visitor event. The booking is gone rather than cancelled, so if you act on cancellations, handle these deletions too.

Checking that a delivery came from us

Always verify the signature before you act on a delivery. It is the one thing that proves the request came from us.

  1. Read the Kadence-Webhook-Timestamp and Kadence-Webhook-Signature headers.
  2. Work out the HMAC-SHA256 of {timestamp}.{rawBody} using your signing secret, in hex.
  3. Compare your result with each v1= value in the signature header, using a constant-time comparison.
const crypto = require("crypto");

// rawBody must be the exact bytes received.
// Reading the JSON and writing it back changes them.
function verify(rawBody, headers, secret) {
  const expected = "v1=" + crypto
    .createHmac("sha256", secret)
    .update(`${headers["kadence-webhook-timestamp"]}.${rawBody}`)
    .digest("hex");

  // Two values are present while a secret is being
  // replaced. Either one matching is valid.
  return headers["kadence-webhook-signature"]
    .split(" ")
    .some((candidate) =>
      // Length first: timingSafeEqual throws on a
      // length mismatch rather than returning false.
      candidate.length === expected.length &&
      crypto.timingSafeEqual(
        Buffer.from(candidate),
        Buffer.from(expected),
      ));
}

Use the exact bytes you received as rawBody. If you read the JSON and write it back out, the bytes change and the signature won't match.

It's worth checking that the timestamp is recent too, so nobody can capture a request and send it again later. Pick a window that suits your system. Compare it against the time the request arrived, rather than the time you got round to verifying it. If you accept the request first and verify it on a queue or a worker, record the arrival time and use that.

// receivedAt is when the request arrived, in seconds.
// Pass the arrival time, not the current time, if you
// verify later on a queue or a worker.
function isRecent(headers, receivedAt, maxAgeSeconds) {
  const signedAt = Number(headers["kadence-webhook-timestamp"]);

  return Math.abs(receivedAt - signedAt) <= maxAgeSeconds;
}

Replacing your signing secret

Rotating the secret gives you a new one and keeps the old one working. Every delivery is signed with both, so the Kadence-Webhook-Signature header carries two values separated by a space, and either one matching is fine.

The previous secret keeps being accepted until a global admin confirms the changeover in Kadence. There is no time limit on that. Nothing retires the previous secret on its own, so take as long as your rollout needs.

Deploy the new secret, satisfy yourself that deliveries verify against it, and only then confirm the changeover. After it is confirmed the previous secret stops signing, so a delivery checked against it looks like a forgery.

If a delivery does not get through

We'll try up to 8 times over about 90 minutes. The first retry is after 5 minutes, the second after 10, and the rest are 15 minutes apart. We retry timeouts, connection and certificate errors, server errors and rate limits, and we'll wait as long as Retry-After asks, up to 15 minutes. We won't retry other 4xx responses, but we do save the response so you can see what happened.

A 410 Gone response turns the webhook off straight away, and we won't try again after that.

After 10 failed attempts in a row we'll pause the webhook and email your global admins once. Nothing is lost. Events we couldn't deliver stay in the delivery history for 30 days, and you can send any of them again.

What your endpoint needs

Your endpoint needs to use HTTPS on a publicly resolvable address. Two things tend to catch people out. We don't follow redirects, so answer on the address you registered. We also re-check where your address resolves to before every delivery, not only when you save it, so an endpoint that starts resolving to a private address will stop receiving events.

booking.created Webhook

A booking was created.

You can subscribe to this event on its own, or to the whole booking group.

header Parameters
Kadence-Webhook-Id
required
string

The identifier for this event. It matches the id in the body. Use it to spot repeats.

Kadence-Webhook-Type
required
string

The type of event. Use it to send the delivery to the right place without reading the body.

Kadence-Webhook-Timestamp
required
string

The time we signed the delivery, in seconds. It is part of the signed value, so it cannot be changed without breaking the signature. Compare it with the time the request arrived if you want to reject requests that have been held for a long time.

Kadence-Webhook-Subscription
required
string

The webhook that produced this delivery. Useful when you have more than one.

Kadence-Webhook-Attempt
required
string

Which attempt this is, starting at 1. This header is present on the first attempt as well, so treat every delivery as one that might be a repeat.

Kadence-Webhook-Signature
required
string

Proof that the delivery came from us. The value is v1= followed by the HMAC-SHA256 of {timestamp}.{rawBody}, using your signing secret, in hex. Work out the same value and compare the two with a constant-time comparison. Use the exact bytes you received. While you are replacing a secret this header holds two values separated by a space, and either one matching is valid.

Request Body schema: application/json
required
id
required
string

The unique identifier for this event. We can send the same event more than once, so use this value to spot repeats. It stays the same on every attempt.

schemaVersion
required
integer
Value: 1

The version of the event format. We'll increase this number if the format changes in a way that could break your code.

type
required
string
Value: "booking.created"

What happened. Switch on this value to decide how to handle the delivery.

category
required
string
Value: "booking"

The group this event belongs to. You can subscribe to a whole group instead of picking events one at a time.

occurredAt
required
string <date-time>

When the event happened. Times are in UTC and include the offset, the same as the rest of our public API.

sequence
required
integer <int64>

A number that goes up as an object changes. Events can arrive in a different order to the one they happened in, so compare this value to work out which event is the most recent, rather than relying on the order they arrive in. Two events for the same object can carry the same number when they describe one change from two angles, such as a booking change and its guest-visit counterpart. Treat matching numbers as both being current, and use id to spot repeats.

tenantId
required
string

The Kadence account the event belongs to.

required
object

What caused the event.

type
required
string

What caused the event. user means a person did something. system means we did it, for example a scheduled job, or a change that followed on from another change. When the value is system, id and source are both empty.

id
string or null

The identifier of the person who did it. This is empty when we caused the event.

source
string or null

The app or service the person used, where we know it.

required
object

The object this event is about. It is the same on every event for that object.

object
required
string
Value: "booking"
id
required
string

The identifier of the object. Use it with sequence to tell which object the event is about and how recent it is.

required
object

A copy of the object as it was when the event happened. It does not change if the object changes afterwards.

id
string

The ULID of the booking.

object or null

Despite the name, this holds the whole object. Read createdUserId.id for the identifier.

Any of
id
string

The user's ULID within the Kadence platform.

email
string <email>

The user's email address.

firstName
string

The user's given name.

lastName
string

The user's family name.

jobTitle
string or null

The user's job title.

invitationPending
boolean

Whether the user's invitation to join Kadence is still pending. false once they have signed up.

preferredFloor
object

The user's preferred floor for booking when going into the office.

createdAt
string <date-time>

The date and time of when the user was created.

modifiedAt
string <date-time>

The date and time of when the user was last modified.

locale
string

An IETF language tag of the user's preferred locale.

timePreference
string
Enum: "default" "24H" "12H"

The user's preferred time format. default will follow the user's locale.

locationCityName
string or null

The city name of the user's usual location.

locationCountryCode
string or null

The ISO 3166-1 alpha-2 country code of the user's usual location.

locationLatitude
number or null <float>

The latitude of the user's usual location, based on their city.

locationLongitude
number or null <float>

The longitude of the user's usual location, based on their city.

locationTimezone
string or null

The usual IANA time zone of the user, based on their city.

biography
string or null

A short biography.

monogram
string

A two-letter identifier made from the user's full name or email address.

object or null

Despite the name, this holds the whole object. Read userId.id for the identifier.

Any of
id
string

The user's ULID within the Kadence platform.

email
string <email>

The user's email address.

firstName
string

The user's given name.

lastName
string

The user's family name.

jobTitle
string or null

The user's job title.

invitationPending
boolean

Whether the user's invitation to join Kadence is still pending. false once they have signed up.

preferredFloor
object

The user's preferred floor for booking when going into the office.

createdAt
string <date-time>

The date and time of when the user was created.

modifiedAt
string <date-time>

The date and time of when the user was last modified.

locale
string

An IETF language tag of the user's preferred locale.

timePreference
string
Enum: "default" "24H" "12H"

The user's preferred time format. default will follow the user's locale.

locationCityName
string or null

The city name of the user's usual location.

locationCountryCode
string or null

The ISO 3166-1 alpha-2 country code of the user's usual location.

locationLatitude
number or null <float>

The latitude of the user's usual location, based on their city.

locationLongitude
number or null <float>

The longitude of the user's usual location, based on their city.

locationTimezone
string or null

The usual IANA time zone of the user, based on their city.

biography
string or null

A short biography.

monogram
string

A two-letter identifier made from the user's full name or email address.

object or null

The space that was booked. Holds the whole object, not an identifier.

Any of
id
string

The ULID of the space.

name
string

The name of the space.

type
string

The type of space.

capacity
integer

How many people the space holds. A desk is 1. A room is its seating capacity.

object or null

The floor the space is on. Holds the whole object, not an identifier.

Any of
id
string

The ULID of the floor.

name
string

The name of the floor.

object or null

The neighborhood the space belongs to, if it is in one. Holds the whole object, not an identifier.

Any of
id
string

The ULID of the neighborhood.

name
string

The name of the neighborhood.

photo
string

The UUID of the photo of the space.

photoUrl
string or null

A link to the photo, ready to use. Null when there is no photo.

photoTemplateUrl
string or null

The same link with the size left as a placeholder, so you can ask for the dimensions you need. Null when there is no photo.

startDate
string <date-time>

The date and time of the beginning of the booking.

endDate
string <date-time>

The date and time of the end of the booking.

createdAt
string <date-time>

The date and time the booking was created at.

updatedAt
string <date-time>

The date and time the booking was last updated at.

object or null

Despite the name, this holds the whole object. Read checkedInUserId.id for the identifier.

Any of
id
string

The user's ULID within the Kadence platform.

email
string <email>

The user's email address.

firstName
string

The user's given name.

lastName
string

The user's family name.

jobTitle
string or null

The user's job title.

invitationPending
boolean

Whether the user's invitation to join Kadence is still pending. false once they have signed up.

preferredFloor
object

The user's preferred floor for booking when going into the office.

createdAt
string <date-time>

The date and time of when the user was created.

modifiedAt
string <date-time>

The date and time of when the user was last modified.

locale
string

An IETF language tag of the user's preferred locale.

timePreference
string
Enum: "default" "24H" "12H"

The user's preferred time format. default will follow the user's locale.

locationCityName
string or null

The city name of the user's usual location.

locationCountryCode
string or null

The ISO 3166-1 alpha-2 country code of the user's usual location.

locationLatitude
number or null <float>

The latitude of the user's usual location, based on their city.

locationLongitude
number or null <float>

The longitude of the user's usual location, based on their city.

locationTimezone
string or null

The usual IANA time zone of the user, based on their city.

biography
string or null

A short biography.

monogram
string

A two-letter identifier made from the user's full name or email address.

checkedInDate
string <date-time>

The date and time the booking was checked in at.

checkedInSource
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was checked in from.

checkInMethod
string or null
Enum: "doorAccess" "wifi" "geofence" "sensor"

If checked in from the public API, the method used during check in.

checkOutMethod
string or null
Enum: "doorAccess" "wifi" "geofence" "sensor"

If checked out from the public API, the method used during check out.

object or null

Despite the name, this holds the whole object. Read checkedOutUser.id for the identifier.

Any of
id
string

The user's ULID within the Kadence platform.

email
string <email>

The user's email address.

firstName
string

The user's given name.

lastName
string

The user's family name.

jobTitle
string or null

The user's job title.

invitationPending
boolean

Whether the user's invitation to join Kadence is still pending. false once they have signed up.

preferredFloor
object

The user's preferred floor for booking when going into the office.

createdAt
string <date-time>

The date and time of when the user was created.

modifiedAt
string <date-time>

The date and time of when the user was last modified.

locale
string

An IETF language tag of the user's preferred locale.

timePreference
string
Enum: "default" "24H" "12H"

The user's preferred time format. default will follow the user's locale.

locationCityName
string or null

The city name of the user's usual location.

locationCountryCode
string or null

The ISO 3166-1 alpha-2 country code of the user's usual location.

locationLatitude
number or null <float>

The latitude of the user's usual location, based on their city.

locationLongitude
number or null <float>

The longitude of the user's usual location, based on their city.

locationTimezone
string or null

The usual IANA time zone of the user, based on their city.

biography
string or null

A short biography.

monogram
string

A two-letter identifier made from the user's full name or email address.

checkedOutDate
string <date-time>

The date and time the booking was checked out at.

checkOutSource
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was checked out from.

permanent
boolean

Whether this booking came from an assigned space.

hasGuests
boolean

Whether this booking has guests.

guestBooking
boolean

Whether this booking is for a guest.

recurringBooking
boolean

Whether this booking is part of a recurring series.

selfCertifiedDate
string <date-time>

The date and time the booking was self-certified at.

selfCertifySource
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was self-certified from.

source
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was created from.

autoReleasedDate
string or null <date-time>

The date and time the booking was auto released.

object or null

Despite the name, this holds the whole object. Read cancelledUserId.id for the identifier.

Any of
id
string

The user's ULID within the Kadence platform.

email
string <email>

The user's email address.

firstName
string

The user's given name.

lastName
string

The user's family name.

jobTitle
string or null

The user's job title.

invitationPending
boolean

Whether the user's invitation to join Kadence is still pending. false once they have signed up.

preferredFloor
object

The user's preferred floor for booking when going into the office.

createdAt
string <date-time>

The date and time of when the user was created.

modifiedAt
string <date-time>

The date and time of when the user was last modified.

locale
string

An IETF language tag of the user's preferred locale.

timePreference
string
Enum: "default" "24H" "12H"

The user's preferred time format. default will follow the user's locale.

locationCityName
string or null

The city name of the user's usual location.

locationCountryCode
string or null

The ISO 3166-1 alpha-2 country code of the user's usual location.

locationLatitude
number or null <float>

The latitude of the user's usual location, based on their city.

locationLongitude
number or null <float>

The longitude of the user's usual location, based on their city.

locationTimezone
string or null

The usual IANA time zone of the user, based on their city.

biography
string or null

A short biography.

monogram
string

A two-letter identifier made from the user's full name or email address.

bookingUserEmail
string or null

The email of the user who the booking is for.

bookingCreatedByUserEmail
string or null

The email of the user who created the booking.

cancelledDate
string or null <date-time>

If cancelled, the date and time the booking was cancelled.

cancellationReason
string or null
Enum: "byUser" "byUserInBulk" "autoSpaceRelease" "permanentDesk" "changeInBuildingPolicy" "changeInCompanyPolicy" "removedFromCalendarByProvider" "removedFromCalendarByKadence" "calendarSyncError" "spaceNoLongerAvailable" "spaceRestricted" "spaceNotRestrictedAnymore" "userDeleted" "buildingClosure"

If cancelled, the reason for the cancellation.

title
string or null

If a room booking, the title of the associated calendar event.

status
string
Enum: "booked" "checkedIn" "checkedOut" "cancelled" "completed" "noCheckIn" "unknown"

The current booking status.

type
string
Enum: "desk" "private_office" "room" "onsite" "locker" "pod" "parking"

The type of booking.

onlineMeeting
boolean or null

For a room booking, whether the linked calendar event is an online meeting.

onlineMeetingUrl
boolean or null

For a room booking, the online meeting joining URL, if available.

icalUid
boolean or null

If a room booking, the associated iCal UID of the calendar event.

object

Holds the whole object, not an identifier.

id
string

The ULID of the building.

name
string

The name of the building.

timeZone
string

The IANA time zone that the building is in.

latitude
number <float>

The latitude of the building's location.

longitude
number <float>

The longitude of the building's location.

addressLine1
string

The first line of the building address.

addressLine2
string or null

The second line of the building address.

city
string

The name of the city that the building is in.

county
string or null

The name of the county that the building is in.

countryCode
string

The ISO 3166-1 alpha-2 country code that the building is in.

postalCode
string or null

The postal or ZIP code that the building is in.

photo
string

The UUID of the photo of the building.

createdAt
string <date-time>

The date and time that the building was created at.

modifiedAt
string <date-time>

The date and time that the building was last modified at.

photoUrl
string or null

A link to the photo, ready to use. Null when there is no photo.

photoTemplateUrl
string or null

The same link with the size left as a placeholder, so you can ask for the dimensions you need. Null when there is no photo.

Responses

Request samples

Content type
application/json
{
  • "id": "01K1XQ7Z9M4B2N8P5R3T6V0W2Y",
  • "schemaVersion": 1,
  • "type": "booking.created",
  • "category": "booking",
  • "occurredAt": "2026-08-08T09:14:22+00:00",
  • "sequence": 1754645662123,
  • "tenantId": "01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "actor": {
    • "type": "user",
    • "id": "01H8QW3ZC4RN7XKD2M6VB9TF5A",
    • "source": "ios"
    },
  • "target": {
    • "object": "booking",
    • "id": "01JB4KQ2X8HN5YT7WZ3PC6MR9D"
    },
  • "data": {
    • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
    • "createdUserId": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "email": "john.smith@example.com",
      • "firstName": "John",
      • "lastName": "Smith",
      • "jobTitle": "Head of Marketing",
      • "invitationPending": true,
      • "preferredFloor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 1"
        },
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "locale": "en-GB",
      • "timePreference": "default",
      • "locationCityName": "London",
      • "locationCountryCode": "GB",
      • "locationLatitude": 51.509865,
      • "locationLongitude": -0.118092,
      • "locationTimezone": "Europe/London",
      • "biography": "Head of Marketing, based in London.",
      • "monogram": "JS"
      },
    • "userId": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "email": "john.smith@example.com",
      • "firstName": "John",
      • "lastName": "Smith",
      • "jobTitle": "Head of Marketing",
      • "invitationPending": true,
      • "preferredFloor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 1"
        },
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "locale": "en-GB",
      • "timePreference": "default",
      • "locationCityName": "London",
      • "locationCountryCode": "GB",
      • "locationLatitude": 51.509865,
      • "locationLongitude": -0.118092,
      • "locationTimezone": "Europe/London",
      • "biography": "Head of Marketing, based in London.",
      • "monogram": "JS"
      },
    • "space": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "name": "Desk 01",
      • "type": "desk",
      • "capacity": 8,
      • "floor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 01"
        },
      • "neighborhood": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Sales"
        },
      • "photo": "b74b830a-cf26-47bd-9dbc-237571c79fc3",
      • "photoTemplateUrl": "string"
      },
    • "startDate": "2017-07-21T17:32:28+00:00",
    • "endDate": "2017-07-21T17:32:28+00:00",
    • "createdAt": "2017-07-21T17:32:28+00:00",
    • "updatedAt": "2017-07-21T17:32:28+00:00",
    • "checkedInUserId": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "email": "john.smith@example.com",
      • "firstName": "John",
      • "lastName": "Smith",
      • "jobTitle": "Head of Marketing",
      • "invitationPending": true,
      • "preferredFloor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 1"
        },
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "locale": "en-GB",
      • "timePreference": "default",
      • "locationCityName": "London",
      • "locationCountryCode": "GB",
      • "locationLatitude": 51.509865,
      • "locationLongitude": -0.118092,
      • "locationTimezone": "Europe/London",
      • "biography": "Head of Marketing, based in London.",
      • "monogram": "JS"
      },
    • "checkedInDate": "2017-07-21T17:32:28+00:00",
    • "checkedInSource": "web",
    • "checkInMethod": "doorAccess",
    • "checkOutMethod": "doorAccess",
    • "checkedOutUser": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "email": "john.smith@example.com",
      • "firstName": "John",
      • "lastName": "Smith",
      • "jobTitle": "Head of Marketing",
      • "invitationPending": true,
      • "preferredFloor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 1"
        },
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "locale": "en-GB",
      • "timePreference": "default",
      • "locationCityName": "London",
      • "locationCountryCode": "GB",
      • "locationLatitude": 51.509865,
      • "locationLongitude": -0.118092,
      • "locationTimezone": "Europe/London",
      • "biography": "Head of Marketing, based in London.",
      • "monogram": "JS"
      },
    • "checkedOutDate": "2017-07-21T17:32:28+00:00",
    • "checkOutSource": "web",
    • "permanent": false,
    • "hasGuests": false,
    • "guestBooking": false,
    • "recurringBooking": false,
    • "selfCertifiedDate": "2017-07-21T17:32:28+00:00",
    • "selfCertifySource": "web",
    • "source": "web",
    • "autoReleasedDate": "2017-07-21T17:32:28+00:00",
    • "cancelledUserId": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "email": "john.smith@example.com",
      • "firstName": "John",
      • "lastName": "Smith",
      • "jobTitle": "Head of Marketing",
      • "invitationPending": true,
      • "preferredFloor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 1"
        },
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "locale": "en-GB",
      • "timePreference": "default",
      • "locationCityName": "London",
      • "locationCountryCode": "GB",
      • "locationLatitude": 51.509865,
      • "locationLongitude": -0.118092,
      • "locationTimezone": "Europe/London",
      • "biography": "Head of Marketing, based in London.",
      • "monogram": "JS"
      },
    • "bookingUserEmail": "john@example.com",
    • "bookingCreatedByUserEmail": "john@example.com",
    • "cancelledDate": "2017-07-21T17:32:28+00:00",
    • "cancellationReason": "byUser",
    • "title": null,
    • "status": "booked",
    • "type": "desk",
    • "onlineMeeting": null,
    • "onlineMeetingUrl": null,
    • "icalUid": null,
    • "building": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "name": "London Office",
      • "timeZone": "Europe/London",
      • "latitude": 51.509865,
      • "longitude": -0.118092,
      • "addressLine1": "20 Fenchurch Street",
      • "addressLine2": null,
      • "city": "London",
      • "county": null,
      • "countryCode": "GB",
      • "postalCode": "SE1 8PB",
      • "photo": "b74b830a-cf26-47bd-9dbc-237571c79fc3",
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "photoTemplateUrl": "string"
      }
    }
}

booking.updated Webhook

A booking's time, space or title changed.

You can subscribe to this event on its own, or to the whole booking group.

header Parameters
Kadence-Webhook-Id
required
string

The identifier for this event. It matches the id in the body. Use it to spot repeats.

Kadence-Webhook-Type
required
string

The type of event. Use it to send the delivery to the right place without reading the body.

Kadence-Webhook-Timestamp
required
string

The time we signed the delivery, in seconds. It is part of the signed value, so it cannot be changed without breaking the signature. Compare it with the time the request arrived if you want to reject requests that have been held for a long time.

Kadence-Webhook-Subscription
required
string

The webhook that produced this delivery. Useful when you have more than one.

Kadence-Webhook-Attempt
required
string

Which attempt this is, starting at 1. This header is present on the first attempt as well, so treat every delivery as one that might be a repeat.

Kadence-Webhook-Signature
required
string

Proof that the delivery came from us. The value is v1= followed by the HMAC-SHA256 of {timestamp}.{rawBody}, using your signing secret, in hex. Work out the same value and compare the two with a constant-time comparison. Use the exact bytes you received. While you are replacing a secret this header holds two values separated by a space, and either one matching is valid.

Request Body schema: application/json
required
id
required
string

The unique identifier for this event. We can send the same event more than once, so use this value to spot repeats. It stays the same on every attempt.

schemaVersion
required
integer
Value: 1

The version of the event format. We'll increase this number if the format changes in a way that could break your code.

type
required
string
Value: "booking.updated"

What happened. Switch on this value to decide how to handle the delivery.

category
required
string
Value: "booking"

The group this event belongs to. You can subscribe to a whole group instead of picking events one at a time.

occurredAt
required
string <date-time>

When the event happened. Times are in UTC and include the offset, the same as the rest of our public API.

sequence
required
integer <int64>

A number that goes up as an object changes. Events can arrive in a different order to the one they happened in, so compare this value to work out which event is the most recent, rather than relying on the order they arrive in. Two events for the same object can carry the same number when they describe one change from two angles, such as a booking change and its guest-visit counterpart. Treat matching numbers as both being current, and use id to spot repeats.

tenantId
required
string

The Kadence account the event belongs to.

required
object

What caused the event.

type
required
string

What caused the event. user means a person did something. system means we did it, for example a scheduled job, or a change that followed on from another change. When the value is system, id and source are both empty.

id
string or null

The identifier of the person who did it. This is empty when we caused the event.

source
string or null

The app or service the person used, where we know it.

required
object

The object this event is about. It is the same on every event for that object.

object
required
string
Value: "booking"
id
required
string

The identifier of the object. Use it with sequence to tell which object the event is about and how recent it is.

required
object

A copy of the object as it was when the event happened. It does not change if the object changes afterwards.

id
string

The ULID of the booking.

object or null

Despite the name, this holds the whole object. Read createdUserId.id for the identifier.

Any of
id
string

The user's ULID within the Kadence platform.

email
string <email>

The user's email address.

firstName
string

The user's given name.

lastName
string

The user's family name.

jobTitle
string or null

The user's job title.

invitationPending
boolean

Whether the user's invitation to join Kadence is still pending. false once they have signed up.

preferredFloor
object

The user's preferred floor for booking when going into the office.

createdAt
string <date-time>

The date and time of when the user was created.

modifiedAt
string <date-time>

The date and time of when the user was last modified.

locale
string

An IETF language tag of the user's preferred locale.

timePreference
string
Enum: "default" "24H" "12H"

The user's preferred time format. default will follow the user's locale.

locationCityName
string or null

The city name of the user's usual location.

locationCountryCode
string or null

The ISO 3166-1 alpha-2 country code of the user's usual location.

locationLatitude
number or null <float>

The latitude of the user's usual location, based on their city.

locationLongitude
number or null <float>

The longitude of the user's usual location, based on their city.

locationTimezone
string or null

The usual IANA time zone of the user, based on their city.

biography
string or null

A short biography.

monogram
string

A two-letter identifier made from the user's full name or email address.

object or null

Despite the name, this holds the whole object. Read userId.id for the identifier.

Any of
id
string

The user's ULID within the Kadence platform.

email
string <email>

The user's email address.

firstName
string

The user's given name.

lastName
string

The user's family name.

jobTitle
string or null

The user's job title.

invitationPending
boolean

Whether the user's invitation to join Kadence is still pending. false once they have signed up.

preferredFloor
object

The user's preferred floor for booking when going into the office.

createdAt
string <date-time>

The date and time of when the user was created.

modifiedAt
string <date-time>

The date and time of when the user was last modified.

locale
string

An IETF language tag of the user's preferred locale.

timePreference
string
Enum: "default" "24H" "12H"

The user's preferred time format. default will follow the user's locale.

locationCityName
string or null

The city name of the user's usual location.

locationCountryCode
string or null

The ISO 3166-1 alpha-2 country code of the user's usual location.

locationLatitude
number or null <float>

The latitude of the user's usual location, based on their city.

locationLongitude
number or null <float>

The longitude of the user's usual location, based on their city.

locationTimezone
string or null

The usual IANA time zone of the user, based on their city.

biography
string or null

A short biography.

monogram
string

A two-letter identifier made from the user's full name or email address.

object or null

The space that was booked. Holds the whole object, not an identifier.

Any of
id
string

The ULID of the space.

name
string

The name of the space.

type
string

The type of space.

capacity
integer

How many people the space holds. A desk is 1. A room is its seating capacity.

object or null

The floor the space is on. Holds the whole object, not an identifier.

Any of
id
string

The ULID of the floor.

name
string

The name of the floor.

object or null

The neighborhood the space belongs to, if it is in one. Holds the whole object, not an identifier.

Any of
id
string

The ULID of the neighborhood.

name
string

The name of the neighborhood.

photo
string

The UUID of the photo of the space.

photoUrl
string or null

A link to the photo, ready to use. Null when there is no photo.

photoTemplateUrl
string or null

The same link with the size left as a placeholder, so you can ask for the dimensions you need. Null when there is no photo.

startDate
string <date-time>

The date and time of the beginning of the booking.

endDate
string <date-time>

The date and time of the end of the booking.

createdAt
string <date-time>

The date and time the booking was created at.

updatedAt
string <date-time>

The date and time the booking was last updated at.

object or null

Despite the name, this holds the whole object. Read checkedInUserId.id for the identifier.

Any of
id
string

The user's ULID within the Kadence platform.

email
string <email>

The user's email address.

firstName
string

The user's given name.

lastName
string

The user's family name.

jobTitle
string or null

The user's job title.

invitationPending
boolean

Whether the user's invitation to join Kadence is still pending. false once they have signed up.

preferredFloor
object

The user's preferred floor for booking when going into the office.

createdAt
string <date-time>

The date and time of when the user was created.

modifiedAt
string <date-time>

The date and time of when the user was last modified.

locale
string

An IETF language tag of the user's preferred locale.

timePreference
string
Enum: "default" "24H" "12H"

The user's preferred time format. default will follow the user's locale.

locationCityName
string or null

The city name of the user's usual location.

locationCountryCode
string or null

The ISO 3166-1 alpha-2 country code of the user's usual location.

locationLatitude
number or null <float>

The latitude of the user's usual location, based on their city.

locationLongitude
number or null <float>

The longitude of the user's usual location, based on their city.

locationTimezone
string or null

The usual IANA time zone of the user, based on their city.

biography
string or null

A short biography.

monogram
string

A two-letter identifier made from the user's full name or email address.

checkedInDate
string <date-time>

The date and time the booking was checked in at.

checkedInSource
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was checked in from.

checkInMethod
string or null
Enum: "doorAccess" "wifi" "geofence" "sensor"

If checked in from the public API, the method used during check in.

checkOutMethod
string or null
Enum: "doorAccess" "wifi" "geofence" "sensor"

If checked out from the public API, the method used during check out.

object or null

Despite the name, this holds the whole object. Read checkedOutUser.id for the identifier.

Any of
id
string

The user's ULID within the Kadence platform.

email
string <email>

The user's email address.

firstName
string

The user's given name.

lastName
string

The user's family name.

jobTitle
string or null

The user's job title.

invitationPending
boolean

Whether the user's invitation to join Kadence is still pending. false once they have signed up.

preferredFloor
object

The user's preferred floor for booking when going into the office.

createdAt
string <date-time>

The date and time of when the user was created.

modifiedAt
string <date-time>

The date and time of when the user was last modified.

locale
string

An IETF language tag of the user's preferred locale.

timePreference
string
Enum: "default" "24H" "12H"

The user's preferred time format. default will follow the user's locale.

locationCityName
string or null

The city name of the user's usual location.

locationCountryCode
string or null

The ISO 3166-1 alpha-2 country code of the user's usual location.

locationLatitude
number or null <float>

The latitude of the user's usual location, based on their city.

locationLongitude
number or null <float>

The longitude of the user's usual location, based on their city.

locationTimezone
string or null

The usual IANA time zone of the user, based on their city.

biography
string or null

A short biography.

monogram
string

A two-letter identifier made from the user's full name or email address.

checkedOutDate
string <date-time>

The date and time the booking was checked out at.

checkOutSource
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was checked out from.

permanent
boolean

Whether this booking came from an assigned space.

hasGuests
boolean

Whether this booking has guests.

guestBooking
boolean

Whether this booking is for a guest.

recurringBooking
boolean

Whether this booking is part of a recurring series.

selfCertifiedDate
string <date-time>

The date and time the booking was self-certified at.

selfCertifySource
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was self-certified from.

source
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was created from.

autoReleasedDate
string or null <date-time>

The date and time the booking was auto released.

object or null

Despite the name, this holds the whole object. Read cancelledUserId.id for the identifier.

Any of
id
string

The user's ULID within the Kadence platform.

email
string <email>

The user's email address.

firstName
string

The user's given name.

lastName
string

The user's family name.

jobTitle
string or null

The user's job title.

invitationPending
boolean

Whether the user's invitation to join Kadence is still pending. false once they have signed up.

preferredFloor
object

The user's preferred floor for booking when going into the office.

createdAt
string <date-time>

The date and time of when the user was created.

modifiedAt
string <date-time>

The date and time of when the user was last modified.

locale
string

An IETF language tag of the user's preferred locale.

timePreference
string
Enum: "default" "24H" "12H"

The user's preferred time format. default will follow the user's locale.

locationCityName
string or null

The city name of the user's usual location.

locationCountryCode
string or null

The ISO 3166-1 alpha-2 country code of the user's usual location.

locationLatitude
number or null <float>

The latitude of the user's usual location, based on their city.

locationLongitude
number or null <float>

The longitude of the user's usual location, based on their city.

locationTimezone
string or null

The usual IANA time zone of the user, based on their city.

biography
string or null

A short biography.

monogram
string

A two-letter identifier made from the user's full name or email address.

bookingUserEmail
string or null

The email of the user who the booking is for.

bookingCreatedByUserEmail
string or null

The email of the user who created the booking.

cancelledDate
string or null <date-time>

If cancelled, the date and time the booking was cancelled.

cancellationReason
string or null
Enum: "byUser" "byUserInBulk" "autoSpaceRelease" "permanentDesk" "changeInBuildingPolicy" "changeInCompanyPolicy" "removedFromCalendarByProvider" "removedFromCalendarByKadence" "calendarSyncError" "spaceNoLongerAvailable" "spaceRestricted" "spaceNotRestrictedAnymore" "userDeleted" "buildingClosure"

If cancelled, the reason for the cancellation.

title
string or null

If a room booking, the title of the associated calendar event.

status
string
Enum: "booked" "checkedIn" "checkedOut" "cancelled" "completed" "noCheckIn" "unknown"

The current booking status.

type
string
Enum: "desk" "private_office" "room" "onsite" "locker" "pod" "parking"

The type of booking.

onlineMeeting
boolean or null

For a room booking, whether the linked calendar event is an online meeting.

onlineMeetingUrl
boolean or null

For a room booking, the online meeting joining URL, if available.

icalUid
boolean or null

If a room booking, the associated iCal UID of the calendar event.

object

Holds the whole object, not an identifier.

id
string

The ULID of the building.

name
string

The name of the building.

timeZone
string

The IANA time zone that the building is in.

latitude
number <float>

The latitude of the building's location.

longitude
number <float>

The longitude of the building's location.

addressLine1
string

The first line of the building address.

addressLine2
string or null

The second line of the building address.

city
string

The name of the city that the building is in.

county
string or null

The name of the county that the building is in.

countryCode
string

The ISO 3166-1 alpha-2 country code that the building is in.

postalCode
string or null

The postal or ZIP code that the building is in.

photo
string

The UUID of the photo of the building.

createdAt
string <date-time>

The date and time that the building was created at.

modifiedAt
string <date-time>

The date and time that the building was last modified at.

photoUrl
string or null

A link to the photo, ready to use. Null when there is no photo.

photoTemplateUrl
string or null

The same link with the size left as a placeholder, so you can ask for the dimensions you need. Null when there is no photo.

object

The values these fields held before the change. Only the fields that changed are listed, using the same names as data. If a field is missing, that field didn't change. A missing field does not mean the value was empty. Where the old value was an object rather than a single value, we send it as empty.

property name*
additional property
string or number or boolean or null

Responses

Request samples

Content type
application/json
{
  • "id": "01K1XQ7Z9M4B2N8P5R3T6V0W2Y",
  • "schemaVersion": 1,
  • "type": "booking.updated",
  • "category": "booking",
  • "occurredAt": "2026-08-08T09:14:22+00:00",
  • "sequence": 1754645662123,
  • "tenantId": "01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "actor": {
    • "type": "user",
    • "id": "01H8QW3ZC4RN7XKD2M6VB9TF5A",
    • "source": "ios"
    },
  • "target": {
    • "object": "booking",
    • "id": "01JB4KQ2X8HN5YT7WZ3PC6MR9D"
    },
  • "data": {
    • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
    • "createdUserId": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "email": "john.smith@example.com",
      • "firstName": "John",
      • "lastName": "Smith",
      • "jobTitle": "Head of Marketing",
      • "invitationPending": true,
      • "preferredFloor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 1"
        },
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "locale": "en-GB",
      • "timePreference": "default",
      • "locationCityName": "London",
      • "locationCountryCode": "GB",
      • "locationLatitude": 51.509865,
      • "locationLongitude": -0.118092,
      • "locationTimezone": "Europe/London",
      • "biography": "Head of Marketing, based in London.",
      • "monogram": "JS"
      },
    • "userId": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "email": "john.smith@example.com",
      • "firstName": "John",
      • "lastName": "Smith",
      • "jobTitle": "Head of Marketing",
      • "invitationPending": true,
      • "preferredFloor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 1"
        },
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "locale": "en-GB",
      • "timePreference": "default",
      • "locationCityName": "London",
      • "locationCountryCode": "GB",
      • "locationLatitude": 51.509865,
      • "locationLongitude": -0.118092,
      • "locationTimezone": "Europe/London",
      • "biography": "Head of Marketing, based in London.",
      • "monogram": "JS"
      },
    • "space": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "name": "Desk 01",
      • "type": "desk",
      • "capacity": 8,
      • "floor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 01"
        },
      • "neighborhood": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Sales"
        },
      • "photo": "b74b830a-cf26-47bd-9dbc-237571c79fc3",
      • "photoTemplateUrl": "string"
      },
    • "startDate": "2017-07-21T17:32:28+00:00",
    • "endDate": "2017-07-21T17:32:28+00:00",
    • "createdAt": "2017-07-21T17:32:28+00:00",
    • "updatedAt": "2017-07-21T17:32:28+00:00",
    • "checkedInUserId": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "email": "john.smith@example.com",
      • "firstName": "John",
      • "lastName": "Smith",
      • "jobTitle": "Head of Marketing",
      • "invitationPending": true,
      • "preferredFloor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 1"
        },
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "locale": "en-GB",
      • "timePreference": "default",
      • "locationCityName": "London",
      • "locationCountryCode": "GB",
      • "locationLatitude": 51.509865,
      • "locationLongitude": -0.118092,
      • "locationTimezone": "Europe/London",
      • "biography": "Head of Marketing, based in London.",
      • "monogram": "JS"
      },
    • "checkedInDate": "2017-07-21T17:32:28+00:00",
    • "checkedInSource": "web",
    • "checkInMethod": "doorAccess",
    • "checkOutMethod": "doorAccess",
    • "checkedOutUser": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "email": "john.smith@example.com",
      • "firstName": "John",
      • "lastName": "Smith",
      • "jobTitle": "Head of Marketing",
      • "invitationPending": true,
      • "preferredFloor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 1"
        },
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "locale": "en-GB",
      • "timePreference": "default",
      • "locationCityName": "London",
      • "locationCountryCode": "GB",
      • "locationLatitude": 51.509865,
      • "locationLongitude": -0.118092,
      • "locationTimezone": "Europe/London",
      • "biography": "Head of Marketing, based in London.",
      • "monogram": "JS"
      },
    • "checkedOutDate": "2017-07-21T17:32:28+00:00",
    • "checkOutSource": "web",
    • "permanent": false,
    • "hasGuests": false,
    • "guestBooking": false,
    • "recurringBooking": false,
    • "selfCertifiedDate": "2017-07-21T17:32:28+00:00",
    • "selfCertifySource": "web",
    • "source": "web",
    • "autoReleasedDate": "2017-07-21T17:32:28+00:00",
    • "cancelledUserId": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "email": "john.smith@example.com",
      • "firstName": "John",
      • "lastName": "Smith",
      • "jobTitle": "Head of Marketing",
      • "invitationPending": true,
      • "preferredFloor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 1"
        },
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "locale": "en-GB",
      • "timePreference": "default",
      • "locationCityName": "London",
      • "locationCountryCode": "GB",
      • "locationLatitude": 51.509865,
      • "locationLongitude": -0.118092,
      • "locationTimezone": "Europe/London",
      • "biography": "Head of Marketing, based in London.",
      • "monogram": "JS"
      },
    • "bookingUserEmail": "john@example.com",
    • "bookingCreatedByUserEmail": "john@example.com",
    • "cancelledDate": "2017-07-21T17:32:28+00:00",
    • "cancellationReason": "byUser",
    • "title": null,
    • "status": "booked",
    • "type": "desk",
    • "onlineMeeting": null,
    • "onlineMeetingUrl": null,
    • "icalUid": null,
    • "building": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "name": "London Office",
      • "timeZone": "Europe/London",
      • "latitude": 51.509865,
      • "longitude": -0.118092,
      • "addressLine1": "20 Fenchurch Street",
      • "addressLine2": null,
      • "city": "London",
      • "county": null,
      • "countryCode": "GB",
      • "postalCode": "SE1 8PB",
      • "photo": "b74b830a-cf26-47bd-9dbc-237571c79fc3",
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "photoTemplateUrl": "string"
      }
    },
  • "previous": {
    • "startDate": "2026-08-08T09:00:00+00:00"
    }
}

booking.cancelled Webhook

A booking was cancelled. The cancellationReason field says why.

You can subscribe to this event on its own, or to the whole booking group.

header Parameters
Kadence-Webhook-Id
required
string

The identifier for this event. It matches the id in the body. Use it to spot repeats.

Kadence-Webhook-Type
required
string

The type of event. Use it to send the delivery to the right place without reading the body.

Kadence-Webhook-Timestamp
required
string

The time we signed the delivery, in seconds. It is part of the signed value, so it cannot be changed without breaking the signature. Compare it with the time the request arrived if you want to reject requests that have been held for a long time.

Kadence-Webhook-Subscription
required
string

The webhook that produced this delivery. Useful when you have more than one.

Kadence-Webhook-Attempt
required
string

Which attempt this is, starting at 1. This header is present on the first attempt as well, so treat every delivery as one that might be a repeat.

Kadence-Webhook-Signature
required
string

Proof that the delivery came from us. The value is v1= followed by the HMAC-SHA256 of {timestamp}.{rawBody}, using your signing secret, in hex. Work out the same value and compare the two with a constant-time comparison. Use the exact bytes you received. While you are replacing a secret this header holds two values separated by a space, and either one matching is valid.

Request Body schema: application/json
required
id
required
string

The unique identifier for this event. We can send the same event more than once, so use this value to spot repeats. It stays the same on every attempt.

schemaVersion
required
integer
Value: 1

The version of the event format. We'll increase this number if the format changes in a way that could break your code.

type
required
string
Value: "booking.cancelled"

What happened. Switch on this value to decide how to handle the delivery.

category
required
string
Value: "booking"

The group this event belongs to. You can subscribe to a whole group instead of picking events one at a time.

occurredAt
required
string <date-time>

When the event happened. Times are in UTC and include the offset, the same as the rest of our public API.

sequence
required
integer <int64>

A number that goes up as an object changes. Events can arrive in a different order to the one they happened in, so compare this value to work out which event is the most recent, rather than relying on the order they arrive in. Two events for the same object can carry the same number when they describe one change from two angles, such as a booking change and its guest-visit counterpart. Treat matching numbers as both being current, and use id to spot repeats.

tenantId
required
string

The Kadence account the event belongs to.

required
object

What caused the event.

type
required
string

What caused the event. user means a person did something. system means we did it, for example a scheduled job, or a change that followed on from another change. When the value is system, id and source are both empty.

id
string or null

The identifier of the person who did it. This is empty when we caused the event.

source
string or null

The app or service the person used, where we know it.

required
object

The object this event is about. It is the same on every event for that object.

object
required
string
Value: "booking"
id
required
string

The identifier of the object. Use it with sequence to tell which object the event is about and how recent it is.

required
object

A copy of the object as it was when the event happened. It does not change if the object changes afterwards.

id
string

The ULID of the booking.

object or null

Despite the name, this holds the whole object. Read createdUserId.id for the identifier.

Any of
id
string

The user's ULID within the Kadence platform.

email
string <email>

The user's email address.

firstName
string

The user's given name.

lastName
string

The user's family name.

jobTitle
string or null

The user's job title.

invitationPending
boolean

Whether the user's invitation to join Kadence is still pending. false once they have signed up.

preferredFloor
object

The user's preferred floor for booking when going into the office.

createdAt
string <date-time>

The date and time of when the user was created.

modifiedAt
string <date-time>

The date and time of when the user was last modified.

locale
string

An IETF language tag of the user's preferred locale.

timePreference
string
Enum: "default" "24H" "12H"

The user's preferred time format. default will follow the user's locale.

locationCityName
string or null

The city name of the user's usual location.

locationCountryCode
string or null

The ISO 3166-1 alpha-2 country code of the user's usual location.

locationLatitude
number or null <float>

The latitude of the user's usual location, based on their city.

locationLongitude
number or null <float>

The longitude of the user's usual location, based on their city.

locationTimezone
string or null

The usual IANA time zone of the user, based on their city.

biography
string or null

A short biography.

monogram
string

A two-letter identifier made from the user's full name or email address.

object or null

Despite the name, this holds the whole object. Read userId.id for the identifier.

Any of
id
string

The user's ULID within the Kadence platform.

email
string <email>

The user's email address.

firstName
string

The user's given name.

lastName
string

The user's family name.

jobTitle
string or null

The user's job title.

invitationPending
boolean

Whether the user's invitation to join Kadence is still pending. false once they have signed up.

preferredFloor
object

The user's preferred floor for booking when going into the office.

createdAt
string <date-time>

The date and time of when the user was created.

modifiedAt
string <date-time>

The date and time of when the user was last modified.

locale
string

An IETF language tag of the user's preferred locale.

timePreference
string
Enum: "default" "24H" "12H"

The user's preferred time format. default will follow the user's locale.

locationCityName
string or null

The city name of the user's usual location.

locationCountryCode
string or null

The ISO 3166-1 alpha-2 country code of the user's usual location.

locationLatitude
number or null <float>

The latitude of the user's usual location, based on their city.

locationLongitude
number or null <float>

The longitude of the user's usual location, based on their city.

locationTimezone
string or null

The usual IANA time zone of the user, based on their city.

biography
string or null

A short biography.

monogram
string

A two-letter identifier made from the user's full name or email address.

object or null

The space that was booked. Holds the whole object, not an identifier.

Any of
id
string

The ULID of the space.

name
string

The name of the space.

type
string

The type of space.

capacity
integer

How many people the space holds. A desk is 1. A room is its seating capacity.

object or null

The floor the space is on. Holds the whole object, not an identifier.

Any of
id
string

The ULID of the floor.

name
string

The name of the floor.

object or null

The neighborhood the space belongs to, if it is in one. Holds the whole object, not an identifier.

Any of
id
string

The ULID of the neighborhood.

name
string

The name of the neighborhood.

photo
string

The UUID of the photo of the space.

photoUrl
string or null

A link to the photo, ready to use. Null when there is no photo.

photoTemplateUrl
string or null

The same link with the size left as a placeholder, so you can ask for the dimensions you need. Null when there is no photo.

startDate
string <date-time>

The date and time of the beginning of the booking.

endDate
string <date-time>

The date and time of the end of the booking.

createdAt
string <date-time>

The date and time the booking was created at.

updatedAt
string <date-time>

The date and time the booking was last updated at.

object or null

Despite the name, this holds the whole object. Read checkedInUserId.id for the identifier.

Any of
id
string

The user's ULID within the Kadence platform.

email
string <email>

The user's email address.

firstName
string

The user's given name.

lastName
string

The user's family name.

jobTitle
string or null

The user's job title.

invitationPending
boolean

Whether the user's invitation to join Kadence is still pending. false once they have signed up.

preferredFloor
object

The user's preferred floor for booking when going into the office.

createdAt
string <date-time>

The date and time of when the user was created.

modifiedAt
string <date-time>

The date and time of when the user was last modified.

locale
string

An IETF language tag of the user's preferred locale.

timePreference
string
Enum: "default" "24H" "12H"

The user's preferred time format. default will follow the user's locale.

locationCityName
string or null

The city name of the user's usual location.

locationCountryCode
string or null

The ISO 3166-1 alpha-2 country code of the user's usual location.

locationLatitude
number or null <float>

The latitude of the user's usual location, based on their city.

locationLongitude
number or null <float>

The longitude of the user's usual location, based on their city.

locationTimezone
string or null

The usual IANA time zone of the user, based on their city.

biography
string or null

A short biography.

monogram
string

A two-letter identifier made from the user's full name or email address.

checkedInDate
string <date-time>

The date and time the booking was checked in at.

checkedInSource
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was checked in from.

checkInMethod
string or null
Enum: "doorAccess" "wifi" "geofence" "sensor"

If checked in from the public API, the method used during check in.

checkOutMethod
string or null
Enum: "doorAccess" "wifi" "geofence" "sensor"

If checked out from the public API, the method used during check out.

object or null

Despite the name, this holds the whole object. Read checkedOutUser.id for the identifier.

Any of
id
string

The user's ULID within the Kadence platform.

email
string <email>

The user's email address.

firstName
string

The user's given name.

lastName
string

The user's family name.

jobTitle
string or null

The user's job title.

invitationPending
boolean

Whether the user's invitation to join Kadence is still pending. false once they have signed up.

preferredFloor
object

The user's preferred floor for booking when going into the office.

createdAt
string <date-time>

The date and time of when the user was created.

modifiedAt
string <date-time>

The date and time of when the user was last modified.

locale
string

An IETF language tag of the user's preferred locale.

timePreference
string
Enum: "default" "24H" "12H"

The user's preferred time format. default will follow the user's locale.

locationCityName
string or null

The city name of the user's usual location.

locationCountryCode
string or null

The ISO 3166-1 alpha-2 country code of the user's usual location.

locationLatitude
number or null <float>

The latitude of the user's usual location, based on their city.

locationLongitude
number or null <float>

The longitude of the user's usual location, based on their city.

locationTimezone
string or null

The usual IANA time zone of the user, based on their city.

biography
string or null

A short biography.

monogram
string

A two-letter identifier made from the user's full name or email address.

checkedOutDate
string <date-time>

The date and time the booking was checked out at.

checkOutSource
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was checked out from.

permanent
boolean

Whether this booking came from an assigned space.

hasGuests
boolean

Whether this booking has guests.

guestBooking
boolean

Whether this booking is for a guest.

recurringBooking
boolean

Whether this booking is part of a recurring series.

selfCertifiedDate
string <date-time>

The date and time the booking was self-certified at.

selfCertifySource
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was self-certified from.

source
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was created from.

autoReleasedDate
string or null <date-time>

The date and time the booking was auto released.

object or null

Despite the name, this holds the whole object. Read cancelledUserId.id for the identifier.

Any of
id
string

The user's ULID within the Kadence platform.

email
string <email>

The user's email address.

firstName
string

The user's given name.

lastName
string

The user's family name.

jobTitle
string or null

The user's job title.

invitationPending
boolean

Whether the user's invitation to join Kadence is still pending. false once they have signed up.

preferredFloor
object

The user's preferred floor for booking when going into the office.

createdAt
string <date-time>

The date and time of when the user was created.

modifiedAt
string <date-time>

The date and time of when the user was last modified.

locale
string

An IETF language tag of the user's preferred locale.

timePreference
string
Enum: "default" "24H" "12H"

The user's preferred time format. default will follow the user's locale.

locationCityName
string or null

The city name of the user's usual location.

locationCountryCode
string or null

The ISO 3166-1 alpha-2 country code of the user's usual location.

locationLatitude
number or null <float>

The latitude of the user's usual location, based on their city.

locationLongitude
number or null <float>

The longitude of the user's usual location, based on their city.

locationTimezone
string or null

The usual IANA time zone of the user, based on their city.

biography
string or null

A short biography.

monogram
string

A two-letter identifier made from the user's full name or email address.

bookingUserEmail
string or null

The email of the user who the booking is for.

bookingCreatedByUserEmail
string or null

The email of the user who created the booking.

cancelledDate
string or null <date-time>

If cancelled, the date and time the booking was cancelled.

cancellationReason
string or null
Enum: "byUser" "byUserInBulk" "autoSpaceRelease" "permanentDesk" "changeInBuildingPolicy" "changeInCompanyPolicy" "removedFromCalendarByProvider" "removedFromCalendarByKadence" "calendarSyncError" "spaceNoLongerAvailable" "spaceRestricted" "spaceNotRestrictedAnymore" "userDeleted" "buildingClosure"

If cancelled, the reason for the cancellation.

title
string or null

If a room booking, the title of the associated calendar event.

status
string
Enum: "booked" "checkedIn" "checkedOut" "cancelled" "completed" "noCheckIn" "unknown"

The current booking status.

type
string
Enum: "desk" "private_office" "room" "onsite" "locker" "pod" "parking"

The type of booking.

onlineMeeting
boolean or null

For a room booking, whether the linked calendar event is an online meeting.

onlineMeetingUrl
boolean or null

For a room booking, the online meeting joining URL, if available.

icalUid
boolean or null

If a room booking, the associated iCal UID of the calendar event.

object

Holds the whole object, not an identifier.

id
string

The ULID of the building.

name
string

The name of the building.

timeZone
string

The IANA time zone that the building is in.

latitude
number <float>

The latitude of the building's location.

longitude
number <float>

The longitude of the building's location.

addressLine1
string

The first line of the building address.

addressLine2
string or null

The second line of the building address.

city
string

The name of the city that the building is in.

county
string or null

The name of the county that the building is in.

countryCode
string

The ISO 3166-1 alpha-2 country code that the building is in.

postalCode
string or null

The postal or ZIP code that the building is in.

photo
string

The UUID of the photo of the building.

createdAt
string <date-time>

The date and time that the building was created at.

modifiedAt
string <date-time>

The date and time that the building was last modified at.

photoUrl
string or null

A link to the photo, ready to use. Null when there is no photo.

photoTemplateUrl
string or null

The same link with the size left as a placeholder, so you can ask for the dimensions you need. Null when there is no photo.

object

The values these fields held before the change. Only the fields that changed are listed, using the same names as data. If a field is missing, that field didn't change. A missing field does not mean the value was empty. Where the old value was an object rather than a single value, we send it as empty.

property name*
additional property
string or number or boolean or null

Responses

Request samples

Content type
application/json
{
  • "id": "01K1XQ7Z9M4B2N8P5R3T6V0W2Y",
  • "schemaVersion": 1,
  • "type": "booking.cancelled",
  • "category": "booking",
  • "occurredAt": "2026-08-08T09:14:22+00:00",
  • "sequence": 1754645662123,
  • "tenantId": "01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "actor": {
    • "type": "user",
    • "id": "01H8QW3ZC4RN7XKD2M6VB9TF5A",
    • "source": "ios"
    },
  • "target": {
    • "object": "booking",
    • "id": "01JB4KQ2X8HN5YT7WZ3PC6MR9D"
    },
  • "data": {
    • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
    • "createdUserId": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "email": "john.smith@example.com",
      • "firstName": "John",
      • "lastName": "Smith",
      • "jobTitle": "Head of Marketing",
      • "invitationPending": true,
      • "preferredFloor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 1"
        },
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "locale": "en-GB",
      • "timePreference": "default",
      • "locationCityName": "London",
      • "locationCountryCode": "GB",
      • "locationLatitude": 51.509865,
      • "locationLongitude": -0.118092,
      • "locationTimezone": "Europe/London",
      • "biography": "Head of Marketing, based in London.",
      • "monogram": "JS"
      },
    • "userId": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "email": "john.smith@example.com",
      • "firstName": "John",
      • "lastName": "Smith",
      • "jobTitle": "Head of Marketing",
      • "invitationPending": true,
      • "preferredFloor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 1"
        },
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "locale": "en-GB",
      • "timePreference": "default",
      • "locationCityName": "London",
      • "locationCountryCode": "GB",
      • "locationLatitude": 51.509865,
      • "locationLongitude": -0.118092,
      • "locationTimezone": "Europe/London",
      • "biography": "Head of Marketing, based in London.",
      • "monogram": "JS"
      },
    • "space": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "name": "Desk 01",
      • "type": "desk",
      • "capacity": 8,
      • "floor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 01"
        },
      • "neighborhood": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Sales"
        },
      • "photo": "b74b830a-cf26-47bd-9dbc-237571c79fc3",
      • "photoTemplateUrl": "string"
      },
    • "startDate": "2017-07-21T17:32:28+00:00",
    • "endDate": "2017-07-21T17:32:28+00:00",
    • "createdAt": "2017-07-21T17:32:28+00:00",
    • "updatedAt": "2017-07-21T17:32:28+00:00",
    • "checkedInUserId": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "email": "john.smith@example.com",
      • "firstName": "John",
      • "lastName": "Smith",
      • "jobTitle": "Head of Marketing",
      • "invitationPending": true,
      • "preferredFloor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 1"
        },
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "locale": "en-GB",
      • "timePreference": "default",
      • "locationCityName": "London",
      • "locationCountryCode": "GB",
      • "locationLatitude": 51.509865,
      • "locationLongitude": -0.118092,
      • "locationTimezone": "Europe/London",
      • "biography": "Head of Marketing, based in London.",
      • "monogram": "JS"
      },
    • "checkedInDate": "2017-07-21T17:32:28+00:00",
    • "checkedInSource": "web",
    • "checkInMethod": "doorAccess",
    • "checkOutMethod": "doorAccess",
    • "checkedOutUser": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "email": "john.smith@example.com",
      • "firstName": "John",
      • "lastName": "Smith",
      • "jobTitle": "Head of Marketing",
      • "invitationPending": true,
      • "preferredFloor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 1"
        },
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "locale": "en-GB",
      • "timePreference": "default",
      • "locationCityName": "London",
      • "locationCountryCode": "GB",
      • "locationLatitude": 51.509865,
      • "locationLongitude": -0.118092,
      • "locationTimezone": "Europe/London",
      • "biography": "Head of Marketing, based in London.",
      • "monogram": "JS"
      },
    • "checkedOutDate": "2017-07-21T17:32:28+00:00",
    • "checkOutSource": "web",
    • "permanent": false,
    • "hasGuests": false,
    • "guestBooking": false,
    • "recurringBooking": false,
    • "selfCertifiedDate": "2017-07-21T17:32:28+00:00",
    • "selfCertifySource": "web",
    • "source": "web",
    • "autoReleasedDate": "2017-07-21T17:32:28+00:00",
    • "cancelledUserId": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "email": "john.smith@example.com",
      • "firstName": "John",
      • "lastName": "Smith",
      • "jobTitle": "Head of Marketing",
      • "invitationPending": true,
      • "preferredFloor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 1"
        },
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "locale": "en-GB",
      • "timePreference": "default",
      • "locationCityName": "London",
      • "locationCountryCode": "GB",
      • "locationLatitude": 51.509865,
      • "locationLongitude": -0.118092,
      • "locationTimezone": "Europe/London",
      • "biography": "Head of Marketing, based in London.",
      • "monogram": "JS"
      },
    • "bookingUserEmail": "john@example.com",
    • "bookingCreatedByUserEmail": "john@example.com",
    • "cancelledDate": "2017-07-21T17:32:28+00:00",
    • "cancellationReason": "byUser",
    • "title": null,
    • "status": "booked",
    • "type": "desk",
    • "onlineMeeting": null,
    • "onlineMeetingUrl": null,
    • "icalUid": null,
    • "building": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "name": "London Office",
      • "timeZone": "Europe/London",
      • "latitude": 51.509865,
      • "longitude": -0.118092,
      • "addressLine1": "20 Fenchurch Street",
      • "addressLine2": null,
      • "city": "London",
      • "county": null,
      • "countryCode": "GB",
      • "postalCode": "SE1 8PB",
      • "photo": "b74b830a-cf26-47bd-9dbc-237571c79fc3",
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "photoTemplateUrl": "string"
      }
    },
  • "previous": {
    • "status": "booked"
    }
}

booking.checkedIn Webhook

Someone checked in to a booking.

You can subscribe to this event on its own, or to the whole booking group.

header Parameters
Kadence-Webhook-Id
required
string

The identifier for this event. It matches the id in the body. Use it to spot repeats.

Kadence-Webhook-Type
required
string

The type of event. Use it to send the delivery to the right place without reading the body.

Kadence-Webhook-Timestamp
required
string

The time we signed the delivery, in seconds. It is part of the signed value, so it cannot be changed without breaking the signature. Compare it with the time the request arrived if you want to reject requests that have been held for a long time.

Kadence-Webhook-Subscription
required
string

The webhook that produced this delivery. Useful when you have more than one.

Kadence-Webhook-Attempt
required
string

Which attempt this is, starting at 1. This header is present on the first attempt as well, so treat every delivery as one that might be a repeat.

Kadence-Webhook-Signature
required
string

Proof that the delivery came from us. The value is v1= followed by the HMAC-SHA256 of {timestamp}.{rawBody}, using your signing secret, in hex. Work out the same value and compare the two with a constant-time comparison. Use the exact bytes you received. While you are replacing a secret this header holds two values separated by a space, and either one matching is valid.

Request Body schema: application/json
required
id
required
string

The unique identifier for this event. We can send the same event more than once, so use this value to spot repeats. It stays the same on every attempt.

schemaVersion
required
integer
Value: 1

The version of the event format. We'll increase this number if the format changes in a way that could break your code.

type
required
string
Value: "booking.checkedIn"

What happened. Switch on this value to decide how to handle the delivery.

category
required
string
Value: "booking"

The group this event belongs to. You can subscribe to a whole group instead of picking events one at a time.

occurredAt
required
string <date-time>

When the event happened. Times are in UTC and include the offset, the same as the rest of our public API.

sequence
required
integer <int64>

A number that goes up as an object changes. Events can arrive in a different order to the one they happened in, so compare this value to work out which event is the most recent, rather than relying on the order they arrive in. Two events for the same object can carry the same number when they describe one change from two angles, such as a booking change and its guest-visit counterpart. Treat matching numbers as both being current, and use id to spot repeats.

tenantId
required
string

The Kadence account the event belongs to.

required
object

What caused the event.

type
required
string

What caused the event. user means a person did something. system means we did it, for example a scheduled job, or a change that followed on from another change. When the value is system, id and source are both empty.

id
string or null

The identifier of the person who did it. This is empty when we caused the event.

source
string or null

The app or service the person used, where we know it.

required
object

The object this event is about. It is the same on every event for that object.

object
required
string
Value: "booking"
id
required
string

The identifier of the object. Use it with sequence to tell which object the event is about and how recent it is.

required
object

A copy of the object as it was when the event happened. It does not change if the object changes afterwards.

id
string

The ULID of the booking.

object or null

Despite the name, this holds the whole object. Read createdUserId.id for the identifier.

Any of
id
string

The user's ULID within the Kadence platform.

email
string <email>

The user's email address.

firstName
string

The user's given name.

lastName
string

The user's family name.

jobTitle
string or null

The user's job title.

invitationPending
boolean

Whether the user's invitation to join Kadence is still pending. false once they have signed up.

preferredFloor
object

The user's preferred floor for booking when going into the office.

createdAt
string <date-time>

The date and time of when the user was created.

modifiedAt
string <date-time>

The date and time of when the user was last modified.

locale
string

An IETF language tag of the user's preferred locale.

timePreference
string
Enum: "default" "24H" "12H"

The user's preferred time format. default will follow the user's locale.

locationCityName
string or null

The city name of the user's usual location.

locationCountryCode
string or null

The ISO 3166-1 alpha-2 country code of the user's usual location.

locationLatitude
number or null <float>

The latitude of the user's usual location, based on their city.

locationLongitude
number or null <float>

The longitude of the user's usual location, based on their city.

locationTimezone
string or null

The usual IANA time zone of the user, based on their city.

biography
string or null

A short biography.

monogram
string

A two-letter identifier made from the user's full name or email address.

object or null

Despite the name, this holds the whole object. Read userId.id for the identifier.

Any of
id
string

The user's ULID within the Kadence platform.

email
string <email>

The user's email address.

firstName
string

The user's given name.

lastName
string

The user's family name.

jobTitle
string or null

The user's job title.

invitationPending
boolean

Whether the user's invitation to join Kadence is still pending. false once they have signed up.

preferredFloor
object

The user's preferred floor for booking when going into the office.

createdAt
string <date-time>

The date and time of when the user was created.

modifiedAt
string <date-time>

The date and time of when the user was last modified.

locale
string

An IETF language tag of the user's preferred locale.

timePreference
string
Enum: "default" "24H" "12H"

The user's preferred time format. default will follow the user's locale.

locationCityName
string or null

The city name of the user's usual location.

locationCountryCode
string or null

The ISO 3166-1 alpha-2 country code of the user's usual location.

locationLatitude
number or null <float>

The latitude of the user's usual location, based on their city.

locationLongitude
number or null <float>

The longitude of the user's usual location, based on their city.

locationTimezone
string or null

The usual IANA time zone of the user, based on their city.

biography
string or null

A short biography.

monogram
string

A two-letter identifier made from the user's full name or email address.

object or null

The space that was booked. Holds the whole object, not an identifier.

Any of
id
string

The ULID of the space.

name
string

The name of the space.

type
string

The type of space.

capacity
integer

How many people the space holds. A desk is 1. A room is its seating capacity.

object or null

The floor the space is on. Holds the whole object, not an identifier.

Any of
id
string

The ULID of the floor.

name
string

The name of the floor.

object or null

The neighborhood the space belongs to, if it is in one. Holds the whole object, not an identifier.

Any of
id
string

The ULID of the neighborhood.

name
string

The name of the neighborhood.

photo
string

The UUID of the photo of the space.

photoUrl
string or null

A link to the photo, ready to use. Null when there is no photo.

photoTemplateUrl
string or null

The same link with the size left as a placeholder, so you can ask for the dimensions you need. Null when there is no photo.

startDate
string <date-time>

The date and time of the beginning of the booking.

endDate
string <date-time>

The date and time of the end of the booking.

createdAt
string <date-time>

The date and time the booking was created at.

updatedAt
string <date-time>

The date and time the booking was last updated at.

object or null

Despite the name, this holds the whole object. Read checkedInUserId.id for the identifier.

Any of
id
string

The user's ULID within the Kadence platform.

email
string <email>

The user's email address.

firstName
string

The user's given name.

lastName
string

The user's family name.

jobTitle
string or null

The user's job title.

invitationPending
boolean

Whether the user's invitation to join Kadence is still pending. false once they have signed up.

preferredFloor
object

The user's preferred floor for booking when going into the office.

createdAt
string <date-time>

The date and time of when the user was created.

modifiedAt
string <date-time>

The date and time of when the user was last modified.

locale
string

An IETF language tag of the user's preferred locale.

timePreference
string
Enum: "default" "24H" "12H"

The user's preferred time format. default will follow the user's locale.

locationCityName
string or null

The city name of the user's usual location.

locationCountryCode
string or null

The ISO 3166-1 alpha-2 country code of the user's usual location.

locationLatitude
number or null <float>

The latitude of the user's usual location, based on their city.

locationLongitude
number or null <float>

The longitude of the user's usual location, based on their city.

locationTimezone
string or null

The usual IANA time zone of the user, based on their city.

biography
string or null

A short biography.

monogram
string

A two-letter identifier made from the user's full name or email address.

checkedInDate
string <date-time>

The date and time the booking was checked in at.

checkedInSource
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was checked in from.

checkInMethod
string or null
Enum: "doorAccess" "wifi" "geofence" "sensor"

If checked in from the public API, the method used during check in.

checkOutMethod
string or null
Enum: "doorAccess" "wifi" "geofence" "sensor"

If checked out from the public API, the method used during check out.

object or null

Despite the name, this holds the whole object. Read checkedOutUser.id for the identifier.

Any of
id
string

The user's ULID within the Kadence platform.

email
string <email>

The user's email address.

firstName
string

The user's given name.

lastName
string

The user's family name.

jobTitle
string or null

The user's job title.

invitationPending
boolean

Whether the user's invitation to join Kadence is still pending. false once they have signed up.

preferredFloor
object

The user's preferred floor for booking when going into the office.

createdAt
string <date-time>

The date and time of when the user was created.

modifiedAt
string <date-time>

The date and time of when the user was last modified.

locale
string

An IETF language tag of the user's preferred locale.

timePreference
string
Enum: "default" "24H" "12H"

The user's preferred time format. default will follow the user's locale.

locationCityName
string or null

The city name of the user's usual location.

locationCountryCode
string or null

The ISO 3166-1 alpha-2 country code of the user's usual location.

locationLatitude
number or null <float>

The latitude of the user's usual location, based on their city.

locationLongitude
number or null <float>

The longitude of the user's usual location, based on their city.

locationTimezone
string or null

The usual IANA time zone of the user, based on their city.

biography
string or null

A short biography.

monogram
string

A two-letter identifier made from the user's full name or email address.

checkedOutDate
string <date-time>

The date and time the booking was checked out at.

checkOutSource
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was checked out from.

permanent
boolean

Whether this booking came from an assigned space.

hasGuests
boolean

Whether this booking has guests.

guestBooking
boolean

Whether this booking is for a guest.

recurringBooking
boolean

Whether this booking is part of a recurring series.

selfCertifiedDate
string <date-time>

The date and time the booking was self-certified at.

selfCertifySource
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was self-certified from.

source
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was created from.

autoReleasedDate
string or null <date-time>

The date and time the booking was auto released.

object or null

Despite the name, this holds the whole object. Read cancelledUserId.id for the identifier.

Any of
id
string

The user's ULID within the Kadence platform.

email
string <email>

The user's email address.

firstName
string

The user's given name.

lastName
string

The user's family name.

jobTitle
string or null

The user's job title.

invitationPending
boolean

Whether the user's invitation to join Kadence is still pending. false once they have signed up.

preferredFloor
object

The user's preferred floor for booking when going into the office.

createdAt
string <date-time>

The date and time of when the user was created.

modifiedAt
string <date-time>

The date and time of when the user was last modified.

locale
string

An IETF language tag of the user's preferred locale.

timePreference
string
Enum: "default" "24H" "12H"

The user's preferred time format. default will follow the user's locale.

locationCityName
string or null

The city name of the user's usual location.

locationCountryCode
string or null

The ISO 3166-1 alpha-2 country code of the user's usual location.

locationLatitude
number or null <float>

The latitude of the user's usual location, based on their city.

locationLongitude
number or null <float>

The longitude of the user's usual location, based on their city.

locationTimezone
string or null

The usual IANA time zone of the user, based on their city.

biography
string or null

A short biography.

monogram
string

A two-letter identifier made from the user's full name or email address.

bookingUserEmail
string or null

The email of the user who the booking is for.

bookingCreatedByUserEmail
string or null

The email of the user who created the booking.

cancelledDate
string or null <date-time>

If cancelled, the date and time the booking was cancelled.

cancellationReason
string or null
Enum: "byUser" "byUserInBulk" "autoSpaceRelease" "permanentDesk" "changeInBuildingPolicy" "changeInCompanyPolicy" "removedFromCalendarByProvider" "removedFromCalendarByKadence" "calendarSyncError" "spaceNoLongerAvailable" "spaceRestricted" "spaceNotRestrictedAnymore" "userDeleted" "buildingClosure"

If cancelled, the reason for the cancellation.

title
string or null

If a room booking, the title of the associated calendar event.

status
string
Enum: "booked" "checkedIn" "checkedOut" "cancelled" "completed" "noCheckIn" "unknown"

The current booking status.

type
string
Enum: "desk" "private_office" "room" "onsite" "locker" "pod" "parking"

The type of booking.

onlineMeeting
boolean or null

For a room booking, whether the linked calendar event is an online meeting.

onlineMeetingUrl
boolean or null

For a room booking, the online meeting joining URL, if available.

icalUid
boolean or null

If a room booking, the associated iCal UID of the calendar event.

object

Holds the whole object, not an identifier.

id
string

The ULID of the building.

name
string

The name of the building.

timeZone
string

The IANA time zone that the building is in.

latitude
number <float>

The latitude of the building's location.

longitude
number <float>

The longitude of the building's location.

addressLine1
string

The first line of the building address.

addressLine2
string or null

The second line of the building address.

city
string

The name of the city that the building is in.

county
string or null

The name of the county that the building is in.

countryCode
string

The ISO 3166-1 alpha-2 country code that the building is in.

postalCode
string or null

The postal or ZIP code that the building is in.

photo
string

The UUID of the photo of the building.

createdAt
string <date-time>

The date and time that the building was created at.

modifiedAt
string <date-time>

The date and time that the building was last modified at.

photoUrl
string or null

A link to the photo, ready to use. Null when there is no photo.

photoTemplateUrl
string or null

The same link with the size left as a placeholder, so you can ask for the dimensions you need. Null when there is no photo.

object

The values these fields held before the change. Only the fields that changed are listed, using the same names as data. If a field is missing, that field didn't change. A missing field does not mean the value was empty. Where the old value was an object rather than a single value, we send it as empty.

property name*
additional property
string or number or boolean or null

Responses

Request samples

Content type
application/json
{
  • "id": "01K1XQ7Z9M4B2N8P5R3T6V0W2Y",
  • "schemaVersion": 1,
  • "type": "booking.checkedIn",
  • "category": "booking",
  • "occurredAt": "2026-08-08T09:14:22+00:00",
  • "sequence": 1754645662123,
  • "tenantId": "01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "actor": {
    • "type": "user",
    • "id": "01H8QW3ZC4RN7XKD2M6VB9TF5A",
    • "source": "ios"
    },
  • "target": {
    • "object": "booking",
    • "id": "01JB4KQ2X8HN5YT7WZ3PC6MR9D"
    },
  • "data": {
    • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
    • "createdUserId": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "email": "john.smith@example.com",
      • "firstName": "John",
      • "lastName": "Smith",
      • "jobTitle": "Head of Marketing",
      • "invitationPending": true,
      • "preferredFloor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 1"
        },
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "locale": "en-GB",
      • "timePreference": "default",
      • "locationCityName": "London",
      • "locationCountryCode": "GB",
      • "locationLatitude": 51.509865,
      • "locationLongitude": -0.118092,
      • "locationTimezone": "Europe/London",
      • "biography": "Head of Marketing, based in London.",
      • "monogram": "JS"
      },
    • "userId": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "email": "john.smith@example.com",
      • "firstName": "John",
      • "lastName": "Smith",
      • "jobTitle": "Head of Marketing",
      • "invitationPending": true,
      • "preferredFloor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 1"
        },
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "locale": "en-GB",
      • "timePreference": "default",
      • "locationCityName": "London",
      • "locationCountryCode": "GB",
      • "locationLatitude": 51.509865,
      • "locationLongitude": -0.118092,
      • "locationTimezone": "Europe/London",
      • "biography": "Head of Marketing, based in London.",
      • "monogram": "JS"
      },
    • "space": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "name": "Desk 01",
      • "type": "desk",
      • "capacity": 8,
      • "floor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 01"
        },
      • "neighborhood": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Sales"
        },
      • "photo": "b74b830a-cf26-47bd-9dbc-237571c79fc3",
      • "photoTemplateUrl": "string"
      },
    • "startDate": "2017-07-21T17:32:28+00:00",
    • "endDate": "2017-07-21T17:32:28+00:00",
    • "createdAt": "2017-07-21T17:32:28+00:00",
    • "updatedAt": "2017-07-21T17:32:28+00:00",
    • "checkedInUserId": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "email": "john.smith@example.com",
      • "firstName": "John",
      • "lastName": "Smith",
      • "jobTitle": "Head of Marketing",
      • "invitationPending": true,
      • "preferredFloor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 1"
        },
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "locale": "en-GB",
      • "timePreference": "default",
      • "locationCityName": "London",
      • "locationCountryCode": "GB",
      • "locationLatitude": 51.509865,
      • "locationLongitude": -0.118092,
      • "locationTimezone": "Europe/London",
      • "biography": "Head of Marketing, based in London.",
      • "monogram": "JS"
      },
    • "checkedInDate": "2017-07-21T17:32:28+00:00",
    • "checkedInSource": "web",
    • "checkInMethod": "doorAccess",
    • "checkOutMethod": "doorAccess",
    • "checkedOutUser": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "email": "john.smith@example.com",
      • "firstName": "John",
      • "lastName": "Smith",
      • "jobTitle": "Head of Marketing",
      • "invitationPending": true,
      • "preferredFloor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 1"
        },
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "locale": "en-GB",
      • "timePreference": "default",
      • "locationCityName": "London",
      • "locationCountryCode": "GB",
      • "locationLatitude": 51.509865,
      • "locationLongitude": -0.118092,
      • "locationTimezone": "Europe/London",
      • "biography": "Head of Marketing, based in London.",
      • "monogram": "JS"
      },
    • "checkedOutDate": "2017-07-21T17:32:28+00:00",
    • "checkOutSource": "web",
    • "permanent": false,
    • "hasGuests": false,
    • "guestBooking": false,
    • "recurringBooking": false,
    • "selfCertifiedDate": "2017-07-21T17:32:28+00:00",
    • "selfCertifySource": "web",
    • "source": "web",
    • "autoReleasedDate": "2017-07-21T17:32:28+00:00",
    • "cancelledUserId": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "email": "john.smith@example.com",
      • "firstName": "John",
      • "lastName": "Smith",
      • "jobTitle": "Head of Marketing",
      • "invitationPending": true,
      • "preferredFloor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 1"
        },
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "locale": "en-GB",
      • "timePreference": "default",
      • "locationCityName": "London",
      • "locationCountryCode": "GB",
      • "locationLatitude": 51.509865,
      • "locationLongitude": -0.118092,
      • "locationTimezone": "Europe/London",
      • "biography": "Head of Marketing, based in London.",
      • "monogram": "JS"
      },
    • "bookingUserEmail": "john@example.com",
    • "bookingCreatedByUserEmail": "john@example.com",
    • "cancelledDate": "2017-07-21T17:32:28+00:00",
    • "cancellationReason": "byUser",
    • "title": null,
    • "status": "booked",
    • "type": "desk",
    • "onlineMeeting": null,
    • "onlineMeetingUrl": null,
    • "icalUid": null,
    • "building": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "name": "London Office",
      • "timeZone": "Europe/London",
      • "latitude": 51.509865,
      • "longitude": -0.118092,
      • "addressLine1": "20 Fenchurch Street",
      • "addressLine2": null,
      • "city": "London",
      • "county": null,
      • "countryCode": "GB",
      • "postalCode": "SE1 8PB",
      • "photo": "b74b830a-cf26-47bd-9dbc-237571c79fc3",
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "photoTemplateUrl": "string"
      }
    },
  • "previous": {
    • "status": "booked"
    }
}

booking.checkedOut Webhook

Someone checked out of a booking. Sent only where the resource is configured not to release on check-out. A released booking moves straight to completed, and completion is not published.

You can subscribe to this event on its own, or to the whole booking group.

header Parameters
Kadence-Webhook-Id
required
string

The identifier for this event. It matches the id in the body. Use it to spot repeats.

Kadence-Webhook-Type
required
string

The type of event. Use it to send the delivery to the right place without reading the body.

Kadence-Webhook-Timestamp
required
string

The time we signed the delivery, in seconds. It is part of the signed value, so it cannot be changed without breaking the signature. Compare it with the time the request arrived if you want to reject requests that have been held for a long time.

Kadence-Webhook-Subscription
required
string

The webhook that produced this delivery. Useful when you have more than one.

Kadence-Webhook-Attempt
required
string

Which attempt this is, starting at 1. This header is present on the first attempt as well, so treat every delivery as one that might be a repeat.

Kadence-Webhook-Signature
required
string

Proof that the delivery came from us. The value is v1= followed by the HMAC-SHA256 of {timestamp}.{rawBody}, using your signing secret, in hex. Work out the same value and compare the two with a constant-time comparison. Use the exact bytes you received. While you are replacing a secret this header holds two values separated by a space, and either one matching is valid.

Request Body schema: application/json
required
id
required
string

The unique identifier for this event. We can send the same event more than once, so use this value to spot repeats. It stays the same on every attempt.

schemaVersion
required
integer
Value: 1

The version of the event format. We'll increase this number if the format changes in a way that could break your code.

type
required
string
Value: "booking.checkedOut"

What happened. Switch on this value to decide how to handle the delivery.

category
required
string
Value: "booking"

The group this event belongs to. You can subscribe to a whole group instead of picking events one at a time.

occurredAt
required
string <date-time>

When the event happened. Times are in UTC and include the offset, the same as the rest of our public API.

sequence
required
integer <int64>

A number that goes up as an object changes. Events can arrive in a different order to the one they happened in, so compare this value to work out which event is the most recent, rather than relying on the order they arrive in. Two events for the same object can carry the same number when they describe one change from two angles, such as a booking change and its guest-visit counterpart. Treat matching numbers as both being current, and use id to spot repeats.

tenantId
required
string

The Kadence account the event belongs to.

required
object

What caused the event.

type
required
string

What caused the event. user means a person did something. system means we did it, for example a scheduled job, or a change that followed on from another change. When the value is system, id and source are both empty.

id
string or null

The identifier of the person who did it. This is empty when we caused the event.

source
string or null

The app or service the person used, where we know it.

required
object

The object this event is about. It is the same on every event for that object.

object
required
string
Value: "booking"
id
required
string

The identifier of the object. Use it with sequence to tell which object the event is about and how recent it is.

required
object

A copy of the object as it was when the event happened. It does not change if the object changes afterwards.

id
string

The ULID of the booking.

object or null

Despite the name, this holds the whole object. Read createdUserId.id for the identifier.

Any of
id
string

The user's ULID within the Kadence platform.

email
string <email>

The user's email address.

firstName
string

The user's given name.

lastName
string

The user's family name.

jobTitle
string or null

The user's job title.

invitationPending
boolean

Whether the user's invitation to join Kadence is still pending. false once they have signed up.

preferredFloor
object

The user's preferred floor for booking when going into the office.

createdAt
string <date-time>

The date and time of when the user was created.

modifiedAt
string <date-time>

The date and time of when the user was last modified.

locale
string

An IETF language tag of the user's preferred locale.

timePreference
string
Enum: "default" "24H" "12H"

The user's preferred time format. default will follow the user's locale.

locationCityName
string or null

The city name of the user's usual location.

locationCountryCode
string or null

The ISO 3166-1 alpha-2 country code of the user's usual location.

locationLatitude
number or null <float>

The latitude of the user's usual location, based on their city.

locationLongitude
number or null <float>

The longitude of the user's usual location, based on their city.

locationTimezone
string or null

The usual IANA time zone of the user, based on their city.

biography
string or null

A short biography.

monogram
string

A two-letter identifier made from the user's full name or email address.

object or null

Despite the name, this holds the whole object. Read userId.id for the identifier.

Any of
id
string

The user's ULID within the Kadence platform.

email
string <email>

The user's email address.

firstName
string

The user's given name.

lastName
string

The user's family name.

jobTitle
string or null

The user's job title.

invitationPending
boolean

Whether the user's invitation to join Kadence is still pending. false once they have signed up.

preferredFloor
object

The user's preferred floor for booking when going into the office.

createdAt
string <date-time>

The date and time of when the user was created.

modifiedAt
string <date-time>

The date and time of when the user was last modified.

locale
string

An IETF language tag of the user's preferred locale.

timePreference
string
Enum: "default" "24H" "12H"

The user's preferred time format. default will follow the user's locale.

locationCityName
string or null

The city name of the user's usual location.

locationCountryCode
string or null

The ISO 3166-1 alpha-2 country code of the user's usual location.

locationLatitude
number or null <float>

The latitude of the user's usual location, based on their city.

locationLongitude
number or null <float>

The longitude of the user's usual location, based on their city.

locationTimezone
string or null

The usual IANA time zone of the user, based on their city.

biography
string or null

A short biography.

monogram
string

A two-letter identifier made from the user's full name or email address.

object or null

The space that was booked. Holds the whole object, not an identifier.

Any of
id
string

The ULID of the space.

name
string

The name of the space.

type
string

The type of space.

capacity
integer

How many people the space holds. A desk is 1. A room is its seating capacity.

object or null

The floor the space is on. Holds the whole object, not an identifier.

Any of
id
string

The ULID of the floor.

name
string

The name of the floor.

object or null

The neighborhood the space belongs to, if it is in one. Holds the whole object, not an identifier.

Any of
id
string

The ULID of the neighborhood.

name
string

The name of the neighborhood.

photo
string

The UUID of the photo of the space.

photoUrl
string or null

A link to the photo, ready to use. Null when there is no photo.

photoTemplateUrl
string or null

The same link with the size left as a placeholder, so you can ask for the dimensions you need. Null when there is no photo.

startDate
string <date-time>

The date and time of the beginning of the booking.

endDate
string <date-time>

The date and time of the end of the booking.

createdAt
string <date-time>

The date and time the booking was created at.

updatedAt
string <date-time>

The date and time the booking was last updated at.

object or null

Despite the name, this holds the whole object. Read checkedInUserId.id for the identifier.

Any of
id
string

The user's ULID within the Kadence platform.

email
string <email>

The user's email address.

firstName
string

The user's given name.

lastName
string

The user's family name.

jobTitle
string or null

The user's job title.

invitationPending
boolean

Whether the user's invitation to join Kadence is still pending. false once they have signed up.

preferredFloor
object

The user's preferred floor for booking when going into the office.

createdAt
string <date-time>

The date and time of when the user was created.

modifiedAt
string <date-time>

The date and time of when the user was last modified.

locale
string

An IETF language tag of the user's preferred locale.

timePreference
string
Enum: "default" "24H" "12H"

The user's preferred time format. default will follow the user's locale.

locationCityName
string or null

The city name of the user's usual location.

locationCountryCode
string or null

The ISO 3166-1 alpha-2 country code of the user's usual location.

locationLatitude
number or null <float>

The latitude of the user's usual location, based on their city.

locationLongitude
number or null <float>

The longitude of the user's usual location, based on their city.

locationTimezone
string or null

The usual IANA time zone of the user, based on their city.

biography
string or null

A short biography.

monogram
string

A two-letter identifier made from the user's full name or email address.

checkedInDate
string <date-time>

The date and time the booking was checked in at.

checkedInSource
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was checked in from.

checkInMethod
string or null
Enum: "doorAccess" "wifi" "geofence" "sensor"

If checked in from the public API, the method used during check in.

checkOutMethod
string or null
Enum: "doorAccess" "wifi" "geofence" "sensor"

If checked out from the public API, the method used during check out.

object or null

Despite the name, this holds the whole object. Read checkedOutUser.id for the identifier.

Any of
id
string

The user's ULID within the Kadence platform.

email
string <email>

The user's email address.

firstName
string

The user's given name.

lastName
string

The user's family name.

jobTitle
string or null

The user's job title.

invitationPending
boolean

Whether the user's invitation to join Kadence is still pending. false once they have signed up.

preferredFloor
object

The user's preferred floor for booking when going into the office.

createdAt
string <date-time>

The date and time of when the user was created.

modifiedAt
string <date-time>

The date and time of when the user was last modified.

locale
string

An IETF language tag of the user's preferred locale.

timePreference
string
Enum: "default" "24H" "12H"

The user's preferred time format. default will follow the user's locale.

locationCityName
string or null

The city name of the user's usual location.

locationCountryCode
string or null

The ISO 3166-1 alpha-2 country code of the user's usual location.

locationLatitude
number or null <float>

The latitude of the user's usual location, based on their city.

locationLongitude
number or null <float>

The longitude of the user's usual location, based on their city.

locationTimezone
string or null

The usual IANA time zone of the user, based on their city.

biography
string or null

A short biography.

monogram
string

A two-letter identifier made from the user's full name or email address.

checkedOutDate
string <date-time>

The date and time the booking was checked out at.

checkOutSource
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was checked out from.

permanent
boolean

Whether this booking came from an assigned space.

hasGuests
boolean

Whether this booking has guests.

guestBooking
boolean

Whether this booking is for a guest.

recurringBooking
boolean

Whether this booking is part of a recurring series.

selfCertifiedDate
string <date-time>

The date and time the booking was self-certified at.

selfCertifySource
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was self-certified from.

source
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was created from.

autoReleasedDate
string or null <date-time>

The date and time the booking was auto released.

object or null

Despite the name, this holds the whole object. Read cancelledUserId.id for the identifier.

Any of
id
string

The user's ULID within the Kadence platform.

email
string <email>

The user's email address.

firstName
string

The user's given name.

lastName
string

The user's family name.

jobTitle
string or null

The user's job title.

invitationPending
boolean

Whether the user's invitation to join Kadence is still pending. false once they have signed up.

preferredFloor
object

The user's preferred floor for booking when going into the office.

createdAt
string <date-time>

The date and time of when the user was created.

modifiedAt
string <date-time>

The date and time of when the user was last modified.

locale
string

An IETF language tag of the user's preferred locale.

timePreference
string
Enum: "default" "24H" "12H"

The user's preferred time format. default will follow the user's locale.

locationCityName
string or null

The city name of the user's usual location.

locationCountryCode
string or null

The ISO 3166-1 alpha-2 country code of the user's usual location.

locationLatitude
number or null <float>

The latitude of the user's usual location, based on their city.

locationLongitude
number or null <float>

The longitude of the user's usual location, based on their city.

locationTimezone
string or null

The usual IANA time zone of the user, based on their city.

biography
string or null

A short biography.

monogram
string

A two-letter identifier made from the user's full name or email address.

bookingUserEmail
string or null

The email of the user who the booking is for.

bookingCreatedByUserEmail
string or null

The email of the user who created the booking.

cancelledDate
string or null <date-time>

If cancelled, the date and time the booking was cancelled.

cancellationReason
string or null
Enum: "byUser" "byUserInBulk" "autoSpaceRelease" "permanentDesk" "changeInBuildingPolicy" "changeInCompanyPolicy" "removedFromCalendarByProvider" "removedFromCalendarByKadence" "calendarSyncError" "spaceNoLongerAvailable" "spaceRestricted" "spaceNotRestrictedAnymore" "userDeleted" "buildingClosure"

If cancelled, the reason for the cancellation.

title
string or null

If a room booking, the title of the associated calendar event.

status
string
Enum: "booked" "checkedIn" "checkedOut" "cancelled" "completed" "noCheckIn" "unknown"

The current booking status.

type
string
Enum: "desk" "private_office" "room" "onsite" "locker" "pod" "parking"

The type of booking.

onlineMeeting
boolean or null

For a room booking, whether the linked calendar event is an online meeting.

onlineMeetingUrl
boolean or null

For a room booking, the online meeting joining URL, if available.

icalUid
boolean or null

If a room booking, the associated iCal UID of the calendar event.

object

Holds the whole object, not an identifier.

id
string

The ULID of the building.

name
string

The name of the building.

timeZone
string

The IANA time zone that the building is in.

latitude
number <float>

The latitude of the building's location.

longitude
number <float>

The longitude of the building's location.

addressLine1
string

The first line of the building address.

addressLine2
string or null

The second line of the building address.

city
string

The name of the city that the building is in.

county
string or null

The name of the county that the building is in.

countryCode
string

The ISO 3166-1 alpha-2 country code that the building is in.

postalCode
string or null

The postal or ZIP code that the building is in.

photo
string

The UUID of the photo of the building.

createdAt
string <date-time>

The date and time that the building was created at.

modifiedAt
string <date-time>

The date and time that the building was last modified at.

photoUrl
string or null

A link to the photo, ready to use. Null when there is no photo.

photoTemplateUrl
string or null

The same link with the size left as a placeholder, so you can ask for the dimensions you need. Null when there is no photo.

object

The values these fields held before the change. Only the fields that changed are listed, using the same names as data. If a field is missing, that field didn't change. A missing field does not mean the value was empty. Where the old value was an object rather than a single value, we send it as empty.

property name*
additional property
string or number or boolean or null

Responses

Request samples

Content type
application/json
{
  • "id": "01K1XQ7Z9M4B2N8P5R3T6V0W2Y",
  • "schemaVersion": 1,
  • "type": "booking.checkedOut",
  • "category": "booking",
  • "occurredAt": "2026-08-08T09:14:22+00:00",
  • "sequence": 1754645662123,
  • "tenantId": "01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "actor": {
    • "type": "user",
    • "id": "01H8QW3ZC4RN7XKD2M6VB9TF5A",
    • "source": "ios"
    },
  • "target": {
    • "object": "booking",
    • "id": "01JB4KQ2X8HN5YT7WZ3PC6MR9D"
    },
  • "data": {
    • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
    • "createdUserId": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "email": "john.smith@example.com",
      • "firstName": "John",
      • "lastName": "Smith",
      • "jobTitle": "Head of Marketing",
      • "invitationPending": true,
      • "preferredFloor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 1"
        },
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "locale": "en-GB",
      • "timePreference": "default",
      • "locationCityName": "London",
      • "locationCountryCode": "GB",
      • "locationLatitude": 51.509865,
      • "locationLongitude": -0.118092,
      • "locationTimezone": "Europe/London",
      • "biography": "Head of Marketing, based in London.",
      • "monogram": "JS"
      },
    • "userId": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "email": "john.smith@example.com",
      • "firstName": "John",
      • "lastName": "Smith",
      • "jobTitle": "Head of Marketing",
      • "invitationPending": true,
      • "preferredFloor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 1"
        },
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "locale": "en-GB",
      • "timePreference": "default",
      • "locationCityName": "London",
      • "locationCountryCode": "GB",
      • "locationLatitude": 51.509865,
      • "locationLongitude": -0.118092,
      • "locationTimezone": "Europe/London",
      • "biography": "Head of Marketing, based in London.",
      • "monogram": "JS"
      },
    • "space": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "name": "Desk 01",
      • "type": "desk",
      • "capacity": 8,
      • "floor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 01"
        },
      • "neighborhood": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Sales"
        },
      • "photo": "b74b830a-cf26-47bd-9dbc-237571c79fc3",
      • "photoTemplateUrl": "string"
      },
    • "startDate": "2017-07-21T17:32:28+00:00",
    • "endDate": "2017-07-21T17:32:28+00:00",
    • "createdAt": "2017-07-21T17:32:28+00:00",
    • "updatedAt": "2017-07-21T17:32:28+00:00",
    • "checkedInUserId": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "email": "john.smith@example.com",
      • "firstName": "John",
      • "lastName": "Smith",
      • "jobTitle": "Head of Marketing",
      • "invitationPending": true,
      • "preferredFloor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 1"
        },
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "locale": "en-GB",
      • "timePreference": "default",
      • "locationCityName": "London",
      • "locationCountryCode": "GB",
      • "locationLatitude": 51.509865,
      • "locationLongitude": -0.118092,
      • "locationTimezone": "Europe/London",
      • "biography": "Head of Marketing, based in London.",
      • "monogram": "JS"
      },
    • "checkedInDate": "2017-07-21T17:32:28+00:00",
    • "checkedInSource": "web",
    • "checkInMethod": "doorAccess",
    • "checkOutMethod": "doorAccess",
    • "checkedOutUser": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "email": "john.smith@example.com",
      • "firstName": "John",
      • "lastName": "Smith",
      • "jobTitle": "Head of Marketing",
      • "invitationPending": true,
      • "preferredFloor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 1"
        },
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "locale": "en-GB",
      • "timePreference": "default",
      • "locationCityName": "London",
      • "locationCountryCode": "GB",
      • "locationLatitude": 51.509865,
      • "locationLongitude": -0.118092,
      • "locationTimezone": "Europe/London",
      • "biography": "Head of Marketing, based in London.",
      • "monogram": "JS"
      },
    • "checkedOutDate": "2017-07-21T17:32:28+00:00",
    • "checkOutSource": "web",
    • "permanent": false,
    • "hasGuests": false,
    • "guestBooking": false,
    • "recurringBooking": false,
    • "selfCertifiedDate": "2017-07-21T17:32:28+00:00",
    • "selfCertifySource": "web",
    • "source": "web",
    • "autoReleasedDate": "2017-07-21T17:32:28+00:00",
    • "cancelledUserId": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "email": "john.smith@example.com",
      • "firstName": "John",
      • "lastName": "Smith",
      • "jobTitle": "Head of Marketing",
      • "invitationPending": true,
      • "preferredFloor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 1"
        },
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "locale": "en-GB",
      • "timePreference": "default",
      • "locationCityName": "London",
      • "locationCountryCode": "GB",
      • "locationLatitude": 51.509865,
      • "locationLongitude": -0.118092,
      • "locationTimezone": "Europe/London",
      • "biography": "Head of Marketing, based in London.",
      • "monogram": "JS"
      },
    • "bookingUserEmail": "john@example.com",
    • "bookingCreatedByUserEmail": "john@example.com",
    • "cancelledDate": "2017-07-21T17:32:28+00:00",
    • "cancellationReason": "byUser",
    • "title": null,
    • "status": "booked",
    • "type": "desk",
    • "onlineMeeting": null,
    • "onlineMeetingUrl": null,
    • "icalUid": null,
    • "building": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "name": "London Office",
      • "timeZone": "Europe/London",
      • "latitude": 51.509865,
      • "longitude": -0.118092,
      • "addressLine1": "20 Fenchurch Street",
      • "addressLine2": null,
      • "city": "London",
      • "county": null,
      • "countryCode": "GB",
      • "postalCode": "SE1 8PB",
      • "photo": "b74b830a-cf26-47bd-9dbc-237571c79fc3",
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "photoTemplateUrl": "string"
      }
    },
  • "previous": {
    • "status": "checkedIn"
    }
}

booking.autoReleased Webhook

A booking was released because nobody checked in. The space is free again.

You can subscribe to this event on its own, or to the whole booking group.

header Parameters
Kadence-Webhook-Id
required
string

The identifier for this event. It matches the id in the body. Use it to spot repeats.

Kadence-Webhook-Type
required
string

The type of event. Use it to send the delivery to the right place without reading the body.

Kadence-Webhook-Timestamp
required
string

The time we signed the delivery, in seconds. It is part of the signed value, so it cannot be changed without breaking the signature. Compare it with the time the request arrived if you want to reject requests that have been held for a long time.

Kadence-Webhook-Subscription
required
string

The webhook that produced this delivery. Useful when you have more than one.

Kadence-Webhook-Attempt
required
string

Which attempt this is, starting at 1. This header is present on the first attempt as well, so treat every delivery as one that might be a repeat.

Kadence-Webhook-Signature
required
string

Proof that the delivery came from us. The value is v1= followed by the HMAC-SHA256 of {timestamp}.{rawBody}, using your signing secret, in hex. Work out the same value and compare the two with a constant-time comparison. Use the exact bytes you received. While you are replacing a secret this header holds two values separated by a space, and either one matching is valid.

Request Body schema: application/json
required
id
required
string

The unique identifier for this event. We can send the same event more than once, so use this value to spot repeats. It stays the same on every attempt.

schemaVersion
required
integer
Value: 1

The version of the event format. We'll increase this number if the format changes in a way that could break your code.

type
required
string
Value: "booking.autoReleased"

What happened. Switch on this value to decide how to handle the delivery.

category
required
string
Value: "booking"

The group this event belongs to. You can subscribe to a whole group instead of picking events one at a time.

occurredAt
required
string <date-time>

When the event happened. Times are in UTC and include the offset, the same as the rest of our public API.

sequence
required
integer <int64>

A number that goes up as an object changes. Events can arrive in a different order to the one they happened in, so compare this value to work out which event is the most recent, rather than relying on the order they arrive in. Two events for the same object can carry the same number when they describe one change from two angles, such as a booking change and its guest-visit counterpart. Treat matching numbers as both being current, and use id to spot repeats.

tenantId
required
string

The Kadence account the event belongs to.

required
object

What caused the event.

type
required
string

What caused the event. user means a person did something. system means we did it, for example a scheduled job, or a change that followed on from another change. When the value is system, id and source are both empty.

id
string or null

The identifier of the person who did it. This is empty when we caused the event.

source
string or null

The app or service the person used, where we know it.

required
object

The object this event is about. It is the same on every event for that object.

object
required
string
Value: "booking"
id
required
string

The identifier of the object. Use it with sequence to tell which object the event is about and how recent it is.

required
object

A copy of the object as it was when the event happened. It does not change if the object changes afterwards.

id
string

The ULID of the booking.

object or null

Despite the name, this holds the whole object. Read createdUserId.id for the identifier.

Any of
id
string

The user's ULID within the Kadence platform.

email
string <email>

The user's email address.

firstName
string

The user's given name.

lastName
string

The user's family name.

jobTitle
string or null

The user's job title.

invitationPending
boolean

Whether the user's invitation to join Kadence is still pending. false once they have signed up.

preferredFloor
object

The user's preferred floor for booking when going into the office.

createdAt
string <date-time>

The date and time of when the user was created.

modifiedAt
string <date-time>

The date and time of when the user was last modified.

locale
string

An IETF language tag of the user's preferred locale.

timePreference
string
Enum: "default" "24H" "12H"

The user's preferred time format. default will follow the user's locale.

locationCityName
string or null

The city name of the user's usual location.

locationCountryCode
string or null

The ISO 3166-1 alpha-2 country code of the user's usual location.

locationLatitude
number or null <float>

The latitude of the user's usual location, based on their city.

locationLongitude
number or null <float>

The longitude of the user's usual location, based on their city.

locationTimezone
string or null

The usual IANA time zone of the user, based on their city.

biography
string or null

A short biography.

monogram
string

A two-letter identifier made from the user's full name or email address.

object or null

Despite the name, this holds the whole object. Read userId.id for the identifier.

Any of
id
string

The user's ULID within the Kadence platform.

email
string <email>

The user's email address.

firstName
string

The user's given name.

lastName
string

The user's family name.

jobTitle
string or null

The user's job title.

invitationPending
boolean

Whether the user's invitation to join Kadence is still pending. false once they have signed up.

preferredFloor
object

The user's preferred floor for booking when going into the office.

createdAt
string <date-time>

The date and time of when the user was created.

modifiedAt
string <date-time>

The date and time of when the user was last modified.

locale
string

An IETF language tag of the user's preferred locale.

timePreference
string
Enum: "default" "24H" "12H"

The user's preferred time format. default will follow the user's locale.

locationCityName
string or null

The city name of the user's usual location.

locationCountryCode
string or null

The ISO 3166-1 alpha-2 country code of the user's usual location.

locationLatitude
number or null <float>

The latitude of the user's usual location, based on their city.

locationLongitude
number or null <float>

The longitude of the user's usual location, based on their city.

locationTimezone
string or null

The usual IANA time zone of the user, based on their city.

biography
string or null

A short biography.

monogram
string

A two-letter identifier made from the user's full name or email address.

object or null

The space that was booked. Holds the whole object, not an identifier.

Any of
id
string

The ULID of the space.

name
string

The name of the space.

type
string

The type of space.

capacity
integer

How many people the space holds. A desk is 1. A room is its seating capacity.

object or null

The floor the space is on. Holds the whole object, not an identifier.

Any of
id
string

The ULID of the floor.

name
string

The name of the floor.

object or null

The neighborhood the space belongs to, if it is in one. Holds the whole object, not an identifier.

Any of
id
string

The ULID of the neighborhood.

name
string

The name of the neighborhood.

photo
string

The UUID of the photo of the space.

photoUrl
string or null

A link to the photo, ready to use. Null when there is no photo.

photoTemplateUrl
string or null

The same link with the size left as a placeholder, so you can ask for the dimensions you need. Null when there is no photo.

startDate
string <date-time>

The date and time of the beginning of the booking.

endDate
string <date-time>

The date and time of the end of the booking.

createdAt
string <date-time>

The date and time the booking was created at.

updatedAt
string <date-time>

The date and time the booking was last updated at.

object or null

Despite the name, this holds the whole object. Read checkedInUserId.id for the identifier.

Any of
id
string

The user's ULID within the Kadence platform.

email
string <email>

The user's email address.

firstName
string

The user's given name.

lastName
string

The user's family name.

jobTitle
string or null

The user's job title.

invitationPending
boolean

Whether the user's invitation to join Kadence is still pending. false once they have signed up.

preferredFloor
object

The user's preferred floor for booking when going into the office.

createdAt
string <date-time>

The date and time of when the user was created.

modifiedAt
string <date-time>

The date and time of when the user was last modified.

locale
string

An IETF language tag of the user's preferred locale.

timePreference
string
Enum: "default" "24H" "12H"

The user's preferred time format. default will follow the user's locale.

locationCityName
string or null

The city name of the user's usual location.

locationCountryCode
string or null

The ISO 3166-1 alpha-2 country code of the user's usual location.

locationLatitude
number or null <float>

The latitude of the user's usual location, based on their city.

locationLongitude
number or null <float>

The longitude of the user's usual location, based on their city.

locationTimezone
string or null

The usual IANA time zone of the user, based on their city.

biography
string or null

A short biography.

monogram
string

A two-letter identifier made from the user's full name or email address.

checkedInDate
string <date-time>

The date and time the booking was checked in at.

checkedInSource
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was checked in from.

checkInMethod
string or null
Enum: "doorAccess" "wifi" "geofence" "sensor"

If checked in from the public API, the method used during check in.

checkOutMethod
string or null
Enum: "doorAccess" "wifi" "geofence" "sensor"

If checked out from the public API, the method used during check out.

object or null

Despite the name, this holds the whole object. Read checkedOutUser.id for the identifier.

Any of
id
string

The user's ULID within the Kadence platform.

email
string <email>

The user's email address.

firstName
string

The user's given name.

lastName
string

The user's family name.

jobTitle
string or null

The user's job title.

invitationPending
boolean

Whether the user's invitation to join Kadence is still pending. false once they have signed up.

preferredFloor
object

The user's preferred floor for booking when going into the office.

createdAt
string <date-time>

The date and time of when the user was created.

modifiedAt
string <date-time>

The date and time of when the user was last modified.

locale
string

An IETF language tag of the user's preferred locale.

timePreference
string
Enum: "default" "24H" "12H"

The user's preferred time format. default will follow the user's locale.

locationCityName
string or null

The city name of the user's usual location.

locationCountryCode
string or null

The ISO 3166-1 alpha-2 country code of the user's usual location.

locationLatitude
number or null <float>

The latitude of the user's usual location, based on their city.

locationLongitude
number or null <float>

The longitude of the user's usual location, based on their city.

locationTimezone
string or null

The usual IANA time zone of the user, based on their city.

biography
string or null

A short biography.

monogram
string

A two-letter identifier made from the user's full name or email address.

checkedOutDate
string <date-time>

The date and time the booking was checked out at.

checkOutSource
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was checked out from.

permanent
boolean

Whether this booking came from an assigned space.

hasGuests
boolean

Whether this booking has guests.

guestBooking
boolean

Whether this booking is for a guest.

recurringBooking
boolean

Whether this booking is part of a recurring series.

selfCertifiedDate
string <date-time>

The date and time the booking was self-certified at.

selfCertifySource
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was self-certified from.

source
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was created from.

autoReleasedDate
string or null <date-time>

The date and time the booking was auto released.

object or null

Despite the name, this holds the whole object. Read cancelledUserId.id for the identifier.

Any of
id
string

The user's ULID within the Kadence platform.

email
string <email>

The user's email address.

firstName
string

The user's given name.

lastName
string

The user's family name.

jobTitle
string or null

The user's job title.

invitationPending
boolean

Whether the user's invitation to join Kadence is still pending. false once they have signed up.

preferredFloor
object

The user's preferred floor for booking when going into the office.

createdAt
string <date-time>

The date and time of when the user was created.

modifiedAt
string <date-time>

The date and time of when the user was last modified.

locale
string

An IETF language tag of the user's preferred locale.

timePreference
string
Enum: "default" "24H" "12H"

The user's preferred time format. default will follow the user's locale.

locationCityName
string or null

The city name of the user's usual location.

locationCountryCode
string or null

The ISO 3166-1 alpha-2 country code of the user's usual location.

locationLatitude
number or null <float>

The latitude of the user's usual location, based on their city.

locationLongitude
number or null <float>

The longitude of the user's usual location, based on their city.

locationTimezone
string or null

The usual IANA time zone of the user, based on their city.

biography
string or null

A short biography.

monogram
string

A two-letter identifier made from the user's full name or email address.

bookingUserEmail
string or null

The email of the user who the booking is for.

bookingCreatedByUserEmail
string or null

The email of the user who created the booking.

cancelledDate
string or null <date-time>

If cancelled, the date and time the booking was cancelled.

cancellationReason
string or null
Enum: "byUser" "byUserInBulk" "autoSpaceRelease" "permanentDesk" "changeInBuildingPolicy" "changeInCompanyPolicy" "removedFromCalendarByProvider" "removedFromCalendarByKadence" "calendarSyncError" "spaceNoLongerAvailable" "spaceRestricted" "spaceNotRestrictedAnymore" "userDeleted" "buildingClosure"

If cancelled, the reason for the cancellation.

title
string or null

If a room booking, the title of the associated calendar event.

status
string
Enum: "booked" "checkedIn" "checkedOut" "cancelled" "completed" "noCheckIn" "unknown"

The current booking status.

type
string
Enum: "desk" "private_office" "room" "onsite" "locker" "pod" "parking"

The type of booking.

onlineMeeting
boolean or null

For a room booking, whether the linked calendar event is an online meeting.

onlineMeetingUrl
boolean or null

For a room booking, the online meeting joining URL, if available.

icalUid
boolean or null

If a room booking, the associated iCal UID of the calendar event.

object

Holds the whole object, not an identifier.

id
string

The ULID of the building.

name
string

The name of the building.

timeZone
string

The IANA time zone that the building is in.

latitude
number <float>

The latitude of the building's location.

longitude
number <float>

The longitude of the building's location.

addressLine1
string

The first line of the building address.

addressLine2
string or null

The second line of the building address.

city
string

The name of the city that the building is in.

county
string or null

The name of the county that the building is in.

countryCode
string

The ISO 3166-1 alpha-2 country code that the building is in.

postalCode
string or null

The postal or ZIP code that the building is in.

photo
string

The UUID of the photo of the building.

createdAt
string <date-time>

The date and time that the building was created at.

modifiedAt
string <date-time>

The date and time that the building was last modified at.

photoUrl
string or null

A link to the photo, ready to use. Null when there is no photo.

photoTemplateUrl
string or null

The same link with the size left as a placeholder, so you can ask for the dimensions you need. Null when there is no photo.

object

The values these fields held before the change. Only the fields that changed are listed, using the same names as data. If a field is missing, that field didn't change. A missing field does not mean the value was empty. Where the old value was an object rather than a single value, we send it as empty.

property name*
additional property
string or number or boolean or null

Responses

Request samples

Content type
application/json
{
  • "id": "01K1XQ7Z9M4B2N8P5R3T6V0W2Y",
  • "schemaVersion": 1,
  • "type": "booking.autoReleased",
  • "category": "booking",
  • "occurredAt": "2026-08-08T09:14:22+00:00",
  • "sequence": 1754645662123,
  • "tenantId": "01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "actor": {
    • "type": "user",
    • "id": "01H8QW3ZC4RN7XKD2M6VB9TF5A",
    • "source": "ios"
    },
  • "target": {
    • "object": "booking",
    • "id": "01JB4KQ2X8HN5YT7WZ3PC6MR9D"
    },
  • "data": {
    • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
    • "createdUserId": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "email": "john.smith@example.com",
      • "firstName": "John",
      • "lastName": "Smith",
      • "jobTitle": "Head of Marketing",
      • "invitationPending": true,
      • "preferredFloor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 1"
        },
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "locale": "en-GB",
      • "timePreference": "default",
      • "locationCityName": "London",
      • "locationCountryCode": "GB",
      • "locationLatitude": 51.509865,
      • "locationLongitude": -0.118092,
      • "locationTimezone": "Europe/London",
      • "biography": "Head of Marketing, based in London.",
      • "monogram": "JS"
      },
    • "userId": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "email": "john.smith@example.com",
      • "firstName": "John",
      • "lastName": "Smith",
      • "jobTitle": "Head of Marketing",
      • "invitationPending": true,
      • "preferredFloor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 1"
        },
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "locale": "en-GB",
      • "timePreference": "default",
      • "locationCityName": "London",
      • "locationCountryCode": "GB",
      • "locationLatitude": 51.509865,
      • "locationLongitude": -0.118092,
      • "locationTimezone": "Europe/London",
      • "biography": "Head of Marketing, based in London.",
      • "monogram": "JS"
      },
    • "space": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "name": "Desk 01",
      • "type": "desk",
      • "capacity": 8,
      • "floor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 01"
        },
      • "neighborhood": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Sales"
        },
      • "photo": "b74b830a-cf26-47bd-9dbc-237571c79fc3",
      • "photoTemplateUrl": "string"
      },
    • "startDate": "2017-07-21T17:32:28+00:00",
    • "endDate": "2017-07-21T17:32:28+00:00",
    • "createdAt": "2017-07-21T17:32:28+00:00",
    • "updatedAt": "2017-07-21T17:32:28+00:00",
    • "checkedInUserId": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "email": "john.smith@example.com",
      • "firstName": "John",
      • "lastName": "Smith",
      • "jobTitle": "Head of Marketing",
      • "invitationPending": true,
      • "preferredFloor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 1"
        },
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "locale": "en-GB",
      • "timePreference": "default",
      • "locationCityName": "London",
      • "locationCountryCode": "GB",
      • "locationLatitude": 51.509865,
      • "locationLongitude": -0.118092,
      • "locationTimezone": "Europe/London",
      • "biography": "Head of Marketing, based in London.",
      • "monogram": "JS"
      },
    • "checkedInDate": "2017-07-21T17:32:28+00:00",
    • "checkedInSource": "web",
    • "checkInMethod": "doorAccess",
    • "checkOutMethod": "doorAccess",
    • "checkedOutUser": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "email": "john.smith@example.com",
      • "firstName": "John",
      • "lastName": "Smith",
      • "jobTitle": "Head of Marketing",
      • "invitationPending": true,
      • "preferredFloor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 1"
        },
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "locale": "en-GB",
      • "timePreference": "default",
      • "locationCityName": "London",
      • "locationCountryCode": "GB",
      • "locationLatitude": 51.509865,
      • "locationLongitude": -0.118092,
      • "locationTimezone": "Europe/London",
      • "biography": "Head of Marketing, based in London.",
      • "monogram": "JS"
      },
    • "checkedOutDate": "2017-07-21T17:32:28+00:00",
    • "checkOutSource": "web",
    • "permanent": false,
    • "hasGuests": false,
    • "guestBooking": false,
    • "recurringBooking": false,
    • "selfCertifiedDate": "2017-07-21T17:32:28+00:00",
    • "selfCertifySource": "web",
    • "source": "web",
    • "autoReleasedDate": "2017-07-21T17:32:28+00:00",
    • "cancelledUserId": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "email": "john.smith@example.com",
      • "firstName": "John",
      • "lastName": "Smith",
      • "jobTitle": "Head of Marketing",
      • "invitationPending": true,
      • "preferredFloor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 1"
        },
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "locale": "en-GB",
      • "timePreference": "default",
      • "locationCityName": "London",
      • "locationCountryCode": "GB",
      • "locationLatitude": 51.509865,
      • "locationLongitude": -0.118092,
      • "locationTimezone": "Europe/London",
      • "biography": "Head of Marketing, based in London.",
      • "monogram": "JS"
      },
    • "bookingUserEmail": "john@example.com",
    • "bookingCreatedByUserEmail": "john@example.com",
    • "cancelledDate": "2017-07-21T17:32:28+00:00",
    • "cancellationReason": "byUser",
    • "title": null,
    • "status": "booked",
    • "type": "desk",
    • "onlineMeeting": null,
    • "onlineMeetingUrl": null,
    • "icalUid": null,
    • "building": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "name": "London Office",
      • "timeZone": "Europe/London",
      • "latitude": 51.509865,
      • "longitude": -0.118092,
      • "addressLine1": "20 Fenchurch Street",
      • "addressLine2": null,
      • "city": "London",
      • "county": null,
      • "countryCode": "GB",
      • "postalCode": "SE1 8PB",
      • "photo": "b74b830a-cf26-47bd-9dbc-237571c79fc3",
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "photoTemplateUrl": "string"
      }
    },
  • "previous": {
    • "status": "booked"
    }
}

booking.selfCertified Webhook

The person who made the booking completed the self-certification questionnaire.

You can subscribe to this event on its own, or to the whole booking group.

header Parameters
Kadence-Webhook-Id
required
string

The identifier for this event. It matches the id in the body. Use it to spot repeats.

Kadence-Webhook-Type
required
string

The type of event. Use it to send the delivery to the right place without reading the body.

Kadence-Webhook-Timestamp
required
string

The time we signed the delivery, in seconds. It is part of the signed value, so it cannot be changed without breaking the signature. Compare it with the time the request arrived if you want to reject requests that have been held for a long time.

Kadence-Webhook-Subscription
required
string

The webhook that produced this delivery. Useful when you have more than one.

Kadence-Webhook-Attempt
required
string

Which attempt this is, starting at 1. This header is present on the first attempt as well, so treat every delivery as one that might be a repeat.

Kadence-Webhook-Signature
required
string

Proof that the delivery came from us. The value is v1= followed by the HMAC-SHA256 of {timestamp}.{rawBody}, using your signing secret, in hex. Work out the same value and compare the two with a constant-time comparison. Use the exact bytes you received. While you are replacing a secret this header holds two values separated by a space, and either one matching is valid.

Request Body schema: application/json
required
id
required
string

The unique identifier for this event. We can send the same event more than once, so use this value to spot repeats. It stays the same on every attempt.

schemaVersion
required
integer
Value: 1

The version of the event format. We'll increase this number if the format changes in a way that could break your code.

type
required
string
Value: "booking.selfCertified"

What happened. Switch on this value to decide how to handle the delivery.

category
required
string
Value: "booking"

The group this event belongs to. You can subscribe to a whole group instead of picking events one at a time.

occurredAt
required
string <date-time>

When the event happened. Times are in UTC and include the offset, the same as the rest of our public API.

sequence
required
integer <int64>

A number that goes up as an object changes. Events can arrive in a different order to the one they happened in, so compare this value to work out which event is the most recent, rather than relying on the order they arrive in. Two events for the same object can carry the same number when they describe one change from two angles, such as a booking change and its guest-visit counterpart. Treat matching numbers as both being current, and use id to spot repeats.

tenantId
required
string

The Kadence account the event belongs to.

required
object

What caused the event.

type
required
string

What caused the event. user means a person did something. system means we did it, for example a scheduled job, or a change that followed on from another change. When the value is system, id and source are both empty.

id
string or null

The identifier of the person who did it. This is empty when we caused the event.

source
string or null

The app or service the person used, where we know it.

required
object

The object this event is about. It is the same on every event for that object.

object
required
string
Value: "booking"
id
required
string

The identifier of the object. Use it with sequence to tell which object the event is about and how recent it is.

required
object

A copy of the object as it was when the event happened. It does not change if the object changes afterwards.

id
string

The ULID of the booking.

object or null

Despite the name, this holds the whole object. Read createdUserId.id for the identifier.

Any of
id
string

The user's ULID within the Kadence platform.

email
string <email>

The user's email address.

firstName
string

The user's given name.

lastName
string

The user's family name.

jobTitle
string or null

The user's job title.

invitationPending
boolean

Whether the user's invitation to join Kadence is still pending. false once they have signed up.

preferredFloor
object

The user's preferred floor for booking when going into the office.

createdAt
string <date-time>

The date and time of when the user was created.

modifiedAt
string <date-time>

The date and time of when the user was last modified.

locale
string

An IETF language tag of the user's preferred locale.

timePreference
string
Enum: "default" "24H" "12H"

The user's preferred time format. default will follow the user's locale.

locationCityName
string or null

The city name of the user's usual location.

locationCountryCode
string or null

The ISO 3166-1 alpha-2 country code of the user's usual location.

locationLatitude
number or null <float>

The latitude of the user's usual location, based on their city.

locationLongitude
number or null <float>

The longitude of the user's usual location, based on their city.

locationTimezone
string or null

The usual IANA time zone of the user, based on their city.

biography
string or null

A short biography.

monogram
string

A two-letter identifier made from the user's full name or email address.

object or null

Despite the name, this holds the whole object. Read userId.id for the identifier.

Any of
id
string

The user's ULID within the Kadence platform.

email
string <email>

The user's email address.

firstName
string

The user's given name.

lastName
string

The user's family name.

jobTitle
string or null

The user's job title.

invitationPending
boolean

Whether the user's invitation to join Kadence is still pending. false once they have signed up.

preferredFloor
object

The user's preferred floor for booking when going into the office.

createdAt
string <date-time>

The date and time of when the user was created.

modifiedAt
string <date-time>

The date and time of when the user was last modified.

locale
string

An IETF language tag of the user's preferred locale.

timePreference
string
Enum: "default" "24H" "12H"

The user's preferred time format. default will follow the user's locale.

locationCityName
string or null

The city name of the user's usual location.

locationCountryCode
string or null

The ISO 3166-1 alpha-2 country code of the user's usual location.

locationLatitude
number or null <float>

The latitude of the user's usual location, based on their city.

locationLongitude
number or null <float>

The longitude of the user's usual location, based on their city.

locationTimezone
string or null

The usual IANA time zone of the user, based on their city.

biography
string or null

A short biography.

monogram
string

A two-letter identifier made from the user's full name or email address.

object or null

The space that was booked. Holds the whole object, not an identifier.

Any of
id
string

The ULID of the space.

name
string

The name of the space.

type
string

The type of space.

capacity
integer

How many people the space holds. A desk is 1. A room is its seating capacity.

object or null

The floor the space is on. Holds the whole object, not an identifier.

Any of
id
string

The ULID of the floor.

name
string

The name of the floor.

object or null

The neighborhood the space belongs to, if it is in one. Holds the whole object, not an identifier.

Any of
id
string

The ULID of the neighborhood.

name
string

The name of the neighborhood.

photo
string

The UUID of the photo of the space.

photoUrl
string or null

A link to the photo, ready to use. Null when there is no photo.

photoTemplateUrl
string or null

The same link with the size left as a placeholder, so you can ask for the dimensions you need. Null when there is no photo.

startDate
string <date-time>

The date and time of the beginning of the booking.

endDate
string <date-time>

The date and time of the end of the booking.

createdAt
string <date-time>

The date and time the booking was created at.

updatedAt
string <date-time>

The date and time the booking was last updated at.

object or null

Despite the name, this holds the whole object. Read checkedInUserId.id for the identifier.

Any of
id
string

The user's ULID within the Kadence platform.

email
string <email>

The user's email address.

firstName
string

The user's given name.

lastName
string

The user's family name.

jobTitle
string or null

The user's job title.

invitationPending
boolean

Whether the user's invitation to join Kadence is still pending. false once they have signed up.

preferredFloor
object

The user's preferred floor for booking when going into the office.

createdAt
string <date-time>

The date and time of when the user was created.

modifiedAt
string <date-time>

The date and time of when the user was last modified.

locale
string

An IETF language tag of the user's preferred locale.

timePreference
string
Enum: "default" "24H" "12H"

The user's preferred time format. default will follow the user's locale.

locationCityName
string or null

The city name of the user's usual location.

locationCountryCode
string or null

The ISO 3166-1 alpha-2 country code of the user's usual location.

locationLatitude
number or null <float>

The latitude of the user's usual location, based on their city.

locationLongitude
number or null <float>

The longitude of the user's usual location, based on their city.

locationTimezone
string or null

The usual IANA time zone of the user, based on their city.

biography
string or null

A short biography.

monogram
string

A two-letter identifier made from the user's full name or email address.

checkedInDate
string <date-time>

The date and time the booking was checked in at.

checkedInSource
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was checked in from.

checkInMethod
string or null
Enum: "doorAccess" "wifi" "geofence" "sensor"

If checked in from the public API, the method used during check in.

checkOutMethod
string or null
Enum: "doorAccess" "wifi" "geofence" "sensor"

If checked out from the public API, the method used during check out.

object or null

Despite the name, this holds the whole object. Read checkedOutUser.id for the identifier.

Any of
id
string

The user's ULID within the Kadence platform.

email
string <email>

The user's email address.

firstName
string

The user's given name.

lastName
string

The user's family name.

jobTitle
string or null

The user's job title.

invitationPending
boolean

Whether the user's invitation to join Kadence is still pending. false once they have signed up.

preferredFloor
object

The user's preferred floor for booking when going into the office.

createdAt
string <date-time>

The date and time of when the user was created.

modifiedAt
string <date-time>

The date and time of when the user was last modified.

locale
string

An IETF language tag of the user's preferred locale.

timePreference
string
Enum: "default" "24H" "12H"

The user's preferred time format. default will follow the user's locale.

locationCityName
string or null

The city name of the user's usual location.

locationCountryCode
string or null

The ISO 3166-1 alpha-2 country code of the user's usual location.

locationLatitude
number or null <float>

The latitude of the user's usual location, based on their city.

locationLongitude
number or null <float>

The longitude of the user's usual location, based on their city.

locationTimezone
string or null

The usual IANA time zone of the user, based on their city.

biography
string or null

A short biography.

monogram
string

A two-letter identifier made from the user's full name or email address.

checkedOutDate
string <date-time>

The date and time the booking was checked out at.

checkOutSource
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was checked out from.

permanent
boolean

Whether this booking came from an assigned space.

hasGuests
boolean

Whether this booking has guests.

guestBooking
boolean

Whether this booking is for a guest.

recurringBooking
boolean

Whether this booking is part of a recurring series.

selfCertifiedDate
string <date-time>

The date and time the booking was self-certified at.

selfCertifySource
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was self-certified from.

source
string
Enum: "web" "ios" "android" "calendar" "publicApi" "slack" "msTeams" "unknown"

The platform the booking was created from.

autoReleasedDate
string or null <date-time>

The date and time the booking was auto released.

object or null

Despite the name, this holds the whole object. Read cancelledUserId.id for the identifier.

Any of
id
string

The user's ULID within the Kadence platform.

email
string <email>

The user's email address.

firstName
string

The user's given name.

lastName
string

The user's family name.

jobTitle
string or null

The user's job title.

invitationPending
boolean

Whether the user's invitation to join Kadence is still pending. false once they have signed up.

preferredFloor
object

The user's preferred floor for booking when going into the office.

createdAt
string <date-time>

The date and time of when the user was created.

modifiedAt
string <date-time>

The date and time of when the user was last modified.

locale
string

An IETF language tag of the user's preferred locale.

timePreference
string
Enum: "default" "24H" "12H"

The user's preferred time format. default will follow the user's locale.

locationCityName
string or null

The city name of the user's usual location.

locationCountryCode
string or null

The ISO 3166-1 alpha-2 country code of the user's usual location.

locationLatitude
number or null <float>

The latitude of the user's usual location, based on their city.

locationLongitude
number or null <float>

The longitude of the user's usual location, based on their city.

locationTimezone
string or null

The usual IANA time zone of the user, based on their city.

biography
string or null

A short biography.

monogram
string

A two-letter identifier made from the user's full name or email address.

bookingUserEmail
string or null

The email of the user who the booking is for.

bookingCreatedByUserEmail
string or null

The email of the user who created the booking.

cancelledDate
string or null <date-time>

If cancelled, the date and time the booking was cancelled.

cancellationReason
string or null
Enum: "byUser" "byUserInBulk" "autoSpaceRelease" "permanentDesk" "changeInBuildingPolicy" "changeInCompanyPolicy" "removedFromCalendarByProvider" "removedFromCalendarByKadence" "calendarSyncError" "spaceNoLongerAvailable" "spaceRestricted" "spaceNotRestrictedAnymore" "userDeleted" "buildingClosure"

If cancelled, the reason for the cancellation.

title
string or null

If a room booking, the title of the associated calendar event.

status
string
Enum: "booked" "checkedIn" "checkedOut" "cancelled" "completed" "noCheckIn" "unknown"

The current booking status.

type
string
Enum: "desk" "private_office" "room" "onsite" "locker" "pod" "parking"

The type of booking.

onlineMeeting
boolean or null

For a room booking, whether the linked calendar event is an online meeting.

onlineMeetingUrl
boolean or null

For a room booking, the online meeting joining URL, if available.

icalUid
boolean or null

If a room booking, the associated iCal UID of the calendar event.

object

Holds the whole object, not an identifier.

id
string

The ULID of the building.

name
string

The name of the building.

timeZone
string

The IANA time zone that the building is in.

latitude
number <float>

The latitude of the building's location.

longitude
number <float>

The longitude of the building's location.

addressLine1
string

The first line of the building address.

addressLine2
string or null

The second line of the building address.

city
string

The name of the city that the building is in.

county
string or null

The name of the county that the building is in.

countryCode
string

The ISO 3166-1 alpha-2 country code that the building is in.

postalCode
string or null

The postal or ZIP code that the building is in.

photo
string

The UUID of the photo of the building.

createdAt
string <date-time>

The date and time that the building was created at.

modifiedAt
string <date-time>

The date and time that the building was last modified at.

photoUrl
string or null

A link to the photo, ready to use. Null when there is no photo.

photoTemplateUrl
string or null

The same link with the size left as a placeholder, so you can ask for the dimensions you need. Null when there is no photo.

Responses

Request samples

Content type
application/json
{
  • "id": "01K1XQ7Z9M4B2N8P5R3T6V0W2Y",
  • "schemaVersion": 1,
  • "type": "booking.selfCertified",
  • "category": "booking",
  • "occurredAt": "2026-08-08T09:14:22+00:00",
  • "sequence": 1754645662123,
  • "tenantId": "01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "actor": {
    • "type": "user",
    • "id": "01H8QW3ZC4RN7XKD2M6VB9TF5A",
    • "source": "ios"
    },
  • "target": {
    • "object": "booking",
    • "id": "01JB4KQ2X8HN5YT7WZ3PC6MR9D"
    },
  • "data": {
    • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
    • "createdUserId": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "email": "john.smith@example.com",
      • "firstName": "John",
      • "lastName": "Smith",
      • "jobTitle": "Head of Marketing",
      • "invitationPending": true,
      • "preferredFloor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 1"
        },
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "locale": "en-GB",
      • "timePreference": "default",
      • "locationCityName": "London",
      • "locationCountryCode": "GB",
      • "locationLatitude": 51.509865,
      • "locationLongitude": -0.118092,
      • "locationTimezone": "Europe/London",
      • "biography": "Head of Marketing, based in London.",
      • "monogram": "JS"
      },
    • "userId": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "email": "john.smith@example.com",
      • "firstName": "John",
      • "lastName": "Smith",
      • "jobTitle": "Head of Marketing",
      • "invitationPending": true,
      • "preferredFloor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 1"
        },
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "locale": "en-GB",
      • "timePreference": "default",
      • "locationCityName": "London",
      • "locationCountryCode": "GB",
      • "locationLatitude": 51.509865,
      • "locationLongitude": -0.118092,
      • "locationTimezone": "Europe/London",
      • "biography": "Head of Marketing, based in London.",
      • "monogram": "JS"
      },
    • "space": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "name": "Desk 01",
      • "type": "desk",
      • "capacity": 8,
      • "floor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 01"
        },
      • "neighborhood": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Sales"
        },
      • "photo": "b74b830a-cf26-47bd-9dbc-237571c79fc3",
      • "photoTemplateUrl": "string"
      },
    • "startDate": "2017-07-21T17:32:28+00:00",
    • "endDate": "2017-07-21T17:32:28+00:00",
    • "createdAt": "2017-07-21T17:32:28+00:00",
    • "updatedAt": "2017-07-21T17:32:28+00:00",
    • "checkedInUserId": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "email": "john.smith@example.com",
      • "firstName": "John",
      • "lastName": "Smith",
      • "jobTitle": "Head of Marketing",
      • "invitationPending": true,
      • "preferredFloor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 1"
        },
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "locale": "en-GB",
      • "timePreference": "default",
      • "locationCityName": "London",
      • "locationCountryCode": "GB",
      • "locationLatitude": 51.509865,
      • "locationLongitude": -0.118092,
      • "locationTimezone": "Europe/London",
      • "biography": "Head of Marketing, based in London.",
      • "monogram": "JS"
      },
    • "checkedInDate": "2017-07-21T17:32:28+00:00",
    • "checkedInSource": "web",
    • "checkInMethod": "doorAccess",
    • "checkOutMethod": "doorAccess",
    • "checkedOutUser": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "email": "john.smith@example.com",
      • "firstName": "John",
      • "lastName": "Smith",
      • "jobTitle": "Head of Marketing",
      • "invitationPending": true,
      • "preferredFloor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 1"
        },
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "locale": "en-GB",
      • "timePreference": "default",
      • "locationCityName": "London",
      • "locationCountryCode": "GB",
      • "locationLatitude": 51.509865,
      • "locationLongitude": -0.118092,
      • "locationTimezone": "Europe/London",
      • "biography": "Head of Marketing, based in London.",
      • "monogram": "JS"
      },
    • "checkedOutDate": "2017-07-21T17:32:28+00:00",
    • "checkOutSource": "web",
    • "permanent": false,
    • "hasGuests": false,
    • "guestBooking": false,
    • "recurringBooking": false,
    • "selfCertifiedDate": "2017-07-21T17:32:28+00:00",
    • "selfCertifySource": "web",
    • "source": "web",
    • "autoReleasedDate": "2017-07-21T17:32:28+00:00",
    • "cancelledUserId": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "email": "john.smith@example.com",
      • "firstName": "John",
      • "lastName": "Smith",
      • "jobTitle": "Head of Marketing",
      • "invitationPending": true,
      • "preferredFloor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 1"
        },
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "locale": "en-GB",
      • "timePreference": "default",
      • "locationCityName": "London",
      • "locationCountryCode": "GB",
      • "locationLatitude": 51.509865,
      • "locationLongitude": -0.118092,
      • "locationTimezone": "Europe/London",
      • "biography": "Head of Marketing, based in London.",
      • "monogram": "JS"
      },
    • "bookingUserEmail": "john@example.com",
    • "bookingCreatedByUserEmail": "john@example.com",
    • "cancelledDate": "2017-07-21T17:32:28+00:00",
    • "cancellationReason": "byUser",
    • "title": null,
    • "status": "booked",
    • "type": "desk",
    • "onlineMeeting": null,
    • "onlineMeetingUrl": null,
    • "icalUid": null,
    • "building": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "name": "London Office",
      • "timeZone": "Europe/London",
      • "latitude": 51.509865,
      • "longitude": -0.118092,
      • "addressLine1": "20 Fenchurch Street",
      • "addressLine2": null,
      • "city": "London",
      • "county": null,
      • "countryCode": "GB",
      • "postalCode": "SE1 8PB",
      • "photo": "b74b830a-cf26-47bd-9dbc-237571c79fc3",
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "photoTemplateUrl": "string"
      }
    }
}

visit.created Webhook

A visit (guest booking) was created.

You can subscribe to this event on its own, or to the whole visitor group.

header Parameters
Kadence-Webhook-Id
required
string

The identifier for this event. It matches the id in the body. Use it to spot repeats.

Kadence-Webhook-Type
required
string

The type of event. Use it to send the delivery to the right place without reading the body.

Kadence-Webhook-Timestamp
required
string

The time we signed the delivery, in seconds. It is part of the signed value, so it cannot be changed without breaking the signature. Compare it with the time the request arrived if you want to reject requests that have been held for a long time.

Kadence-Webhook-Subscription
required
string

The webhook that produced this delivery. Useful when you have more than one.

Kadence-Webhook-Attempt
required
string

Which attempt this is, starting at 1. This header is present on the first attempt as well, so treat every delivery as one that might be a repeat.

Kadence-Webhook-Signature
required
string

Proof that the delivery came from us. The value is v1= followed by the HMAC-SHA256 of {timestamp}.{rawBody}, using your signing secret, in hex. Work out the same value and compare the two with a constant-time comparison. Use the exact bytes you received. While you are replacing a secret this header holds two values separated by a space, and either one matching is valid.

Request Body schema: application/json
required
id
required
string

The unique identifier for this event. We can send the same event more than once, so use this value to spot repeats. It stays the same on every attempt.

schemaVersion
required
integer
Value: 1

The version of the event format. We'll increase this number if the format changes in a way that could break your code.

type
required
string
Value: "visit.created"

What happened. Switch on this value to decide how to handle the delivery.

category
required
string
Value: "visitor"

The group this event belongs to. You can subscribe to a whole group instead of picking events one at a time.

occurredAt
required
string <date-time>

When the event happened. Times are in UTC and include the offset, the same as the rest of our public API.

sequence
required
integer <int64>

A number that goes up as an object changes. Events can arrive in a different order to the one they happened in, so compare this value to work out which event is the most recent, rather than relying on the order they arrive in. Two events for the same object can carry the same number when they describe one change from two angles, such as a booking change and its guest-visit counterpart. Treat matching numbers as both being current, and use id to spot repeats.

tenantId
required
string

The Kadence account the event belongs to.

required
object

What caused the event.

type
required
string

What caused the event. user means a person did something. system means we did it, for example a scheduled job, or a change that followed on from another change. When the value is system, id and source are both empty.

id
string or null

The identifier of the person who did it. This is empty when we caused the event.

source
string or null

The app or service the person used, where we know it.

required
object

The object this event is about. It is the same on every event for that object.

object
required
string
Value: "visit"
id
required
string

The identifier of the object. Use it with sequence to tell which object the event is about and how recent it is.

required
object

A copy of the object as it was when the event happened. It does not change if the object changes afterwards.

id
string

The ULID of the visit.

object or null

Holds the whole object, not an identifier.

Any of
id
string

The user's ULID within the Kadence platform.

email
string <email>

The user's email address.

firstName
string

The user's given name.

lastName
string

The user's family name.

jobTitle
string or null

The user's job title.

invitationPending
boolean

Whether the user's invitation to join Kadence is still pending. false once they have signed up.

preferredFloor
object

The user's preferred floor for booking when going into the office.

createdAt
string <date-time>

The date and time of when the user was created.

modifiedAt
string <date-time>

The date and time of when the user was last modified.

locale
string

An IETF language tag of the user's preferred locale.

timePreference
string
Enum: "default" "24H" "12H"

The user's preferred time format. default will follow the user's locale.

locationCityName
string or null

The city name of the user's usual location.

locationCountryCode
string or null

The ISO 3166-1 alpha-2 country code of the user's usual location.

locationLatitude
number or null <float>

The latitude of the user's usual location, based on their city.

locationLongitude
number or null <float>

The longitude of the user's usual location, based on their city.

locationTimezone
string or null

The usual IANA time zone of the user, based on their city.

biography
string or null

A short biography.

monogram
string

A two-letter identifier made from the user's full name or email address.

building
object or null

The building the visit takes place in.

startDate
string <date-time>

The date and time of the beginning of the visit.

endDate
string <date-time>

The date and time of the end of the visit.

status
string
Enum: "booked" "checkedIn" "checkedOut" "completed" "cancelled" "noCheckIn"

The current status of the visit.

visitors
Array of arrays

Every attendee of the visit, including the host/organizer, as visitors.

Responses

Request samples

Content type
application/json
{
  • "id": "01K1XQ7Z9M4B2N8P5R3T6V0W2Y",
  • "schemaVersion": 1,
  • "type": "visit.created",
  • "category": "visitor",
  • "occurredAt": "2026-08-08T09:14:22+00:00",
  • "sequence": 1754645662123,
  • "tenantId": "01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "actor": {
    • "type": "user",
    • "id": "01H8QW3ZC4RN7XKD2M6VB9TF5A",
    • "source": "ios"
    },
  • "target": {
    • "object": "visit",
    • "id": "01JB4KQ2X8HN5YT7WZ3PC6MR9D"
    },
  • "data": {
    • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
    • "host": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "email": "john.smith@example.com",
      • "firstName": "John",
      • "lastName": "Smith",
      • "jobTitle": "Head of Marketing",
      • "invitationPending": true,
      • "preferredFloor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 1"
        },
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "locale": "en-GB",
      • "timePreference": "default",
      • "locationCityName": "London",
      • "locationCountryCode": "GB",
      • "locationLatitude": 51.509865,
      • "locationLongitude": -0.118092,
      • "locationTimezone": "Europe/London",
      • "biography": "Head of Marketing, based in London.",
      • "monogram": "JS"
      },
    • "building": { },
    • "startDate": "2017-07-21T17:32:28+00:00",
    • "endDate": "2017-07-21T17:32:28+00:00",
    • "status": "booked",
    • "visitors": [ ]
    }
}

visit.updated Webhook

A visit's time, building or guest list changed.

You can subscribe to this event on its own, or to the whole visitor group.

header Parameters
Kadence-Webhook-Id
required
string

The identifier for this event. It matches the id in the body. Use it to spot repeats.

Kadence-Webhook-Type
required
string

The type of event. Use it to send the delivery to the right place without reading the body.

Kadence-Webhook-Timestamp
required
string

The time we signed the delivery, in seconds. It is part of the signed value, so it cannot be changed without breaking the signature. Compare it with the time the request arrived if you want to reject requests that have been held for a long time.

Kadence-Webhook-Subscription
required
string

The webhook that produced this delivery. Useful when you have more than one.

Kadence-Webhook-Attempt
required
string

Which attempt this is, starting at 1. This header is present on the first attempt as well, so treat every delivery as one that might be a repeat.

Kadence-Webhook-Signature
required
string

Proof that the delivery came from us. The value is v1= followed by the HMAC-SHA256 of {timestamp}.{rawBody}, using your signing secret, in hex. Work out the same value and compare the two with a constant-time comparison. Use the exact bytes you received. While you are replacing a secret this header holds two values separated by a space, and either one matching is valid.

Request Body schema: application/json
required
id
required
string

The unique identifier for this event. We can send the same event more than once, so use this value to spot repeats. It stays the same on every attempt.

schemaVersion
required
integer
Value: 1

The version of the event format. We'll increase this number if the format changes in a way that could break your code.

type
required
string
Value: "visit.updated"

What happened. Switch on this value to decide how to handle the delivery.

category
required
string
Value: "visitor"

The group this event belongs to. You can subscribe to a whole group instead of picking events one at a time.

occurredAt
required
string <date-time>

When the event happened. Times are in UTC and include the offset, the same as the rest of our public API.

sequence
required
integer <int64>

A number that goes up as an object changes. Events can arrive in a different order to the one they happened in, so compare this value to work out which event is the most recent, rather than relying on the order they arrive in. Two events for the same object can carry the same number when they describe one change from two angles, such as a booking change and its guest-visit counterpart. Treat matching numbers as both being current, and use id to spot repeats.

tenantId
required
string

The Kadence account the event belongs to.

required
object

What caused the event.

type
required
string

What caused the event. user means a person did something. system means we did it, for example a scheduled job, or a change that followed on from another change. When the value is system, id and source are both empty.

id
string or null

The identifier of the person who did it. This is empty when we caused the event.

source
string or null

The app or service the person used, where we know it.

required
object

The object this event is about. It is the same on every event for that object.

object
required
string
Value: "visit"
id
required
string

The identifier of the object. Use it with sequence to tell which object the event is about and how recent it is.

required
object

A copy of the object as it was when the event happened. It does not change if the object changes afterwards.

id
string

The ULID of the visit.

object or null

Holds the whole object, not an identifier.

Any of
id
string

The user's ULID within the Kadence platform.

email
string <email>

The user's email address.

firstName
string

The user's given name.

lastName
string

The user's family name.

jobTitle
string or null

The user's job title.

invitationPending
boolean

Whether the user's invitation to join Kadence is still pending. false once they have signed up.

preferredFloor
object

The user's preferred floor for booking when going into the office.

createdAt
string <date-time>

The date and time of when the user was created.

modifiedAt
string <date-time>

The date and time of when the user was last modified.

locale
string

An IETF language tag of the user's preferred locale.

timePreference
string
Enum: "default" "24H" "12H"

The user's preferred time format. default will follow the user's locale.

locationCityName
string or null

The city name of the user's usual location.

locationCountryCode
string or null

The ISO 3166-1 alpha-2 country code of the user's usual location.

locationLatitude
number or null <float>

The latitude of the user's usual location, based on their city.

locationLongitude
number or null <float>

The longitude of the user's usual location, based on their city.

locationTimezone
string or null

The usual IANA time zone of the user, based on their city.

biography
string or null

A short biography.

monogram
string

A two-letter identifier made from the user's full name or email address.

building
object or null

The building the visit takes place in.

startDate
string <date-time>

The date and time of the beginning of the visit.

endDate
string <date-time>

The date and time of the end of the visit.

status
string
Enum: "booked" "checkedIn" "checkedOut" "completed" "cancelled" "noCheckIn"

The current status of the visit.

visitors
Array of arrays

Every attendee of the visit, including the host/organizer, as visitors.

object

The values these fields held before the change. Only the fields that changed are listed, using the same names as data. If a field is missing, that field didn't change. A missing field does not mean the value was empty. Where the old value was an object rather than a single value, we send it as empty.

property name*
additional property
string or number or boolean or null

Responses

Request samples

Content type
application/json
{
  • "id": "01K1XQ7Z9M4B2N8P5R3T6V0W2Y",
  • "schemaVersion": 1,
  • "type": "visit.updated",
  • "category": "visitor",
  • "occurredAt": "2026-08-08T09:14:22+00:00",
  • "sequence": 1754645662123,
  • "tenantId": "01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "actor": {
    • "type": "user",
    • "id": "01H8QW3ZC4RN7XKD2M6VB9TF5A",
    • "source": "ios"
    },
  • "target": {
    • "object": "visit",
    • "id": "01JB4KQ2X8HN5YT7WZ3PC6MR9D"
    },
  • "data": {
    • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
    • "host": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "email": "john.smith@example.com",
      • "firstName": "John",
      • "lastName": "Smith",
      • "jobTitle": "Head of Marketing",
      • "invitationPending": true,
      • "preferredFloor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 1"
        },
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "locale": "en-GB",
      • "timePreference": "default",
      • "locationCityName": "London",
      • "locationCountryCode": "GB",
      • "locationLatitude": 51.509865,
      • "locationLongitude": -0.118092,
      • "locationTimezone": "Europe/London",
      • "biography": "Head of Marketing, based in London.",
      • "monogram": "JS"
      },
    • "building": { },
    • "startDate": "2017-07-21T17:32:28+00:00",
    • "endDate": "2017-07-21T17:32:28+00:00",
    • "status": "booked",
    • "visitors": [ ]
    },
  • "previous": {
    • "startDate": "2026-08-08T09:00:00+00:00"
    }
}

visit.cancelled Webhook

A visit was cancelled.

You can subscribe to this event on its own, or to the whole visitor group.

header Parameters
Kadence-Webhook-Id
required
string

The identifier for this event. It matches the id in the body. Use it to spot repeats.

Kadence-Webhook-Type
required
string

The type of event. Use it to send the delivery to the right place without reading the body.

Kadence-Webhook-Timestamp
required
string

The time we signed the delivery, in seconds. It is part of the signed value, so it cannot be changed without breaking the signature. Compare it with the time the request arrived if you want to reject requests that have been held for a long time.

Kadence-Webhook-Subscription
required
string

The webhook that produced this delivery. Useful when you have more than one.

Kadence-Webhook-Attempt
required
string

Which attempt this is, starting at 1. This header is present on the first attempt as well, so treat every delivery as one that might be a repeat.

Kadence-Webhook-Signature
required
string

Proof that the delivery came from us. The value is v1= followed by the HMAC-SHA256 of {timestamp}.{rawBody}, using your signing secret, in hex. Work out the same value and compare the two with a constant-time comparison. Use the exact bytes you received. While you are replacing a secret this header holds two values separated by a space, and either one matching is valid.

Request Body schema: application/json
required
id
required
string

The unique identifier for this event. We can send the same event more than once, so use this value to spot repeats. It stays the same on every attempt.

schemaVersion
required
integer
Value: 1

The version of the event format. We'll increase this number if the format changes in a way that could break your code.

type
required
string
Value: "visit.cancelled"

What happened. Switch on this value to decide how to handle the delivery.

category
required
string
Value: "visitor"

The group this event belongs to. You can subscribe to a whole group instead of picking events one at a time.

occurredAt
required
string <date-time>

When the event happened. Times are in UTC and include the offset, the same as the rest of our public API.

sequence
required
integer <int64>

A number that goes up as an object changes. Events can arrive in a different order to the one they happened in, so compare this value to work out which event is the most recent, rather than relying on the order they arrive in. Two events for the same object can carry the same number when they describe one change from two angles, such as a booking change and its guest-visit counterpart. Treat matching numbers as both being current, and use id to spot repeats.

tenantId
required
string

The Kadence account the event belongs to.

required
object

What caused the event.

type
required
string

What caused the event. user means a person did something. system means we did it, for example a scheduled job, or a change that followed on from another change. When the value is system, id and source are both empty.

id
string or null

The identifier of the person who did it. This is empty when we caused the event.

source
string or null

The app or service the person used, where we know it.

required
object

The object this event is about. It is the same on every event for that object.

object
required
string
Value: "visit"
id
required
string

The identifier of the object. Use it with sequence to tell which object the event is about and how recent it is.

required
object

A copy of the object as it was when the event happened. It does not change if the object changes afterwards.

id
string

The ULID of the visit.

object or null

Holds the whole object, not an identifier.

Any of
id
string

The user's ULID within the Kadence platform.

email
string <email>

The user's email address.

firstName
string

The user's given name.

lastName
string

The user's family name.

jobTitle
string or null

The user's job title.

invitationPending
boolean

Whether the user's invitation to join Kadence is still pending. false once they have signed up.

preferredFloor
object

The user's preferred floor for booking when going into the office.

createdAt
string <date-time>

The date and time of when the user was created.

modifiedAt
string <date-time>

The date and time of when the user was last modified.

locale
string

An IETF language tag of the user's preferred locale.

timePreference
string
Enum: "default" "24H" "12H"

The user's preferred time format. default will follow the user's locale.

locationCityName
string or null

The city name of the user's usual location.

locationCountryCode
string or null

The ISO 3166-1 alpha-2 country code of the user's usual location.

locationLatitude
number or null <float>

The latitude of the user's usual location, based on their city.

locationLongitude
number or null <float>

The longitude of the user's usual location, based on their city.

locationTimezone
string or null

The usual IANA time zone of the user, based on their city.

biography
string or null

A short biography.

monogram
string

A two-letter identifier made from the user's full name or email address.

building
object or null

The building the visit takes place in.

startDate
string <date-time>

The date and time of the beginning of the visit.

endDate
string <date-time>

The date and time of the end of the visit.

status
string
Enum: "booked" "checkedIn" "checkedOut" "completed" "cancelled" "noCheckIn"

The current status of the visit.

visitors
Array of arrays

Every attendee of the visit, including the host/organizer, as visitors.

object

The values these fields held before the change. Only the fields that changed are listed, using the same names as data. If a field is missing, that field didn't change. A missing field does not mean the value was empty. Where the old value was an object rather than a single value, we send it as empty.

property name*
additional property
string or number or boolean or null

Responses

Request samples

Content type
application/json
{
  • "id": "01K1XQ7Z9M4B2N8P5R3T6V0W2Y",
  • "schemaVersion": 1,
  • "type": "visit.cancelled",
  • "category": "visitor",
  • "occurredAt": "2026-08-08T09:14:22+00:00",
  • "sequence": 1754645662123,
  • "tenantId": "01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "actor": {
    • "type": "user",
    • "id": "01H8QW3ZC4RN7XKD2M6VB9TF5A",
    • "source": "ios"
    },
  • "target": {
    • "object": "visit",
    • "id": "01JB4KQ2X8HN5YT7WZ3PC6MR9D"
    },
  • "data": {
    • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
    • "host": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "email": "john.smith@example.com",
      • "firstName": "John",
      • "lastName": "Smith",
      • "jobTitle": "Head of Marketing",
      • "invitationPending": true,
      • "preferredFloor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 1"
        },
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "locale": "en-GB",
      • "timePreference": "default",
      • "locationCityName": "London",
      • "locationCountryCode": "GB",
      • "locationLatitude": 51.509865,
      • "locationLongitude": -0.118092,
      • "locationTimezone": "Europe/London",
      • "biography": "Head of Marketing, based in London.",
      • "monogram": "JS"
      },
    • "building": { },
    • "startDate": "2017-07-21T17:32:28+00:00",
    • "endDate": "2017-07-21T17:32:28+00:00",
    • "status": "booked",
    • "visitors": [ ]
    },
  • "previous": {
    • "status": "booked"
    }
}

visit.checkedIn Webhook

A visit was checked in. Its first guest arrived.

You can subscribe to this event on its own, or to the whole visitor group.

header Parameters
Kadence-Webhook-Id
required
string

The identifier for this event. It matches the id in the body. Use it to spot repeats.

Kadence-Webhook-Type
required
string

The type of event. Use it to send the delivery to the right place without reading the body.

Kadence-Webhook-Timestamp
required
string

The time we signed the delivery, in seconds. It is part of the signed value, so it cannot be changed without breaking the signature. Compare it with the time the request arrived if you want to reject requests that have been held for a long time.

Kadence-Webhook-Subscription
required
string

The webhook that produced this delivery. Useful when you have more than one.

Kadence-Webhook-Attempt
required
string

Which attempt this is, starting at 1. This header is present on the first attempt as well, so treat every delivery as one that might be a repeat.

Kadence-Webhook-Signature
required
string

Proof that the delivery came from us. The value is v1= followed by the HMAC-SHA256 of {timestamp}.{rawBody}, using your signing secret, in hex. Work out the same value and compare the two with a constant-time comparison. Use the exact bytes you received. While you are replacing a secret this header holds two values separated by a space, and either one matching is valid.

Request Body schema: application/json
required
id
required
string

The unique identifier for this event. We can send the same event more than once, so use this value to spot repeats. It stays the same on every attempt.

schemaVersion
required
integer
Value: 1

The version of the event format. We'll increase this number if the format changes in a way that could break your code.

type
required
string
Value: "visit.checkedIn"

What happened. Switch on this value to decide how to handle the delivery.

category
required
string
Value: "visitor"

The group this event belongs to. You can subscribe to a whole group instead of picking events one at a time.

occurredAt
required
string <date-time>

When the event happened. Times are in UTC and include the offset, the same as the rest of our public API.

sequence
required
integer <int64>

A number that goes up as an object changes. Events can arrive in a different order to the one they happened in, so compare this value to work out which event is the most recent, rather than relying on the order they arrive in. Two events for the same object can carry the same number when they describe one change from two angles, such as a booking change and its guest-visit counterpart. Treat matching numbers as both being current, and use id to spot repeats.

tenantId
required
string

The Kadence account the event belongs to.

required
object

What caused the event.

type
required
string

What caused the event. user means a person did something. system means we did it, for example a scheduled job, or a change that followed on from another change. When the value is system, id and source are both empty.

id
string or null

The identifier of the person who did it. This is empty when we caused the event.

source
string or null

The app or service the person used, where we know it.

required
object

The object this event is about. It is the same on every event for that object.

object
required
string
Value: "visit"
id
required
string

The identifier of the object. Use it with sequence to tell which object the event is about and how recent it is.

required
object

A copy of the object as it was when the event happened. It does not change if the object changes afterwards.

id
string

The ULID of the visit.

object or null

Holds the whole object, not an identifier.

Any of
id
string

The user's ULID within the Kadence platform.

email
string <email>

The user's email address.

firstName
string

The user's given name.

lastName
string

The user's family name.

jobTitle
string or null

The user's job title.

invitationPending
boolean

Whether the user's invitation to join Kadence is still pending. false once they have signed up.

preferredFloor
object

The user's preferred floor for booking when going into the office.

createdAt
string <date-time>

The date and time of when the user was created.

modifiedAt
string <date-time>

The date and time of when the user was last modified.

locale
string

An IETF language tag of the user's preferred locale.

timePreference
string
Enum: "default" "24H" "12H"

The user's preferred time format. default will follow the user's locale.

locationCityName
string or null

The city name of the user's usual location.

locationCountryCode
string or null

The ISO 3166-1 alpha-2 country code of the user's usual location.

locationLatitude
number or null <float>

The latitude of the user's usual location, based on their city.

locationLongitude
number or null <float>

The longitude of the user's usual location, based on their city.

locationTimezone
string or null

The usual IANA time zone of the user, based on their city.

biography
string or null

A short biography.

monogram
string

A two-letter identifier made from the user's full name or email address.

building
object or null

The building the visit takes place in.

startDate
string <date-time>

The date and time of the beginning of the visit.

endDate
string <date-time>

The date and time of the end of the visit.

status
string
Enum: "booked" "checkedIn" "checkedOut" "completed" "cancelled" "noCheckIn"

The current status of the visit.

visitors
Array of arrays

Every attendee of the visit, including the host/organizer, as visitors.

object

The values these fields held before the change. Only the fields that changed are listed, using the same names as data. If a field is missing, that field didn't change. A missing field does not mean the value was empty. Where the old value was an object rather than a single value, we send it as empty.

property name*
additional property
string or number or boolean or null

Responses

Request samples

Content type
application/json
{
  • "id": "01K1XQ7Z9M4B2N8P5R3T6V0W2Y",
  • "schemaVersion": 1,
  • "type": "visit.checkedIn",
  • "category": "visitor",
  • "occurredAt": "2026-08-08T09:14:22+00:00",
  • "sequence": 1754645662123,
  • "tenantId": "01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "actor": {
    • "type": "user",
    • "id": "01H8QW3ZC4RN7XKD2M6VB9TF5A",
    • "source": "ios"
    },
  • "target": {
    • "object": "visit",
    • "id": "01JB4KQ2X8HN5YT7WZ3PC6MR9D"
    },
  • "data": {
    • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
    • "host": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "email": "john.smith@example.com",
      • "firstName": "John",
      • "lastName": "Smith",
      • "jobTitle": "Head of Marketing",
      • "invitationPending": true,
      • "preferredFloor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 1"
        },
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "locale": "en-GB",
      • "timePreference": "default",
      • "locationCityName": "London",
      • "locationCountryCode": "GB",
      • "locationLatitude": 51.509865,
      • "locationLongitude": -0.118092,
      • "locationTimezone": "Europe/London",
      • "biography": "Head of Marketing, based in London.",
      • "monogram": "JS"
      },
    • "building": { },
    • "startDate": "2017-07-21T17:32:28+00:00",
    • "endDate": "2017-07-21T17:32:28+00:00",
    • "status": "booked",
    • "visitors": [ ]
    },
  • "previous": {
    • "status": "booked"
    }
}

visit.checkedOut Webhook

A visit was checked out.

You can subscribe to this event on its own, or to the whole visitor group.

header Parameters
Kadence-Webhook-Id
required
string

The identifier for this event. It matches the id in the body. Use it to spot repeats.

Kadence-Webhook-Type
required
string

The type of event. Use it to send the delivery to the right place without reading the body.

Kadence-Webhook-Timestamp
required
string

The time we signed the delivery, in seconds. It is part of the signed value, so it cannot be changed without breaking the signature. Compare it with the time the request arrived if you want to reject requests that have been held for a long time.

Kadence-Webhook-Subscription
required
string

The webhook that produced this delivery. Useful when you have more than one.

Kadence-Webhook-Attempt
required
string

Which attempt this is, starting at 1. This header is present on the first attempt as well, so treat every delivery as one that might be a repeat.

Kadence-Webhook-Signature
required
string

Proof that the delivery came from us. The value is v1= followed by the HMAC-SHA256 of {timestamp}.{rawBody}, using your signing secret, in hex. Work out the same value and compare the two with a constant-time comparison. Use the exact bytes you received. While you are replacing a secret this header holds two values separated by a space, and either one matching is valid.

Request Body schema: application/json
required
id
required
string

The unique identifier for this event. We can send the same event more than once, so use this value to spot repeats. It stays the same on every attempt.

schemaVersion
required
integer
Value: 1

The version of the event format. We'll increase this number if the format changes in a way that could break your code.

type
required
string
Value: "visit.checkedOut"

What happened. Switch on this value to decide how to handle the delivery.

category
required
string
Value: "visitor"

The group this event belongs to. You can subscribe to a whole group instead of picking events one at a time.

occurredAt
required
string <date-time>

When the event happened. Times are in UTC and include the offset, the same as the rest of our public API.

sequence
required
integer <int64>

A number that goes up as an object changes. Events can arrive in a different order to the one they happened in, so compare this value to work out which event is the most recent, rather than relying on the order they arrive in. Two events for the same object can carry the same number when they describe one change from two angles, such as a booking change and its guest-visit counterpart. Treat matching numbers as both being current, and use id to spot repeats.

tenantId
required
string

The Kadence account the event belongs to.

required
object

What caused the event.

type
required
string

What caused the event. user means a person did something. system means we did it, for example a scheduled job, or a change that followed on from another change. When the value is system, id and source are both empty.

id
string or null

The identifier of the person who did it. This is empty when we caused the event.

source
string or null

The app or service the person used, where we know it.

required
object

The object this event is about. It is the same on every event for that object.

object
required
string
Value: "visit"
id
required
string

The identifier of the object. Use it with sequence to tell which object the event is about and how recent it is.

required
object

A copy of the object as it was when the event happened. It does not change if the object changes afterwards.

id
string

The ULID of the visit.

object or null

Holds the whole object, not an identifier.

Any of
id
string

The user's ULID within the Kadence platform.

email
string <email>

The user's email address.

firstName
string

The user's given name.

lastName
string

The user's family name.

jobTitle
string or null

The user's job title.

invitationPending
boolean

Whether the user's invitation to join Kadence is still pending. false once they have signed up.

preferredFloor
object

The user's preferred floor for booking when going into the office.

createdAt
string <date-time>

The date and time of when the user was created.

modifiedAt
string <date-time>

The date and time of when the user was last modified.

locale
string

An IETF language tag of the user's preferred locale.

timePreference
string
Enum: "default" "24H" "12H"

The user's preferred time format. default will follow the user's locale.

locationCityName
string or null

The city name of the user's usual location.

locationCountryCode
string or null

The ISO 3166-1 alpha-2 country code of the user's usual location.

locationLatitude
number or null <float>

The latitude of the user's usual location, based on their city.

locationLongitude
number or null <float>

The longitude of the user's usual location, based on their city.

locationTimezone
string or null

The usual IANA time zone of the user, based on their city.

biography
string or null

A short biography.

monogram
string

A two-letter identifier made from the user's full name or email address.

building
object or null

The building the visit takes place in.

startDate
string <date-time>

The date and time of the beginning of the visit.

endDate
string <date-time>

The date and time of the end of the visit.

status
string
Enum: "booked" "checkedIn" "checkedOut" "completed" "cancelled" "noCheckIn"

The current status of the visit.

visitors
Array of arrays

Every attendee of the visit, including the host/organizer, as visitors.

object

The values these fields held before the change. Only the fields that changed are listed, using the same names as data. If a field is missing, that field didn't change. A missing field does not mean the value was empty. Where the old value was an object rather than a single value, we send it as empty.

property name*
additional property
string or number or boolean or null

Responses

Request samples

Content type
application/json
{
  • "id": "01K1XQ7Z9M4B2N8P5R3T6V0W2Y",
  • "schemaVersion": 1,
  • "type": "visit.checkedOut",
  • "category": "visitor",
  • "occurredAt": "2026-08-08T09:14:22+00:00",
  • "sequence": 1754645662123,
  • "tenantId": "01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "actor": {
    • "type": "user",
    • "id": "01H8QW3ZC4RN7XKD2M6VB9TF5A",
    • "source": "ios"
    },
  • "target": {
    • "object": "visit",
    • "id": "01JB4KQ2X8HN5YT7WZ3PC6MR9D"
    },
  • "data": {
    • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
    • "host": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "email": "john.smith@example.com",
      • "firstName": "John",
      • "lastName": "Smith",
      • "jobTitle": "Head of Marketing",
      • "invitationPending": true,
      • "preferredFloor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 1"
        },
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "locale": "en-GB",
      • "timePreference": "default",
      • "locationCityName": "London",
      • "locationCountryCode": "GB",
      • "locationLatitude": 51.509865,
      • "locationLongitude": -0.118092,
      • "locationTimezone": "Europe/London",
      • "biography": "Head of Marketing, based in London.",
      • "monogram": "JS"
      },
    • "building": { },
    • "startDate": "2017-07-21T17:32:28+00:00",
    • "endDate": "2017-07-21T17:32:28+00:00",
    • "status": "booked",
    • "visitors": [ ]
    },
  • "previous": {
    • "status": "checkedIn"
    }
}

visitor.invited Webhook

A guest was invited to a visit.

You can subscribe to this event on its own, or to the whole visitor group.

header Parameters
Kadence-Webhook-Id
required
string

The identifier for this event. It matches the id in the body. Use it to spot repeats.

Kadence-Webhook-Type
required
string

The type of event. Use it to send the delivery to the right place without reading the body.

Kadence-Webhook-Timestamp
required
string

The time we signed the delivery, in seconds. It is part of the signed value, so it cannot be changed without breaking the signature. Compare it with the time the request arrived if you want to reject requests that have been held for a long time.

Kadence-Webhook-Subscription
required
string

The webhook that produced this delivery. Useful when you have more than one.

Kadence-Webhook-Attempt
required
string

Which attempt this is, starting at 1. This header is present on the first attempt as well, so treat every delivery as one that might be a repeat.

Kadence-Webhook-Signature
required
string

Proof that the delivery came from us. The value is v1= followed by the HMAC-SHA256 of {timestamp}.{rawBody}, using your signing secret, in hex. Work out the same value and compare the two with a constant-time comparison. Use the exact bytes you received. While you are replacing a secret this header holds two values separated by a space, and either one matching is valid.

Request Body schema: application/json
required
id
required
string

The unique identifier for this event. We can send the same event more than once, so use this value to spot repeats. It stays the same on every attempt.

schemaVersion
required
integer
Value: 1

The version of the event format. We'll increase this number if the format changes in a way that could break your code.

type
required
string
Value: "visitor.invited"

What happened. Switch on this value to decide how to handle the delivery.

category
required
string
Value: "visitor"

The group this event belongs to. You can subscribe to a whole group instead of picking events one at a time.

occurredAt
required
string <date-time>

When the event happened. Times are in UTC and include the offset, the same as the rest of our public API.

sequence
required
integer <int64>

A number that goes up as an object changes. Events can arrive in a different order to the one they happened in, so compare this value to work out which event is the most recent, rather than relying on the order they arrive in. Two events for the same object can carry the same number when they describe one change from two angles, such as a booking change and its guest-visit counterpart. Treat matching numbers as both being current, and use id to spot repeats.

tenantId
required
string

The Kadence account the event belongs to.

required
object

What caused the event.

type
required
string

What caused the event. user means a person did something. system means we did it, for example a scheduled job, or a change that followed on from another change. When the value is system, id and source are both empty.

id
string or null

The identifier of the person who did it. This is empty when we caused the event.

source
string or null

The app or service the person used, where we know it.

required
object

The object this event is about. It is the same on every event for that object.

object
required
string
Value: "visitor"
id
required
string

The identifier of the object. Use it with sequence to tell which object the event is about and how recent it is.

required
object

A copy of the object as it was when the event happened. It does not change if the object changes afterwards.

visitCount
integer or null

The total number of visits this visitor has made. Null when embedded inside a visit.

id
string

The ULID of the visitor.

displayName
string or null

The display name of the visitor.

firstName
string or null

The visitor's given name.

lastName
string or null

The visitor's family name.

email
string <email>

The visitor's email address.

type
string
Enum: "external" "user"

Whether the visitor is an external guest or an internal Kadence user.

object or null

The internal Kadence user this visitor maps to, when the visitor is a user rather than an external guest. Despite the name, this holds the whole object. Read userId.id for the identifier.

Any of
id
string

The user's ULID within the Kadence platform.

email
string <email>

The user's email address.

firstName
string

The user's given name.

lastName
string

The user's family name.

jobTitle
string or null

The user's job title.

invitationPending
boolean

Whether the user's invitation to join Kadence is still pending. false once they have signed up.

preferredFloor
object

The user's preferred floor for booking when going into the office.

createdAt
string <date-time>

The date and time of when the user was created.

modifiedAt
string <date-time>

The date and time of when the user was last modified.

locale
string

An IETF language tag of the user's preferred locale.

timePreference
string
Enum: "default" "24H" "12H"

The user's preferred time format. default will follow the user's locale.

locationCityName
string or null

The city name of the user's usual location.

locationCountryCode
string or null

The ISO 3166-1 alpha-2 country code of the user's usual location.

locationLatitude
number or null <float>

The latitude of the user's usual location, based on their city.

locationLongitude
number or null <float>

The longitude of the user's usual location, based on their city.

locationTimezone
string or null

The usual IANA time zone of the user, based on their city.

biography
string or null

A short biography.

monogram
string

A two-letter identifier made from the user's full name or email address.

status
string
Enum: "none" "organizer" "tentatively_accepted" "accepted" "declined" "not_responded"

The attendance status of the visitor.

checkedInDate
string or null <date-time>

The date and time the visitor checked in.

checkedOutDate
string or null <date-time>

The date and time the visitor checked out.

visitId
string

The ULID of the visitor's latest visit.

object or null

The host of the visitor's latest visit. Holds the whole object, not an identifier.

Any of
id
string

The user's ULID within the Kadence platform.

email
string <email>

The user's email address.

firstName
string

The user's given name.

lastName
string

The user's family name.

jobTitle
string or null

The user's job title.

invitationPending
boolean

Whether the user's invitation to join Kadence is still pending. false once they have signed up.

preferredFloor
object

The user's preferred floor for booking when going into the office.

createdAt
string <date-time>

The date and time of when the user was created.

modifiedAt
string <date-time>

The date and time of when the user was last modified.

locale
string

An IETF language tag of the user's preferred locale.

timePreference
string
Enum: "default" "24H" "12H"

The user's preferred time format. default will follow the user's locale.

locationCityName
string or null

The city name of the user's usual location.

locationCountryCode
string or null

The ISO 3166-1 alpha-2 country code of the user's usual location.

locationLatitude
number or null <float>

The latitude of the user's usual location, based on their city.

locationLongitude
number or null <float>

The longitude of the user's usual location, based on their city.

locationTimezone
string or null

The usual IANA time zone of the user, based on their city.

biography
string or null

A short biography.

monogram
string

A two-letter identifier made from the user's full name or email address.

building
object or null

The building of the visitor's latest visit.

startDate
string or null <date-time>

The start date and time of the visitor's latest visit.

endDate
string or null <date-time>

The end date and time of the visitor's latest visit.

visitStatus
string or null
Enum: "booked" "checkedIn" "checkedOut" "completed" "cancelled" "noCheckIn"

The status of the visitor's latest visit.

Responses

Request samples

Content type
application/json
{
  • "id": "01K1XQ7Z9M4B2N8P5R3T6V0W2Y",
  • "schemaVersion": 1,
  • "type": "visitor.invited",
  • "category": "visitor",
  • "occurredAt": "2026-08-08T09:14:22+00:00",
  • "sequence": 1754645662123,
  • "tenantId": "01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "actor": {
    • "type": "user",
    • "id": "01H8QW3ZC4RN7XKD2M6VB9TF5A",
    • "source": "ios"
    },
  • "target": {
    • "object": "visitor",
    • "id": "01JB4KQ2X8HN5YT7WZ3PC6MR9D"
    },
  • "data": {
    • "visitCount": 3,
    • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
    • "displayName": "John Smith",
    • "firstName": "John",
    • "lastName": "Smith",
    • "email": "john.smith@example.com",
    • "type": "external",
    • "userId": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "email": "john.smith@example.com",
      • "firstName": "John",
      • "lastName": "Smith",
      • "jobTitle": "Head of Marketing",
      • "invitationPending": true,
      • "preferredFloor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 1"
        },
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "locale": "en-GB",
      • "timePreference": "default",
      • "locationCityName": "London",
      • "locationCountryCode": "GB",
      • "locationLatitude": 51.509865,
      • "locationLongitude": -0.118092,
      • "locationTimezone": "Europe/London",
      • "biography": "Head of Marketing, based in London.",
      • "monogram": "JS"
      },
    • "status": "accepted",
    • "checkedInDate": "2017-07-21T17:32:28+00:00",
    • "checkedOutDate": "2017-07-21T17:32:28+00:00",
    • "visitId": "01GTBV1CT3BM8A42SEJ2J5F4EG",
    • "host": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "email": "john.smith@example.com",
      • "firstName": "John",
      • "lastName": "Smith",
      • "jobTitle": "Head of Marketing",
      • "invitationPending": true,
      • "preferredFloor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 1"
        },
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "locale": "en-GB",
      • "timePreference": "default",
      • "locationCityName": "London",
      • "locationCountryCode": "GB",
      • "locationLatitude": 51.509865,
      • "locationLongitude": -0.118092,
      • "locationTimezone": "Europe/London",
      • "biography": "Head of Marketing, based in London.",
      • "monogram": "JS"
      },
    • "building": { },
    • "startDate": "2017-07-21T17:32:28+00:00",
    • "endDate": "2017-07-21T17:32:28+00:00",
    • "visitStatus": "booked"
    }
}

visitor.arrived Webhook

A guest arrived and checked in.

You can subscribe to this event on its own, or to the whole visitor group.

header Parameters
Kadence-Webhook-Id
required
string

The identifier for this event. It matches the id in the body. Use it to spot repeats.

Kadence-Webhook-Type
required
string

The type of event. Use it to send the delivery to the right place without reading the body.

Kadence-Webhook-Timestamp
required
string

The time we signed the delivery, in seconds. It is part of the signed value, so it cannot be changed without breaking the signature. Compare it with the time the request arrived if you want to reject requests that have been held for a long time.

Kadence-Webhook-Subscription
required
string

The webhook that produced this delivery. Useful when you have more than one.

Kadence-Webhook-Attempt
required
string

Which attempt this is, starting at 1. This header is present on the first attempt as well, so treat every delivery as one that might be a repeat.

Kadence-Webhook-Signature
required
string

Proof that the delivery came from us. The value is v1= followed by the HMAC-SHA256 of {timestamp}.{rawBody}, using your signing secret, in hex. Work out the same value and compare the two with a constant-time comparison. Use the exact bytes you received. While you are replacing a secret this header holds two values separated by a space, and either one matching is valid.

Request Body schema: application/json
required
id
required
string

The unique identifier for this event. We can send the same event more than once, so use this value to spot repeats. It stays the same on every attempt.

schemaVersion
required
integer
Value: 1

The version of the event format. We'll increase this number if the format changes in a way that could break your code.

type
required
string
Value: "visitor.arrived"

What happened. Switch on this value to decide how to handle the delivery.

category
required
string
Value: "visitor"

The group this event belongs to. You can subscribe to a whole group instead of picking events one at a time.

occurredAt
required
string <date-time>

When the event happened. Times are in UTC and include the offset, the same as the rest of our public API.

sequence
required
integer <int64>

A number that goes up as an object changes. Events can arrive in a different order to the one they happened in, so compare this value to work out which event is the most recent, rather than relying on the order they arrive in. Two events for the same object can carry the same number when they describe one change from two angles, such as a booking change and its guest-visit counterpart. Treat matching numbers as both being current, and use id to spot repeats.

tenantId
required
string

The Kadence account the event belongs to.

required
object

What caused the event.

type
required
string

What caused the event. user means a person did something. system means we did it, for example a scheduled job, or a change that followed on from another change. When the value is system, id and source are both empty.

id
string or null

The identifier of the person who did it. This is empty when we caused the event.

source
string or null

The app or service the person used, where we know it.

required
object

The object this event is about. It is the same on every event for that object.

object
required
string
Value: "visitor"
id
required
string

The identifier of the object. Use it with sequence to tell which object the event is about and how recent it is.

required
object

A copy of the object as it was when the event happened. It does not change if the object changes afterwards.

visitCount
integer or null

The total number of visits this visitor has made. Null when embedded inside a visit.

id
string

The ULID of the visitor.

displayName
string or null

The display name of the visitor.

firstName
string or null

The visitor's given name.

lastName
string or null

The visitor's family name.

email
string <email>

The visitor's email address.

type
string
Enum: "external" "user"

Whether the visitor is an external guest or an internal Kadence user.

object or null

The internal Kadence user this visitor maps to, when the visitor is a user rather than an external guest. Despite the name, this holds the whole object. Read userId.id for the identifier.

Any of
id
string

The user's ULID within the Kadence platform.

email
string <email>

The user's email address.

firstName
string

The user's given name.

lastName
string

The user's family name.

jobTitle
string or null

The user's job title.

invitationPending
boolean

Whether the user's invitation to join Kadence is still pending. false once they have signed up.

preferredFloor
object

The user's preferred floor for booking when going into the office.

createdAt
string <date-time>

The date and time of when the user was created.

modifiedAt
string <date-time>

The date and time of when the user was last modified.

locale
string

An IETF language tag of the user's preferred locale.

timePreference
string
Enum: "default" "24H" "12H"

The user's preferred time format. default will follow the user's locale.

locationCityName
string or null

The city name of the user's usual location.

locationCountryCode
string or null

The ISO 3166-1 alpha-2 country code of the user's usual location.

locationLatitude
number or null <float>

The latitude of the user's usual location, based on their city.

locationLongitude
number or null <float>

The longitude of the user's usual location, based on their city.

locationTimezone
string or null

The usual IANA time zone of the user, based on their city.

biography
string or null

A short biography.

monogram
string

A two-letter identifier made from the user's full name or email address.

status
string
Enum: "none" "organizer" "tentatively_accepted" "accepted" "declined" "not_responded"

The attendance status of the visitor.

checkedInDate
string or null <date-time>

The date and time the visitor checked in.

checkedOutDate
string or null <date-time>

The date and time the visitor checked out.

visitId
string

The ULID of the visitor's latest visit.

object or null

The host of the visitor's latest visit. Holds the whole object, not an identifier.

Any of
id
string

The user's ULID within the Kadence platform.

email
string <email>

The user's email address.

firstName
string

The user's given name.

lastName
string

The user's family name.

jobTitle
string or null

The user's job title.

invitationPending
boolean

Whether the user's invitation to join Kadence is still pending. false once they have signed up.

preferredFloor
object

The user's preferred floor for booking when going into the office.

createdAt
string <date-time>

The date and time of when the user was created.

modifiedAt
string <date-time>

The date and time of when the user was last modified.

locale
string

An IETF language tag of the user's preferred locale.

timePreference
string
Enum: "default" "24H" "12H"

The user's preferred time format. default will follow the user's locale.

locationCityName
string or null

The city name of the user's usual location.

locationCountryCode
string or null

The ISO 3166-1 alpha-2 country code of the user's usual location.

locationLatitude
number or null <float>

The latitude of the user's usual location, based on their city.

locationLongitude
number or null <float>

The longitude of the user's usual location, based on their city.

locationTimezone
string or null

The usual IANA time zone of the user, based on their city.

biography
string or null

A short biography.

monogram
string

A two-letter identifier made from the user's full name or email address.

building
object or null

The building of the visitor's latest visit.

startDate
string or null <date-time>

The start date and time of the visitor's latest visit.

endDate
string or null <date-time>

The end date and time of the visitor's latest visit.

visitStatus
string or null
Enum: "booked" "checkedIn" "checkedOut" "completed" "cancelled" "noCheckIn"

The status of the visitor's latest visit.

Responses

Request samples

Content type
application/json
{
  • "id": "01K1XQ7Z9M4B2N8P5R3T6V0W2Y",
  • "schemaVersion": 1,
  • "type": "visitor.arrived",
  • "category": "visitor",
  • "occurredAt": "2026-08-08T09:14:22+00:00",
  • "sequence": 1754645662123,
  • "tenantId": "01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "actor": {
    • "type": "user",
    • "id": "01H8QW3ZC4RN7XKD2M6VB9TF5A",
    • "source": "ios"
    },
  • "target": {
    • "object": "visitor",
    • "id": "01JB4KQ2X8HN5YT7WZ3PC6MR9D"
    },
  • "data": {
    • "visitCount": 3,
    • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
    • "displayName": "John Smith",
    • "firstName": "John",
    • "lastName": "Smith",
    • "email": "john.smith@example.com",
    • "type": "external",
    • "userId": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "email": "john.smith@example.com",
      • "firstName": "John",
      • "lastName": "Smith",
      • "jobTitle": "Head of Marketing",
      • "invitationPending": true,
      • "preferredFloor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 1"
        },
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "locale": "en-GB",
      • "timePreference": "default",
      • "locationCityName": "London",
      • "locationCountryCode": "GB",
      • "locationLatitude": 51.509865,
      • "locationLongitude": -0.118092,
      • "locationTimezone": "Europe/London",
      • "biography": "Head of Marketing, based in London.",
      • "monogram": "JS"
      },
    • "status": "accepted",
    • "checkedInDate": "2017-07-21T17:32:28+00:00",
    • "checkedOutDate": "2017-07-21T17:32:28+00:00",
    • "visitId": "01GTBV1CT3BM8A42SEJ2J5F4EG",
    • "host": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "email": "john.smith@example.com",
      • "firstName": "John",
      • "lastName": "Smith",
      • "jobTitle": "Head of Marketing",
      • "invitationPending": true,
      • "preferredFloor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 1"
        },
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "locale": "en-GB",
      • "timePreference": "default",
      • "locationCityName": "London",
      • "locationCountryCode": "GB",
      • "locationLatitude": 51.509865,
      • "locationLongitude": -0.118092,
      • "locationTimezone": "Europe/London",
      • "biography": "Head of Marketing, based in London.",
      • "monogram": "JS"
      },
    • "building": { },
    • "startDate": "2017-07-21T17:32:28+00:00",
    • "endDate": "2017-07-21T17:32:28+00:00",
    • "visitStatus": "booked"
    }
}

visitor.checkedOut Webhook

A guest checked out.

You can subscribe to this event on its own, or to the whole visitor group.

header Parameters
Kadence-Webhook-Id
required
string

The identifier for this event. It matches the id in the body. Use it to spot repeats.

Kadence-Webhook-Type
required
string

The type of event. Use it to send the delivery to the right place without reading the body.

Kadence-Webhook-Timestamp
required
string

The time we signed the delivery, in seconds. It is part of the signed value, so it cannot be changed without breaking the signature. Compare it with the time the request arrived if you want to reject requests that have been held for a long time.

Kadence-Webhook-Subscription
required
string

The webhook that produced this delivery. Useful when you have more than one.

Kadence-Webhook-Attempt
required
string

Which attempt this is, starting at 1. This header is present on the first attempt as well, so treat every delivery as one that might be a repeat.

Kadence-Webhook-Signature
required
string

Proof that the delivery came from us. The value is v1= followed by the HMAC-SHA256 of {timestamp}.{rawBody}, using your signing secret, in hex. Work out the same value and compare the two with a constant-time comparison. Use the exact bytes you received. While you are replacing a secret this header holds two values separated by a space, and either one matching is valid.

Request Body schema: application/json
required
id
required
string

The unique identifier for this event. We can send the same event more than once, so use this value to spot repeats. It stays the same on every attempt.

schemaVersion
required
integer
Value: 1

The version of the event format. We'll increase this number if the format changes in a way that could break your code.

type
required
string
Value: "visitor.checkedOut"

What happened. Switch on this value to decide how to handle the delivery.

category
required
string
Value: "visitor"

The group this event belongs to. You can subscribe to a whole group instead of picking events one at a time.

occurredAt
required
string <date-time>

When the event happened. Times are in UTC and include the offset, the same as the rest of our public API.

sequence
required
integer <int64>

A number that goes up as an object changes. Events can arrive in a different order to the one they happened in, so compare this value to work out which event is the most recent, rather than relying on the order they arrive in. Two events for the same object can carry the same number when they describe one change from two angles, such as a booking change and its guest-visit counterpart. Treat matching numbers as both being current, and use id to spot repeats.

tenantId
required
string

The Kadence account the event belongs to.

required
object

What caused the event.

type
required
string

What caused the event. user means a person did something. system means we did it, for example a scheduled job, or a change that followed on from another change. When the value is system, id and source are both empty.

id
string or null

The identifier of the person who did it. This is empty when we caused the event.

source
string or null

The app or service the person used, where we know it.

required
object

The object this event is about. It is the same on every event for that object.

object
required
string
Value: "visitor"
id
required
string

The identifier of the object. Use it with sequence to tell which object the event is about and how recent it is.

required
object

A copy of the object as it was when the event happened. It does not change if the object changes afterwards.

visitCount
integer or null

The total number of visits this visitor has made. Null when embedded inside a visit.

id
string

The ULID of the visitor.

displayName
string or null

The display name of the visitor.

firstName
string or null

The visitor's given name.

lastName
string or null

The visitor's family name.

email
string <email>

The visitor's email address.

type
string
Enum: "external" "user"

Whether the visitor is an external guest or an internal Kadence user.

object or null

The internal Kadence user this visitor maps to, when the visitor is a user rather than an external guest. Despite the name, this holds the whole object. Read userId.id for the identifier.

Any of
id
string

The user's ULID within the Kadence platform.

email
string <email>

The user's email address.

firstName
string

The user's given name.

lastName
string

The user's family name.

jobTitle
string or null

The user's job title.

invitationPending
boolean

Whether the user's invitation to join Kadence is still pending. false once they have signed up.

preferredFloor
object

The user's preferred floor for booking when going into the office.

createdAt
string <date-time>

The date and time of when the user was created.

modifiedAt
string <date-time>

The date and time of when the user was last modified.

locale
string

An IETF language tag of the user's preferred locale.

timePreference
string
Enum: "default" "24H" "12H"

The user's preferred time format. default will follow the user's locale.

locationCityName
string or null

The city name of the user's usual location.

locationCountryCode
string or null

The ISO 3166-1 alpha-2 country code of the user's usual location.

locationLatitude
number or null <float>

The latitude of the user's usual location, based on their city.

locationLongitude
number or null <float>

The longitude of the user's usual location, based on their city.

locationTimezone
string or null

The usual IANA time zone of the user, based on their city.

biography
string or null

A short biography.

monogram
string

A two-letter identifier made from the user's full name or email address.

status
string
Enum: "none" "organizer" "tentatively_accepted" "accepted" "declined" "not_responded"

The attendance status of the visitor.

checkedInDate
string or null <date-time>

The date and time the visitor checked in.

checkedOutDate
string or null <date-time>

The date and time the visitor checked out.

visitId
string

The ULID of the visitor's latest visit.

object or null

The host of the visitor's latest visit. Holds the whole object, not an identifier.

Any of
id
string

The user's ULID within the Kadence platform.

email
string <email>

The user's email address.

firstName
string

The user's given name.

lastName
string

The user's family name.

jobTitle
string or null

The user's job title.

invitationPending
boolean

Whether the user's invitation to join Kadence is still pending. false once they have signed up.

preferredFloor
object

The user's preferred floor for booking when going into the office.

createdAt
string <date-time>

The date and time of when the user was created.

modifiedAt
string <date-time>

The date and time of when the user was last modified.

locale
string

An IETF language tag of the user's preferred locale.

timePreference
string
Enum: "default" "24H" "12H"

The user's preferred time format. default will follow the user's locale.

locationCityName
string or null

The city name of the user's usual location.

locationCountryCode
string or null

The ISO 3166-1 alpha-2 country code of the user's usual location.

locationLatitude
number or null <float>

The latitude of the user's usual location, based on their city.

locationLongitude
number or null <float>

The longitude of the user's usual location, based on their city.

locationTimezone
string or null

The usual IANA time zone of the user, based on their city.

biography
string or null

A short biography.

monogram
string

A two-letter identifier made from the user's full name or email address.

building
object or null

The building of the visitor's latest visit.

startDate
string or null <date-time>

The start date and time of the visitor's latest visit.

endDate
string or null <date-time>

The end date and time of the visitor's latest visit.

visitStatus
string or null
Enum: "booked" "checkedIn" "checkedOut" "completed" "cancelled" "noCheckIn"

The status of the visitor's latest visit.

Responses

Request samples

Content type
application/json
{
  • "id": "01K1XQ7Z9M4B2N8P5R3T6V0W2Y",
  • "schemaVersion": 1,
  • "type": "visitor.checkedOut",
  • "category": "visitor",
  • "occurredAt": "2026-08-08T09:14:22+00:00",
  • "sequence": 1754645662123,
  • "tenantId": "01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "actor": {
    • "type": "user",
    • "id": "01H8QW3ZC4RN7XKD2M6VB9TF5A",
    • "source": "ios"
    },
  • "target": {
    • "object": "visitor",
    • "id": "01JB4KQ2X8HN5YT7WZ3PC6MR9D"
    },
  • "data": {
    • "visitCount": 3,
    • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
    • "displayName": "John Smith",
    • "firstName": "John",
    • "lastName": "Smith",
    • "email": "john.smith@example.com",
    • "type": "external",
    • "userId": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "email": "john.smith@example.com",
      • "firstName": "John",
      • "lastName": "Smith",
      • "jobTitle": "Head of Marketing",
      • "invitationPending": true,
      • "preferredFloor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 1"
        },
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "locale": "en-GB",
      • "timePreference": "default",
      • "locationCityName": "London",
      • "locationCountryCode": "GB",
      • "locationLatitude": 51.509865,
      • "locationLongitude": -0.118092,
      • "locationTimezone": "Europe/London",
      • "biography": "Head of Marketing, based in London.",
      • "monogram": "JS"
      },
    • "status": "accepted",
    • "checkedInDate": "2017-07-21T17:32:28+00:00",
    • "checkedOutDate": "2017-07-21T17:32:28+00:00",
    • "visitId": "01GTBV1CT3BM8A42SEJ2J5F4EG",
    • "host": {
      • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "email": "john.smith@example.com",
      • "firstName": "John",
      • "lastName": "Smith",
      • "jobTitle": "Head of Marketing",
      • "invitationPending": true,
      • "preferredFloor": {
        • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
        • "name": "Floor 1"
        },
      • "createdAt": "2017-07-21T17:32:28+00:00",
      • "modifiedAt": "2017-07-21T17:32:28+00:00",
      • "locale": "en-GB",
      • "timePreference": "default",
      • "locationCityName": "London",
      • "locationCountryCode": "GB",
      • "locationLatitude": 51.509865,
      • "locationLongitude": -0.118092,
      • "locationTimezone": "Europe/London",
      • "biography": "Head of Marketing, based in London.",
      • "monogram": "JS"
      },
    • "building": { },
    • "startDate": "2017-07-21T17:32:28+00:00",
    • "endDate": "2017-07-21T17:32:28+00:00",
    • "visitStatus": "booked"
    }
}

space.created Webhook

A space was created.

You can subscribe to this event on its own, or to the whole space group.

header Parameters
Kadence-Webhook-Id
required
string

The identifier for this event. It matches the id in the body. Use it to spot repeats.

Kadence-Webhook-Type
required
string

The type of event. Use it to send the delivery to the right place without reading the body.

Kadence-Webhook-Timestamp
required
string

The time we signed the delivery, in seconds. It is part of the signed value, so it cannot be changed without breaking the signature. Compare it with the time the request arrived if you want to reject requests that have been held for a long time.

Kadence-Webhook-Subscription
required
string

The webhook that produced this delivery. Useful when you have more than one.

Kadence-Webhook-Attempt
required
string

Which attempt this is, starting at 1. This header is present on the first attempt as well, so treat every delivery as one that might be a repeat.

Kadence-Webhook-Signature
required
string

Proof that the delivery came from us. The value is v1= followed by the HMAC-SHA256 of {timestamp}.{rawBody}, using your signing secret, in hex. Work out the same value and compare the two with a constant-time comparison. Use the exact bytes you received. While you are replacing a secret this header holds two values separated by a space, and either one matching is valid.

Request Body schema: application/json
required
id
required
string

The unique identifier for this event. We can send the same event more than once, so use this value to spot repeats. It stays the same on every attempt.

schemaVersion
required
integer
Value: 1

The version of the event format. We'll increase this number if the format changes in a way that could break your code.

type
required
string
Value: "space.created"

What happened. Switch on this value to decide how to handle the delivery.

category
required
string
Value: "space"

The group this event belongs to. You can subscribe to a whole group instead of picking events one at a time.

occurredAt
required
string <date-time>

When the event happened. Times are in UTC and include the offset, the same as the rest of our public API.

sequence
required
integer <int64>

A number that goes up as an object changes. Events can arrive in a different order to the one they happened in, so compare this value to work out which event is the most recent, rather than relying on the order they arrive in. Two events for the same object can carry the same number when they describe one change from two angles, such as a booking change and its guest-visit counterpart. Treat matching numbers as both being current, and use id to spot repeats.

tenantId
required
string

The Kadence account the event belongs to.

required
object

What caused the event.

type
required
string

What caused the event. user means a person did something. system means we did it, for example a scheduled job, or a change that followed on from another change. When the value is system, id and source are both empty.

id
string or null

The identifier of the person who did it. This is empty when we caused the event.

source
string or null

The app or service the person used, where we know it.

required
object

The object this event is about. It is the same on every event for that object.

object
required
string
Value: "space"
id
required
string

The identifier of the object. Use it with sequence to tell which object the event is about and how recent it is.

required
object

A copy of the object as it was when the event happened. It does not change if the object changes afterwards.

id
string

The ULID of the space.

name
string

The name of the space.

type
string

The type of space.

capacity
integer

How many people the space holds. A desk is 1. A room is its seating capacity.

object or null

The floor the space is on. Holds the whole object, not an identifier.

Any of
id
string

The ULID of the floor.

name
string

The name of the floor.

floorPlanUrl
string

The URL of the floor plan SVG.

object or null

The neighborhood the space belongs to, if it is in one. Holds the whole object, not an identifier.

Any of
id
string

The ULID of the neighborhood.

name
string

The name of the neighborhood.

photo
string

The UUID of the photo of the space.

photoUrl
string or null

A link to the photo, ready to use. Null when there is no photo.

photoTemplateUrl
string or null

The same link with the size left as a placeholder, so you can ask for the dimensions you need. Null when there is no photo.

Responses

Request samples

Content type
application/json
{
  • "id": "01K1XQ7Z9M4B2N8P5R3T6V0W2Y",
  • "schemaVersion": 1,
  • "type": "space.created",
  • "category": "space",
  • "occurredAt": "2026-08-08T09:14:22+00:00",
  • "sequence": 1754645662123,
  • "tenantId": "01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "actor": {
    • "type": "user",
    • "id": "01H8QW3ZC4RN7XKD2M6VB9TF5A",
    • "source": "ios"
    },
  • "target": {
    • "object": "space",
    • "id": "01JB4KQ2X8HN5YT7WZ3PC6MR9D"
    },
  • "data": {}
}

space.updated Webhook

A space's name, type, capacity or location changed.

You can subscribe to this event on its own, or to the whole space group.

header Parameters
Kadence-Webhook-Id
required
string

The identifier for this event. It matches the id in the body. Use it to spot repeats.

Kadence-Webhook-Type
required
string

The type of event. Use it to send the delivery to the right place without reading the body.

Kadence-Webhook-Timestamp
required
string

The time we signed the delivery, in seconds. It is part of the signed value, so it cannot be changed without breaking the signature. Compare it with the time the request arrived if you want to reject requests that have been held for a long time.

Kadence-Webhook-Subscription
required
string

The webhook that produced this delivery. Useful when you have more than one.

Kadence-Webhook-Attempt
required
string

Which attempt this is, starting at 1. This header is present on the first attempt as well, so treat every delivery as one that might be a repeat.

Kadence-Webhook-Signature
required
string

Proof that the delivery came from us. The value is v1= followed by the HMAC-SHA256 of {timestamp}.{rawBody}, using your signing secret, in hex. Work out the same value and compare the two with a constant-time comparison. Use the exact bytes you received. While you are replacing a secret this header holds two values separated by a space, and either one matching is valid.

Request Body schema: application/json
required
id
required
string

The unique identifier for this event. We can send the same event more than once, so use this value to spot repeats. It stays the same on every attempt.

schemaVersion
required
integer
Value: 1

The version of the event format. We'll increase this number if the format changes in a way that could break your code.

type
required
string
Value: "space.updated"

What happened. Switch on this value to decide how to handle the delivery.

category
required
string
Value: "space"

The group this event belongs to. You can subscribe to a whole group instead of picking events one at a time.

occurredAt
required
string <date-time>

When the event happened. Times are in UTC and include the offset, the same as the rest of our public API.

sequence
required
integer <int64>

A number that goes up as an object changes. Events can arrive in a different order to the one they happened in, so compare this value to work out which event is the most recent, rather than relying on the order they arrive in. Two events for the same object can carry the same number when they describe one change from two angles, such as a booking change and its guest-visit counterpart. Treat matching numbers as both being current, and use id to spot repeats.

tenantId
required
string

The Kadence account the event belongs to.

required
object

What caused the event.

type
required
string

What caused the event. user means a person did something. system means we did it, for example a scheduled job, or a change that followed on from another change. When the value is system, id and source are both empty.

id
string or null

The identifier of the person who did it. This is empty when we caused the event.

source
string or null

The app or service the person used, where we know it.

required
object

The object this event is about. It is the same on every event for that object.

object
required
string
Value: "space"
id
required
string

The identifier of the object. Use it with sequence to tell which object the event is about and how recent it is.

required
object

A copy of the object as it was when the event happened. It does not change if the object changes afterwards.

id
string

The ULID of the space.

name
string

The name of the space.

type
string

The type of space.

capacity
integer

How many people the space holds. A desk is 1. A room is its seating capacity.

object or null

The floor the space is on. Holds the whole object, not an identifier.

Any of
id
string

The ULID of the floor.

name
string

The name of the floor.

floorPlanUrl
string

The URL of the floor plan SVG.

object or null

The neighborhood the space belongs to, if it is in one. Holds the whole object, not an identifier.

Any of
id
string

The ULID of the neighborhood.

name
string

The name of the neighborhood.

photo
string

The UUID of the photo of the space.

photoUrl
string or null

A link to the photo, ready to use. Null when there is no photo.

photoTemplateUrl
string or null

The same link with the size left as a placeholder, so you can ask for the dimensions you need. Null when there is no photo.

object

The values these fields held before the change. Only the fields that changed are listed, using the same names as data. If a field is missing, that field didn't change. A missing field does not mean the value was empty. Where the old value was an object rather than a single value, we send it as empty.

property name*
additional property
string or number or boolean or null

Responses

Request samples

Content type
application/json
{
  • "id": "01K1XQ7Z9M4B2N8P5R3T6V0W2Y",
  • "schemaVersion": 1,
  • "type": "space.updated",
  • "category": "space",
  • "occurredAt": "2026-08-08T09:14:22+00:00",
  • "sequence": 1754645662123,
  • "tenantId": "01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "actor": {
    • "type": "user",
    • "id": "01H8QW3ZC4RN7XKD2M6VB9TF5A",
    • "source": "ios"
    },
  • "target": {
    • "object": "space",
    • "id": "01JB4KQ2X8HN5YT7WZ3PC6MR9D"
    },
  • "data": {},
  • "previous": {
    • "capacity": 4
    }
}

space.deleted Webhook

A space was deleted. The payload holds its final state.

You can subscribe to this event on its own, or to the whole space group.

header Parameters
Kadence-Webhook-Id
required
string

The identifier for this event. It matches the id in the body. Use it to spot repeats.

Kadence-Webhook-Type
required
string

The type of event. Use it to send the delivery to the right place without reading the body.

Kadence-Webhook-Timestamp
required
string

The time we signed the delivery, in seconds. It is part of the signed value, so it cannot be changed without breaking the signature. Compare it with the time the request arrived if you want to reject requests that have been held for a long time.

Kadence-Webhook-Subscription
required
string

The webhook that produced this delivery. Useful when you have more than one.

Kadence-Webhook-Attempt
required
string

Which attempt this is, starting at 1. This header is present on the first attempt as well, so treat every delivery as one that might be a repeat.

Kadence-Webhook-Signature
required
string

Proof that the delivery came from us. The value is v1= followed by the HMAC-SHA256 of {timestamp}.{rawBody}, using your signing secret, in hex. Work out the same value and compare the two with a constant-time comparison. Use the exact bytes you received. While you are replacing a secret this header holds two values separated by a space, and either one matching is valid.

Request Body schema: application/json
required
id
required
string

The unique identifier for this event. We can send the same event more than once, so use this value to spot repeats. It stays the same on every attempt.

schemaVersion
required
integer
Value: 1

The version of the event format. We'll increase this number if the format changes in a way that could break your code.

type
required
string
Value: "space.deleted"

What happened. Switch on this value to decide how to handle the delivery.

category
required
string
Value: "space"

The group this event belongs to. You can subscribe to a whole group instead of picking events one at a time.

occurredAt
required
string <date-time>

When the event happened. Times are in UTC and include the offset, the same as the rest of our public API.

sequence
required
integer <int64>

A number that goes up as an object changes. Events can arrive in a different order to the one they happened in, so compare this value to work out which event is the most recent, rather than relying on the order they arrive in. Two events for the same object can carry the same number when they describe one change from two angles, such as a booking change and its guest-visit counterpart. Treat matching numbers as both being current, and use id to spot repeats.

tenantId
required
string

The Kadence account the event belongs to.

required
object

What caused the event.

type
required
string

What caused the event. user means a person did something. system means we did it, for example a scheduled job, or a change that followed on from another change. When the value is system, id and source are both empty.

id
string or null

The identifier of the person who did it. This is empty when we caused the event.

source
string or null

The app or service the person used, where we know it.

required
object

The object this event is about. It is the same on every event for that object.

object
required
string
Value: "space"
id
required
string

The identifier of the object. Use it with sequence to tell which object the event is about and how recent it is.

required
object

A copy of the object as it was when the event happened. It does not change if the object changes afterwards.

id
string

The ULID of the space.

name
string

The name of the space.

type
string

The type of space.

capacity
integer

How many people the space holds. A desk is 1. A room is its seating capacity.

object or null

The floor the space is on. Holds the whole object, not an identifier.

Any of
id
string

The ULID of the floor.

name
string

The name of the floor.

floorPlanUrl
string

The URL of the floor plan SVG.

object or null

The neighborhood the space belongs to, if it is in one. Holds the whole object, not an identifier.

Any of
id
string

The ULID of the neighborhood.

name
string

The name of the neighborhood.

photo
string

The UUID of the photo of the space.

photoUrl
string or null

A link to the photo, ready to use. Null when there is no photo.

photoTemplateUrl
string or null

The same link with the size left as a placeholder, so you can ask for the dimensions you need. Null when there is no photo.

Responses

Request samples

Content type
application/json
{
  • "id": "01K1XQ7Z9M4B2N8P5R3T6V0W2Y",
  • "schemaVersion": 1,
  • "type": "space.deleted",
  • "category": "space",
  • "occurredAt": "2026-08-08T09:14:22+00:00",
  • "sequence": 1754645662123,
  • "tenantId": "01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "actor": {
    • "type": "user",
    • "id": "01H8QW3ZC4RN7XKD2M6VB9TF5A",
    • "source": "ios"
    },
  • "target": {
    • "object": "space",
    • "id": "01JB4KQ2X8HN5YT7WZ3PC6MR9D"
    },
  • "data": {}
}

building.created Webhook

A building was created.

You can subscribe to this event on its own, or to the whole building group.

header Parameters
Kadence-Webhook-Id
required
string

The identifier for this event. It matches the id in the body. Use it to spot repeats.

Kadence-Webhook-Type
required
string

The type of event. Use it to send the delivery to the right place without reading the body.

Kadence-Webhook-Timestamp
required
string

The time we signed the delivery, in seconds. It is part of the signed value, so it cannot be changed without breaking the signature. Compare it with the time the request arrived if you want to reject requests that have been held for a long time.

Kadence-Webhook-Subscription
required
string

The webhook that produced this delivery. Useful when you have more than one.

Kadence-Webhook-Attempt
required
string

Which attempt this is, starting at 1. This header is present on the first attempt as well, so treat every delivery as one that might be a repeat.

Kadence-Webhook-Signature
required
string

Proof that the delivery came from us. The value is v1= followed by the HMAC-SHA256 of {timestamp}.{rawBody}, using your signing secret, in hex. Work out the same value and compare the two with a constant-time comparison. Use the exact bytes you received. While you are replacing a secret this header holds two values separated by a space, and either one matching is valid.

Request Body schema: application/json
required
id
required
string

The unique identifier for this event. We can send the same event more than once, so use this value to spot repeats. It stays the same on every attempt.

schemaVersion
required
integer
Value: 1

The version of the event format. We'll increase this number if the format changes in a way that could break your code.

type
required
string
Value: "building.created"

What happened. Switch on this value to decide how to handle the delivery.

category
required
string
Value: "building"

The group this event belongs to. You can subscribe to a whole group instead of picking events one at a time.

occurredAt
required
string <date-time>

When the event happened. Times are in UTC and include the offset, the same as the rest of our public API.

sequence
required
integer <int64>

A number that goes up as an object changes. Events can arrive in a different order to the one they happened in, so compare this value to work out which event is the most recent, rather than relying on the order they arrive in. Two events for the same object can carry the same number when they describe one change from two angles, such as a booking change and its guest-visit counterpart. Treat matching numbers as both being current, and use id to spot repeats.

tenantId
required
string

The Kadence account the event belongs to.

required
object

What caused the event.

type
required
string

What caused the event. user means a person did something. system means we did it, for example a scheduled job, or a change that followed on from another change. When the value is system, id and source are both empty.

id
string or null

The identifier of the person who did it. This is empty when we caused the event.

source
string or null

The app or service the person used, where we know it.

required
object

The object this event is about. It is the same on every event for that object.

object
required
string
Value: "building"
id
required
string

The identifier of the object. Use it with sequence to tell which object the event is about and how recent it is.

required
object

A copy of the object as it was when the event happened. It does not change if the object changes afterwards.

id
string

The ULID of the building.

name
string

The name of the building.

timeZone
string

The IANA time zone that the building is in.

latitude
number <float>

The latitude of the building's location.

longitude
number <float>

The longitude of the building's location.

addressLine1
string

The first line of the building address.

addressLine2
string or null

The second line of the building address.

city
string

The name of the city that the building is in.

county
string or null

The name of the county that the building is in.

countryCode
string

The ISO 3166-1 alpha-2 country code that the building is in.

postalCode
string or null

The postal or ZIP code that the building is in.

photo
string

The UUID of the photo of the building.

createdAt
string <date-time>

The date and time that the building was created at.

modifiedAt
string <date-time>

The date and time that the building was last modified at.

photoUrl
string or null

A link to the photo, ready to use. Null when there is no photo.

photoTemplateUrl
string or null

The same link with the size left as a placeholder, so you can ask for the dimensions you need. Null when there is no photo.

Responses

Request samples

Content type
application/json
{
  • "id": "01K1XQ7Z9M4B2N8P5R3T6V0W2Y",
  • "schemaVersion": 1,
  • "type": "building.created",
  • "category": "building",
  • "occurredAt": "2026-08-08T09:14:22+00:00",
  • "sequence": 1754645662123,
  • "tenantId": "01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "actor": {
    • "type": "user",
    • "id": "01H8QW3ZC4RN7XKD2M6VB9TF5A",
    • "source": "ios"
    },
  • "target": {
    • "object": "building",
    • "id": "01JB4KQ2X8HN5YT7WZ3PC6MR9D"
    },
  • "data": {
    • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
    • "name": "London Office",
    • "timeZone": "Europe/London",
    • "latitude": 51.509865,
    • "longitude": -0.118092,
    • "addressLine1": "20 Fenchurch Street",
    • "addressLine2": null,
    • "city": "London",
    • "county": null,
    • "countryCode": "GB",
    • "postalCode": "SE1 8PB",
    • "photo": "b74b830a-cf26-47bd-9dbc-237571c79fc3",
    • "createdAt": "2017-07-21T17:32:28+00:00",
    • "modifiedAt": "2017-07-21T17:32:28+00:00",
    • "photoTemplateUrl": "string"
    }
}

building.updated Webhook

A building's details changed.

You can subscribe to this event on its own, or to the whole building group.

header Parameters
Kadence-Webhook-Id
required
string

The identifier for this event. It matches the id in the body. Use it to spot repeats.

Kadence-Webhook-Type
required
string

The type of event. Use it to send the delivery to the right place without reading the body.

Kadence-Webhook-Timestamp
required
string

The time we signed the delivery, in seconds. It is part of the signed value, so it cannot be changed without breaking the signature. Compare it with the time the request arrived if you want to reject requests that have been held for a long time.

Kadence-Webhook-Subscription
required
string

The webhook that produced this delivery. Useful when you have more than one.

Kadence-Webhook-Attempt
required
string

Which attempt this is, starting at 1. This header is present on the first attempt as well, so treat every delivery as one that might be a repeat.

Kadence-Webhook-Signature
required
string

Proof that the delivery came from us. The value is v1= followed by the HMAC-SHA256 of {timestamp}.{rawBody}, using your signing secret, in hex. Work out the same value and compare the two with a constant-time comparison. Use the exact bytes you received. While you are replacing a secret this header holds two values separated by a space, and either one matching is valid.

Request Body schema: application/json
required
id
required
string

The unique identifier for this event. We can send the same event more than once, so use this value to spot repeats. It stays the same on every attempt.

schemaVersion
required
integer
Value: 1

The version of the event format. We'll increase this number if the format changes in a way that could break your code.

type
required
string
Value: "building.updated"

What happened. Switch on this value to decide how to handle the delivery.

category
required
string
Value: "building"

The group this event belongs to. You can subscribe to a whole group instead of picking events one at a time.

occurredAt
required
string <date-time>

When the event happened. Times are in UTC and include the offset, the same as the rest of our public API.

sequence
required
integer <int64>

A number that goes up as an object changes. Events can arrive in a different order to the one they happened in, so compare this value to work out which event is the most recent, rather than relying on the order they arrive in. Two events for the same object can carry the same number when they describe one change from two angles, such as a booking change and its guest-visit counterpart. Treat matching numbers as both being current, and use id to spot repeats.

tenantId
required
string

The Kadence account the event belongs to.

required
object

What caused the event.

type
required
string

What caused the event. user means a person did something. system means we did it, for example a scheduled job, or a change that followed on from another change. When the value is system, id and source are both empty.

id
string or null

The identifier of the person who did it. This is empty when we caused the event.

source
string or null

The app or service the person used, where we know it.

required
object

The object this event is about. It is the same on every event for that object.

object
required
string
Value: "building"
id
required
string

The identifier of the object. Use it with sequence to tell which object the event is about and how recent it is.

required
object

A copy of the object as it was when the event happened. It does not change if the object changes afterwards.

id
string

The ULID of the building.

name
string

The name of the building.

timeZone
string

The IANA time zone that the building is in.

latitude
number <float>

The latitude of the building's location.

longitude
number <float>

The longitude of the building's location.

addressLine1
string

The first line of the building address.

addressLine2
string or null

The second line of the building address.

city
string

The name of the city that the building is in.

county
string or null

The name of the county that the building is in.

countryCode
string

The ISO 3166-1 alpha-2 country code that the building is in.

postalCode
string or null

The postal or ZIP code that the building is in.

photo
string

The UUID of the photo of the building.

createdAt
string <date-time>

The date and time that the building was created at.

modifiedAt
string <date-time>

The date and time that the building was last modified at.

photoUrl
string or null

A link to the photo, ready to use. Null when there is no photo.

photoTemplateUrl
string or null

The same link with the size left as a placeholder, so you can ask for the dimensions you need. Null when there is no photo.

object

The values these fields held before the change. Only the fields that changed are listed, using the same names as data. If a field is missing, that field didn't change. A missing field does not mean the value was empty. Where the old value was an object rather than a single value, we send it as empty.

property name*
additional property
string or number or boolean or null

Responses

Request samples

Content type
application/json
{
  • "id": "01K1XQ7Z9M4B2N8P5R3T6V0W2Y",
  • "schemaVersion": 1,
  • "type": "building.updated",
  • "category": "building",
  • "occurredAt": "2026-08-08T09:14:22+00:00",
  • "sequence": 1754645662123,
  • "tenantId": "01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "actor": {
    • "type": "user",
    • "id": "01H8QW3ZC4RN7XKD2M6VB9TF5A",
    • "source": "ios"
    },
  • "target": {
    • "object": "building",
    • "id": "01JB4KQ2X8HN5YT7WZ3PC6MR9D"
    },
  • "data": {
    • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
    • "name": "London Office",
    • "timeZone": "Europe/London",
    • "latitude": 51.509865,
    • "longitude": -0.118092,
    • "addressLine1": "20 Fenchurch Street",
    • "addressLine2": null,
    • "city": "London",
    • "county": null,
    • "countryCode": "GB",
    • "postalCode": "SE1 8PB",
    • "photo": "b74b830a-cf26-47bd-9dbc-237571c79fc3",
    • "createdAt": "2017-07-21T17:32:28+00:00",
    • "modifiedAt": "2017-07-21T17:32:28+00:00",
    • "photoTemplateUrl": "string"
    },
  • "previous": {
    • "timeZone": "Europe/London"
    }
}

building.deleted Webhook

A building was deleted. The payload holds its final state.

You can subscribe to this event on its own, or to the whole building group.

header Parameters
Kadence-Webhook-Id
required
string

The identifier for this event. It matches the id in the body. Use it to spot repeats.

Kadence-Webhook-Type
required
string

The type of event. Use it to send the delivery to the right place without reading the body.

Kadence-Webhook-Timestamp
required
string

The time we signed the delivery, in seconds. It is part of the signed value, so it cannot be changed without breaking the signature. Compare it with the time the request arrived if you want to reject requests that have been held for a long time.

Kadence-Webhook-Subscription
required
string

The webhook that produced this delivery. Useful when you have more than one.

Kadence-Webhook-Attempt
required
string

Which attempt this is, starting at 1. This header is present on the first attempt as well, so treat every delivery as one that might be a repeat.

Kadence-Webhook-Signature
required
string

Proof that the delivery came from us. The value is v1= followed by the HMAC-SHA256 of {timestamp}.{rawBody}, using your signing secret, in hex. Work out the same value and compare the two with a constant-time comparison. Use the exact bytes you received. While you are replacing a secret this header holds two values separated by a space, and either one matching is valid.

Request Body schema: application/json
required
id
required
string

The unique identifier for this event. We can send the same event more than once, so use this value to spot repeats. It stays the same on every attempt.

schemaVersion
required
integer
Value: 1

The version of the event format. We'll increase this number if the format changes in a way that could break your code.

type
required
string
Value: "building.deleted"

What happened. Switch on this value to decide how to handle the delivery.

category
required
string
Value: "building"

The group this event belongs to. You can subscribe to a whole group instead of picking events one at a time.

occurredAt
required
string <date-time>

When the event happened. Times are in UTC and include the offset, the same as the rest of our public API.

sequence
required
integer <int64>

A number that goes up as an object changes. Events can arrive in a different order to the one they happened in, so compare this value to work out which event is the most recent, rather than relying on the order they arrive in. Two events for the same object can carry the same number when they describe one change from two angles, such as a booking change and its guest-visit counterpart. Treat matching numbers as both being current, and use id to spot repeats.

tenantId
required
string

The Kadence account the event belongs to.

required
object

What caused the event.

type
required
string

What caused the event. user means a person did something. system means we did it, for example a scheduled job, or a change that followed on from another change. When the value is system, id and source are both empty.

id
string or null

The identifier of the person who did it. This is empty when we caused the event.

source
string or null

The app or service the person used, where we know it.

required
object

The object this event is about. It is the same on every event for that object.

object
required
string
Value: "building"
id
required
string

The identifier of the object. Use it with sequence to tell which object the event is about and how recent it is.

required
object

A copy of the object as it was when the event happened. It does not change if the object changes afterwards.

id
string

The ULID of the building.

name
string

The name of the building.

timeZone
string

The IANA time zone that the building is in.

latitude
number <float>

The latitude of the building's location.

longitude
number <float>

The longitude of the building's location.

addressLine1
string

The first line of the building address.

addressLine2
string or null

The second line of the building address.

city
string

The name of the city that the building is in.

county
string or null

The name of the county that the building is in.

countryCode
string

The ISO 3166-1 alpha-2 country code that the building is in.

postalCode
string or null

The postal or ZIP code that the building is in.

photo
string

The UUID of the photo of the building.

createdAt
string <date-time>

The date and time that the building was created at.

modifiedAt
string <date-time>

The date and time that the building was last modified at.

photoUrl
string or null

A link to the photo, ready to use. Null when there is no photo.

photoTemplateUrl
string or null

The same link with the size left as a placeholder, so you can ask for the dimensions you need. Null when there is no photo.

Responses

Request samples

Content type
application/json
{
  • "id": "01K1XQ7Z9M4B2N8P5R3T6V0W2Y",
  • "schemaVersion": 1,
  • "type": "building.deleted",
  • "category": "building",
  • "occurredAt": "2026-08-08T09:14:22+00:00",
  • "sequence": 1754645662123,
  • "tenantId": "01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "actor": {
    • "type": "user",
    • "id": "01H8QW3ZC4RN7XKD2M6VB9TF5A",
    • "source": "ios"
    },
  • "target": {
    • "object": "building",
    • "id": "01JB4KQ2X8HN5YT7WZ3PC6MR9D"
    },
  • "data": {
    • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
    • "name": "London Office",
    • "timeZone": "Europe/London",
    • "latitude": 51.509865,
    • "longitude": -0.118092,
    • "addressLine1": "20 Fenchurch Street",
    • "addressLine2": null,
    • "city": "London",
    • "county": null,
    • "countryCode": "GB",
    • "postalCode": "SE1 8PB",
    • "photo": "b74b830a-cf26-47bd-9dbc-237571c79fc3",
    • "createdAt": "2017-07-21T17:32:28+00:00",
    • "modifiedAt": "2017-07-21T17:32:28+00:00",
    • "photoTemplateUrl": "string"
    }
}

floor.created Webhook

A floor was created.

You can subscribe to this event on its own, or to the whole floor group.

header Parameters
Kadence-Webhook-Id
required
string

The identifier for this event. It matches the id in the body. Use it to spot repeats.

Kadence-Webhook-Type
required
string

The type of event. Use it to send the delivery to the right place without reading the body.

Kadence-Webhook-Timestamp
required
string

The time we signed the delivery, in seconds. It is part of the signed value, so it cannot be changed without breaking the signature. Compare it with the time the request arrived if you want to reject requests that have been held for a long time.

Kadence-Webhook-Subscription
required
string

The webhook that produced this delivery. Useful when you have more than one.

Kadence-Webhook-Attempt
required
string

Which attempt this is, starting at 1. This header is present on the first attempt as well, so treat every delivery as one that might be a repeat.

Kadence-Webhook-Signature
required
string

Proof that the delivery came from us. The value is v1= followed by the HMAC-SHA256 of {timestamp}.{rawBody}, using your signing secret, in hex. Work out the same value and compare the two with a constant-time comparison. Use the exact bytes you received. While you are replacing a secret this header holds two values separated by a space, and either one matching is valid.

Request Body schema: application/json
required
id
required
string

The unique identifier for this event. We can send the same event more than once, so use this value to spot repeats. It stays the same on every attempt.

schemaVersion
required
integer
Value: 1

The version of the event format. We'll increase this number if the format changes in a way that could break your code.

type
required
string
Value: "floor.created"

What happened. Switch on this value to decide how to handle the delivery.

category
required
string
Value: "floor"

The group this event belongs to. You can subscribe to a whole group instead of picking events one at a time.

occurredAt
required
string <date-time>

When the event happened. Times are in UTC and include the offset, the same as the rest of our public API.

sequence
required
integer <int64>

A number that goes up as an object changes. Events can arrive in a different order to the one they happened in, so compare this value to work out which event is the most recent, rather than relying on the order they arrive in. Two events for the same object can carry the same number when they describe one change from two angles, such as a booking change and its guest-visit counterpart. Treat matching numbers as both being current, and use id to spot repeats.

tenantId
required
string

The Kadence account the event belongs to.

required
object

What caused the event.

type
required
string

What caused the event. user means a person did something. system means we did it, for example a scheduled job, or a change that followed on from another change. When the value is system, id and source are both empty.

id
string or null

The identifier of the person who did it. This is empty when we caused the event.

source
string or null

The app or service the person used, where we know it.

required
object

The object this event is about. It is the same on every event for that object.

object
required
string
Value: "floor"
id
required
string

The identifier of the object. Use it with sequence to tell which object the event is about and how recent it is.

required
object

A copy of the object as it was when the event happened. It does not change if the object changes afterwards.

id
string

The ULID of the floor.

name
string

The name of the floor.

floorPlanUrl
string

The URL of the floor plan SVG.

Responses

Request samples

Content type
application/json
{}

floor.updated Webhook

A floor's details changed.

You can subscribe to this event on its own, or to the whole floor group.

header Parameters
Kadence-Webhook-Id
required
string

The identifier for this event. It matches the id in the body. Use it to spot repeats.

Kadence-Webhook-Type
required
string

The type of event. Use it to send the delivery to the right place without reading the body.

Kadence-Webhook-Timestamp
required
string

The time we signed the delivery, in seconds. It is part of the signed value, so it cannot be changed without breaking the signature. Compare it with the time the request arrived if you want to reject requests that have been held for a long time.

Kadence-Webhook-Subscription
required
string

The webhook that produced this delivery. Useful when you have more than one.

Kadence-Webhook-Attempt
required
string

Which attempt this is, starting at 1. This header is present on the first attempt as well, so treat every delivery as one that might be a repeat.

Kadence-Webhook-Signature
required
string

Proof that the delivery came from us. The value is v1= followed by the HMAC-SHA256 of {timestamp}.{rawBody}, using your signing secret, in hex. Work out the same value and compare the two with a constant-time comparison. Use the exact bytes you received. While you are replacing a secret this header holds two values separated by a space, and either one matching is valid.

Request Body schema: application/json
required
id
required
string

The unique identifier for this event. We can send the same event more than once, so use this value to spot repeats. It stays the same on every attempt.

schemaVersion
required
integer
Value: 1

The version of the event format. We'll increase this number if the format changes in a way that could break your code.

type
required
string
Value: "floor.updated"

What happened. Switch on this value to decide how to handle the delivery.

category
required
string
Value: "floor"

The group this event belongs to. You can subscribe to a whole group instead of picking events one at a time.

occurredAt
required
string <date-time>

When the event happened. Times are in UTC and include the offset, the same as the rest of our public API.

sequence
required
integer <int64>

A number that goes up as an object changes. Events can arrive in a different order to the one they happened in, so compare this value to work out which event is the most recent, rather than relying on the order they arrive in. Two events for the same object can carry the same number when they describe one change from two angles, such as a booking change and its guest-visit counterpart. Treat matching numbers as both being current, and use id to spot repeats.

tenantId
required
string

The Kadence account the event belongs to.

required
object

What caused the event.

type
required
string

What caused the event. user means a person did something. system means we did it, for example a scheduled job, or a change that followed on from another change. When the value is system, id and source are both empty.

id
string or null

The identifier of the person who did it. This is empty when we caused the event.

source
string or null

The app or service the person used, where we know it.

required
object

The object this event is about. It is the same on every event for that object.

object
required
string
Value: "floor"
id
required
string

The identifier of the object. Use it with sequence to tell which object the event is about and how recent it is.

required
object

A copy of the object as it was when the event happened. It does not change if the object changes afterwards.

id
string

The ULID of the floor.

name
string

The name of the floor.

floorPlanUrl
string

The URL of the floor plan SVG.

object

The values these fields held before the change. Only the fields that changed are listed, using the same names as data. If a field is missing, that field didn't change. A missing field does not mean the value was empty. Where the old value was an object rather than a single value, we send it as empty.

property name*
additional property
string or number or boolean or null

Responses

Request samples

Content type
application/json
{}

floor.deleted Webhook

A floor was deleted. The payload holds its final state.

You can subscribe to this event on its own, or to the whole floor group.

header Parameters
Kadence-Webhook-Id
required
string

The identifier for this event. It matches the id in the body. Use it to spot repeats.

Kadence-Webhook-Type
required
string

The type of event. Use it to send the delivery to the right place without reading the body.

Kadence-Webhook-Timestamp
required
string

The time we signed the delivery, in seconds. It is part of the signed value, so it cannot be changed without breaking the signature. Compare it with the time the request arrived if you want to reject requests that have been held for a long time.

Kadence-Webhook-Subscription
required
string

The webhook that produced this delivery. Useful when you have more than one.

Kadence-Webhook-Attempt
required
string

Which attempt this is, starting at 1. This header is present on the first attempt as well, so treat every delivery as one that might be a repeat.

Kadence-Webhook-Signature
required
string

Proof that the delivery came from us. The value is v1= followed by the HMAC-SHA256 of {timestamp}.{rawBody}, using your signing secret, in hex. Work out the same value and compare the two with a constant-time comparison. Use the exact bytes you received. While you are replacing a secret this header holds two values separated by a space, and either one matching is valid.

Request Body schema: application/json
required
id
required
string

The unique identifier for this event. We can send the same event more than once, so use this value to spot repeats. It stays the same on every attempt.

schemaVersion
required
integer
Value: 1

The version of the event format. We'll increase this number if the format changes in a way that could break your code.

type
required
string
Value: "floor.deleted"

What happened. Switch on this value to decide how to handle the delivery.

category
required
string
Value: "floor"

The group this event belongs to. You can subscribe to a whole group instead of picking events one at a time.

occurredAt
required
string <date-time>

When the event happened. Times are in UTC and include the offset, the same as the rest of our public API.

sequence
required
integer <int64>

A number that goes up as an object changes. Events can arrive in a different order to the one they happened in, so compare this value to work out which event is the most recent, rather than relying on the order they arrive in. Two events for the same object can carry the same number when they describe one change from two angles, such as a booking change and its guest-visit counterpart. Treat matching numbers as both being current, and use id to spot repeats.

tenantId
required
string

The Kadence account the event belongs to.

required
object

What caused the event.

type
required
string

What caused the event. user means a person did something. system means we did it, for example a scheduled job, or a change that followed on from another change. When the value is system, id and source are both empty.

id
string or null

The identifier of the person who did it. This is empty when we caused the event.

source
string or null

The app or service the person used, where we know it.

required
object

The object this event is about. It is the same on every event for that object.

object
required
string
Value: "floor"
id
required
string

The identifier of the object. Use it with sequence to tell which object the event is about and how recent it is.

required
object

A copy of the object as it was when the event happened. It does not change if the object changes afterwards.

id
string

The ULID of the floor.

name
string

The name of the floor.

floorPlanUrl
string

The URL of the floor plan SVG.

Responses

Request samples

Content type
application/json
{}

neighborhood.created Webhook

A neighborhood was created.

You can subscribe to this event on its own, or to the whole neighborhood group.

header Parameters
Kadence-Webhook-Id
required
string

The identifier for this event. It matches the id in the body. Use it to spot repeats.

Kadence-Webhook-Type
required
string

The type of event. Use it to send the delivery to the right place without reading the body.

Kadence-Webhook-Timestamp
required
string

The time we signed the delivery, in seconds. It is part of the signed value, so it cannot be changed without breaking the signature. Compare it with the time the request arrived if you want to reject requests that have been held for a long time.

Kadence-Webhook-Subscription
required
string

The webhook that produced this delivery. Useful when you have more than one.

Kadence-Webhook-Attempt
required
string

Which attempt this is, starting at 1. This header is present on the first attempt as well, so treat every delivery as one that might be a repeat.

Kadence-Webhook-Signature
required
string

Proof that the delivery came from us. The value is v1= followed by the HMAC-SHA256 of {timestamp}.{rawBody}, using your signing secret, in hex. Work out the same value and compare the two with a constant-time comparison. Use the exact bytes you received. While you are replacing a secret this header holds two values separated by a space, and either one matching is valid.

Request Body schema: application/json
required
id
required
string

The unique identifier for this event. We can send the same event more than once, so use this value to spot repeats. It stays the same on every attempt.

schemaVersion
required
integer
Value: 1

The version of the event format. We'll increase this number if the format changes in a way that could break your code.

type
required
string
Value: "neighborhood.created"

What happened. Switch on this value to decide how to handle the delivery.

category
required
string
Value: "neighborhood"

The group this event belongs to. You can subscribe to a whole group instead of picking events one at a time.

occurredAt
required
string <date-time>

When the event happened. Times are in UTC and include the offset, the same as the rest of our public API.

sequence
required
integer <int64>

A number that goes up as an object changes. Events can arrive in a different order to the one they happened in, so compare this value to work out which event is the most recent, rather than relying on the order they arrive in. Two events for the same object can carry the same number when they describe one change from two angles, such as a booking change and its guest-visit counterpart. Treat matching numbers as both being current, and use id to spot repeats.

tenantId
required
string

The Kadence account the event belongs to.

required
object

What caused the event.

type
required
string

What caused the event. user means a person did something. system means we did it, for example a scheduled job, or a change that followed on from another change. When the value is system, id and source are both empty.

id
string or null

The identifier of the person who did it. This is empty when we caused the event.

source
string or null

The app or service the person used, where we know it.

required
object

The object this event is about. It is the same on every event for that object.

object
required
string
Value: "neighborhood"
id
required
string

The identifier of the object. Use it with sequence to tell which object the event is about and how recent it is.

required
object

A copy of the object as it was when the event happened. It does not change if the object changes afterwards.

id
string

The ULID of the neighborhood.

name
string

The name of the neighborhood.

Responses

Request samples

Content type
application/json
{
  • "id": "01K1XQ7Z9M4B2N8P5R3T6V0W2Y",
  • "schemaVersion": 1,
  • "type": "neighborhood.created",
  • "category": "neighborhood",
  • "occurredAt": "2026-08-08T09:14:22+00:00",
  • "sequence": 1754645662123,
  • "tenantId": "01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "actor": {
    • "type": "user",
    • "id": "01H8QW3ZC4RN7XKD2M6VB9TF5A",
    • "source": "ios"
    },
  • "target": {
    • "object": "neighborhood",
    • "id": "01JB4KQ2X8HN5YT7WZ3PC6MR9D"
    },
  • "data": {
    • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
    • "name": "Sales"
    }
}

neighborhood.updated Webhook

A neighborhood was renamed.

You can subscribe to this event on its own, or to the whole neighborhood group.

header Parameters
Kadence-Webhook-Id
required
string

The identifier for this event. It matches the id in the body. Use it to spot repeats.

Kadence-Webhook-Type
required
string

The type of event. Use it to send the delivery to the right place without reading the body.

Kadence-Webhook-Timestamp
required
string

The time we signed the delivery, in seconds. It is part of the signed value, so it cannot be changed without breaking the signature. Compare it with the time the request arrived if you want to reject requests that have been held for a long time.

Kadence-Webhook-Subscription
required
string

The webhook that produced this delivery. Useful when you have more than one.

Kadence-Webhook-Attempt
required
string

Which attempt this is, starting at 1. This header is present on the first attempt as well, so treat every delivery as one that might be a repeat.

Kadence-Webhook-Signature
required
string

Proof that the delivery came from us. The value is v1= followed by the HMAC-SHA256 of {timestamp}.{rawBody}, using your signing secret, in hex. Work out the same value and compare the two with a constant-time comparison. Use the exact bytes you received. While you are replacing a secret this header holds two values separated by a space, and either one matching is valid.

Request Body schema: application/json
required
id
required
string

The unique identifier for this event. We can send the same event more than once, so use this value to spot repeats. It stays the same on every attempt.

schemaVersion
required
integer
Value: 1

The version of the event format. We'll increase this number if the format changes in a way that could break your code.

type
required
string
Value: "neighborhood.updated"

What happened. Switch on this value to decide how to handle the delivery.

category
required
string
Value: "neighborhood"

The group this event belongs to. You can subscribe to a whole group instead of picking events one at a time.

occurredAt
required
string <date-time>

When the event happened. Times are in UTC and include the offset, the same as the rest of our public API.

sequence
required
integer <int64>

A number that goes up as an object changes. Events can arrive in a different order to the one they happened in, so compare this value to work out which event is the most recent, rather than relying on the order they arrive in. Two events for the same object can carry the same number when they describe one change from two angles, such as a booking change and its guest-visit counterpart. Treat matching numbers as both being current, and use id to spot repeats.

tenantId
required
string

The Kadence account the event belongs to.

required
object

What caused the event.

type
required
string

What caused the event. user means a person did something. system means we did it, for example a scheduled job, or a change that followed on from another change. When the value is system, id and source are both empty.

id
string or null

The identifier of the person who did it. This is empty when we caused the event.

source
string or null

The app or service the person used, where we know it.

required
object

The object this event is about. It is the same on every event for that object.

object
required
string
Value: "neighborhood"
id
required
string

The identifier of the object. Use it with sequence to tell which object the event is about and how recent it is.

required
object

A copy of the object as it was when the event happened. It does not change if the object changes afterwards.

id
string

The ULID of the neighborhood.

name
string

The name of the neighborhood.

object

The values these fields held before the change. Only the fields that changed are listed, using the same names as data. If a field is missing, that field didn't change. A missing field does not mean the value was empty. Where the old value was an object rather than a single value, we send it as empty.

property name*
additional property
string or number or boolean or null

Responses

Request samples

Content type
application/json
{
  • "id": "01K1XQ7Z9M4B2N8P5R3T6V0W2Y",
  • "schemaVersion": 1,
  • "type": "neighborhood.updated",
  • "category": "neighborhood",
  • "occurredAt": "2026-08-08T09:14:22+00:00",
  • "sequence": 1754645662123,
  • "tenantId": "01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "actor": {
    • "type": "user",
    • "id": "01H8QW3ZC4RN7XKD2M6VB9TF5A",
    • "source": "ios"
    },
  • "target": {
    • "object": "neighborhood",
    • "id": "01JB4KQ2X8HN5YT7WZ3PC6MR9D"
    },
  • "data": {
    • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
    • "name": "Sales"
    },
  • "previous": {
    • "name": "Product"
    }
}

neighborhood.deleted Webhook

A neighborhood was deleted. The payload holds its final state.

You can subscribe to this event on its own, or to the whole neighborhood group.

header Parameters
Kadence-Webhook-Id
required
string

The identifier for this event. It matches the id in the body. Use it to spot repeats.

Kadence-Webhook-Type
required
string

The type of event. Use it to send the delivery to the right place without reading the body.

Kadence-Webhook-Timestamp
required
string

The time we signed the delivery, in seconds. It is part of the signed value, so it cannot be changed without breaking the signature. Compare it with the time the request arrived if you want to reject requests that have been held for a long time.

Kadence-Webhook-Subscription
required
string

The webhook that produced this delivery. Useful when you have more than one.

Kadence-Webhook-Attempt
required
string

Which attempt this is, starting at 1. This header is present on the first attempt as well, so treat every delivery as one that might be a repeat.

Kadence-Webhook-Signature
required
string

Proof that the delivery came from us. The value is v1= followed by the HMAC-SHA256 of {timestamp}.{rawBody}, using your signing secret, in hex. Work out the same value and compare the two with a constant-time comparison. Use the exact bytes you received. While you are replacing a secret this header holds two values separated by a space, and either one matching is valid.

Request Body schema: application/json
required
id
required
string

The unique identifier for this event. We can send the same event more than once, so use this value to spot repeats. It stays the same on every attempt.

schemaVersion
required
integer
Value: 1

The version of the event format. We'll increase this number if the format changes in a way that could break your code.

type
required
string
Value: "neighborhood.deleted"

What happened. Switch on this value to decide how to handle the delivery.

category
required
string
Value: "neighborhood"

The group this event belongs to. You can subscribe to a whole group instead of picking events one at a time.

occurredAt
required
string <date-time>

When the event happened. Times are in UTC and include the offset, the same as the rest of our public API.

sequence
required
integer <int64>

A number that goes up as an object changes. Events can arrive in a different order to the one they happened in, so compare this value to work out which event is the most recent, rather than relying on the order they arrive in. Two events for the same object can carry the same number when they describe one change from two angles, such as a booking change and its guest-visit counterpart. Treat matching numbers as both being current, and use id to spot repeats.

tenantId
required
string

The Kadence account the event belongs to.

required
object

What caused the event.

type
required
string

What caused the event. user means a person did something. system means we did it, for example a scheduled job, or a change that followed on from another change. When the value is system, id and source are both empty.

id
string or null

The identifier of the person who did it. This is empty when we caused the event.

source
string or null

The app or service the person used, where we know it.

required
object

The object this event is about. It is the same on every event for that object.

object
required
string
Value: "neighborhood"
id
required
string

The identifier of the object. Use it with sequence to tell which object the event is about and how recent it is.

required
object

A copy of the object as it was when the event happened. It does not change if the object changes afterwards.

id
string

The ULID of the neighborhood.

name
string

The name of the neighborhood.

Responses

Request samples

Content type
application/json
{
  • "id": "01K1XQ7Z9M4B2N8P5R3T6V0W2Y",
  • "schemaVersion": 1,
  • "type": "neighborhood.deleted",
  • "category": "neighborhood",
  • "occurredAt": "2026-08-08T09:14:22+00:00",
  • "sequence": 1754645662123,
  • "tenantId": "01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "actor": {
    • "type": "user",
    • "id": "01H8QW3ZC4RN7XKD2M6VB9TF5A",
    • "source": "ios"
    },
  • "target": {
    • "object": "neighborhood",
    • "id": "01JB4KQ2X8HN5YT7WZ3PC6MR9D"
    },
  • "data": {
    • "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
    • "name": "Sales"
    }
}

webhook.test Webhook

A sample event, sent when someone selects Send test event on a webhook in Kadence. It is not about a real booking, visit or space.

You cannot subscribe to this event.

header Parameters
Kadence-Webhook-Id
required
string

The identifier for this event. It matches the id in the body. Use it to spot repeats.

Kadence-Webhook-Type
required
string

The type of event. Use it to send the delivery to the right place without reading the body.

Kadence-Webhook-Timestamp
required
string

The time we signed the delivery, in seconds. It is part of the signed value, so it cannot be changed without breaking the signature. Compare it with the time the request arrived if you want to reject requests that have been held for a long time.

Kadence-Webhook-Subscription
required
string

The webhook that produced this delivery. Useful when you have more than one.

Kadence-Webhook-Attempt
required
string

Which attempt this is, starting at 1. This header is present on the first attempt as well, so treat every delivery as one that might be a repeat.

Kadence-Webhook-Signature
required
string

Proof that the delivery came from us. The value is v1= followed by the HMAC-SHA256 of {timestamp}.{rawBody}, using your signing secret, in hex. Work out the same value and compare the two with a constant-time comparison. Use the exact bytes you received. While you are replacing a secret this header holds two values separated by a space, and either one matching is valid.

Request Body schema: application/json
required
id
required
string

The unique identifier for this event. We can send the same event more than once, so use this value to spot repeats. It stays the same on every attempt.

schemaVersion
required
integer
Value: 1

The version of the event format. We'll increase this number if the format changes in a way that could break your code.

type
required
string
Value: "webhook.test"

What happened. Switch on this value to decide how to handle the delivery.

category
required
string
Value: "system"

The group this event belongs to. You can subscribe to a whole group instead of picking events one at a time.

occurredAt
required
string <date-time>

When the event happened. Times are in UTC and include the offset, the same as the rest of our public API.

sequence
required
integer <int64>

A number that goes up as an object changes. Events can arrive in a different order to the one they happened in, so compare this value to work out which event is the most recent, rather than relying on the order they arrive in. Two events for the same object can carry the same number when they describe one change from two angles, such as a booking change and its guest-visit counterpart. Treat matching numbers as both being current, and use id to spot repeats.

tenantId
required
string

The Kadence account the event belongs to.

required
object

What caused the event.

type
required
string

What caused the event. user means a person did something. system means we did it, for example a scheduled job, or a change that followed on from another change. When the value is system, id and source are both empty.

id
string or null

The identifier of the person who did it. This is empty when we caused the event.

source
string or null

The app or service the person used, where we know it.

required
object

The object this event is about. It is the same on every event for that object.

object
required
string
Value: "none"
id
required
string

The identifier of the object. Use it with sequence to tell which object the event is about and how recent it is.

data
required
object

Sample content. The test event is not about a real object.

Responses

Request samples

Content type
application/json
{
  • "id": "01K1XQ7Z9M4B2N8P5R3T6V0W2Y",
  • "schemaVersion": 1,
  • "type": "webhook.test",
  • "category": "system",
  • "occurredAt": "2026-08-08T09:14:22+00:00",
  • "sequence": 1754645662123,
  • "tenantId": "01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "actor": {
    • "type": "user",
    • "id": "01H8QW3ZC4RN7XKD2M6VB9TF5A",
    • "source": "ios"
    },
  • "target": {
    • "object": "none",
    • "id": "01JB4KQ2X8HN5YT7WZ3PC6MR9D"
    },
  • "data": { }
}

Audit export

The audit export gives you a feed of who did what in Kadence, ready to send to a SIEM or a log warehouse. It's a separate API from the rest of this document, with its own keys, its own scope and its own rate limits.

Getting started

A Global Admin creates an audit export key under Settings → Developer → Audit export keys.

Copy the secret when you create it. We show it once and never again. If you lose it, revoke the key to get a new one — your collector stops until you do.

Swap the key for a token, asking for the audit scope:

POST https://login.onkadence.co/oauth2/token
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials
&client_id=YOUR_KEY_ID
&client_secret=YOUR_KEY_SECRET
&scope=audit

An audit export key only ever holds the audit scope, so it cannot call anything else in this document. Your token already says which account it belongs to, so you never send a tenant header.

Each key gets 60 requests a minute and 10,000 an hour, counted per key rather than per account.

Reading the feed

Ask for a page of events, then follow the cursor we send back. Every response carries one, even an empty page, so you can keep polling with it and forget about time windows.

Follow the Link header exactly as we sent it. The cursor only works with the filters baked into it, so rebuilding the request yourself can get you 400 filter_changed.

Save the cursor only once you have stored every event on the page. It points past them, so saving it early and then crashing loses them for good.

A few smaller things. Events can arrive twice, so drop repeats using id. New events take about 3.5 minutes to appear, so don't alert on gaps inside that window. On a first run you can go back 180 days. And if you would rather have one event per line than a wrapped page, send Accept: application/x-ndjson — the cursor then comes back in the headers only.

Get a page of audit events

Returns audit events in the order they were recorded, oldest first, with a cursor for the next page. Send the cursor back to continue; leave it out and give a startTime to start a new stream.

Authorizations:
oauth
query Parameters
startTime
string <date-time>
Example: startTime=2026-08-01T00:00:00Z

Only include events from this time onwards, inclusive. Defaults to 24 hours ago. Ignored when you send a cursor, because the cursor already knows its window.

endTime
string <date-time>
Example: endTime=2026-08-08T00:00:00Z

Only include events before this time, exclusive. We move it back if it is newer than we can serve — see the note on recent events above. Ignored when you send a cursor.

eventType
Array of strings
Example: eventType=user.authenticated

Only include these event types. Repeat the parameter for more than one. Takes an exact type such as user.authenticated, or a family wildcard such as role.*. Leave it out for everything. An unknown type, or a wildcard that matches nothing, is rejected.

limit
integer <= 1000
Default: 500
Example: limit=500

How many events you want. Defaults to 500, and 1000 is the most we send — ask for more and we quietly give you 1000 rather than refusing.

cursor
string
Example: cursor=op_9f2c4b8a1d

Where to carry on from. Use the value we sent you, unchanged. When you send one, startTime and endTime are ignored.

header Parameters
Accept
string
Example: application/json

Send application/x-ndjson for one event per line instead of a wrapped JSON object.

Responses

Response Headers
Link
string
Example: "<https://api.onkadence.co/v1/audit/events?cursor=op_9f2c4b8a1d>; rel=\"next\""

A rel="next" link to the next page, with your filters already resolved to exact event types. Replay this URL unchanged.

X-Audit-Next-Cursor
string
Example: "op_9f2c4b8a1d"

The same cursor as nextCursor in the body.

X-Audit-Has-More
string
Enum: "true" "false"
Example: "false"

Whether another page is ready right now.

Response Schema:
required
Array of objects

The events, oldest first. Empty when there is nothing new — which is the normal state of a caught-up feed, not an error.

Array
id
required
string

Unique, unchanging id for this event. Use it to drop repeats, and as the id for the single-event endpoint.

schemaVersion
required
integer

The version of this format. We'll only add fields within a version.

eventType
required
string
Enum: "company.updated" "company.deleted" "company.created" "company.subscriptionTierChanged" "company.featureOverrideSet" "company.featureOverrideRemoved" "user.updated" "user.deleted" "user.created" "calendarIntegration.updated" "calendarIntegration.deleted" "calendarIntegration.created" "msTeamsIntegration.updated" "msTeamsIntegration.deleted" "msTeamsIntegration.created" "slackIntegration.updated" "slackIntegration.deleted" "slackIntegration.created" "role.updated" "role.deleted" "role.created" "rolePermissionBlock.granted" "rolePermissionBlock.revoked" "permissions.reviewed-acknowledged" "companyNotificationDefaults.appliedToAllUsers" "role.enabled" "role.disabled" "liquidSpaceIntegration.updated" "liquidSpaceIntegration.deleted" "liquidSpaceIntegration.created" "hrisBuildingMapping.created" "hrisBuildingMapping.updated" "hrisBuildingMapping.deleted" "hrisIntegration.created" "hrisIntegration.updated" "hrisIntegration.deleted" "hrisSyncSettings.created" "hrisSyncSettings.updated" "hrisSyncSettings.deleted" "user.hrisPendingCreated" "user.hrisStatusTransitioned" "user.hrisHeldTransitionFired" "resourceConfiguration.created" "resourceConfiguration.updated" "resourceConfiguration.deleted" "directorySync.created" "directorySync.updated" "directorySync.deleted" "csvUpload.created" "csvUpload.updated" "csvUpload.deleted" "bulkExportRequest.created" "bulkExportRequest.updated" "bulkExportRequest.deleted" "buildingAdmin.assigned" "buildingAdmin.revoked" "badgeProfile.created" "badgeProfile.updated" "badgeProfile.deleted" "badgeProfile.defaultChanged" "building.badgePrintingEnabled" "building.badgePrintingDisabled" "badgePrintLog.created" "badgePrintLog.failed" "vmsDocument.created" "vmsDocument.updated" "vmsDocument.deleted" "vmsDocumentVersion.created" "vmsDocumentVersion.updated" "vmsDocumentVersion.deleted" "vmsDocumentVersionPublishChange.created" "vmsDocumentVersionPublishChange.updated" "vmsDocumentVersionPublishChange.deleted" "vmsBuildingDocument.created" "vmsBuildingDocument.updated" "vmsBuildingDocument.deleted" "vmsEnvelope.created" "vmsEnvelope.updated" "vmsEnvelope.deleted" "vmsEnvelope.gdprErased" "vmsEnvelope.manualSweepCompleted" "vmsSignedDocument.created" "vmsSignedDocument.updated" "vmsSignedDocument.deleted" "vmsSignedDocument.manuallyCompleted" "tenant.vmsRetentionChanged" "directoryGroupRoleMapping.created" "directoryGroupRoleMapping.deleted" "webhookSubscription.created" "webhookSubscription.updated" "webhookSubscription.deleted" "webhookSubscription.secretRotated" "webhookSubscription.rotationConfirmed" "webhookSubscription.disabled" "webhookSubscription.suspended" "auditExportKey.created" "auditExportKey.revoked" "auditExportKey.deleted" "auditExport.queried" "user.authenticated"

What happened, as domain.action. Switch on this value.

category
string or null
Enum: "authentication" "account" "iam" "config" "booking" "visitor" "integration" "data-export" null

The family the event type belongs to, for grouping in your SIEM.

occurredAt
required
string <date-time>

When it happened. This is the time to show an analyst — it is not the order the feed is paged in.

ingestedAt
string or null <date-time>

When we recorded it. This is the order the feed is paged in, which is why it can differ from occurredAt.

tenantId
string or null

The Kadence account the event belongs to.

required
object

Who did it.

id
string or null

The user who did it. Null when Kadence itself did it.

email
string or null

The user's email address, kept so you can identify them in your SIEM.

roles
required
Array of strings

The roles they held when it happened. Always a list, empty rather than null when there are none.

type
required
string
Enum: "user" "system"

user when a person did it, system when Kadence did.

required
object

What they did it to.

entity
string or null

The kind of thing that changed, such as User or Company.

entityId
string or null

Which one changed.

source
required
string

Where the change came from, such as web, api or system.

clientIp
string or null

The actor's IP address, when we captured one.

description
required
string

A readable sentence describing the event, with the details already filled in. Safe to show in a SIEM, and it can legitimately contain email addresses.

object

What changed, before and after. Only on account, IAM and config events — for everything else the key is left out entirely rather than sent empty, so check for its presence rather than for a value.

property name*
additional property
any
nextCursor
required
string

Send this back to get the next page. Always present, including on an empty page. Save it only once you have stored every event above.

hasMore
required
boolean

Whether another page is ready immediately. When false, poll again later with the same cursor.

Response samples

Content type
{
  • "events": [
    • {
      • "id": "aud_665f1c9d4b2a7e3f10c8d5a2",
      • "schemaVersion": 1,
      • "eventType": "user.authenticated",
      • "category": "authentication",
      • "occurredAt": "2026-08-08T09:14:22.661Z",
      • "ingestedAt": "2026-08-08T09:14:25Z",
      • "tenantId": "01GTBV1CT3BM8A42SEJ2J5F4EG",
      • "actor": {
        • "id": "01H8QW3ZC4RN7XKD2M6VB9TF5A",
        • "email": "jordan@example.com",
        • "roles": [
          ],
        • "type": "user"
        },
      • "target": {
        • "entity": "RolePermissionBlock",
        • "entityId": "01GTBV1CT3BM8A42SEJ2J5F4EG"
        },
      • "source": "web",
      • "clientIp": "203.0.113.42",
      • "description": "Permission block \"BK-05\" granted to role \"employee\".",
      • "changes": {
        • "name": {
          }
        }
      }
    ],
  • "nextCursor": "op_9f2c4b8a1d",
  • "hasMore": false
}

Get a single audit event

Fetches one event by its id. Useful for checking a single event by hand — build your feed from the paged endpoint rather than this one.

Authorizations:
oauth
path Parameters
id
required
string
Example: aud_665f1c9d4b2a7e3f10c8d5a2

The event id, as it appears in the id field.

Responses

Response Schema: application/json
id
required
string

Unique, unchanging id for this event. Use it to drop repeats, and as the id for the single-event endpoint.

schemaVersion
required
integer

The version of this format. We'll only add fields within a version.

eventType
required
string
Enum: "company.updated" "company.deleted" "company.created" "company.subscriptionTierChanged" "company.featureOverrideSet" "company.featureOverrideRemoved" "user.updated" "user.deleted" "user.created" "calendarIntegration.updated" "calendarIntegration.deleted" "calendarIntegration.created" "msTeamsIntegration.updated" "msTeamsIntegration.deleted" "msTeamsIntegration.created" "slackIntegration.updated" "slackIntegration.deleted" "slackIntegration.created" "role.updated" "role.deleted" "role.created" "rolePermissionBlock.granted" "rolePermissionBlock.revoked" "permissions.reviewed-acknowledged" "companyNotificationDefaults.appliedToAllUsers" "role.enabled" "role.disabled" "liquidSpaceIntegration.updated" "liquidSpaceIntegration.deleted" "liquidSpaceIntegration.created" "hrisBuildingMapping.created" "hrisBuildingMapping.updated" "hrisBuildingMapping.deleted" "hrisIntegration.created" "hrisIntegration.updated" "hrisIntegration.deleted" "hrisSyncSettings.created" "hrisSyncSettings.updated" "hrisSyncSettings.deleted" "user.hrisPendingCreated" "user.hrisStatusTransitioned" "user.hrisHeldTransitionFired" "resourceConfiguration.created" "resourceConfiguration.updated" "resourceConfiguration.deleted" "directorySync.created" "directorySync.updated" "directorySync.deleted" "csvUpload.created" "csvUpload.updated" "csvUpload.deleted" "bulkExportRequest.created" "bulkExportRequest.updated" "bulkExportRequest.deleted" "buildingAdmin.assigned" "buildingAdmin.revoked" "badgeProfile.created" "badgeProfile.updated" "badgeProfile.deleted" "badgeProfile.defaultChanged" "building.badgePrintingEnabled" "building.badgePrintingDisabled" "badgePrintLog.created" "badgePrintLog.failed" "vmsDocument.created" "vmsDocument.updated" "vmsDocument.deleted" "vmsDocumentVersion.created" "vmsDocumentVersion.updated" "vmsDocumentVersion.deleted" "vmsDocumentVersionPublishChange.created" "vmsDocumentVersionPublishChange.updated" "vmsDocumentVersionPublishChange.deleted" "vmsBuildingDocument.created" "vmsBuildingDocument.updated" "vmsBuildingDocument.deleted" "vmsEnvelope.created" "vmsEnvelope.updated" "vmsEnvelope.deleted" "vmsEnvelope.gdprErased" "vmsEnvelope.manualSweepCompleted" "vmsSignedDocument.created" "vmsSignedDocument.updated" "vmsSignedDocument.deleted" "vmsSignedDocument.manuallyCompleted" "tenant.vmsRetentionChanged" "directoryGroupRoleMapping.created" "directoryGroupRoleMapping.deleted" "webhookSubscription.created" "webhookSubscription.updated" "webhookSubscription.deleted" "webhookSubscription.secretRotated" "webhookSubscription.rotationConfirmed" "webhookSubscription.disabled" "webhookSubscription.suspended" "auditExportKey.created" "auditExportKey.revoked" "auditExportKey.deleted" "auditExport.queried" "user.authenticated"

What happened, as domain.action. Switch on this value.

category
string or null
Enum: "authentication" "account" "iam" "config" "booking" "visitor" "integration" "data-export" null

The family the event type belongs to, for grouping in your SIEM.

occurredAt
required
string <date-time>

When it happened. This is the time to show an analyst — it is not the order the feed is paged in.

ingestedAt
string or null <date-time>

When we recorded it. This is the order the feed is paged in, which is why it can differ from occurredAt.

tenantId
string or null

The Kadence account the event belongs to.

required
object

Who did it.

id
string or null

The user who did it. Null when Kadence itself did it.

email
string or null

The user's email address, kept so you can identify them in your SIEM.

roles
required
Array of strings

The roles they held when it happened. Always a list, empty rather than null when there are none.

type
required
string
Enum: "user" "system"

user when a person did it, system when Kadence did.

required
object

What they did it to.

entity
string or null

The kind of thing that changed, such as User or Company.

entityId
string or null

Which one changed.

source
required
string

Where the change came from, such as web, api or system.

clientIp
string or null

The actor's IP address, when we captured one.

description
required
string

A readable sentence describing the event, with the details already filled in. Safe to show in a SIEM, and it can legitimately contain email addresses.

object

What changed, before and after. Only on account, IAM and config events — for everything else the key is left out entirely rather than sent empty, so check for its presence rather than for a value.

property name*
additional property
any

Response samples

Content type
application/json
{
  • "id": "aud_665f1c9d4b2a7e3f10c8d5a2",
  • "schemaVersion": 1,
  • "eventType": "user.authenticated",
  • "category": "authentication",
  • "occurredAt": "2026-08-08T09:14:22.661Z",
  • "ingestedAt": "2026-08-08T09:14:25Z",
  • "tenantId": "01GTBV1CT3BM8A42SEJ2J5F4EG",
  • "actor": {
    • "id": "01H8QW3ZC4RN7XKD2M6VB9TF5A",
    • "email": "jordan@example.com",
    • "roles": [
      • "global_admin"
      ],
    • "type": "user"
    },
  • "target": {
    • "entity": "RolePermissionBlock",
    • "entityId": "01GTBV1CT3BM8A42SEJ2J5F4EG"
    },
  • "source": "web",
  • "clientIp": "203.0.113.42",
  • "description": "Permission block \"BK-05\" granted to role \"employee\".",
  • "changes": {
    • "name": {
      • "from": "Old name",
      • "to": "New name"
      }
    }
}

List the event types you can filter on

Every event type we export, with the category it belongs to. Read this rather than hard-coding the list — we add types over time, and this endpoint is what your account actually has.

Authorizations:
oauth

Responses

Response Schema: application/json
Array
eventType
required
string

The value to pass to the eventType filter.

category
string or null
Enum: "authentication" "account" "iam" "config" "booking" "visitor" "integration" "data-export" null

The family it belongs to.

description
string

What this event means.

Response samples

Content type
application/json
[
  • {
    • "eventType": "user.authenticated",
    • "category": "authentication",
    • "description": "A user signed in."
    }
]