Skip to content

Xenia Connect API (1.0.1)

Situ's API for seamless integration with Situ's workflow.

Download OpenAPI description
Overview
Situ Technical Support
Languages
Servers
Mock server
https://docs.xenia.staysitu.com/_mock/xenia-connect/spec/
Production
https://api-xenia.staysitu.com/
Sandbox
https://api-xenia-cisandbox.staysitu.com/

Bookings

Bookings are the next step in the booking journey after an enquiry has been created. Bookings are created when a quote is accepted by the client.

Webhooks

Enquiries

Enquiries are the start point in the booking journey. Providing as much information as possible upfront about an enquiry will increase its conversion rate and reduce touchpoints. We are constantly looking for what we can add to our set of information to make our process easier for everybody. If you have any suggestions get in contact!

OperationsWebhooks

Create a new enquiry

Request

Create a new enquiry for Situ to begin the quoting process on.

Security
apiKey
Bodyapplication/jsonrequired
checkInOutobject(checkInOut)required

The check-in and check-out dates for this enquiry. ISO-8601 date formats are accepted.

checkInOut.​checkInstring or null(date)required
Example: "2026-02-03"
checkInOut.​checkOutstring or null(date)required
Example: "2026-03-10"
clientReferencestring(enquiryClientReferenceId)[ 3 .. 255 ] charactersrequired

The clients reference for the enquiry. This may be the same as the external ID depending on your system.

Example: "example-ref-567abc"
enquiryLocationobject(createEnquiryLocation)required

There are several methods to provide us with a location. You may either provide us with the address, coordinates or Google place_id. If you provide an address, we will attempt to reverse geocode this to a latitude and longitude. If this fails we will return a HTTP 400 with the relevant error code.

enquiryLocation.​addressFormattedstring(addressFormatted)<= 255 characters

The formatted address. If this is being used to create an enquiry, as much information as possible is desired for reverse-geocoding.

Example: "123 Testing Way, Testham, United Kingdom TE57 2DE"
enquiryLocation.​coordinatesobject(coordinates)

Latitude/Longitude coordinates

enquiryLocation.​googlePlaceIdstring(googlePlaceId)<= 255 characters

The Google Place ID of the location.

Example: "ChIJN1t_tDeuEmsRUcIaW_4C0gQ"
externalIdstring(enquiryExternalId)[ 3 .. 255 ] charactersrequired

The external ID of the enquiry, this is a unique value that can be used to retrieve your enquiry via other endpoints where specified.

Example: "e234abcef"
guestNumbersobject(guestNumbers)required

The number of guests in each category.

guestNumbers.​adultsinteger[ 1 .. 99 ]required

The amount of adults (18+ years).

Example: 2
guestNumbers.​childreninteger<= 99

The amount of children (1 - 17 years).

Default 0
Example: 3
guestNumbers.​infantsinteger<= 99

The amount of infants (0 - 1 years).

Default 0
Example: 1
guestRequirementsArray of objects(enquiryGuestRequirements)

The guest requirements for the enquiry.

leadGuestobject(leadGuestDetails)required

Details of the lead guest.

leadGuest.​contactNumberstring or null(phoneNumber)<= 50 characters

Lead guest contact number. Must be a valid phone number format, including international formats with country codes. Valid characters are 0-9, +, -, (, ), and commas. No letters allowed.

Example: "07556677992"
leadGuest.​emailstring or null<= 200 characters^[^@;\s]+@[^@.;\s]+(?:\.\w+){1,2}$

Lead guest email. Must contain exactly one @ symbol, no spaces or semicolons, and end with a valid domain (e.g., .com or .co.uk).

Example: "Sam.Smith@example.com"
leadGuest.​familyNamestring or null<= 50 characters

Lead guest family name (surname).

Example: "Smith"
leadGuest.​givenNamestring or null<= 50 characters

Lead guest given name (first name).

Example: "Sam"
clientBookerobject(clientBooker)non-emptyrequired

Details of the Booker for the enquiry or booking.

clientBooker.​contactNumberstring or null(phoneNumber)<= 50 charactersrequired

Booker contact number

Example: "+447911992499"
clientBooker.​emailstring<= 200 characters^[^@;\s]+@[^@.;\s]+(?:\.\w+){1,2}$required

Booker email

Example: "Jess.Walters@example.com"
clientBooker.​familyNamestring<= 50 charactersrequired

Booker family name

