API reference
Bookings
Resource bookings
A booking is identified by your sourceBookingId and tied to a property. Creating one triggers Properly's scheduling automation.
Creating a booking whose sourceBookingId already exists for the account returns:
Create a booking
/v1/bookings 201 Created
x-api-key
Creates a booking, returns it inline, and triggers downstream scheduling automation. A duplicate sourceBookingId for the account → 409.
| Field | Type | Required | Notes |
|---|---|---|---|
sourceBookingId | string | Required | Your booking id. Duplicate for the account → 409 conflict. |
startDate | date-time | Required | Check-in. |
endDate | date-time | Required | Check-out. |
numberOfGuests | integer | Required | — |
guestDetails | object[] | Required | Non-empty. See Guest details. |
propertyId | string | One of | One of propertyId or sourcePropertyId identifies the property. |
sourcePropertyId | string | One of | Your property id. |
title | string | Optional | — |
tags | string[] | Optional | 1–10 items; an empty list is rejected. |
otherAttributes | object[] | Optional | See Other attributes. |
Guest details
| Field | Type | Required | Notes |
|---|---|---|---|
sourceId | string | Required | Your id for the guest. |
firstName | string | Required | — |
lastName | string | Optional | — |
sourcePictureUrl | string | Optional | A URL. |
Other attributes
| Field | Type | Required | Notes |
|---|---|---|---|
label | string | Required | Max 100 chars. |
value | string | string[] | Required | A string of up to 500 chars, or an array of such strings. |
group | string | Optional | Max 100 chars. |
pictures | string[] | Optional | Picture URLs. |
curl -X POST https://platform.getproperly.com/v1/bookings \
-H "x-api-key: $PROPERLY_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 3f8a33a2-bd60-4c1e-9c11-booking-55871" \
-d '{
"sourceBookingId": "pms-bk-55871",
"sourcePropertyId": "pms-100234",
"startDate": "2026-10-03T15:00:00Z",
"endDate": "2026-10-08T11:00:00Z",
"numberOfGuests": 2,
"guestDetails": [
{ "sourceId": "pms-guest-77", "firstName": "Ana", "lastName": "Smith" }
],
"title": "Smith family stay"
}' List bookings in a date window
/v1/bookings 200 OK
x-api-key
Returns every booking that overlaps the window: it arrives before dateTo and departs after dateFrom, so a guest who checked in before the window started is included. Cancelled bookings are included unless you filter by status. Collection envelope, cursor-paginated, ordered by startDate ascending. Invalid dates or a malformed cursor → 400.
| Parameter | Type | Required | Notes |
|---|---|---|---|
dateFrom | date-time | Required | — |
dateTo | date-time | Required | — |
propertyId | string | Optional | Only bookings for this one property. |
status | integer | Optional | 1 created, 2 dates changed, 3 cancelled. |
cursor | string | Optional | Opaque cursor from a previous page's nextCursor. |
limit | integer | Optional | 1–100, default 50. |
| Field | Type | Required | Notes |
|---|---|---|---|
bookingId | string | Required | The Properly id. |
sourceBookingId | string | Optional | The identifier you supplied at create. |
propertyId | string | Optional | — |
status | integer | Optional | 1 created, 2 dates changed, 3 cancelled. |
startDate | date-time | Optional | Check-in. |
endDate | date-time | Optional | Check-out. |
title | string | Optional | — |
guestDetails | object[] | Optional | Items { firstName, lastName }. |
numberOfGuests | integer | Optional | — |
tags | string[] | Optional | — |
otherAttributes | object[] | Optional | — |
createdAt | date-time | Optional | — |
updatedAt | date-time | Optional | — |
curl "https://platform.getproperly.com/v1/bookings?dateFrom=2026-10-05T00:00:00Z&dateTo=2026-10-12T00:00:00Z&propertyId=8jL2mQxT4a" \
-H "x-api-key: $PROPERLY_API_KEY" {
"data": [
{
"bookingId": "bk_7Yt2",
"sourceBookingId": "pms-bk-55871",
"propertyId": "8jL2mQxT4a",
"status": 1,
"startDate": "2026-10-03T15:00:00.000Z",
"endDate": "2026-10-08T11:00:00.000Z",
"title": "Smith family stay",
"guestDetails": [{ "firstName": "Ana", "lastName": "Smith" }],
"numberOfGuests": 2,
"createdAt": "2026-09-01T12:30:00.000Z",
"updatedAt": "2026-09-01T12:30:00.000Z"
}
],
"nextCursor": null,
"hasMore": false
} Get a booking
/v1/bookings/{bookingId} 200 OK
x-api-key
Returns one booking in the same read shape as the listing. 404 if unknown or owned by another account.
curl https://platform.getproperly.com/v1/bookings/bk_7Yt2 \
-H "x-api-key: $PROPERLY_API_KEY" {
"bookingId": "bk_7Yt2",
"sourceBookingId": "pms-bk-55871",
"propertyId": "8jL2mQxT4a",
"status": 1,
"startDate": "2026-10-03T15:00:00.000Z",
"endDate": "2026-10-08T11:00:00.000Z",
"title": "Smith family stay",
"guestDetails": [{ "firstName": "Ana", "lastName": "Smith" }],
"numberOfGuests": 2,
"createdAt": "2026-09-01T12:30:00.000Z",
"updatedAt": "2026-09-01T12:30:00.000Z"
} Update a booking
/v1/bookings/{bookingId} 200 OK
x-api-key
Partial update of booking fields; returns the updated booking.
| Field | Type | Required | Notes |
|---|---|---|---|
title | string | Optional | — |
numberOfGuests | integer | Optional | — |
guestDetails | object[] | Optional | Same shape as create. |
tags | string[] | Optional | 1–10 items; an empty list is rejected. |
otherAttributes | object[] | Optional | Same shape as create. |
curl -X PATCH https://platform.getproperly.com/v1/bookings/bk_7Yt2 \
-H "x-api-key: $PROPERLY_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "numberOfGuests": 3 }' Change booking dates
/v1/bookings/{bookingId}/dates 200 OK
x-api-key
Changes the dates and marks the booking as changed.
| Field | Type | Required | Notes |
|---|---|---|---|
startDate | date-time | Required | Check-in. |
endDate | date-time | Required | Check-out. |
curl -X PATCH https://platform.getproperly.com/v1/bookings/bk_7Yt2/dates \
-H "x-api-key: $PROPERLY_API_KEY" -H "Content-Type: application/json" \
-d '{ "startDate": "2026-10-03T15:00:00Z", "endDate": "2026-10-08T11:00:00Z" }' Cancel a booking
/v1/bookings/{bookingId}/cancel 200 OK
x-api-key
No body. Returns the canceled booking.
curl -X POST https://platform.getproperly.com/v1/bookings/bk_7Yt2/cancel \
-H "x-api-key: $PROPERLY_API_KEY" Delete a booking
/v1/bookings/{bookingId} 204 No Content
x-api-key
Deletes the booking. Returns 204 with no body.
curl -X DELETE https://platform.getproperly.com/v1/bookings/bk_7Yt2 \
-H "x-api-key: $PROPERLY_API_KEY"