10.34 | October 13, 2024
Updated to support new functionality from the following enhancements: Tracking an External System User's API transactions; Reservation Services API to support Reservation History, Ignoring Pre-Confirmed Reservations, Reinstating Cancelled Reservations; and Channel Reference Number.
Tracking an External System User’s API transactions (FEA92169, FEA92753)
The SynXis APIs have been enhanced so customers can now provide additional user metadata that will be tracked in SynXis CRS. This metadata will allow visibility into which users from the customer’s application (external system) initiated the API transactions to SynXis CRS.
A new optional parameter (ApplicationUserMetaData) is now supported in the header of the token request for use with REST APIs.
The ApplicationUserMetaData parameter has a maximum size of 60 characters.
When a POST or PATCH request is made for the Reservation Services API, and the previously acquired token had been generated with the ApplicationUserMetaData header parameter, then the value for ApplicationUserMetaData will be visible in the following endpoints:
GET | /v1/api/reservation |
GET | /v1/api/reservation/hotel/{hotelId}/{id} |
Sample GET partial response:
{
...
"BookingInfo": {
...
"ApplicationUserMetaData": "ABCD456782",
...
}
...
}
Reservation Services API to support Reservation History, Ignoring Pre-Confirmed Reservations, Reinstating Cancelled Reservations (FEA92757, FEA95996)
The REST Reservation Services API has been enhanced to support retrieving reservation history, as well as performing new status actions to Ignore and Reinstate reservations.
Reservation History
Customers will now have the ability to retrieve a reservation’s history, similar to what can be seen in SynXis CRS, so that all transactions can be reviewed with old and new values.
The following new Access Point has been added to control API access:
Administration > User > User Access > API Access > Reservation > Reservation History
The following REST endpoint has been added for retrieving Reservation History:
GET | /v1/api/reservation/hotel/{hotelId}/{crsConfirmationNumber}/history |
The following are additional optional parameters to filter the results:
startDate | string | Format yyyy-mm-dd |
endDate | string | Format yyyy-mm-dd |
pageStart | integer | Starting record to be returned in the response. |
pageSize | integer | Minimum value for page size is 1000 and is set by default, maximum is 10000. |
Sample successful response:
{
"History": [
{
"PropertyName": "Status",
"OldValue": "Pending",
"NewValue": "Confirmed",
"ActionType": "Update",
"TransactionDate": "2024-08-26T14:30:00.0000000+00:00",
"UserName": "JohnDoe"
}
],
"pagination": {
"total": 1,
"start": 0,
"size": 0
}
}
Ignoring Pre-Confirmed Reservations
During the reservation booking process, room inventory can be held temporarily so that when the reservation is confirmed later, the room inventory is still available for the guest. A new REST endpoint has been added that allows a reservation’s status to be set to Ignored, which will release the temporarily held room inventory back for general availability. This would typically be used in a multi-step reservation booking process.
The following new Access Point has been added to control API access:
Administration > User > User Access > API Access > Reservation > Ignore Reservation
The following REST endpoint has been added for Ignoring reservations:
POST | /v1/api/reservation/ignore |
Sample request body:
{
"hotelId": 10000,
"crsConfirmationNumber": "10000DV002294",
"Channels": {
"PrimaryChannel": {
"Code": "WEB"
},
"SecondaryChannel": {
"Code": "ABCD"
},
"SubSourceCode": "XYZ"
}
}
Sample successful response:
{
"crsCancellationNumber": "10000DV002294",
"status": "Ignored"
}
NOTE: SynXis CRS has an automated service that will ignore unconfirmed reservations after a period of time, which varies based on the primary channel of the reservation. This new Ignore endpoint would be used if you want to release the held inventory without waiting for the automated service in SynXis CRS to do it.
Reinstating Cancelled Reservations
The REST Reservation Services API has been enhanced to allow customers to reinstate a previously cancelled reservation. This functionality allows the reservation’s status to be switched back to Confirmed while maintaining all the existing details of the reservation, including the previously issued CRS Confirmation Number.
The reinstate action does not allow any details of the reservation to be modified, any modifications need to be made with a subsequent modification request after the reinstate action was successful.
Reinstating is not allowed on Loyalty reservations where points or free night stays were used during the original confirmation.
The following new Access Point has been added to control API access:
Administration > User > User Access > API Access > Reservation > Reinstate Reservation
The following REST endpoint has been added for Reinstating reservations:
POST | /v1/api/reservation/reinstate |
Sample request body:
{
"CrsConfirmationNumber": "10000DV002294",
"Chain": {
"Id": 15458
},
"Hotel": {
"Id": 15458
},
"Channels": {
"PrimaryChannel": {
"Code": "WEB"
},
"SecondaryChannel": {
"Code": "ABCD"
}
}
}
Sample successful response:
{
"CrsConfirmationNumber": "10000DV002294",
"Status": "Confirmed"
}
Channel Reference Number (FEA92863)
The following endpoint was enhanced to support searching for reservations based on a channel reference number:
GET | /v1/api/reservation |
The following optional parameter was added to filter the results:
channelConfirmationNumber | string | Channel confirmation number, maximum size of 20 characters. |
10.27.3 | October 11, 2022
Enhancements related to: Booking Agent, Booking Dues - No Show Amount, Booking Engine - Template and Shell, Booking Engine - Display Language, Booking Policy - AllowPay, CancelPolicy - Charge Details, Currency - Name and Symbol, Discounts - Distinguish between room and package discount amounts, Guests - additional data fields supported, Price - Added ability to indicate which taxes and fees are payable at the time of booking or at the hotel property, Rates - Effective and Expire dates, Reservation Summary - New Operations.
Booking Agent
Information about the person who made the booking on behalf of the guest is now supported.
Parameter | Description | Type | Required |
---|---|---|---|
BookingAgent/@EmailAddress | Email address of the booker. | String | No |
BookingAgent/Shell/@GivenName | Specifies the Given/First name of a booker. | String | No |
BookingAgent/Shell/@LegalName | Legal name of the Booker. | String | No |
BookingAgent/Shell/@Prefix | Specifies a prefix associated with the name of the booker. | String | No |
BookingAgent/Shell/@Suffix | Specifies a suffix associated with the name of a booker. | String | No |
BookingAgent/Shell/@Surname | Specifies the Surname/Lastname of the booker. | String | No |
BookingAgent/@Id | A SynXis system generated unique number identifying the person who made a reservation. | String | No |
BookingAgent/@TravelIndustryId | Travel Industry ID of a commissionable account. | String | No |
"reservations": [{
"BookingAgent": {
"EmailAddress": "booker.test@email.com",
"PersonName": {
"GivenName": "Booker",
"LegalName": "Booker Legal Name.",
"Prefix": "Mr.",
"Suffix": "Jr.",
"Surname": "Test"
},
"Id": "C6E50D08-38BD-45CD-A201-C3C9B10B70BD",
"TravelIndustryId": "30000024"
},
}]
Booking Dues - No Show Amount
The GET reservation response includes a no show charge amount under BookingDues.
Parameter | Description | Type | Required |
---|---|---|---|
BookingDues/NoShowCharge/@Amount | Specifies a fee that is paid in case a guest does not cancel their reservation and does not check in. | Number | No |
"reservations": [{
"BookingDues": {
"PayNow": false,
"CancelPenalty": {...},
"Deposit": {...},
"NoShowCharge": {
"Amount": 150
}
}
}]
Booking Engine - Template and Shell
The SynXis booking engine shell and template codes used to create the reservation are now included.
Parameter | Description | Type | Required |
---|---|---|---|
BookingInfo/Shell/@Code | Code that identifies the SynXis Booking Engine shell. | String | No |
BookingInfo/Template/@Code | Code that identifies the SynXis Booking Engine template. | String | No |
"reservations": [{
"BookingInfo": {
"BookedBy": "John Doe",
"BookingDate": "2023-07-04T14:54:06",
"EntryChannelBookingDate": "2023-07-04T14:54:06",
"ModifiedBy": "John Smith",
"Shell": {
"Code": "SYS"
},
"Template": {
"Code": "default"
}
}
}]
Booking Engine - Display Language
The language used by the guest during the booking process is supported in the reservation message.
Parameter | Description | Type | Required |
---|---|---|---|
Language | Contains information about the language the application displayed to the guest during the booking process. | Object | No |
Language/@Code | Language code with optional culture code. | String | No |
Language/@Name | Name of the language. | String | No |
"reservations": [{
"Language": {
"Code": "nl-NL",
"Name": "Dutch"
}
}]
Booking Policy - AllowPay
Allow pay indicates if the booking policy supports paying for the reservation at the time of booking if using the SynXis Booking Engine.
Note: Payment processing must be configured for the hotel.
Parameter | Description | Type | Required |
---|---|---|---|
BookingPolicy/@AllowPay | If true, guests can opt to pay for the reservation at the time of booking. A payment gateway must be enabled to utilize this functionality. | Boolean | No |
"reservations": [{
"BookingPolicy": {
"Code": "GUA",
"Description": "A valid credit card is required to guarantee the reservation.",
"TransactionFeeDisclaimer": "Please indicate you agree with our Privacy Policy.",
"DepositFee": {
"Amount": 40,
"DueDays": 0,
"DueType": "AtTimeOfBooking",
"TaxInclusive": false,
"IsPrePayment": false,
"Type": "LocalCurrency"
},
"GuaranteeLevel": "Deposit",
"HoldTime": "0",
"Requirements": [
"CreditCard"
],
"AllowPay": false
},
}]
CancelPolicy - Charge Details
A new Charges object containg charge details is included in both the reservation and package CancelPolicy object.
- reservations/CancelPolicy/Charges/*
- reservations/Packages/CancelPolicy/Charges/*
Parameter | Description | Type | Required |
---|---|---|---|
CancelPolicy/Charges/@DaysToArrive | Number of days before arrival that a guest can cancel a reservation. | Integer | No |
CancelPolicy/Charges/@CancelFeeIncludesTax | If true, indicates that the cancel fee includes tax. | Boolean | No |
CancelPolicy/Charges/@CancelFeeAmount | Amount of the cancel fee. | Number | No |
"reservations": [{
"CancelPolicy": {
"Code": "1D",
"Description": "Booking must be cancelled 1D prior to arrival local time to avoid charges",
"CancellationPermitted": true,
"LateCancellationPermitted": true,
"CancelFeeAmount": {
"Value": 90,
"TaxInclusive": true
},
"CancelFeeType": "None",
"CancelPenaltyDate": "2023-08-25T00:00:00",
"CancelTime": "0",
"CancelTimeIn": "2",
"Charges": {
"DaysToArrive": 3,
"CancelFeeIncludesTax": false,
"CancelFeeAmount": 50
},
"ChargeThreshold": "2",
"ChargeType": "ChargeWithinDays",
"ModificationRestrictions": "ANGDS",
"NoShowFeeAmount": {
"Value": 150,
"TaxInclusive": true
},
"NoShowFeeType": "NumberNightsOfStay"
},
}]
Currency - Name and Symbol
The booking currency name and symbol are now included under the Currency object.
Parameter | Description | Type | Required |
---|---|---|---|
Currency/@Name | Name of the currency. | String | No |
Currency/@Symbol | Symbol of the currency. | String | No |
"reservations": [{
"Currency": {
"Code": "USD",
"Name": "US Dollars",
"Symbol": "$"
}
}]
Discounts - Distinguish between room and package discount amounts
Discounts are now further identified as the amount applying to a room and and the amount applying to a package.
Parameter | Description | Type | Required |
---|---|---|---|
Discounts/@AppliedRoomAdjustmentAmount | Discount amount applied to the room. | Number | No |
Discounts/@AppliedPackageAdjustmentAmount | Discount amount applied to a package. | Number | No |
"reservations": [{
"Discounts": [{
"CouponOffer": {
...
},
"AdjustmentAmount": 10,
"AdjustmentPercentage": 10,
"AppliedAmount": 10,
"AppliedPercentage": 10,
"AppliedRoomAdjustmentAmount": 10,
"AppliedPackageAdjustmentAmount": 25,
"Order": 10,
"Type": "Coupon"
}],
}]
Guests - additional data fields supported
The Guest object now supports additional information.
Parameter | Description | Type | Required |
---|---|---|---|
Guests/ContactNumbers/@Code | Code associated to a contact number. | String | No |
Guests/ContactNumbers/@SortOrder | Sort order of the contact numbers. | Integer | No |
Guests/@DenyChargeToRoom | If true, indicates a guest wants to deny posting charges to the room. Guest cannot have a payment method associated and cannot be a share-with reservation. | Boolean | No |
Guests/EmailAddress@Default | If true, indicates the default email address of the guest. | Boolean | No |
Guests/Locations/Address/Country/@Value | Name of the country. | String | No |
Guests/Locations/Address/StateProv/@Value | Name of the state or province. | String | No |
Guests/PersonName/@PreferredGivenName | Specifies the preferred Given/First name of a guest. | String | No |
Guests/PersonName/@PreferredSurname | Specifies the preferred Surname/Lastname of a guest. | String | No |
"reservations": [{
"Guests": [{
"StartDate": "2023-08-29T00:00:00",
"EndDate": "2023-08-31T00:00:00",
"EmailAddress": [{
"Default": true,
"Type": "Primary",
"Value": "john.public@email.com"
}],
"ContactNumbers": [{
"Code": "719",
"Default": true,
"Number": "555-1234",
"Role": "Home",
"SortOrder": 0,
"Type": "Mobile",
"Use": "DayTimeContact"
}],
"DenyChargeToRoom": false,
"Locations": [{
"Address": {
"AddressLine": [
"123 Main St."
],
"City": "Denver",
"Country": {
"Code": "US",
"Value": "United States"
},
"Default": true,
"PostalCode": "70045",
"StateProv": {
"Code": "CO",
"Value": "Colorado"
},
"Type": "Home"
},
"Name": "My Home Address"
}],
"PersonName": {
"GivenName": "John",
"MiddleName": "A",
"Prefix": "Mr.",
"Suffix": "Jr.",
"Surname": "Public",
"PreferredGivenName": "James",
"PreferredSurname": "Smith"
},
}]
}]
Price - Added ability to indicate which taxes and fees are payable at the time of booking or at the hotel property.
Hoteliers are now able to specify if certain taxes and fees are payable at the time of booking or at the property.
The Price object supports these additional attributes.
Parameter | Description | Type | Required |
---|---|---|---|
Price/@AmountPayAtProperty | Applicable total amount payable at the hotel excluding payable now amount. | Number | No |
Price/@AmountPayableNow | Applicable total amount (due at confirmation) excluding any payable at the hotel amount. | Number | No |
Located in the following GET Reservation response locations:
- Packages/Price/
- Packages/BookedDays/Price/
- Packages/BookedDays/GuestCount/Price/
- Packages/GuestCount/Price/
- RoomPrices/AveragePrice/Price/
- RoomPrices/PriceBreakdowns/ProductPrices/Price/
- RoomPrices/TotalPrice/Price/
The Tax and Fees Breakdown object supports these additional attributes.
Parameter | Description | Type | Required |
---|---|---|---|
Breakdown/@Code | Code of the fee or tax. | String | No |
Breakdown/@Description | Descriptive content about the fee or tax. | String | No |
Breakdown/@Level | Indicates the level of the fee or tax. | String | No |
Breakdown/@IsPayAtProperty | If true, indicates the amount is payable at the hotel. | Boolean | No |
Located in the following GET Reservation response locations:
- Packages/Price/Fees/Breakdown/
- Packages/BookedDays/Price/Fees/Breakdown/
- Packages/BookedDays/GuestCount/Price/Fees/Breakdown/
- Packages/GuestCount/Price/Fees/Breakdown/
- Packages/Price/Tax/Breakdown/
- Packages/BookedDays/Price/Tax/Breakdown/
- Packages/BookedDays/GuestCount/Price/Tax/Breakdown/
- Packages/GuestCount/Price/Tax/Breakdown/
- RoomPrices/AveragePrice/Price/Fees/Breakdown
- RoomPrices/AveragePrice/Price/Tax/Breakdown
- RoomPrices/PriceBreakdowns/ProductPrices/Price/Fees/Breakdown/
- RoomPrices/PriceBreakdowns/ProductPrices/Price/Tax/Breakdown/
- RoomPrices/TotalPrice/Price/Fees/Breakdown/
- RoomPrices/TotalPrice/Price/Tax/Breakdown/
Rates - Effective and Expire dates
GET Reservation response now support the Effective and Expiration dates for a rate.
Parameter | Description | Type | Required |
---|---|---|---|
Rates/@EffectiveDate | Effective date of the rate. | String | No |
Rates/@ExpireDate | Expiration date of the rate. | String | No |
"reservations": [{
"Content": {
"Rates": [{
"CategoryCode": "NEG",
"Code": "SCN2",
"CurrencyCode": "USD",
"Description": "Rate includes breakfast",
"DetailedDescription": "Rate inclusive of breakfast and late checkout.",
"DisplayName": "string",
"EffectiveDate": "2022-08-10T00:00:00",
"ExpireDate": "2022-08-10T00:00:00",
"Name": "Negotiated Rate",
"Primary": true,
"Type": "Negotiated"
}],
}
}]
Reservation Summary - New Operations
Two new operations return reservation summary counts for the hotel and given date. The only difference between the operations is that one retrieves the data from a cache and the other resets the cache then retrieves the data.
- GET /reservation/misc/summary
- The results are stored in a cache and will be retrieved from the cache in subsequent calls. The cache will automatically get updated when any of the data in the message changes.
- GET /reservation/misc/summary-reset
- Refresh the reservation summary counts cache data for the hotel and given date.
The summary information includes Counts and Revenue of reservations.
Counts
- Arrivals
- Departures
- Stay Overs
- Cancels
- Day Use
Revenue
- Arrivals
- Departures
- Day Use
In House
Sample Response
{
"Source": "RealTime",
"Count": [{
"Arrive": 30,
"Depart": 40,
"StayOver": 1,
"Cancel": 2,
"DayUse": 5,
"Type": "AllReservations"
}],
"LastRefreshDateTime": "2022-07-05T10:24:43",
"Revenue": [{
"Arrive": 4600,
"Depart": 3400,
"DayUse": 500,
"InHouse": 4000,
"Type": "AllReservations"
}]
}
10.23 | July 08, 2021
- The Reservation messages now support sending emails to an Alternate email address.
- Taxes and Fees paid using Loyalty Points
Alternate email addresses
Added capability to send reservation emails to additional recipients. By default, the guest will receive reservation emails. Including @AdditionalEmailAddress, the system will send reservation emails to additional recipients.
Parameter | Description | Type | Required |
---|---|---|---|
Notification/@AdditionalEmailAddress | Additional Recipient email address used to send any notifications. | [String] | No |
"Notification": {
"SendGuestEmail": true,
"FromEmailAddress": "reservations@myhotel.com",
"AdditionalEmailAddresses": ["recipient1@destination.com", "recipient2@destination.com"]
}
Taxes and Fees paid using Loyalty Points
Hoteliers are now able to specify if certain taxes and fees can be paid using points as a currency for a redemption product.
Points are now supported in the following GET Reservation response locations:
- RoomPrices/AveragePrice/Price/Fees/Points
- RoomPrices/AveragePrice/Price/Fees/Breakdown/Points
- RoomPrices/AveragePrice/Price/Fees/StayFeePoints
- RoomPrices/AveragePrice/Price/Tax/Points
- RoomPrices/AveragePrice/Price/Tax/Breakdown/Points
- RoomPrices/AveragePrice/Price/Tax/StayTaxPoints
- RoomPrices/ExemptedTaxTypes/Points
- RoomPrices/ExemptedTaxTypes/Breakdown/Points
- RoomPrices/PriceBreakdowns/ProductPrices/Price/Fees/Points
- RoomPrices/PriceBreakdowns/ProductPrices/Price/Fees/Breakdown/Points
- RoomPrices/PriceBreakdowns/ProductPrices/Price/Fees/StayFeePoints
- RoomPrices/PriceBreakdowns/ProductPrices/Price/Tax/Points
- RoomPrices/PriceBreakdowns/ProductPrices/Price/Tax/Breakdown/Points
- RoomPrices/PriceBreakdowns/ProductPrices/Price/Tax/StayTaxPoints
- RoomPrices/TotalPrice/Price/Fees/Points
- RoomPrices/TotalPrice/Price/Fees/Breakdown/Points
- RoomPrices/TotalPrice/Price/Fees/StayFeePoints
- RoomPrices/TotalPrice/Price/Tax/Points
- RoomPrices/TotalPrice/Price/Tax/Breakdown/Points
- RoomPrices/TotalPrice/Price/Tax/StayTaxPoints
- Packages/Price/Fees/Points
- Packages/Price/Fees/Breakdown/Points
- Packages/Price/Fees/StayFeePoints
- Packages/Price/Tax/Points
- Packages/Price/Tax/Breakdown/Points
- Packages/Price/Tax/StayTaxPoints
- Packages/BookedDays/GuestCount/Price/Fees/Points
- Packages/BookedDays/GuestCount/Price/Fees/Breakdown/Points
- Packages/BookedDays/GuestCount/Price/Fees/StayFeePoints
- Packages/BookedDays/GuestCount/Price/Tax/Points
- Packages/BookedDays/GuestCount/Price/Tax/Breakdown/Points
- Packages/BookedDays/GuestCount/Price/Tax/StayTaxPoints
- Packages/BookedDays/Price/Fees/Points
- Packages/BookedDays/Price/Fees/Breakdown/Points
- Packages/BookedDays/Price/Fees/StayFeePoints
- Packages/BookedDays/Price/Tax/Points
- Packages/BookedDays/Price/Tax/Breakdown/Points
- Packages/BookedDays/Price/Tax/StayTaxPoints
- Packages/GuestCount/Price/Fees/Points
- Packages/GuestCount/Price/Fees/Breakdown/Points
- Packages/GuestCount/Price/Fees/StayFeePoints
- Packages/GuestCount/Price/Tax/Points
- Packages/GuestCount/Price/Tax/Breakdown/Points
- Packages/GuestCount/Price/Tax/StayTaxPoints