Example: "Walters"
clientBooker.​givenNamestring<= 50 charactersrequired

Booker given name

Example: "Jess"
curl -i -X POST \
  https://docs.xenia.staysitu.com/_mock/xenia-connect/spec/external-api/v1/enquiries \
  -H 'Content-Type: application/json' \
  -H 'X-Api-Key: YOUR_API_KEY_HERE' \
  -d '{
    "checkInOut": {
      "checkIn": "2026-02-03",
      "checkOut": "2026-03-10"
    },
    "clientReference": "example-ref-567abc",
    "enquiryLocation": {
      "addressFormatted": "123 Testing Way, Testham, United Kingdom TE57 2DE",
      "coordinates": {
        "latitude": 51.5074,
        "longitude": -0.1278
      },
      "googlePlaceId": "ChIJN1t_tDeuEmsRUcIaW_4C0gQ"
    },
    "externalId": "e234abcef",
    "guestNumbers": {
      "adults": 2,
      "children": 3,
      "infants": 1
    },
    "guestRequirements": [
      {
        "text": "Security guard mandatory in lobby, double locks required on apartment door",
        "type": "GENERAL"
      }
    ],
    "leadGuest": {
      "contactNumber": "07556677992",
      "email": "Sam.Smith@example.com",
      "familyName": "Smith",
      "givenName": "Sam"
    },
    "clientBooker": {
      "contactNumber": "+447911992499",
      "email": "Jess.Walters@example.com",
      "familyName": "Walters",
      "givenName": "Jess"
    }
  }'

Responses

The created enquiry object.

Bodyapplication/json
dataobject(enquiry)required
data.​xeniaReferencestring(enquiryXeniaReferenceId)required

Xenia's reference for the enquiry.

Example: "R4E2F3A4"
data.​clientReferencestring(enquiryClientReferenceId)[ 3 .. 255 ] charactersrequired

The clients reference for the enquiry. This may be the same as the external ID depending on your system.

Example: "example-ref-567abc"
data.​assignedSpecialistobject or null(assignedSpecialist)required

The assigned specialist for this resource. If this is null then no specialist has been assigned yet.

data.​assignedSpecialist.​namestring

The name of the user.

Example: "Scott Aberdeigh"
data.​checkInOutobject(checkInOut)required

The check-in and check-out dates for this enquiry. ISO-8601 date formats are accepted.

data.​checkInOut.​checkInstring or null(date)required
Example: "2026-02-03"
data.​checkInOut.​checkOutstring or null(date)required
Example: "2026-03-10"
data.​enquiryLocationobject(enquiryLocation)required
data.​enquiryLocation.​addressobject(enquiryAddress)required

The enquiries location.

data.​enquiryLocation.​address.​countrystring or null<= 280 characters

The country of the location.

Example: "United Kingdom"
data.​enquiryLocation.​address.​localitystring or null<= 280 characters

The area, neighbourhood or city of the location.

Example: "Hackney"
data.​enquiryLocation.​address.​postalCodestring or null<= 280 characters

The postcode of the location.

Example: "BS11 1DJ"
data.​enquiryLocation.​address.​regionstring or null<= 280 characters

The region of the location.

Example: "Somerset"
data.​enquiryLocation.​address.​streetAddressstring or null<= 280 characters

Street address of the location.

Example: "123 fake street"
data.​enquiryLocation.​coordinatesobject(coordinates)required

Latitude/Longitude coordinates

data.​enquiryLocation.​coordinates.​latitudenumber(float)required

Latitude of the location.

Example: 51.5074
data.​enquiryLocation.​coordinates.​longitudenumber(float)required

Longitude of the location.

Example: -0.1278
data.​enquiryLocation.​googlePlaceIdstring(googlePlaceId)<= 255 charactersrequired

The Google Place ID of the location.

Example: "ChIJN1t_tDeuEmsRUcIaW_4C0gQ"
data.​enquiryStateobject or null(enquiryState)required

Metadata about the enquiry state. This is not always available and may be null.

data.​enquiryState.​closureReasonstring or null(enquiryStateClosureReason)

The reason for the enquiry closure. This is not always available and may be null.

Enum"PRICE""AVAILABILITY""NO_CLIENT_RESPONSE""STAY_CANCELLED_OR_POSTPONED""BOOKED_ELSEWHERE_COMPETITOR""BOOKED_ELSEWHERE_DIFFERENT_PRODUCT""DUPLICATE""NOT_AN_ENQUIRY""STAY_DOES_NOT_MEET_SITU_CRITERIA""OTHER"
Example: "STAY_CANCELLED_OR_POSTPONED"
data.​enquiryState.​statestring(enquiryStateValue)

