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.
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.
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.
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.
Get a list of all days that a booking can be made for a specific user in a specific building.
| 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. |
| Accept required | string Example: application/ld+json The format you want the response in. |
required | Array of objects | ||||
Array
| |||||
| hydra:totalItems | integer >= 0 | ||||
{- "hydra:member": [
- {
- "start": "2023-07-01T09:00:00+00:00",
- "end": "2023-07-01T17:00:00+00:00"
}
], - "hydra:totalItems": 0
}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.
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.
| 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 |
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. |
{- "@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"
}Get a list of all the spaces on a specific floor, which may be booked for a specific user during a specific time period.
| 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 |
| Accept required | string Example: application/ld+json The format you want the response in. |
required | Array of objects | ||||||||||||||||||||||||||
Array
| |||||||||||||||||||||||||||
| hydra:totalItems | integer >= 0 | ||||||||||||||||||||||||||
{- "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
}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 for your company.
| 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 |
| Accept required | string Example: application/ld+json The format you want the response in. |
required | Array of objects | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Array
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| hydra:totalItems | integer >= 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
{- "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": {
- "@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"
}
], - "hydra:totalItems": 0
}Create a desk or onsite booking.
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
| |||
| @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
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
{- "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"
}
]
}{- "@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 if you know its identifier.
| id required | string Example: 01GTBV1CT3BM8A42SEJ2J5F4EG Booking identifier |
| Accept required | string Example: application/ld+json The format you want the response in. |
| @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
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
{- "@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. 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.
| id required | string Example: 01GTBV1CT3BM8A42SEJ2J5F4EG Booking identifier |
| Accept required | string Example: application/ld+json The format you want the response in. |
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. |
| @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
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
{- "userId": "01GTBV1CT3BM8A42SEJ2J5F4EG"
}{- "@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 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.
| id required | string Example: 01GTBV1CT3BM8A42SEJ2J5F4EG Booking identifier |
| Accept required | string Example: application/ld+json The format you want the response in. |
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. |
| @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
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
{- "userId": "01GTBV1CT3BM8A42SEJ2J5F4EG",
- "method": "doorAccess"
}{- "@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 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.
| id required | string Example: 01GTBV1CT3BM8A42SEJ2J5F4EG Booking identifier |
| Accept required | string Example: application/ld+json The format you want the response in. |
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. |
| @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
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
{- "userId": "01GTBV1CT3BM8A42SEJ2J5F4EG",
- "method": "doorAccess"
}{- "@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 list of all the bookings made by a user.
| id required | string Example: 01GTBV1CT3BM8A42SEJ2J5F4EG User identifier |
| 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 |
| Accept required | string Example: application/ld+json The format you want the response in. |
required | Array of objects | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Array
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| hydra:totalItems | integer >= 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
{- "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": {
- "@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"
}
], - "hydra:totalItems": 0
}Your buildings, including their address and time zone. A building time zone is what turns a booking time into a local one.
Get a list of all the buildings within your company.
| 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 |
| Accept required | string Example: application/ld+json The format you want the response in. |
required | Array of objects | ||||||||||||||||||||||||||||||||||||
Array
| |||||||||||||||||||||||||||||||||||||
| hydra:totalItems | integer >= 0 | ||||||||||||||||||||||||||||||||||||
{- "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 if you know its identifier.
| id required | string Example: 01GTBV1CT3BM8A42SEJ2J5F4EG Building identifier |
| Accept required | string Example: application/ld+json The format you want the response in. |
| @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. |
{- "@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"
}Get a list of all the floors within your company from all the buildings.
| 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 |
| Accept required | string Example: application/ld+json The format you want the response in. |
required | Array of objects | ||||||||||
Array
| |||||||||||
| hydra:totalItems | integer >= 0 | ||||||||||
{- "hydra:member": [
- {
- "@id": "/v1/public/floors/01GTBV1CT3BM8A42SEJ2J5F4EG",
- "@type": "Floor",
- "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
- "name": "Floor 01",
}
], - "hydra:totalItems": 0
}Get a floor if you know its identifier.
| id required | string Example: 01GTBV1CT3BM8A42SEJ2J5F4EG Floor identifier |
| Accept required | string Example: application/ld+json The format you want the response in. |
| @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. |
{- "@id": "/v1/public/floors/01GTBV1CT3BM8A42SEJ2J5F4EG",
- "@type": "Floor",
- "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
- "name": "Floor 01",
}Get a list of all the neighborhoods within your company from all the floors.
| 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 |
| Accept required | string Example: application/ld+json The format you want the response in. |
required | Array of objects | ||||||||
Array
| |||||||||
| hydra:totalItems | integer >= 0 | ||||||||
{- "hydra:member": [
- {
- "@id": "/v1/public/neighborhoods/01GTBV1CT3BM8A42SEJ2J5F4EG",
- "@type": "Neighborhood",
- "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
- "name": "Sales"
}
], - "hydra:totalItems": 0
}Get a neighborhood if you know its identifier.
| id required | string Example: 01GTBV1CT3BM8A42SEJ2J5F4EG Neighborhood identifier |
| Accept required | string Example: application/ld+json The format you want the response in. |
| @id | string |
| @type | string |
| id | string The ULID of the neighborhood. |
| name | string The name of the neighborhood. |
{- "@id": "/v1/public/neighborhoods/01GTBV1CT3BM8A42SEJ2J5F4EG",
- "@type": "Neighborhood",
- "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
- "name": "Sales"
}Individual desks, rooms and other bookable spaces, with their capacity and where they sit in the building.
Get a list of all the spaces within your company from all the floors.
| 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 |
| Accept required | string Example: application/ld+json The format you want the response in. |
required | Array of objects | ||||||||||||||||||||||||||||||||||||||||||||||
Array
| |||||||||||||||||||||||||||||||||||||||||||||||
| hydra:totalItems | integer >= 0 | ||||||||||||||||||||||||||||||||||||||||||||||
{- "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 space if you know its identifier.
| id required | string Example: 01GTBV1CT3BM8A42SEJ2J5F4EG Space identifier |
| Accept required | string Example: application/ld+json The format you want the response in. |
| @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
| |||||||||||||
object or null The neighborhood the space belongs to, if it is in one. | |||||||||||||
Any of
| |||||||||||||
| 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. | ||||||||||||
{- "@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"
}The people in your organisation. You can read them, update their details and replace a profile picture.
Get a list of all the users within your company.
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 |
required | Array of objects | ||||||||||||||||||||||||||||||||||||||||
Array
| |||||||||||||||||||||||||||||||||||||||||
| hydra:totalItems | integer >= 0 | ||||||||||||||||||||||||||||||||||||||||
{- "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 if you know their identifier.
| id required | string Example: 01GTBV1CT3BM8A42SEJ2J5F4EG User identifier |
| Accept required | string Example: application/ld+json The format you want the response in. |
| @id | string |
| @type | string |
| id | string The user's ULID within the Kadence platform. |
| firstName | |
| lastName | |
| jobTitle | |
| invitationPending | boolean Whether the user's invitation to join Kadence is still pending. |
| preferredFloor | object The user's preferred floor for booking when going into the office. |
| createdAt | |
| 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. |
| 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. |
{- "@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 user information.
| id required | string Example: 01GTBV1CT3BM8A42SEJ2J5F4EG User identifier |
| 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. |
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 |
| @id | string |
| @type | string |
| id | string The user's ULID within the Kadence platform. |
| firstName | |
| lastName | |
| jobTitle | |
| invitationPending | boolean Whether the user's invitation to join Kadence is still pending. |
| preferredFloor | object The user's preferred floor for booking when going into the office. |
| createdAt | |
| 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. |
| 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. |
{- "firstName": "string",
- "lastName": "string",
- "jobTitle": "string",
- "biography": "string",
- "locationTimezone": "string",
- "locationCountryCode": "string",
- "locationCityName": "string",
- "locationLatitude": 0,
- "locationLongitude": 0
}{- "@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 user profile picture.
| id required | string Example: 01GTBV1CT3BM8A42SEJ2J5F4EG User identifier |
| 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. |
The image to use as the profile picture.
| file required | string <binary> The image file to upload. |
| @id | string |
| @type | string |
| id | string The user's ULID within the Kadence platform. |
| firstName | |
| lastName | |
| jobTitle | |
| invitationPending | boolean Whether the user's invitation to join Kadence is still pending. |
| preferredFloor | object The user's preferred floor for booking when going into the office. |
| createdAt | |
| 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. |
| 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. |
{- "@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"
}Guest visits. A visit is a booking seen from the guest side, so the same activity also appears under Booking.
Get a collection of visits (guest bookings) for your company.
| 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 |
required | Array of objects | ||||||||||||||||||||||
Array
| |||||||||||||||||||||||
| hydra:totalItems | integer >= 0 | ||||||||||||||||||||||
{- "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 (guest booking) if you know its identifier.
| id required | string Example: 01GTBV1CT3BM8A42SEJ2J5F4EG Visit identifier |
| Accept required | string Example: application/ld+json The format you want the response in. |
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. |
{- "@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": [ ]
}Get a deduplicated directory of everyone who has visited your company as a guest.
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 |
required | Array of objects | ||||||||||||||||||||||||||||||||||||||||||
Array
| |||||||||||||||||||||||||||||||||||||||||||
| hydra:totalItems | integer >= 0 | ||||||||||||||||||||||||||||||||||||||||||
{- "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 if you know the identifier of any of their visits.
| id required | string Example: 01GTBV1CT3BM8A42SEJ2J5F4EG Visitor identifier |
| Accept required | string Example: application/ld+json The format you want the response in. |
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 | |
| lastName | |
| 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. |
{- "@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 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.
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.
building.deleted.floor.deleted.space.deleted.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.
Always verify the signature before you act on a delivery. It is the one thing that proves the request came from us.
Kadence-Webhook-Timestamp and Kadence-Webhook-Signature headers.HMAC-SHA256 of {timestamp}.{rawBody} using your signing secret, in hex.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;
}
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.
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.
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.
A booking was created.
You can subscribe to this event on its own, or to the whole booking group.
| Kadence-Webhook-Id required | string The identifier for this event. It matches the |
| 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 |
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| tenantId required | string The Kadence account the event belongs to. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
required | object What caused the event. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
required | object The object this event is about. It is the same on every event for that object. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
required | object A copy of the object as it was when the event happened. It does not change if the object changes afterwards. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
{- "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"
}
}
}A booking's time, space or title changed.
You can subscribe to this event on its own, or to the whole booking group.
| Kadence-Webhook-Id required | string The identifier for this event. It matches the |
| 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 |
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| tenantId required | string The Kadence account the event belongs to. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
required | object What caused the event. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
required | object The object this event is about. It is the same on every event for that object. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
required | object A copy of the object as it was when the event happened. It does not change if the object changes afterwards. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
object The values these fields held before the change. Only the fields that changed are listed, using the same names as | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
{- "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"
}
}A booking was cancelled. The cancellationReason field says why.
You can subscribe to this event on its own, or to the whole booking group.
| Kadence-Webhook-Id required | string The identifier for this event. It matches the |
| 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 |
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| tenantId required | string The Kadence account the event belongs to. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
required | object What caused the event. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
required | object The object this event is about. It is the same on every event for that object. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
required | object A copy of the object as it was when the event happened. It does not change if the object changes afterwards. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
object The values these fields held before the change. Only the fields that changed are listed, using the same names as | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
{- "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"
}
}Someone checked in to a booking.
You can subscribe to this event on its own, or to the whole booking group.
| Kadence-Webhook-Id required | string The identifier for this event. It matches the |
| 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 |
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| tenantId required | string The Kadence account the event belongs to. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
required | object What caused the event. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
required | object The object this event is about. It is the same on every event for that object. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
required | object A copy of the object as it was when the event happened. It does not change if the object changes afterwards. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
object The values these fields held before the change. Only the fields that changed are listed, using the same names as | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
{- "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"
}
}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.
| Kadence-Webhook-Id required | string The identifier for this event. It matches the |
| 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 |
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| tenantId required | string The Kadence account the event belongs to. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
required | object What caused the event. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
required | object The object this event is about. It is the same on every event for that object. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
required | object A copy of the object as it was when the event happened. It does not change if the object changes afterwards. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
object The values these fields held before the change. Only the fields that changed are listed, using the same names as | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
{- "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"
}
}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.
| Kadence-Webhook-Id required | string The identifier for this event. It matches the |
| 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 |
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| tenantId required | string The Kadence account the event belongs to. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
required | object What caused the event. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
required | object The object this event is about. It is the same on every event for that object. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
required | object A copy of the object as it was when the event happened. It does not change if the object changes afterwards. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
object The values these fields held before the change. Only the fields that changed are listed, using the same names as | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
{- "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"
}
}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.
| Kadence-Webhook-Id required | string The identifier for this event. It matches the |
| 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 |
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| tenantId required | string The Kadence account the event belongs to. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
required | object What caused the event. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
required | object The object this event is about. It is the same on every event for that object. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
required | object A copy of the object as it was when the event happened. It does not change if the object changes afterwards. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
{- "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"
}
}
}A visit (guest booking) was created.
You can subscribe to this event on its own, or to the whole visitor group.
| Kadence-Webhook-Id required | string The identifier for this event. It matches the |
| 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 |
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| tenantId required | string The Kadence account the event belongs to. | ||||||||||||||||||||||||||||||||||||||||||||||||||||
required | object What caused the event. | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||
required | object The object this event is about. It is the same on every event for that object. | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||
required | object A copy of the object as it was when the event happened. It does not change if the object changes afterwards. | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||
{- "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": [ ]
}
}A visit's time, building or guest list changed.
You can subscribe to this event on its own, or to the whole visitor group.
| Kadence-Webhook-Id required | string The identifier for this event. It matches the |
| 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 |
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| tenantId required | string The Kadence account the event belongs to. | ||||||||||||||||||||||||||||||||||||||||||||||||||||
required | object What caused the event. | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||
required | object The object this event is about. It is the same on every event for that object. | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||
required | object A copy of the object as it was when the event happened. It does not change if the object changes afterwards. | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||
object The values these fields held before the change. Only the fields that changed are listed, using the same names as | |||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||
{- "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"
}
}A visit was cancelled.
You can subscribe to this event on its own, or to the whole visitor group.
| Kadence-Webhook-Id required | string The identifier for this event. It matches the |
| 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 |
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| tenantId required | string The Kadence account the event belongs to. | ||||||||||||||||||||||||||||||||||||||||||||||||||||
required | object What caused the event. | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||
required | object The object this event is about. It is the same on every event for that object. | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||
required | object A copy of the object as it was when the event happened. It does not change if the object changes afterwards. | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||
object The values these fields held before the change. Only the fields that changed are listed, using the same names as | |||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||
{- "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"
}
}A visit was checked in. Its first guest arrived.
You can subscribe to this event on its own, or to the whole visitor group.
| Kadence-Webhook-Id required | string The identifier for this event. It matches the |
| 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 |
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| tenantId required | string The Kadence account the event belongs to. | ||||||||||||||||||||||||||||||||||||||||||||||||||||
required | object What caused the event. | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||
required | object The object this event is about. It is the same on every event for that object. | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||
required | object A copy of the object as it was when the event happened. It does not change if the object changes afterwards. | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||
object The values these fields held before the change. Only the fields that changed are listed, using the same names as | |||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||
{- "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"
}
}A visit was checked out.
You can subscribe to this event on its own, or to the whole visitor group.
| Kadence-Webhook-Id required | string The identifier for this event. It matches the |
| 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 |
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| tenantId required | string The Kadence account the event belongs to. | ||||||||||||||||||||||||||||||||||||||||||||||||||||
required | object What caused the event. | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||
required | object The object this event is about. It is the same on every event for that object. | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||
required | object A copy of the object as it was when the event happened. It does not change if the object changes afterwards. | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||
object The values these fields held before the change. Only the fields that changed are listed, using the same names as | |||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||
{- "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"
}
}A guest was invited to a visit.
You can subscribe to this event on its own, or to the whole visitor group.
| Kadence-Webhook-Id required | string The identifier for this event. It matches the |
| 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 |
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| tenantId required | string The Kadence account the event belongs to. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
required | object What caused the event. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
required | object The object this event is about. It is the same on every event for that object. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
required | object A copy of the object as it was when the event happened. It does not change if the object changes afterwards. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
{- "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"
}
}A guest arrived and checked in.
You can subscribe to this event on its own, or to the whole visitor group.
| Kadence-Webhook-Id required | string The identifier for this event. It matches the |
| 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 |
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| tenantId required | string The Kadence account the event belongs to. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
required | object What caused the event. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
required | object The object this event is about. It is the same on every event for that object. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
required | object A copy of the object as it was when the event happened. It does not change if the object changes afterwards. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
{- "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"
}
}A guest checked out.
You can subscribe to this event on its own, or to the whole visitor group.
| Kadence-Webhook-Id required | string The identifier for this event. It matches the |
| 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 |
| 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| tenantId required | string The Kadence account the event belongs to. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
required | object What caused the event. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
required | object The object this event is about. It is the same on every event for that object. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
required | object A copy of the object as it was when the event happened. It does not change if the object changes afterwards. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
{- "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"
}
}A space was created.
You can subscribe to this event on its own, or to the whole space group.
| Kadence-Webhook-Id required | string The identifier for this event. It matches the |
| 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 |
| 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 | ||||||||||||||||||||||||||||||||
| tenantId required | string The Kadence account the event belongs to. | ||||||||||||||||||||||||||||||||
required | object What caused the event. | ||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||
required | object The object this event is about. It is the same on every event for that object. | ||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||
required | object A copy of the object as it was when the event happened. It does not change if the object changes afterwards. | ||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||
{- "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": {
- "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"
}
}A space's name, type, capacity or location changed.
You can subscribe to this event on its own, or to the whole space group.
| Kadence-Webhook-Id required | string The identifier for this event. It matches the |
| 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 |
| 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 | ||||||||||||||||||||||||||||||||
| tenantId required | string The Kadence account the event belongs to. | ||||||||||||||||||||||||||||||||
required | object What caused the event. | ||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||
required | object The object this event is about. It is the same on every event for that object. | ||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||
required | object A copy of the object as it was when the event happened. It does not change if the object changes afterwards. | ||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||
object The values these fields held before the change. Only the fields that changed are listed, using the same names as | |||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||
{- "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": {
- "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"
}, - "previous": {
- "capacity": 4
}
}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.
| Kadence-Webhook-Id required | string The identifier for this event. It matches the |
| 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 |
| 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 | ||||||||||||||||||||||||||||||||
| tenantId required | string The Kadence account the event belongs to. | ||||||||||||||||||||||||||||||||
required | object What caused the event. | ||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||
required | object The object this event is about. It is the same on every event for that object. | ||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||
required | object A copy of the object as it was when the event happened. It does not change if the object changes afterwards. | ||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||
{- "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": {
- "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"
}
}A building was created.
You can subscribe to this event on its own, or to the whole building group.
| Kadence-Webhook-Id required | string The identifier for this event. It matches the |
| 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 |
| 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 | ||||||||||||||||||||||||||||||||
| tenantId required | string The Kadence account the event belongs to. | ||||||||||||||||||||||||||||||||
required | object What caused the event. | ||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||
required | object The object this event is about. It is the same on every event for that object. | ||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||
required | object A copy of the object as it was when the event happened. It does not change if the object changes afterwards. | ||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||
{- "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"
}
}A building's details changed.
You can subscribe to this event on its own, or to the whole building group.
| Kadence-Webhook-Id required | string The identifier for this event. It matches the |
| 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 |
| 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 | ||||||||||||||||||||||||||||||||
| tenantId required | string The Kadence account the event belongs to. | ||||||||||||||||||||||||||||||||
required | object What caused the event. | ||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||
required | object The object this event is about. It is the same on every event for that object. | ||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||
required | object A copy of the object as it was when the event happened. It does not change if the object changes afterwards. | ||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||
object The values these fields held before the change. Only the fields that changed are listed, using the same names as | |||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||
{- "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"
}
}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.
| Kadence-Webhook-Id required | string The identifier for this event. It matches the |
| 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 |
| 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 | ||||||||||||||||||||||||||||||||
| tenantId required | string The Kadence account the event belongs to. | ||||||||||||||||||||||||||||||||
required | object What caused the event. | ||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||
required | object The object this event is about. It is the same on every event for that object. | ||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||
required | object A copy of the object as it was when the event happened. It does not change if the object changes afterwards. | ||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||
{- "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"
}
}A floor was created.
You can subscribe to this event on its own, or to the whole floor group.
| Kadence-Webhook-Id required | string The identifier for this event. It matches the |
| 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 |
| 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 | ||||||
| tenantId required | string The Kadence account the event belongs to. | ||||||
required | object What caused the event. | ||||||
| |||||||
required | object The object this event is about. It is the same on every event for that object. | ||||||
| |||||||
required | object A copy of the object as it was when the event happened. It does not change if the object changes afterwards. | ||||||
| |||||||
{- "id": "01K1XQ7Z9M4B2N8P5R3T6V0W2Y",
- "schemaVersion": 1,
- "type": "floor.created",
- "category": "floor",
- "occurredAt": "2026-08-08T09:14:22+00:00",
- "sequence": 1754645662123,
- "tenantId": "01GTBV1CT3BM8A42SEJ2J5F4EG",
- "actor": {
- "type": "user",
- "id": "01H8QW3ZC4RN7XKD2M6VB9TF5A",
- "source": "ios"
}, - "target": {
- "object": "floor",
- "id": "01JB4KQ2X8HN5YT7WZ3PC6MR9D"
}, - "data": {
- "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
- "name": "Floor 01",
}
}A floor's details changed.
You can subscribe to this event on its own, or to the whole floor group.
| Kadence-Webhook-Id required | string The identifier for this event. It matches the |
| 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 |
| 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 | ||||||
| tenantId required | string The Kadence account the event belongs to. | ||||||
required | object What caused the event. | ||||||
| |||||||
required | object The object this event is about. It is the same on every event for that object. | ||||||
| |||||||
required | object A copy of the object as it was when the event happened. It does not change if the object changes afterwards. | ||||||
| |||||||
object The values these fields held before the change. Only the fields that changed are listed, using the same names as | |||||||
| |||||||
{- "id": "01K1XQ7Z9M4B2N8P5R3T6V0W2Y",
- "schemaVersion": 1,
- "type": "floor.updated",
- "category": "floor",
- "occurredAt": "2026-08-08T09:14:22+00:00",
- "sequence": 1754645662123,
- "tenantId": "01GTBV1CT3BM8A42SEJ2J5F4EG",
- "actor": {
- "type": "user",
- "id": "01H8QW3ZC4RN7XKD2M6VB9TF5A",
- "source": "ios"
}, - "target": {
- "object": "floor",
- "id": "01JB4KQ2X8HN5YT7WZ3PC6MR9D"
}, - "data": {
- "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
- "name": "Floor 01",
}, - "previous": {
- "name": "Level 2"
}
}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.
| Kadence-Webhook-Id required | string The identifier for this event. It matches the |
| 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 |
| 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 | ||||||
| tenantId required | string The Kadence account the event belongs to. | ||||||
required | object What caused the event. | ||||||
| |||||||
required | object The object this event is about. It is the same on every event for that object. | ||||||
| |||||||
required | object A copy of the object as it was when the event happened. It does not change if the object changes afterwards. | ||||||
| |||||||
{- "id": "01K1XQ7Z9M4B2N8P5R3T6V0W2Y",
- "schemaVersion": 1,
- "type": "floor.deleted",
- "category": "floor",
- "occurredAt": "2026-08-08T09:14:22+00:00",
- "sequence": 1754645662123,
- "tenantId": "01GTBV1CT3BM8A42SEJ2J5F4EG",
- "actor": {
- "type": "user",
- "id": "01H8QW3ZC4RN7XKD2M6VB9TF5A",
- "source": "ios"
}, - "target": {
- "object": "floor",
- "id": "01JB4KQ2X8HN5YT7WZ3PC6MR9D"
}, - "data": {
- "id": "01GTBV1CT3BM8A42SEJ2J5F4EG",
- "name": "Floor 01",
}
}A neighborhood was created.
You can subscribe to this event on its own, or to the whole neighborhood group.
| Kadence-Webhook-Id required | string The identifier for this event. It matches the |
| 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 |
| 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 | ||||||
| tenantId required | string The Kadence account the event belongs to. | ||||||
required | object What caused the event. | ||||||
| |||||||
required | object The object this event is about. It is the same on every event for that object. | ||||||
| |||||||
required | object A copy of the object as it was when the event happened. It does not change if the object changes afterwards. | ||||||
| |||||||
{- "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"
}
}A neighborhood was renamed.
You can subscribe to this event on its own, or to the whole neighborhood group.
| Kadence-Webhook-Id required | string The identifier for this event. It matches the |
| 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 |
| 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 | ||||||
| tenantId required | string The Kadence account the event belongs to. | ||||||
required | object What caused the event. | ||||||
| |||||||
required | object The object this event is about. It is the same on every event for that object. | ||||||
| |||||||
required | object A copy of the object as it was when the event happened. It does not change if the object changes afterwards. | ||||||
| |||||||
object The values these fields held before the change. Only the fields that changed are listed, using the same names as | |||||||
| |||||||
{- "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"
}
}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.
| Kadence-Webhook-Id required | string The identifier for this event. It matches the |
| 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 |
| 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 | ||||||
| tenantId required | string The Kadence account the event belongs to. | ||||||
required | object What caused the event. | ||||||
| |||||||
required | object The object this event is about. It is the same on every event for that object. | ||||||
| |||||||
required | object A copy of the object as it was when the event happened. It does not change if the object changes afterwards. | ||||||
| |||||||
{- "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"
}
}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.
| Kadence-Webhook-Id required | string The identifier for this event. It matches the |
| 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 |
| 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 | ||||||
| tenantId required | string The Kadence account the event belongs to. | ||||||
required | object What caused the event. | ||||||
| |||||||
required | object The object this event is about. It is the same on every event for that object. | ||||||
| |||||||
| data required | object Sample content. The test event is not about a real object. | ||||||
{- "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": { }
}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.
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.
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.
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.
| 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 |
| 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 |
| 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 |
| 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, |
| Accept | string Example: application/json Send |
| Link | string Example: "<https://api.onkadence.co/v1/audit/events?cursor=op_9f2c4b8a1d>; rel=\"next\"" A |
| X-Audit-Next-Cursor | string Example: "op_9f2c4b8a1d" The same cursor as |
| X-Audit-Has-More | string Enum: "true" "false" Example: "false" Whether another page is ready right now. |
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
| |||||||||||||||||||||||||||||||||||||||||||||||
| 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. | ||||||||||||||||||||||||||||||||||||||||||||||
{- "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": [
- "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"
}
}
}
], - "nextCursor": "op_9f2c4b8a1d",
- "hasMore": false
}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.
| id required | string Example: aud_665f1c9d4b2a7e3f10c8d5a2 The event id, as it appears in the |
| 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 | ||||||||
| 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 | ||||||||
| tenantId | string or null The Kadence account the event belongs to. | ||||||||
required | object Who did it. | ||||||||
| |||||||||
required | object What they did it to. | ||||||||
| |||||||||
| source required | string Where the change came from, such as | ||||||||
| 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. | |||||||||
| |||||||||
{- "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"
}
}
}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.
| eventType required | string The value to pass to the |
| 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. |
[- {
- "eventType": "user.authenticated",
- "category": "authentication",
- "description": "A user signed in."
}
]