BookingWhizz Webhooks API Documentation
Introduction
Welcome to the BookingWhizz Webhooks API, designed for seamless integration with hospitality management systems. This API enables hotels, property management systems (PMS), and travel platforms to centralize guest profiles, reservations, and stay data for improved guest experience, booking automation, loyalty programs, and revenue tracking.
How It Works
The API consists of three main webhook endpoints:
- Guest Profile Webhook – Captures guest details and preferences.
- Reservation Webhook – Manages reservation data including check-in/out, source tracking, and market segmentation.
- Stay Data Webhook – Tracks room charges, payments, and revenue for loyalty programs and financial insights.
All webhook requests require authentication headers (Client ID & Password) and must be formatted in JSON.
Authentication
Each request is authenticated with two custom HTTP headers: client-id and password. This is not HTTP Basic Authentication, so do not send an Authorization header. Requests with missing or wrong credentials receive 401 Un Authorize.
Validation
Requests are validated before anything is saved:
- The body must be JSON: a single object, or an array of objects to send several records at once. Invalid or empty JSON is rejected with
400. - Every field marked Required in the tables below must be present and not empty. Dates use
YYYY-MM-DD, timestamps useYYYY-MM-DD HH:mm:ss, anddepartureDatecannot be beforearrivalDate. statusmust be one of the listed values (stays:CHECKED_OUT). Each booking or stay needs at least one entry inroomDetails, and every room needs at least one guest inguestProfile. The first guest of each room is that room's primary guest and must have anid.- If any record fails, the whole request is rejected with
422and nothing is saved. The response lists every problem, per record, so you can fix them and resend the whole request.
Example 422 response:
{"success": false, "message": "Validation failed. Nothing was saved.", "errors": [{"index": 0, "id": "68003", "errors": {"data.arrivalDate": ["The data.arrival date field is required."]}}]}
A successful request returns 200 with {"success": true, "message": "Created Successfully."}.
How to Get API Credentials
To obtain your API credentials, please email: support@bookingwhizz.com
PROFILES
API Endpoint
https://webhooks.bookingwhizz.com/{engine-name}/profiles
<?php
$payload = '{ ... }'; // the JSON Request Sample below
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://webhooks.bookingwhizz.com/{engine-name}/profiles',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => $payload,
CURLOPT_HTTPHEADER => array(
'client-id: Test',
'password: 1234567',
'Content-Type: application/json'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
?>
Used to send guest details, preferences, and personal information.
POST call to the following url
:
https://webhooks.bookingwhizz.com/{engine-name}/profiles
Request example :
{
"id":"123",
"accommodationId":"00512",
"profileType":"1",
"title":"Mr",
"firstName":"John",
"middleName":"",
"lastName":"Smith",
"gender":"1",
"email":"test@gmail.com",
"phoneNumber":"+1234567890",
"languageCode":"eng",
"nationality":"IND",
"dateOfBirth":"1996-07-21",
"placeOfBirth":"",
"company":"",
"notes":"",
"address":"Street no 12, Delhi, India",
"city":"Delhi",
"postalCode":"123",
"country":"India",
"createdAt":"2026-10-05 07:36:53",
"updatedAt":"2026-10-05 07:36:53"
}
Response:
{
"success": true,
"message": "Created Successfully."
}
HEADER
| Field | Type | Description |
|---|---|---|
| client-id | String | (required) The client-id associated with the user. This is typically used for user authentication or account identification |
| password | String | (required) The user's password used for authentication. This field is required for post data |
BODY
| FIELD | TYPE | Req/Opt | Description |
|---|---|---|---|
| id | String | Required | The unique identifier for the Guests resource |
| accommodationId | String | Required | Property code. Send as a string so leading zeros are kept (e.g. "00512"). |
| profileType | String | Required | Profile type: "1" = Guest, "2" = Company. |
| title | String | Optional | One or more words used before the person's name. In some contexts it may signify veneration, an official position, or a professional or academic qualification. |
| firstName | String | Required | The first name of the guest the resource is for. |
| middleName | String | Optional | The middle name of the guest the resource is for. |
| lastName | String | Required | The last name of the guest the resource is for. |
| gender | String | Optional | Gender as per the ISO/IEC 5218 standard: 0 = not known, 1 = male, 2 = female, 9 = not applicable. Send 0 if the PMS has no value; do not send null. |
| String | Required | Email addresses, the PMS has record of, for the guest in question. | |
| phoneNumber | String | Required | Telephone numbers, the PMS has record of, for the guest in question. |
| languageCode | String | Optional | Language of the guest in ISO 639-3. |
| nationality | String | Required | Nationality, the PMS has record of, for the guest in question in ISO 3166-1 alpha-3 format. |
| dateOfBirth | String | Optional | Date of birth, the PMS has record of, for the guest in question in ISO-8601 format. |
| placeOfBirth | String | Optional | Place of birth, the PMS has record of, for the guest in question. |
| company | String | Optional | |
| notes | String | Optional | A free text field for notes that the PMS holds on the guest in question. |
| address | String | Optional | Addresses, the PMS has record of, for the guest in question. |
| city | String | Required | City, the PMS has record of, for the guest |
| postalCode | String | Optional | Postal Code, the PMS has record of, for the guest. |
| country | String | Required | Country Name, the PMS has record of, for the guest in question in. |
| createdAt | DateTime | Required | YYYY-MM-DD HH:mm:ss |
| updatedAt | DateTime | Required | YYYY-MM-DD HH:mm:ss |
BOOKING DATA
<?php
$payload = '{ ... }'; // the JSON Request Sample below
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://webhooks.bookingwhizz.com/{engine-name}/bookings',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => $payload,
CURLOPT_HTTPHEADER => array(
'client-id: Test',
'password: 1234567',
'Content-Type: application/json'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
?>
Used to handle reservation details, source tracking, and market segmentation.
POST call to the following url
:
https://webhooks.bookingwhizz.com/{engine-name}/bookings
Request Sample:
{
"accommodationId":"00512",
"data":{
"reservationId":"68003",
"type":"BOOKING_CREATED",
"externalReference":"",
"arrivalDate":"2022-11-28",
"departureDate":"2022-11-30",
"arrivalTime":"10:00",
"departureTime":"14:00",
"status":"EXPECTED",
"adultCount":1,
"childCount":0,
"roomQuantity":1,
"marketCode":"COR",
"marketDescription":"Corporate Negotiated Rates",
"source":"HST",
"sourceDescription":"Hotel Sales Team",
"createdAt":"2026-10-05 07:36:53",
"updatedAt":"2026-10-05 07:36:53",
"roomDetails":[
{
"roomNumber":"527",
"roomType":"EXK",
"ratePlanType":"Bed & Breakfast",
"rateCode":"BNB",
"netAmount":100.00,
"taxAmount":20.00,
"grossAmount":120.00,
"currencyCode":"USD",
"guestProfile":[
{
"id":"123",
"accommodationId":"00512",
"profileType":"1",
"title":"Mr",
"firstName":"John",
"middleName":"",
"lastName":"Smith",
"gender":"1",
"email":"test@gmail.com",
"phoneNumber":"+1234567890",
"languageCode":"eng",
"nationality":"IND",
"dateOfBirth":"1996-07-21",
"placeOfBirth":"",
"company":"",
"notes":"",
"address":"Street no 12, Delhi, India",
"city":"Delhi",
"postalCode":"123",
"country":"India",
"createdAt":"2026-10-05 07:36:53",
"updatedAt":"2026-10-05 07:36:53"
}
]
}
]
}
}
Response:
{
"success": true,
"message": "Created Successfully."
}
HEADER
| Field | Type | Description |
|---|---|---|
| client-id | String | (required) The client-id associated with the user. This is typically used for user authentication or account identification |
| password | String | (required) The user's password used for authentication. This field is required for post data |
BODY
| FIELD | TYPE | Req/Opt | DESCRIPTION |
|---|---|---|---|
| reservationId | String | Required | This is the unique identifier for this booking. In most cases, hotel staff or guests won't know about or use this number. |
| reference | String | Optional | The identifier hotel staff uses to look up the booking in their system. For guests who called in to make a booking (as opposed to booked through external channels like online travel agencies), this is the confirmation identifier they receive. |
| status | String | Required | Booking Status (RESERVED, EXPECTED, CHECKED_IN, CHECKED_OUT, NO_SHOW, CANCELLED). |
| externalReferences | String | Optional | References generated by external systems that the guest or booker might use for to identify the booking. This could be the confirmation number a online travel agency like Booking.com uses in their system, as opposed to the reference that is generated in the hotel system. As bookings are created through multiple systems, they might have multiple external references. As an example, a booking created by HRS through a Global Distribution System (GDS) might have a confirmation number generated by HRS as well as a GDS Personal Record Number. |
| ratePlanId | String | Optional | Identifier of the rate plan in the PMS. |
| rateCode | String | Optional | Rate code of the booking (e.g. BNB). |
| marketCode | String | Optional | Used to identify the market segment this booking belongs to. Hotels often use this information to track performance in certain segments, e.g. business travel, individual guests or guests who stay through wholesale contracts. These values vary by hotel and aren't globally mapped. |
| source | String | Required | Used by hotels to identify the source of business (e.g. mail, telephone, fax, central reservations, specific travel agencies like Booking.com or Expedia). These values vary by hotel and aren't globally mapped. |
| origin | String | Optional | Typically used by hotels to identify the technical source of a Booking. These are often values like mail, telephone, fax, central reservations, travel agency or global distribution systems. These values vary by hotel and aren't globally mapped. |
| channelManager | String | Optional | This field will be populated with the name of the channel manager that this booking was generated through. Channel manager software is used to distribute rates across channels (e.g. tens of online travel agencies) and limit availability to avoid overbooking. |
| arrivalDate | String | Required | Date format (YYYY-MM-DD) |
| departureDate | String | Required | Date format (YYYY-MM-DD) |
| arrivalTime | String | Optional | Hours:Minutes |
| departureTime | String | Optional | Hours:Minutes |
| areaId | String | Optional | Room Id. |
| notes | String | Optional | If guest has special request or any notes related to reservation. |
| requestedAreaTypeId | String | Optional | Room type code the guest requested (e.g. EXK). |
| adultCount | Integer | Required | |
| childCount | Integer | Optional | |
| infantCount | Integer | Optional | |
| roomDetails[].netAmount | Float | Optional | Room price before tax, for this room. |
| roomDetails[].grossAmount | Float | Required | Room price including tax, for this room. |
| roomDetails[].taxAmount | Float | Required | Tax amount for this room. |
| roomDetails[].taxRate | String | Optional | Tax rate applied to this room (e.g. "20" for 20%). |
| roomDetails[].currencyCode | String | Required | Currency of this room's amounts, in ISO-4217 format (e.g. USD). |
| roomDetails[].guestProfile | Array | Required | The guests staying in the room, one object per guest. A booking can have several rooms and a room can have several guests, so this is always an array. Every room needs at least one guest. The first guest in each room is that room's primary guest and must have an id. Each guest uses the fields described under PROFILES. The primary guest of the first room is treated as the booking's main guest. |
| allocationId | String | Optional | Room Number |
| cancelledAt | DateTime | Optional | Format: YYYY-MM-DD HH:mm:ss |
| createdAt | DateTime | Required | Format: YYYY-MM-DD HH:mm:ss |
| updatedAt | DateTime | Required | Format: YYYY-MM-DD HH:mm:ss |
STAY DATA
<?php
$payload = '{ ... }'; // the JSON Request Sample below
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://webhooks.bookingwhizz.com/{engine-name}/stays',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => $payload,
CURLOPT_HTTPHEADER => array(
'client-id: Test',
'password: 1234567',
'Content-Type: application/json'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
?>
Tracks room charges, payments, and stay revenue for loyalty programs and financial tracking.
POST call to the following url :
https://webhooks.bookingwhizz.com/{engine-name}/stays
Request Sample:
{
"accommodationId":"00512",
"data":{
"reservationId":"68003",
"type":"STAY_DATA",
"externalReference":"",
"arrivalDate":"2022-11-28",
"departureDate":"2022-11-30",
"status":"CHECKED_OUT",
"adultCount":1,
"childCount":0,
"roomQuantity":0,
"marketCode":"COR",
"marketDescription":"Corporate Negotiated Rates",
"source":"HST",
"sourceDescription":"Hotel Sales Team",
"origin":"CRS",
"complimentary":"N",
"notes":"Late checkout requested",
"currencyCode":"USD",
"totalRevenue":153.00,
"roomRevenue":120.00,
"fbRevenue":33.00,
"otherRevenue":0.00,
"createdAt":"2026-10-05 07:36:53",
"updatedAt":"2026-10-05 07:36:53",
"roomDetails":[
{
"roomNumber":"527",
"roomType":"EXK",
"ratePlanType":"Bed & Breakfast",
"rateCode":"BNB",
"netAmount":130.00,
"taxAmount":23.00,
"grossAmount":153.00,
"charges":[
{
"id":"1352595",
"billId":"68398",
"netAmount":100.00,
"taxAmount":20.00,
"grossAmount":120.00,
"currencyCode":"USD",
"description":"TRF",
"chargedAt":"2022-11-30 11:00:00",
"notes":"ROOM TARIFF",
"chargeCode":"ROOM"
},
{
"id":"1352596",
"billId":"68398",
"netAmount":30.00,
"taxAmount":3.00,
"grossAmount":33.00,
"currencyCode":"USD",
"description":"TRF",
"chargedAt":"2022-11-30 11:00:00",
"notes":"F & B Revenue",
"chargeCode":"FBREVENUE"
}
],
"payments":[
{
"id":"1355258",
"billId":"68398",
"amount":153.00,
"currencyCode":"USD",
"paymentMethod":"CRD",
"paidAt":"2022-11-30 11:05:00",
"notes":"CREDIT CARD"
}
],
"guestProfile":[
{
"id":"123",
"accommodationId":"00512",
"profileType":"1",
"title":"Mr",
"firstName":"John",
"middleName":"",
"lastName":"Smith",
"gender":"1",
"email":"test@gmail.com",
"phoneNumber":"+1234567890",
"languageCode":"eng",
"nationality":"IND",
"dateOfBirth":"1996-07-21",
"placeOfBirth":"",
"company":"",
"notes":"",
"address":"Street no 12, Delhi, India",
"city":"Delhi",
"postalCode":"123",
"country":"India",
"createdAt":"2026-10-05 07:36:53",
"updatedAt":"2026-10-05 07:36:53"
}
]
}
]
}
}
Response:
{
"success": true,
"message": "Created Successfully."
}
HEADER
| Field | Type | Description |
|---|---|---|
| client-id | String | (required) The client-id associated with the user. This is typically used for user authentication or account identification |
| password | String | (required) The user's password used for authentication. This field is required for post data |
BODY
| FIELD | TYPE | Req/Opt | DESCRIPTION |
|---|---|---|---|
| reservationId | String | Required | The unique identifier of the stay. Use the same reservationId that was sent for this booking to the bookings endpoint. |
| complimentary | String | Optional | Reservation is complimentary (Y/N). |
| status | String | Required | Must be CHECKED_OUT. Stay data is sent once the guest has checked out. |
| rateCode | String | Optional | Rate code of the booking (e.g. BNB). |
| marketCode | String | Optional | Used to identify the market segment this booking belongs to. Hotels often use this information to track performance in certain segments, e.g. business travel, individual guests or guests who stay through wholesale contracts. These values vary by hotel and aren't globally mapped. |
| source | String | Optional | Used by hotels to identify the source of business (e.g. mail, telephone, fax, central reservations, specific travel agencies like Booking.com or Expedia). These values vary by hotel and aren't globally mapped. |
| origin | String | Optional | Typically used by hotels to identify the technical source of a Booking. These are often values like mail, telephone, fax, central reservations, travel agency or global distribution systems. These values vary by hotel and aren't globally mapped. |
| notes | String | Optional | Free-text notes on the stay. |
| arrivalDate | String | Required | Date format (YYYY-MM-DD). |
| departureDate | String | Required | Date format (YYYY-MM-DD). |
| areaTypeId | String | Optional | Room name of the booking. |
| chargedAt | DateTime | Optional | When the charge was posted. Format: YYYY-MM-DD HH:mm:ss |
| totalRevenue | Float | Required | Total revenue of reservation. |
| roomRevenue | Float | Required | Total room revenue of reservation. |
| fbRevenue | Float | Required | Total revenue of Food and Beverages. |
| otherRevenue | Float | Required | Revenue not counted as room or F&B (e.g. spa, laundry). Send 0.00 if none. |
| currencyCode | String | Required | Currency Code, the PMS has record of, for the guest in question in ISO-4217 format. |
| createdAt | DateTime | Required | YYYY-MM-DD HH:mm:ss |
| updatedAt | DateTime | Required | YYYY-MM-DD HH:mm:ss |