This is a machine-readable key that can be used to identify the state of the enquiry.

Enum"NEW""SHORTLISTING""QUOTED""CLOSED""BOOKING_PENDING""BOOKING_CONFIRMED""BOOKING_CHECK_IN_DETAILS_SENT""BOOKING_CANCELLED"
Example: "CLOSED"
data.​externalIdstring(enquiryExternalId)[ 3 .. 255 ] charactersrequired

The external ID of the enquiry, this is a unique value that can be used to retrieve your enquiry via other endpoints where specified.

Example: "e234abcef"
data.​guestNumbersobject(guestNumbers)required

The number of guests in each category.

data.​guestNumbers.​adultsinteger[ 1 .. 99 ]required

The amount of adults (18+ years).

Example: 2
data.​guestNumbers.​childreninteger<= 99

The amount of children (1 - 17 years).

Default 0
Example: 3
data.​guestNumbers.​infantsinteger<= 99

The amount of infants (0 - 1 years).

Default 0
Example: 1
data.​guestRequirementsArray of objects(enquiryGuestRequirements)required

The guest requirements for the enquiry.

data.​guestRequirements[].​textstring[ 3 .. 10000 ] charactersrequired

The requirements in text format for the chosen type.

Example: "Security guard mandatory in lobby, double locks required on apartment door"
data.​guestRequirements[].​typestring(enquiryGuestRequirementsType)required

The type of guest requirement. For now only GENERAL is supported, but more specific types will be added in the future.

Value"GENERAL"
Example: "GENERAL"
data.​leadGuestobject(leadGuestDetails)required

Details of the lead guest.

data.​leadGuest.​contactNumberstring or null(phoneNumber)<= 50 characters

Lead guest contact number. Must be a valid phone number format, including international formats with country codes. Valid characters are 0-9, +, -, (, ), and commas. No letters allowed.

Example: "07556677992"
data.​leadGuest.​emailstring or null<= 200 characters^[^@;\s]+@[^@.;\s]+(?:\.\w+){1,2}$

Lead guest email. Must contain exactly one @ symbol, no spaces or semicolons, and end with a valid domain (e.g., .com or .co.uk).

Example: "Sam.Smith@example.com"
data.​leadGuest.​familyNamestring or null<= 50 characters

Lead guest family name (surname).

Example: "Smith"
data.​leadGuest.​givenNamestring or null<= 50 characters

Lead guest given name (first name).

Example: "Sam"
data.​clientBookerobject(clientBooker)non-emptyrequired

Details of the Booker for the enquiry or booking.

data.​clientBooker.​contactNumberstring or null(phoneNumber)<= 50 charactersrequired

Booker contact number

Example: "+447911992499"
data.​clientBooker.​emailstring<= 200 characters^[^@;\s]+@[^@.;\s]+(?:\.\w+){1,2}$required

Booker email

Example: "Jess.Walters@example.com"
data.​clientBooker.​familyNamestring<= 50 charactersrequired

Booker family name

Example: "Walters"
data.​clientBooker.​givenNamestring<= 50 charactersrequired

Booker given name

Example: "Jess"
data.​createdAtstring(date-time)(utcTimestamp)required

ISO-8601 UTC timestamp. The example is the expected format.

Example: "2026-01-01T15:12:56Z"
Response
application/json
{ "data": { "xeniaReference": "R4E2F3A4", "clientReference": "example-ref-567abc", "assignedSpecialist": {}, "checkInOut": {}, "enquiryLocation": {}, "enquiryState": {}, "externalId": "e234abcef", "guestNumbers": {}, "guestRequirements": [], "leadGuest": {}, "clientBooker": {}, "createdAt": "2026-01-01T15:12:56Z" } }

Get an enquiry

Request

Security
apiKey
Path
idstringrequired

Can be either the enquiries xeniaReference or externalId.

Example: R4E2F3A4
curl -i -X GET \
  https://docs.xenia.staysitu.com/_mock/xenia-connect/spec/external-api/v1/enquiries/R4E2F3A4 \
  -H 'X-Api-Key: YOUR_API_KEY_HERE'

Responses

The enquiry object

Bodyapplication/json
dataobject(enquiry)required
data.​xeniaReferencestring(enquiryXeniaReferenceId)required

Xenia's reference for the enquiry.

Example: "R4E2F3A4"
data.​clientReferencestring(enquiryClientReferenceId)[ 3 .. 255 ] charactersrequired

The clients reference for the enquiry. This may be the same as the external ID depending on your system.

Example: "example-ref-567abc"
data.​assignedSpecialistobject or null(assignedSpecialist)required

The assigned specialist for this resource. If this is null then no specialist has been assigned yet.

data.​assignedSpecialist.​namestring

The name of the user.

Example: "Scott Aberdeigh"
data.​checkInOutobject(checkInOut)required

The check-in and check-out dates for this enquiry. ISO-8601 date formats are accepted.

data.​checkInOut.​checkInstring or null(date)required
Example: "2026-02-03"
data.​checkInOut.​checkOutstring or null(date)required
Example: "2026-03-10"
data.​enquiryLocationobject(enquiryLocation)required
data.​enquiryLocation.​addressobject(enquiryAddress)required

The enquiries location.

data.​enquiryLocation.​address.​countrystring or null<= 280 characters

The country of the location.

Example: "United Kingdom"
data.​enquiryLocation.​address.​localitystring or null<= 280 characters

The area, neighbourhood or city of the location.

Example: "Hackney"
data.​enquiryLocation.​address.​postalCodestring or null<= 280 characters

The postcode of the location.

Example: "BS11 1DJ"
data.​enquiryLocation.​address.​regionstring or null<= 280 characters

The region of the location.

Example: "Somerset"
data.​enquiryLocation.​address.​streetAddressstring or null<= 280 characters

Street address of the location.

Example: "123 fake street"
data.​enquiryLocation.​coordinatesobject(coordinates)required

Latitude/Longitude coordinates

data.​enquiryLocation.​coordinates.​latitudenumber(float)required

Latitude of the location.

Example: 51.5074
data.​enquiryLocation.​coordinates.​longitudenumber(float)required

Longitude of the location.

Example: -0.1278
data.​enquiryLocation.​googlePlaceIdstring(googlePlaceId)<= 255 charactersrequired

The Google Place ID of the location.

Example: "ChIJN1t_tDeuEmsRUcIaW_4C0gQ"
data.​enquiryStateobject or null(enquiryState)required

Metadata about the enquiry state. This is not always available and may be null.

data.​enquiryState.​closureReasonstring or null(enquiryStateClosureReason)

The reason for the enquiry closure. This is not always available and may be null.

Enum"PRICE""AVAILABILITY""NO_CLIENT_RESPONSE""STAY_CANCELLED_OR_POSTPONED""BOOKED_ELSEWHERE_COMPETITOR""BOOKED_ELSEWHERE_DIFFERENT_PRODUCT""DUPLICATE""NOT_AN_ENQUIRY""STAY_DOES_NOT_MEET_SITU_CRITERIA""OTHER"
Example: "STAY_CANCELLED_OR_POSTPONED"
data.​enquiryState.​statestring(enquiryStateValue)

This is a machine-readable key that can be used to identify the state of the enquiry.

Enum"NEW""SHORTLISTING""QUOTED""CLOSED""BOOKING_PENDING""BOOKING_CONFIRMED""BOOKING_CHECK_IN_DETAILS_SENT""BOOKING_CANCELLED"
Example: "CLOSED"
data.​externalIdstring(enquiryExternalId)[ 3 .. 255 ] charactersrequired

The external ID of the enquiry, this is a unique value that can be used to retrieve your enquiry via other endpoints where specified.

Example: "e234abcef"
data.​guestNumbersobject(guestNumbers)required

The number of guests in each category.

data.​guestNumbers.​adultsinteger[ 1 .. 99 ]required

The amount of adults (18+ years).

Example: 2
data.​guestNumbers.​childreninteger<= 99

The amount of children (1 - 17 years).

Default 0
Example: 3
data.​guestNumbers.​infantsinteger<= 99

The amount of infants (0 - 1 years).

Default 0
Example: 1
data.​guestRequirementsArray of objects(enquiryGuestRequirements)required

The guest requirements for the enquiry.

data.​guestRequirements[].​textstring[ 3 .. 10000 ] charactersrequired

The requirements in text format for the chosen type.

Example: "Security guard mandatory in lobby, double locks required on apartment door"
data.​guestRequirements[].​typestring(enquiryGuestRequirementsType)required

The type of guest requirement. For now only GENERAL is supported, but more specific types will be added in the future.

Value"GENERAL"
Example: "GENERAL"
data.​leadGuestobject(leadGuestDetails)required

Details of the lead guest.

data.​leadGuest.​contactNumberstring or null(phoneNumber)<= 50 characters

Lead guest contact number. Must be a valid phone number format, including international formats with country codes. Valid characters are 0-9, +, -, (, ), and commas. No letters allowed.

Example: "07556677992"
data.​leadGuest.​emailstring or null<= 200 characters^[^@;\s]+@[^@.;\s]+(?:\.\w+){1,2}$

Lead guest email. Must contain exactly one @ symbol, no spaces or semicolons, and end with a valid domain (e.g., .com or .co.uk).

Example: "Sam.Smith@example.com"
data.​leadGuest.​familyNamestring or null<= 50 characters

Lead guest family name (surname).

Example: "Smith"
data.​leadGuest.​givenNamestring or null<= 50 characters

Lead guest given name (first name).

Example: "Sam"
data.​clientBookerobject(clientBooker)non-emptyrequired

Details of the Booker for the enquiry or booking.

data.​clientBooker.​contactNumberstring or null(phoneNumber)<= 50 charactersrequired

Booker contact number

Example: "+447911992499"
data.​clientBooker.​emailstring<= 200 characters^[^@;\s]+@[^@.;\s]+(?:\.\w+){1,2}$required

Booker email

Example: "Jess.Walters@example.com"
data.​clientBooker.​familyNamestring<= 50 charactersrequired

Booker family name

Example: "Walters"
data.​clientBooker.​givenNamestring<= 50 charactersrequired

Booker given name

Example: "Jess"
data.​createdAtstring(date-time)(utcTimestamp)required

ISO-8601 UTC timestamp. The example is the expected format.

Example: "2026-01-01T15:12:56Z"
Response
application/json
{ "data": { "xeniaReference": "R4E2F3A4", "clientReference": "example-ref-567abc", "assignedSpecialist": {}, "checkInOut": {}, "enquiryLocation": {}, "enquiryState": {}, "externalId": "e234abcef", "guestNumbers": {}, "guestRequirements": [], "leadGuest": {}, "clientBooker": {}, "createdAt": "2026-01-01T15:12:56Z" } }

Enquiry CreatedWebhook

Request

This event payload is sent to the eligible registered webhooks when a new enquiry is created.

Headers
X-Signaturestringrequired

HMAC-SHA256 signature of the request body using the webhook secret key. Use this to verify the authenticity of the webhook payload.

Example: dGhpcyBpcyBhIHNhbXBsZSBzaWduYXR1cmU=
Bodyapplication/jsonrequired
eventTypestring(webhookEvent)

Supported webhook events.

Enum"ENQUIRY.CREATED""ENQUIRY.SPECIALIST_ASSIGNED""ENQUIRY.SHORTLISTING""ENQUIRY.CLOSED""ENQUIRY.REOPENED""ENQUIRY.QUOTED""QUOTE.CREATED""QUOTE.INVALIDATED""BOOKING.PENDING""BOOKING.CLIENT_CONFIRMATION_DETAILS_SENT"
Example: "ENQUIRY.CREATED"
eventIdstring(uuid)

Unique ID of the event. This can be used as the idempotent key.

Example: "123e4567-e89b-12d3-a456-426614174000"
createdAtstring(date-time)

When the event was created within Xenia's system.

Example: "2026-01-01T15:12:56Z"
dataobject(enquiryWebhookEventData)

The data object for an enquiry event.

application/json
{ "eventType": "ENQUIRY.CREATED", "eventId": "123e4567-e89b-12d3-a456-426614174000", "createdAt": "2026-01-01T15:12:56Z", "data": { "externalId": "e234abcef", "clientReference": "example-ref-567abc", "xeniaReference": "R4E2F3A4", "createdAt": "2026-01-01T15:10:13Z" } }

Responses

The webhook was successfully received, Xenia will not try to process this again.

Enquiry ShortlistingWebhook

Request

This event payload is sent to the eligible registered webhooks when a specialist starts shortlisting properties for an enquiry.

Headers
X-Signaturestringrequired

HMAC-SHA256 signature of the request body using the webhook secret key. Use this to verify the authenticity of the webhook payload.

Example: dGhpcyBpcyBhIHNhbXBsZSBzaWduYXR1cmU=
Bodyapplication/jsonrequired
eventTypestring(webhookEvent)

Supported webhook events.

Enum"ENQUIRY.CREATED""ENQUIRY.SPECIALIST_ASSIGNED""ENQUIRY.SHORTLISTING""ENQUIRY.CLOSED""ENQUIRY.REOPENED""ENQUIRY.QUOTED""QUOTE.CREATED""QUOTE.INVALIDATED""BOOKING.PENDING""BOOKING.CLIENT_CONFIRMATION_DETAILS_SENT"
Example: "ENQUIRY.CREATED"
eventIdstring(uuid)

Unique ID of the event. This can be used as the idempotent key.

Example: "123e4567-e89b-12d3-a456-426614174000"
createdAtstring(date-time)

When the event was created within Xenia's system.

Example: "2026-01-01T15:12:56Z"
dataobject(enquiryWebhookEventData)

The data object for an enquiry event.

application/json
{ "eventType": "ENQUIRY.SHORTLISTING", "eventId": "123e4567-e89b-12d3-a456-426614174000", "createdAt": "2026-01-01T15:34:30Z", "data": { "externalId": "e234abcef", "clientReference": "example-ref-567abc", "xeniaReference": "R4E2F3A4", "createdAt": "2026-01-01T15:10:13Z" } }

Responses

The webhook was successfully received, Xenia will not try to process this again.

Enquiry Specialist AssignedWebhook

Request

This event payload is sent to the eligible registered webhooks when a specialist is assigned to an enquiry.

Headers
X-Signaturestringrequired

HMAC-SHA256 signature of the request body using the webhook secret key. Use this to verify the authenticity of the webhook payload.

Example: dGhpcyBpcyBhIHNhbXBsZSBzaWduYXR1cmU=
Bodyapplication/jsonrequired
eventTypestring(webhookEvent)

Supported webhook events.

Enum"ENQUIRY.CREATED""ENQUIRY.SPECIALIST_ASSIGNED""ENQUIRY.SHORTLISTING""ENQUIRY.CLOSED""ENQUIRY.REOPENED""ENQUIRY.QUOTED""QUOTE.CREATED""QUOTE.INVALIDATED""BOOKING.PENDING""BOOKING.CLIENT_CONFIRMATION_DETAILS_SENT"
Example: "ENQUIRY.CREATED"
eventIdstring(uuid)

Unique ID of the event. This can be used as the idempotent key.

Example: "123e4567-e89b-12d3-a456-426614174000"
createdAtstring(date-time)

When the event was created within Xenia's system.

Example: "2026-01-01T15:12:56Z"
dataobject(enquiryWebhookEventData)

The data object for an enquiry event.

application/json
{ "eventType": "ENQUIRY.SPECIALIST_ASSIGNED", "eventId": "123e4567-e89b-12d3-a456-426614174000", "createdAt": "2026-01-01T15:23:00Z", "data": { "externalId": "e234abcef", "clientReference": "example-ref-567abc", "xeniaReference": "R4E2F3A4", "createdAt": "2026-01-01T15:10:13Z" } }

Responses

The webhook was successfully received, Xenia will not try to process this again.

Enquiry QuotedWebhook

Request

This event payload is sent to the eligible registered webhooks when a quote is sent for an enquiry.

Headers
X-Signaturestringrequired

HMAC-SHA256 signature of the request body using the webhook secret key. Use this to verify the authenticity of the webhook payload.

Example: dGhpcyBpcyBhIHNhbXBsZSBzaWduYXR1cmU=
Bodyapplication/jsonrequired
eventTypestring(webhookEvent)

Supported webhook events.

Enum"ENQUIRY.CREATED""ENQUIRY.SPECIALIST_ASSIGNED""ENQUIRY.SHORTLISTING""ENQUIRY.CLOSED""ENQUIRY.REOPENED""ENQUIRY.QUOTED""QUOTE.CREATED""QUOTE.INVALIDATED""BOOKING.PENDING""BOOKING.CLIENT_CONFIRMATION_DETAILS_SENT"
Example: "ENQUIRY.CREATED"
eventIdstring(uuid)

Unique ID of the event. This can be used as the idempotent key.

Example: "123e4567-e89b-12d3-a456-426614174000"
createdAtstring(date-time)

When the event was created within Xenia's system.

Example: "2026-01-01T15:12:56Z"
dataobject(enquiryWebhookEventData)

The data object for an enquiry event.

application/json
{ "eventType": "ENQUIRY.QUOTED", "eventId": "123e4567-e89b-12d3-a456-426614174000", "createdAt": "2026-01-01T16:15:22Z", "data": { "externalId": "e234abcef", "clientReference": "example-ref-567abc", "xeniaReference": "R4E2F3A4", "createdAt": "2026-01-01T15:10:13Z" } }

Responses

The webhook was successfully received, Xenia will not try to process this again.

Enquiry ClosedWebhook

Request

This event payload is sent to the eligible registered webhooks when an enquiry is closed.

Headers
X-Signaturestringrequired

HMAC-SHA256 signature of the request body using the webhook secret key. Use this to verify the authenticity of the webhook payload.

Example: dGhpcyBpcyBhIHNhbXBsZSBzaWduYXR1cmU=
Bodyapplication/jsonrequired
eventTypestring(webhookEvent)

Supported webhook events.

Enum"ENQUIRY.CREATED""ENQUIRY.SPECIALIST_ASSIGNED""ENQUIRY.SHORTLISTING""ENQUIRY.CLOSED""ENQUIRY.REOPENED""ENQUIRY.QUOTED""QUOTE.CREATED""QUOTE.INVALIDATED""BOOKING.PENDING""BOOKING.CLIENT_CONFIRMATION_DETAILS_SENT"
Example: "ENQUIRY.CREATED"
eventIdstring(uuid)

Unique ID of the event. This can be used as the idempotent key.

Example: "123e4567-e89b-12d3-a456-426614174000"
createdAtstring(date-time)

When the event was created within Xenia's system.

Example: "2026-01-01T15:12:56Z"
dataobject(enquiryWebhookEventData)

The data object for an enquiry event.

application/json
{ "eventType": "ENQUIRY.CLOSED", "eventId": "123e4567-e89b-12d3-a456-426614174000", "createdAt": "2026-01-01T17:23:41Z", "data": { "externalId": "e234abcef", "clientReference": "example-ref-567abc", "xeniaReference": "R4E2F3A4", "createdAt": "2026-01-01T15:10:13Z" } }

Responses

The webhook was successfully received, Xenia will not try to process this again.

Enquiry ReopenedWebhook

Request

This event payload is sent to the eligible registered webhooks when a closed enquiry is reopened.

Headers
X-Signaturestringrequired

HMAC-SHA256 signature of the request body using the webhook secret key. Use this to verify the authenticity of the webhook payload.

Example: dGhpcyBpcyBhIHNhbXBsZSBzaWduYXR1cmU=
Bodyapplication/jsonrequired
eventTypestring(webhookEvent)

Supported webhook events.

Enum"ENQUIRY.CREATED""ENQUIRY.SPECIALIST_ASSIGNED""ENQUIRY.SHORTLISTING""ENQUIRY.CLOSED""ENQUIRY.REOPENED""ENQUIRY.QUOTED""QUOTE.CREATED""QUOTE.INVALIDATED""BOOKING.PENDING""BOOKING.CLIENT_CONFIRMATION_DETAILS_SENT"
Example: "ENQUIRY.CREATED"
eventIdstring(uuid)

Unique ID of the event. This can be used as the idempotent key.

Example: "123e4567-e89b-12d3-a456-426614174000"
createdAtstring(date-time)

When the event was created within Xenia's system.

Example: "2026-01-01T15:12:56Z"
dataobject(enquiryWebhookEventData)

The data object for an enquiry event.

application/json
{ "eventType": "ENQUIRY.REOPENED", "eventId": "123e4567-e89b-12d3-a456-426614174000", "createdAt": "2026-01-01T18:45:12Z", "data": { "externalId": "e234abcef", "clientReference": "example-ref-567abc", "xeniaReference": "R4E2F3A4", "createdAt": "2026-01-01T15:10:13Z" } }

Responses

The webhook was successfully received, Xenia will not try to process this again.

Quotes

Quotes are the 2nd stage of the booking journey. Quotes are created when a specialist has found properties that match the enquiry requirements and send shortlisted properties to the client.

OperationsWebhooks

Sandbox Operations

Operations that only exist within the sandbox environment. These are not available in production. You can use these operations to trigger state changes in the sandbox environment to test your webhooks and other operations.

Operations

Webhook Operations

Manage your webhooks with this set of operations. The maximum limit for webhooks per environment is 5. If you need more than this please contact us.

Operations