In order to understand the JP WebService work flow, we've prepated a flow chart that outlines and simplies all of the steps that need to be taken through the booking process. We will refer to this flow chart as we advance further on our explanation.
As you may have observed, this booking process is divided in four differentiated steps. We will proceed to describe each of these steps in detail:
This is the step that embraces all of the static data transactions meant for the retrieval of hotel information that you will need prior to overtaking the booking flow process. In the availability process there are multiple fields like the destination code and/or the hotel codes that you will need to fulfill, all of this information is to be obtained through the use of these transactions.
An optimal static data retrieval process could consist of:
This is the first step required in order to create a new booking. There are multiple ways on which you could request for availability and, the most common ones, are:
Kindly refer to the HotelAvail section for additional information in regards of the filters that are allowed within this request.
According to the requested parameters the API will supply you with all of the available results for the same. Each hotel will have a group of combinations. A combination is a group of rooms that will depend on the number of rooms that you initially requestes for on your request.
Once you have the availability response, you will be capable of continuing the hotel integration process by selecting the combination from the hotel that you wish to book. This is done through the use of the RatePlanCode, a property that contains a unique code that will identify the same exact combination on further requests. It is very important to note that this code may be quite lenghtly and that, if you plan on storing the same on your end, you may need to configure the lenght of the field accordingly. Let’s see the following example of a response:
<HotelResult Code="JP046300" JPCode="JP046300" JPDCode="JPD086855" BestDeal="false" DestinationZone="49435">
<HotelOptions>
<HotelOption RatePlanCode="ya79dM4dS6R6EywV4XhfEgw02I3W2LBoo1m2kLpMntlD3MCM705Mp/F0FegJNOmpnp4q+rnlPTKwA+X1P0V49QjxrBmwRIC2qODc..." Status="OK" NonRefundable="true" PackageContract="false">
<Board Type="SA">Room Only</Board>
<Prices>
<Price Type="S" Currency="EUR">
<TotalFixAmounts Gross="223.01" Nett="223.01">
<Service Amount="202.74"/>
<ServiceTaxes Included="false" Amount="20.27"/>
</TotalFixAmounts>
</Price>
</Prices>
<HotelRooms>
<HotelRoom Units="1" Source="1" AvailRooms="100">
<Name>Non refundable room</Name>
<RoomCategory Type="2">Category 2</RoomCategory>
<RoomOccupancy Occupancy="1" Adults="1" Children="0"/>
</HotelRoom>
</HotelRooms>
<AdditionalElements>
<HotelOffers>
<HotelOffer Code="843" Category="GEN">
<Name>[2019] 5% discount</Name>
<Description>Offer description</Description>
</HotelOffer>
</HotelOffers>
</AdditionalElements>
</HotelOption>
<HotelOption RatePlanCode="ya79dM4dS6R6EywV4XhfEgw02I3W2LBoo1m2kLpMntnmQDEyfoXdwREka/dKuEg6xvSVrFHcRWEaguYONrDSlARaJiZhbTRO1A..." Status="RQ" NonRefundable="false" PackageContract="false">
<Board Type="SA">Room Only</Board>
At this step, on which we've already performed the availability request and selected a combination through a RatePlanCode from its response, we will validate that the mentioned is still effective and that there has been no change on the same (as a room could have ran out of allotment, the price of the combination could have changed, etc...).
In order to do so we have the following transactions available:
If you use this transaction, it will be then neccesary for you to use the new RatePlanCode supplied to you through its response on subsequent requests as the mentioned will take into account any changed that could have been applied to the same.
Kindly refer to the HotelCheckAvail section for more information.
Apart from giving us all the necessary information in order to book, it adds a key variable that will be used in the booking process. This key variable called BookingCode is the booking creation method’s feed parameter. It is important to note that the BookingCode has an expiry and if in between this process and the creation of the booking the maximum BookingCode established time line is no longer valid and therefore require another HotelBookingRules to update the BookingCode. The ExpirationDate attribute indicates the date in which the BookingCode will no longer be valid. To continue, you may see an example of a BookingCode.
<HotelResult>
<HotelOptions>
<HotelOption Status="OK">
<BookingCode ExpirationDate="2019-10-03T10:04:26.8377656+02:00">ya79dM4dS6R6EywV4XhfEvwItLN5sfa4xcKoRWYtG4b/utM1C8FoU7wtvxeqXKhz2utopk4+5bpJX0EGM8YWSGAwgLA0lkvt/PLN1rsHUrCU.....</BookingCode>
Kindly refer to the HotelBookingRules section for more information.
Important note:
The static data information returned within this transaction (concretely, the hotel name, hotel address and hotel category) is the information that we require for you to display on your end in order to succesfully complete the static data certification process. This same will also need to be applied on the booking step.
Once you retrieve the BookingCode of the combination that you wish to confirm through the HotelBookingRules response, you may then send the booking confirmation request along all of the data that is requested for on the HotelRequiredFields node from the aforementioned transaction.
The response will return a booking code (@Locator) that will identify the booking in a unique way and let you read and/or cancel the same if you ever wish to do the same.
Kindly refer to the HotelBooking section for more information.
Important note:
The static data information returned within this transaction (concretely, the hotel name, hotel address and hotel category) is the information that we require for you to display on your end in order to succesfully complete the static data certification process. It is not allowed to use previously downloaded information.
Moving on, once the booking has been created, successfully confirmed and you've been able to retrieve its @Locator, there are two additional actions that you may take in this regard:
Kindly refer to the ReadBooking section for more information.
Kindly refer to the CancelBooking section for more information.
Having detailed all of the hotel integration process, here we supply you with a series of resources which, along the use of test environment XML credentials, will let you experience the hotel integration process first hand.
On this section you will be able to find SoapUI test suites that may help you perform the development of your integration.
Juniper WebService Hotel PULL Welcome Pack. This test suite contains all of the transactions that will be neccesary in order to perform an integration against the Juniper system.
Juniper WebService Hotel PULL HotelPortfolio Introduction. This test suite contains all of the neccesary imformation in order to implement the HotelPortfolio transactions. This is specially useful for those integrators that wish to implement this transaction while connecting through the use of a different Hotels API.
On this section we have a Postman example that embraces all of the hotel integration process.
On this section we have a series of code samples that will let you understand how to implement and use one of the transactions from our API. It is important to note that Juniper will not be capable of helping you with any kind of coding support and that these should be purely be treated as referential examples.
Object that contains supplements and/or offer/promotions that apply to the combination. We refer to this object as: {AdditionalElements}
Node / Attribute (@) | Opt | Type | Description |
---|---|---|---|
AdditionalElements | Y | - | List of additional elements of the combination. There can either supplements and/or offer/promortions. |
./AdditionalElements/HotelSupplements | Y | - | List of supplements of the combination. |
./HotelSupplements/{HotelSupplement} | N | - | Hotel supplement item |
./AdditionalElements/HotelOffers | Y | - | List of promotion/offers of the combination. |
./HotelOffers/{HotelOffer} | N | - | Hotel promotion/offer item |
Object AdditionalElement {HotelSupplement}/{HotelOffer}
Node / Attribute (@) | Opt | Type | Description |
---|---|---|---|
AdditionalElement | Y | - | Additional element of the combination. Possible values: • HotelSupplement • OfferSupplement NOTE: It is important to note that the name of the node will be one of the above values, but that the type will be shared between all of them. |
./AdditionalElement/@Code | Y | String | Internal code of the additional element. It is important to note that this information will only be available on direct contracts. |
./AdditionalElement/@Class | Y | String | Additional element class. Values: SUPPLEMENT, PROMO. |
./AdditionalElement/@Type | Y | String | Additional element type code. Possible values: • M – Mandatory • O – Optional • R – Restriction (this is mainly informative) |
./AdditionalElement/@Category | Y | String | Additional element category. On supplements, it stands for an OfferSupplementType that can be retrieved using the HotelCatalogueData transaction. On promotions, it identifies the promotion type. Possible values: • Amount • Percent • PayStay |
./AdditionalElement/@SpecialType | Y | String | Additional element special type, when available, it stands for a SpecialSupplementType that can be retrieved using the HotelCatalogueData transaction. |
./AdditionalElement/@DirectPayment | Y | Boolean | Indicates if this element must be paid directly at the hotel (which indirectly means that it is not included on the combination total price). Its price is returned in @Amount. |
./AdditionalElement/@NonRefundable | Y | Boolean | Indicates if the element will have a cancellation penalty of the 100% from the deta on which the booking is confirmed. |
./AdditionalElement/@Optional | Y | Boolean | Indicates if the element will be optional. Only for supplements. |
./AdditionalElement/@Quantity | Y | Integer | Number of units of the element. |
./AdditionalElement/@Begin | Y | Date | Start date of the element. If empty, the element will apply to the entire data range of the combination. Format: yyyy-MM-dd |
./AdditionalElement/@End | Y | Date | End date of the element. If empty, the element will apply to the entire data range of the combination. Format: yyyy-MM-dd |
./AdditionalElement/@Amount | Y | Double | Price of the element. Available on direct payment, early booking promotions with payment conditions, etc... |
./AdditionalElement/@Currency | Y | String | Currency of the element |
./AdditionalElement/@RatePlanCode | Y | String | RatePlanCode that you will need to use in order to apply an optional supplement to the selected combination. Only for optional supplements. |
./AdditionalElement/@ServiceDuration | Y | Integer | Duration of the service. |
./AdditionalElement/@RoomCategory | Y | String | Id of the room category to which the element refers to. Only for promotions |
./AdditionalElement/@PaymentDate | Y | Date | Payment date of the element. Only for early booking promotions. |
./AdditionalElement/@CostValue | Y | Double | Cost value of the element. Only for early booking promotions |
./AdditionalElement/@Percentatge | Y | Double | Percentatge to be paid of the element. Only for early booking promotions. |
./AdditionalElement/@FirstDaySelected | Y | Integer | In some supplements, it is possible to set the first day that you wish for the mentioned to take effect (for example, let’s say that you have a bookng which includes a ticket to a themed park, given the availability of this propery, you would be able to select the day on which this ticket would apply). If available, the default value will stand for the date on which the supplement can first be applied until the end of the booking. |
./AdditionalElement/@InformedTime | Y | String | Indicates the referential time that has been informed on the supplement. For example: "19:00". |
./AdditionalElement/@ExternalCode | Y | String | External code of the element, optional information. |
./AdditionalElement/@Guests | Y | Integer | Number of guests to which the element applies. |
./AdditionalElement/@CategoryType | Y | String | Category type of the element. |
./AdditionalElement/@ServiceFrequency | Y | String | Service frequency. Possible values: • Nightly • Daily • Stay |
./AdditionalElement/Name | Y | String | Additional element short name. |
./AdditionalElement/Description | Y | String | Additional element description. |
./AdditionalElement/FreeNights | Y | - | FreeNight container Only for promotions of the PayStay category. |
./FreeNights/@Free | Y | String | Free stay number |
./FreeNights/@Nights | Y | String | Nights pay stay number |
./AdditionalElement/{Prices} | Y | - | Price object of the element. Only for optional supplements. |
./AdditionalElement/SupplementRelPaxesDist | Y | - | Only for optional supplements that need to be applied on a specific passenger from the booking. |
./SupplementRelPaxesDist/SupplementRelPaxDist | Y | - | SupplementRelPaxDist |
./SupplementRelPaxDist/SupplementRelPaxes | Y | - | SupplementRelPaxes |
./SupplementRelPaxes/SupplementRelPax | Y | - | SupplementRelPax |
./SupplementRelPax/@IdPax | Y | Integer | Id of the passenger to which the @RatePlanCode will apply this optional supplement. |
./SupplementRelPax/@RatePlanCode | Y | String | RatePlanCode that you will need to use in order to apply this optional supplement of this specific passenger to the selected combination. |
./AdditionalElement/PickUpPoints | Y | - | List of pick-up points available for the supplement. When available, and when there are more than one pick-up point available for selection (cause if there is only one it will be automatically selected), the booking will require for the pick-up choice to have been selected on the HotelBookingRules prior to confirming the reservation. |
./PickUpPoints/PickUpPoint | Y | - | Specific pick-up point node. |
./PickUpPoint/@DestinationZone | N | String | Destination id to which the pick-up is related. |
./PickUpPoint/@MeetingTime | N | String | Meeting time of the pick-up. |
./PickUpPoint/Address | Y | String | Adreess text of the pick-up. |
Object with media content from the supplier.
Node / Attribute (@) | Opt | Type | Description |
---|---|---|---|
ContentProviders | Y | - | - |
./ContentProviders/ContentProvider | Y | - | Content provider |
./ContentProvider/@Code | N | String | Content provider code |
./ContentProvider/@ExternalCode | Y | String | Content provider accommodation code |
./ContentProvider/{Images} | Y | - | List of images |
./ContentProvider/MultimediaContents | Y | - | List of multimedia contents |
./MultimediaContents/MultimediaContent | N | - | Multimedia content |
./MultimediaContent/FileName | N | - | URL multimedia content |
./ContentProvider/HotelCategory | Y | - | Rating of the content provider accomodation |
List of possible contexts that you may establish on the requests that have this property available.
Node / Attribute (@) | Opt | Type | Description |
---|---|---|---|
@Context | Y | String | Context key of the request. Having a proper context will allow our system optimize the performance of your request. List of possible values: • STDDOWNLOAD: Request sent as part of the static data retrieval process. • BOOKINGFLOWDOWNLOAD: Request sent during the booking flow, as to retrieve more hotel information. • CACHEROBOT: Request sent during the process of a cache robot. • CACHEMETASEARCH: Request sent during the process of a meta searcher. • FULLAVAIL: Request sent as to retrieve the complete availability for a destination (list of hotels that comprehend such destination). • SINGLEAVAIL: Request sent as to retrieve the complete list of results for a single product. • VALUATION: Request sent during the valuation process. • BOOKING: Request sent during the confirmation process. • PAYMENT: Request sent during the payment process (your own respective payment process). • CANCEL: Request sent during the cancellation process. |
For the methods to retrieve the static information such as areas, hotels, board types, etc. Take into account that the information varies between the test environment and production environment.
Important note:
The maximum allowed frequency for the retrieval of static data information (if you plan on retrieving such information) is at least once every 15 days. This a requirement meant to keep the static data information from our system updated.
This transactions allows for the retrieval of all of the hotel codes available within a specific destination codes. You may retrieve all of the available destination codes through the use of the ZoneList. Using this transaction in combination with the HotelContent request will allow you to retrieve all of the available hotel static data of a specific destination.
It is also worth noting that this transaction will supply you with all of the available hotel codes that are directly mapped to the requested destination and that, in order to retrieve all of the available hotel codes from, let's say, a city as a whole, it will also be necessary to send HotelList requests on all of the directly related lower-level destination codes (neighborhoods and such).
A static data retrieval process that includes the HotelList transaction could consist of:
Important note:
Given that the HotelList transaction is very inneficient in comparison to the HotelPortfolio one (as it may take up to multiple hours when the HotelPortfolio transaction allows for this process to be performed on minutes), it will be important to note that this transaction will be, by default, disabled on most connections (specially if you're a new integrator) and that, what should be used in its place is the HotelPortfolio one.
The only exception here would be if the Juniper supplier does not allow for the use of JPCode which is required for the use of the HotelPortfolio transaction and on which case it will only be possible to retrieve their inventory through the use of this transaction.
Node / Attribute (@) | Opt | Type | Description |
---|---|---|---|
@Version | N | String | Web Service version |
@Language | N | String | Language in which the response will be returned. Please, contact Juniper for available languages. |
{Login} | N | - | Customer login to access the Web Service |
HotelListRequest | N | - | - |
./HotelListRequest/@ZoneCode | N | String | Zone code. Mandatory. |
./HotelListRequest/@ShowBasicInfo | Y | Boolean | Show the hotel name on the response. Not recommended unless you're manually testing this transaction. |
./HotelListRequest/@Suppliers | Y | - | With this option you can specify the suppliers you wish. |
./Suppliers/@Supplier | N | String | Supplier code. |
AdvancedOptions | Y | - | Optional parameters. |
./AdvancedOptions/ShowGiataCode | Y | Boolean | If the value is true, the system will supply you with the hotel related GIATA code (if available, as this is optional information within the system). Additionaly, it is worth noting that this parameter requires for a specific permission to be enabled, contact with your supplier if you would like more information in this regard. |
./AdvancedOptions/OnlyDirectZone | Y | Boolean | If the value is false (its default, if unspecified, is true), it will also include all of the hotels found within the lower-level destinations of the requested zone. It is recommended to work with the default behavior of this parameter (unspecified/true), as it offers the best performance possible for the system. This feature is restricted by default. Contact with Juniper for further information. |
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://www.juniper.es/webservice/2007/">
<soapenv:Header/>
<soapenv:Body>
<HotelList>
<HotelListRQ Version="1.1" Language="en">
<Login Email="user@mydomain.com" Password="pass"/>
<HotelListRequest ZoneCode="2" ShowBasicInfo="true"/>
</HotelListRQ>
</HotelList>
</soapenv:Body>
</soapenv:Envelope>
Node / Attribute (@) | Opt | Type | Description |
---|---|---|---|
@Url | N | String | URL endpoint |
@TimeStamp | N | DateTime | Response date and time. Format: yyyy-MM-ddThh:mm:ss (UTC) |
@IntCode | N | String | Internal control code |
{Errors} | Y | - | Applicable errors. |
{Warnings} | Y | - | Applicable warnings. |
HotelListRS | N | - | - |
./HotelListRS/HotelList | N | - | List of hotels |
./HotelList/Hotel | Y | - | Hotel item |
./Hotel/@Code | N | String | Hotel code |
./Hotel/@HasSynonyms | N | Boolean | Identifies if the JPCode has synonyms and, consequently, if it is a master JPCode. If you have any additional doubt in this regard, then please do not hesitate to contact with Juniper support team. |
./Hotel/@GiataCode | Y | String | Hotel GIATA code. Optional and informative value that our Juniper clients may configure on some their hotels. |
./Hotel/Name | N | String | Hotel name |
The response will contain only the accommodation codes and names if the @ShowBasicInfo property is set to true. For more information (description, location, images, etc) you must use the HotelContent request.
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<HotelListResponse xmlns="http://www.juniper.es/webservice/2007/">
<HotelListRS Url="http://xml-uat.bookingengine.es" TimeStamp="2019-10-02T17:04:30.1044752+02:00" IntCode="bZ54cFnpuRIowyoaMFUC6Ckooj1h7rEuRSlcI+UBQxA=">
<HotelList>
<Hotel Code="JP857276" HasSynonyms="false">
<Name>AluaSoul Palma</Name>
</Hotel>
<Hotel Code="JP067921" HasSynonyms="true">
<Name>Aparthotel Fontanellas Playa</Name>
</Hotel>
<Hotel Code="JP046659" HasSynonyms="false">
<Name>Ayron Park</Name>
</Hotel>
<Hotel Code="JP046603" HasSynonyms="false">
<Name>BQ Apolo Hotel</Name>
</Hotel>
<Hotel Code="JP060468" HasSynonyms="false">
<Name>Embat</Name>
</Hotel>
</HotelList>
</HotelListRS>
</HotelListResponse>
</soap:Body>
</soap:Envelope>
With this message, you can retrieve the available static data:
The static data is used to categorize the information returned in the HotelAvail response.
Please take into account that the static data can be empty. This means that all accommodation information is retrieved dynamically from external suppliers and can’t be categorized. If the catalogue data is available, some results from the availability response can be returned categorized, but others can be returned without a category code (because they come from a dynamic supplier).
It is very important to take this into consideration when implementing the connection with Juniper Webservice.
Node / Attribute (@) | Opt | Type | Description |
---|---|---|---|
@Version | N | String | Web Service version |
@Language | N | String | Language in which the response will be returned. Please, contact Juniper for available languages. |
{Login} | N | - | Customer login to access the Web Service |
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://www.juniper.es/webservice/2007/">
<soapenv:Header/>
<soapenv:Body>
<HotelCatalogueData>
<HotelCatalogueDataRQ Version="1.1" Language="en">
<Login Email="user@mydomain.com" Password="pass"/>
</HotelCatalogueDataRQ>
</HotelCatalogueData>
</soapenv:Body>
</soapenv:Envelope>
Node / Attribute (@) | Opt | Type | Description |
---|---|---|---|
@Url | N | String | URL endpoint |
@TimeStamp | N | DateTime | Response date and time. Format: yyyy-MM-ddThh:mm:ss (UTC) |
@IntCode | N | String | Internal control code |
{Errors} | Y | - | Applicable errors. |
{Warnings} | Y | - | Applicable warnings. |
StaticDataRS | N | - | Results |
./StaticDataRS/HotelCatalogueData | N | - | Static information |
./HotelCatalogueData/HotelCategoryList | Y | - | List of hotel categories |
./HotelCategoryList/HotelCategory | N | String | Hotel category description |
./HotelCategory/@Type | N | Integer | Hotel category type |
./HotelCatalogueData/HotelTypeList | Y | - | List of hotel types |
./HotelTypeList/HotelType | N | String | Hotel type description |
./HotelType/@Type | N | String | Hotel type |
./HotelCatalogueData/RoomCategoryList | Y | - | List of room Categories |
./RoomCategoryList/RoomCategory | N | String | Room category description |
./RoomCategory/@Type | N | String | Room category type |
./HotelCatalogueData/BoardList | Y | - | List of board types |
./BoardList/Board | N | String | Board type description |
./Board/@Type | N | String | Board type. |
./HotelCatalogueData/OfferSupplementTypeList | Y | - | List of offers/supplements |
./OfferSupplementTypeList/OfferSupplementType | N | String | Offers/supplements description |
./OfferSupplementType/@Type | N | String | Offers/supplements type. |
./HotelCatalogueData/SpecialSupplementTypeList | Y | - | List of special supplements |
./SpecialSupplementTypeList/SpecialSupplementType | N | String | Special supplements description |
./SpecialSupplementType/@Type | N | String | Special supplements type |
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<HotelCatalogueDataResponse xmlns="http://www.juniper.es/webservice/2007/">
<CatalogueDataRS Url="http://xml-uat.bookingengine.es" TimeStamp="2019-10-02T17:05:34.8299909+02:00" IntCode="YKLyE1hHyA4bd+5tyO4A1i0q5OTo/UqLLmyfJBers7U=">
<HotelStaticData>
<RoomCategoryList>
<RoomCategory Type="1">Category 1</RoomCategory>
<RoomCategory Type="2">Category 2</RoomCategory>
<RoomCategory Type="3">Category 3</RoomCategory>
</RoomCategoryList>
<HotelCategoryList>
<HotelCategory>1 1/2 Stars</HotelCategory>
<HotelCategory>6 Stars</HotelCategory>
<HotelCategory Type="5est">5 Stars</HotelCategory>
<HotelCategory Type="4est">4 Stars</HotelCategory>
<HotelCategory Type="3est">3 Stars</HotelCategory>
<HotelCategory Type="2est">2 Stars</HotelCategory>
<HotelCategory Type="1est">1 Star</HotelCategory>
<HotelCategory>Apartment</HotelCategory>
</HotelCategoryList>
<HotelTypeList>
<HotelType Type="ROV">CONDO</HotelType>
<HotelType Type="GEN">General</HotelType>
</HotelTypeList>
<BoardList>
<Board Type="SA">Accommodation only</Board>
<Board Type="TI">All inclusive</Board>
<Board Type="AD">Bed & Breakfast</Board>
<Board Type="PC">Full board</Board>
<Board Type="MP">Half board</Board>
</BoardList>
<OfferSupplementTypeList>
<OfferSupplementType Code="GEN">General</OfferSupplementType>
<OfferSupplementType Code="ADJ">Points Adjuster</OfferSupplementType>
</OfferSupplementTypeList>
<SpecialSupplementTypeList>
<SpecialSupplementType Code="Forfait">Forfait</SpecialSupplementType>
</SpecialSupplementTypeList>
</HotelStaticData>
</CatalogueDataRS>
</HotelCatalogueDataResponse>
</soap:Body>
</soap:Envelope>
This transaction allows for the retrieval of hotel detailed information through the use of hotel codes that you should have previously retrieved through the use of either the HotelList or HotelPortfolio requests. This transaction allows for up 25 hotels to be requested at once.
It is also possible to send the RatePlanCode or the BookingCode returned in any of the booking flow responses (HotelAvail, HotelCheckAvail or HotelBookingRules). This should always be the case whenever this transaction is requested in the middle of the booking flow.
In this example, we are requesting one valid hotel (JP046300) and one incorrect hotel code (JP99999X) that will raise an error.
Node / Attribute (@) | Opt | Type | Description |
---|---|---|---|
@Version | N | String | Web Service version |
@Context | Y | String | Context key of the request. Having a proper context will allow our system optimize the performance of your request. List of possible values described on Context. Recommended contexts for this request: STDDOWNLOAD, BOOKINGFLOWDOWNLOAD |
@Language | N | String | Language in which the response will be returned. Please, contact Juniper for available languages. |
{Login} | N | - | Customer login to access the Web Service |
HotelContentList | N | - | List of hotels. Limited to 25. |
./HotelContentList/Hotel | N | - | |
./Hotel/@Code | Y | String | Hotel code |
./Hotel/@RatePlanCode | Y | String | RatePlanCode returned in HotelAvail or HotelCheckAvail. Ir is also possible to send the BookingCode received in HotelBookingRules. This option is useful if you are using HotelUnico and you want to obtain the hotel info dinamically, while the hotel booking process. Note: If the Code and the RatePlanCode are both sent, the system will take the RatePlanCode and ignore the Code. |
AdvancedOptions | Y | - | Optional parameters. |
./AdvancedOptions/ShowGiataCode | Y | Boolean | If the value is true, the system will supply you with the hotel related GIATA code (if available, as this is optional information within the system). Additionaly, it is worth noting that this parameter requires for a specific permission to be enabled, contact with your supplier if you would like more information in this regard. |
Example sending a valid hotel code (JP046300) and an incorrect one (JP99999X) that will raise a warning on the response:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://www.juniper.es/webservice/2007/">
<soapenv:Header/>
<soapenv:Body>
<HotelContent>
<HotelContentRQ Version="1.1" Language="en">
<Login Email="user@mydomain.com" Password="pass"/>
<HotelContentList>
<Hotel Code="JP046300"/>
<Hotel Code="JP99999X"/>
</HotelContentList>
</HotelContentRQ>
</HotelContent>
</soapenv:Body>
</soapenv:Envelope>
Example sending a RatePlanCode:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://www.juniper.es/webservice/2007/">
<soapenv:Header/>
<soapenv:Body>
<HotelContent>
<HotelContentRQ Version="1.1" Language="en">
<Login Email="user@mydomain.com" Password="pass"/>
<HotelContentList>
<Hotel RatePlanCode="Ku+N/yiFLXBF2/yobZ1d8FxijQ/nBS55exSH5VFf6Vst9KUe6k/SDkuwmduztPne6+AIkvOF9KUvjF0+FUp8L6XDIX0RYMAxnZehXGxW....."/>
</HotelContentList>
</HotelContentRQ>
</HotelContent>
</soapenv:Body>
</soapenv:Envelope>
Node / Attribute (@) | Opt | Type | Description |
---|---|---|---|
@Url | N | String | URL endpoint |
@TimeStamp | N | DateTime | Response date and time. Format: yyyy-MM-ddThh:mm:ss (UTC) |
@IntCode | N | String | Internal control code |
{Errors} | Y | - | Applicable errors. |
{Warnings} | Y | - | Applicable warnings. |
HotelContents | N | - | - |
./HotelContents/HotelContent | N | - | - |
./HotelContent/@Code | N | String | Hotel code |
./HotelContent/@JPCode | N | String | Hotel JPCode, this is a unique hotel code that identifies the hotel on the system. It is important to note that, when the warning warnObsoleteJPCode is shown, this property will identify the master JPCode related to the synonym JPCode that has been initially requested. |
./HotelContent/@GiataCode | Y | String | Hotel GIATA code. Optional and informative value that our Juniper clients may configure on some their hotels. |
./HotelContent/HotelName | Y | String | Hotel name |
./HotelContent/HotelChain | Y | - | Hotel chain information. Currently, it only available on directly contracted hotels. |
./HotelChain/Name | Y | String | Hotel chain name |
./HotelContent/HotelCategory | Y | String | Hotel category |
./HotelCategory/@Type | N | String | Hotel category type |
./HotelContent/HotelType | Y | String | Hotel type |
./HotelType/@Type | N | String | Hotel type type |
./HotelContent/Label | Y | - | Label associated to this hotel. Currently, it only available on directly contracted hotels. |
./Label/@SortPriority | Y | Integer | Sort order of this label. |
./Label/@Code | N | Integer | Label internal code. |
./Label/Name | Y | String | Label name |
./Label/Description | Y | String | Label description |
./HotelContent/Zone | Y | String | Zone |
./Zone/@Code | N | String | Zone code |
./Zone/@JPDCode | N | String | Shared zone identificator between all Juniper clients. |
./Zone/Name | Y | String | Zone name |
./HotelContent/Address | Y | - | Address information |
./Address/Address | Y | String | Address line |
./Address/Latitude | Y | String | Address latitude |
./Address/Longitude | Y | String | Address longitude |
./Address/PostalCode | Y | String | Address postal code |
./HotelContent/ContactInfo | Y | - | List of hotel contacts |
./ContactInfo/PhonesNumbers | Y | String | List of phone numbers |
./PhonesNumbers/PhonesNumber | Y | String | Phone number |
./PhonesNumber/@Type | Y | String | Phone number type: • GEN |
./ContactInfo/Faxes | Y | String | List of faxex |
./Faxes/Fax | Y | String | Fax |
./Fax/@Type | Y | String | Fax type: • GEN |
./ContactInfo/Emails | Y | String | List of emails |
./Emails/Email | Y | String | |
./Email/@Type | Y | String | Email type: • GEN |
./HotelContent/{Images} | Y | - | List of hotel images |
./HotelContent/{ContentProviders} | Y | - | List of media content |
./HotelContent/{Descriptions} | Y | - | List of descriptions |
./HotelContent/Features | Y | - | List of features |
./Features/Feature | Y | String | Feature |
./Feature/@Code | Y | String | Feature internal code. Restricted information that may only be available on specific products, plus that relies on a permission. |
./Feature/@Type | N | String | Feature type. Possible values: • HOT – Hotel • ROO – Room • CAT – Catering • SPT – Sport • OTH - Other |
./Feature/@Value | Y | String | Feature additional value. Additional information that compliments the feature, it does not follow a specific typification but it is mostly used for distances or units. |
./Feature/@SubTypeCode | Y | String | Feature subtype code. |
./Feature/@ExtraFee | Y | Boolean | Feature would require an extra fee. |
./HotelContent/FeatureSubTypes | Y | - | List of feature sybtypes. This information will only be available when categorized meaning that it will be very important to not rely on the same unless strictly working with directly contracted hotels. |
./FeatureSubTypes/FeatureSubType | Y | String | Feature subtype. |
./FeatureSubType/@Type | N | String | Feature subtype type. Possible values: • HOT – Hotel • ROO – Room • CAT – Catering • SPT – Sport • OTH - Other |
./FeatureSubType/@Code | N | String | Feature subtype code. |
./HotelContent/HotelRooms | Y | - | List of available rooms. This information will only be available when categorized meaning that it will be very important to not rely on the same unless strictly working with directly contracted hotels. |
./HotelRooms/HotelRoom | Y | - | Hotel room |
./HotelRoom/@Code | N | String | Room code |
./HotelRoom/Name | Y | String | Room code |
./HotelRoom/{Images} | Y | - | List of room images |
./HotelRoom/{Descriptions} | Y | - | List of room descriptions |
./HotelRoom/RoomCategory | Y | String | Room category name. As of the moment of documenting this, only available on those directly contracted hotels that have this info available. |
./RoomCategory/@Type | Y | String | Room category type code. |
./RoomCategory/@Code | Y | String | Room internal code. Only available when suitable permissions are activated. |
./HotelRoom/Size | Y | Double | Room size |
./Size/@Unit | Y | String | Unit of the room size • m2 – Square meters • ft2 – Square feet |
./HotelRoom/Features | Y | - | List of room features. This information will only be available when categorized meaning that it will be very important to not rely on the same unless strictly working with directly contracted hotels. |
./Features/Feature | Y | String | Feature |
./Feature/@Type | N | String | Feature type. Possible values: • HOT – Hotel • ROO – Room • CAT – Catering • SPT – Sport • OTH - Other |
./Feature/@SubTypeCode | Y | String | Feature subtype code. |
./HotelContent/PointsOfInterest | Y | - | Points of interest near a hotel. |
./PointsOfInterest/PointOfInterest | Y | - | - |
./PointOfInterest/Distance | Y | String | Distance with respect to a hotel |
./PointOfInterest/Name | Y | String | Name of a place |
./HotelContent/TimeInformation | Y | - | Time information container |
./TimeInformation/CheckTime | Y | - | - |
./CheckTime/@CheckIn | Y | String | CheckIn hour information. It is worth noting that this information is plain text whose format will be entirely up to the hotel. |
./CheckTime/@CheckOut | Y | String | CheckOut hour information. It is worth noting that this information is plain text whose format will be entirely up to the hotel. |
./HotelContent/JPCodeSynonyms | Y | - | List of synonym JPCodes that have been grouped under the master JPCode. This means that all of the synonym JPCodes that are detailed on this node will stand for the master JPCode. It is important to note that, when you request for the HotelContent of a synonym JPCode, the response will include the warnObsoleteJPCode warning and you will be supplied with the hotel information related to the master JPCode. Given the case, the @JPCode property from the HotelContent node will contain the master JPCode. If you have any additional doubt in this regard, then please do not hesitate to contact with Juniper support team. |
./JPCodeSynonyms/JPCodeSynonym | Y | - | Synonym |
./JPCodeSynonym/@JPCode | N | String | Synonym JPCode |
./HotelContent/JPRooms | Y | - | List of unique rooms of the hotel. If available, you will be able to retrieve a list with all of the existant JPRooms through the use of the RoomList transaction. Note that this transaction requires your supplier to have the unique hotel module (please contact Juniper for further information) |
./JPRooms/JPRoom | Y | - | Unique room of the hotel |
./JPRoom/@JRCode | N | String | Code that identifies the unique room of the hotel. |
./HotelContent/SpecialNotes | Y | - | List of Special notes configured on the hotel. Keep in mind that there are additional special notes that are only delivered during the Booking Flow for which you must still continue to obtain and display on your side. |
./SpecialNotes/SpecialNote | N | - | - |
./SpecialNote/@ShowInWeb | Y | Boolean | Indicates if the special note shall be displayed on web or not. Requires for a additional permission to be configured (please contact Juniper for further information) |
./SpecialNote/@ShowInVoucher | Y | Boolean | Indicates if the special note shall be displayed on voucher or not. Requires for a additional permission to be configured (please contact Juniper for further information) |
./SpecialNote/Dates | Y | - | Dates that the special note is visible |
./Dates/Date | N | - | |
./Date/@From | N | Date | Date from |
./Date/@To | N | Date | Date to |
./SpecialNote/Descriptions | N | - | |
./Descriptions/Description | N | - | Description of the special note |
./HotelContent/Rating | Y | - | Hotel rating information. |
./Rating/@Value | N | Double | Hotel rating value. For your reference the scale goes to up to 10. |
./Rating/SubRatings | Y | - | Hotel subrating section. |
./SubRatings/SubRating | Y | - | Specific subrating. |
./SubRating/@Value | N | Duble | Subrating value. For your reference the scale goes to up to 10. |
./SubRating/@Id | N | Integer | Subrating internal id (recommended to be stored in case that the nomeclature changes). |
./SubRating/Label | Y | String | Subrating label. |
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<HotelContentResponse xmlns="http://www.juniper.es/webservice/2007/">
<ContentRS Url="http://xml-uat.bookingengine.es" TimeStamp="2019-09-26T12:34:02.2527302+02:00" IntCode="FisTZjsf2sXCSlK7pNk6RYAZQH/Hmx3b6ujltk6q6hQ=">
<Warnings>
<Warning Code="warnHotelContent" Text="Hotel JP99999X not found."/>
</Warnings>
<Contents>
<HotelContent Code="JP046300" JPCode="JP046300">
<HotelName>allsun Hotel Pil·larí Playa</HotelName>
<Zone JPDCode="JPD000004" Code="2">
<Name>Playa De Palma</Name>
</Zone>
<HotelCategory Type="4est">4 Stars</HotelCategory>
<HotelType Type="GEN">General</HotelType>
<Address>
<Address>Carrer Marbella, 24, 07610 Palma, Islas Baleares, Spain</Address>
<PostalCode>07610</PostalCode>
<Latitude>39.526624</Latitude>
<Longitude>2.7343799</Longitude>
</Address>
<ContactInfo>
<PhoneNumbers>
<PhoneNumber Type="GEN">987456321</PhoneNumber>
</PhoneNumbers>
<Faxes>
<Fax Type="GEN">963258741</Fax>
</Faxes>
<Emails>
<Email Type="GEN">email1@ejuniper.com</Email>
</Emails>
</ContactInfo>
<Images>
<Image Type="BIG">
<FileName>https://juniper-uat.bookingengine.es/images/upload//hotels/APARTAMENTOS_ALLSUN_PIL-LARI_PLAYA.jpg</FileName>
</Image>
</Images>
<Descriptions>
<Description Type="SHT">Situated on the seafront, opposite a long stretch of sandy beach, by the seaside road of Playa de Palma. 204 studios and apartments in constant renovation with reception, bar-cafeteria, video-games, billiards and tv lounge (sateliteTV),</Description>
<Description Type="LNG">Hotel "long" description.</Description>
</Descriptions>
<Features>
<Feature Type="HOT">WIFI</Feature>
<Feature Type="HOT">Pool</Feature>
<Feature Type="CAT">Restaurant</Feature>
<Feature Type="ROO">Hair dryer</Feature>
<Feature Type="ROO">Safe</Feature>
</Features>
<TimeInformation>
<CheckTime CheckIn="14:00" CheckOut="12:00"/>
</TimeInformation>
<HotelRooms>
<HotelRoom Code="5">
<Name>Double</Name>
<Description>DOUBLE DESCRIPTION TEST EN</Description>
</HotelRoom>
<HotelRoom Code="2">
<Name>Single</Name>
</HotelRoom>
</HotelRooms>
<JPRooms>
<JPRoom JRCode="JR000625"/>
</JPRooms>
</HotelContent>
</Contents>
</ContentRS>
</HotelContentResponse>
</soap:Body>
</soap:Envelope>
This transaction allows for the retrieval of all of the available hotel codes of your Juniper supplier. Using this transaction in combination with the HotelContent request will allow you to retrieve all of the available hotel static data of a specific Juniper supplier.
A static data retrieval process that includes the HotelPortfolio transaction could consist of:
Important note:
Note that althrough this is the preferred and recommended transaction for the retrieval of all of the available hotel codes of a specific Juniper supplier (in comparison to the HotelList), it requires for the Juniper supplier to have the unique hotel module available (in other words, use JPCode). Please contact with Juniper for further information in this regard.
While using this transaction, you must first select the @RecordPerPage that you wish to request hotels for, it is important to note that this property cannot be changed between requests.
Then, on your first request, you will need to send the same without setting any information other than the mandatory one (login, language, version and recordsperpage), this way, the response will supply you with a @NextToken along the hotels that you requested which will then need to be used as a Token on the subsequent HotelPortfolio requests until no @NextToken is supplied on the response, as no having a @NextToken available on the response identifies that we’re at the last available page.
Node / Attribute (@) | Opt | Type | Description |
---|---|---|---|
@Version | N | String | Web Service version |
@Language | N | String | Language in which the response will be returned. Please, contact Juniper for available languages. |
@Page | Y | Integer | Deprecated. Refer to the property stated below (additionally, on the introduction of this transaction you have a brief explanation in regards of how to retrieve the whole portfolio while using the @Token). |
@RecordsPerPage | Y | Integer | Records to be shown per page. Allows for a maximum of 500. |
@Token | Y | String | Token of the next page. Should not be included if we’re on the first page. |
{Login} | N | - | Customer login to access the Web Service |
HotelPortfolioRequest | Y | - | Optional parameters from the transaction. |
./HotelPortfolioRequest/@Synonyms | Y | Boolean | If true, will include the JPCodeSynonyms node in the response. |
./HotelPortfolioRequest/@ModificationDate | Y | DateTime | If included, will filter the JPCodes from the response so that they will only be included if they were modified at or after the specified modification date. If you plan on using this feature, we recommend for you to always perform the first hotel code retrieval process without specifying any @ModificationDate, and then to include the @ModificationDate property along with the DateTime on which you initiated the previous hotel code retrieval process on your subsequent requests (so that you retrieve all of the hotel codes that were modified between the time on which you performed the previous retrieval process and now). |
Example for the first page:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://www.juniper.es/webservice/2007/">
<soapenv:Header/>
<soapenv:Body>
<HotelPortfolio>
<HotelPortfolioRQ Version="1.1" Language="en" RecordsPerPage="500">
<Login Email="user@mydomain.com" Password="pass"/>
</HotelPortfolioRQ>
</HotelPortfolio>
</soapenv:Body>
</soapenv:Envelope>
Example for subsequent pages:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://www.juniper.es/webservice/2007/">
<soapenv:Header/>
<soapenv:Body>
<HotelPortfolio>
<HotelPortfolioRQ Version="1.1" Language="en" RecordsPerPage="500" Token="CrX+Y3DpWKIrv33F9YLEYw==">
<Login Email="user@mydomain.com" Password="pass"/>
</HotelPortfolioRQ>
</HotelPortfolio>
</soapenv:Body>
</soapenv:Envelope>
Node / Attribute (@) | Opt | Type | Description |
---|---|---|---|
@Url | N | String | URL endpoint |
@TimeStamp | N | DateTime | Response date and time. Format: yyyy-MM-ddThh:mm:ss (UTC) |
@IntCode | N | String | Internal control code |
{Errors} | Y | - | Applicable errors. |
{Warnings} | Y | - | Applicable warnings. |
HotelPortfolio | N | - | Portfolio container |
./HotelPortfolio/@Page | Y | Integer | Page number |
./HotelPortfolio/@RecordsPerPage | Y | Integer | Number of hotels shown in the response |
./HotelPortfolio/@TotalPages | Y | Integer | Total number of pages available. |
./HotelPortfolio/@TotalRecords | Y | Integer | Total number of hotels available |
./HotelPortfolio/@NextToken | Y | String | Token that needs to be used on the request (@Token) in order to retrieve the next page. If missing (while using tokens on your requests) it will identify that we’re on the last page. |
./HotelPortfolio/Hotel | N | - | Hotel container |
./Hotel/@JPCode | N | String | Hotel JPCode. |
./Hotel/@HasSynonyms | N | Boolean | Identifies if the JPCode has synonyms and, consequently, if it is a master JPCode. If you have any additional doubt in this regard, then please do not hesitate to contact with Juniper support team. |
./Hotel/Name | N | String | Hotel name. |
./Hotel/Zone | Y | String | Zone |
./Zone/@JPDCode | N | String | Shared zone identificator between all Juniper clients |
./Zone/@Code | N | String | Zone code |
./Zone/Name | N | String | Name of the zone tree, separated by | . The first instance (ZONE1|ZONE2|...) will always be the name of the zone that the hotel resides on. |
./Hotel/Address | N | String | Hotel address |
./Hotel/ZipCode | Y | String | Hotel zipcode |
./Hotel/Latitude | N | Double | Hotel latitude coordinate |
./Hotel/Longitude | N | Double | Hotel longitude coordinate |
./Hotel/HotelCategory | N | String | Hotel category description |
./HotelCategory/@Type | Y | String | Hotel category type. Please note that this is the property that, when available (as it will be unavailable when the hotel category is not mapped on our end), you have to use for mapping purposes. |
./HotelCategory/@Code | N | Integer | Hotel category internal code. Please note that this is an internal code that you shouldn’t usually use for mapping purposes. |
./Hotel/City | Y | String | City of the hotel from the CityList transaction. This node will only be returned when available. |
./City/@Id | Y | String | City code |
./City/@JPDCode | N | String | City JPDCode. Shared zone identificator between all Juniper clients. |
./Hotel/JPCodeSynonyms | Y | - | List of synonym JPCodes that have been grouped under the master JPCode, returned if asked for in the previous request. This means that all of the synonym JPCodes that are detailed on this node will stand for the master JPCode. It is important to note that, when you request for the HotelContent of a synonym JPCode, the response will include the warnObsoleteJPCode warning and you will be supplied with the hotel information related to the master JPCode. Given the case, the @JPCode property from the HotelContent node will contain the master JPCode. If you have any additional doubt in this regard, then please do not hesitate to contact with Juniper support team. |
./JPCodeSynonyms/JPCodeSynonym | Y | - | Synonym |
./JPCodeSynonym/JPCode | N | String | Synonym JPCode |
Example for the first page:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<HotelPortfolioResponse xmlns="http://www.juniper.es/webservice/2007/">
<HotelPortfolioRS Url="http://xml-uat.bookingengine.es" TimeStamp="2019-05-21T17:00:59.431716+02:00" IntCode="VW95b5yURKkY7TbwOB+JvXl83s+3tWaQQiqLULrxcpI=">
<HotelPortfolio Page="1" TotalPages="1231" TotalRecords="615302" NextToken="CrX+Y3DpWKIrv33F9YLEYw==">
<Hotel xsi:type="JP_HotelInfoPortfolio" JPCode="JP02060V" HasSynonyms="false">
<Name>Paredon Surf House</Name>
<Address>Guatemala</Address>
<Latitude>13.9159997</Latitude>
<Longitude>-91.0696328</Longitude>
<HotelCategory Type="2Est" Code="2">2 Stars</HotelCategory>
</Hotel>
<Hotel xsi:type="JP_HotelInfoPortfolio" JPCode="JP01883Z" HasSynonyms="true">
<Name>Hotel Indico Rock Mallorca</Name>
<Zone JPDCode="JPD000004" Code="2">
<Name>Playa De Palma|Palma de Mallorca|Majorca|Spain</Name>
</Zone>
<Address>Carrer Antas de Ullà, 14, 07610 Palma, Illes Balears, Spain</Address>
<ZipCode>07610</ZipCode>
<Latitude>39.5091784</Latitude>
<Longitude>2.7549551</Longitude>
<HotelCategory Type="4Est" Code="4">4 Stars</HotelCategory>
<City Id="15011" JPDCode="JPD054557">Palma de Mallorca</City>
</Hotel>
</HotelPortfolio>
</HotelPortfolioRS>
</HotelPortfolioResponse>
</soap:Body>
</soap:Envelope>
Example for subsequent pages:
<HotelPortfolioRS Url="http://xml-uat.bookingengine.es" TimeStamp="2019-05-21T17:08:10.6662789+02:00" IntCode="bNF2z3kbZwFa+LLboKoL51jWCCCpZw3JXSnUIGsFFRY=">
<HotelPortfolio NextToken="qW7qWAodTQxfvQx/xmeBfg==">
Example for the last page:
<HotelPortfolioRS Url="http://xml-uat.bookingengine.es" TimeStamp="2019-05-21T17:38:10.6662789+02:00" IntCode="bNF2z3kbZwFa+LLboKoL51jWCCCpZw3JXSnUIGsFFRY=">
<HotelPortfolio>
This transaction allows for the retrieval of all of the available accommodation codes (also known as "no hotels") of your Juniper supplier. Using this transaction in combination with the HotelContent request will allow you to retrieve all of the available accommodation static data of a specific Juniper supplier.
A static data retrieval process that includes the AccommodationPortfolio transaction could consist of:
Important note:
Note that althrough this is the preferred and recommended transaction for the retrieval of all of the available accommodation codes of a specific Juniper supplier (in comparison to the HotelList), it requires for the Juniper supplier to have the unique hotel module available (in other words, use JPCode). Please contact with Juniper for further information in this regard.
While using this transaction, you must first select the @RecordPerPage that you wish to request hotels for, it is important to note that this property cannot be changed between requests.
Then, on your first request, you will need to send the same without setting any information other than the mandatory one (login, language, version and recordsperpage), this way, the response will supply you with a @NextToken along the hotels that you requested which will then need to be used as a Token on the subsequent AccommodationPortfolio requests until no @NextToken is supplied on the response, as no having a @NextToken available on the response identifies that we’re at the last available page.
Node / Attribute (@) | Opt | Type | Description |
---|---|---|---|
@Version | N | String | Web Service version |
@Language | N | String | Language in which the response will be returned. Please, contact Juniper for available languages. |
@Page | Y | Integer | Deprecated. Refer to the @Token property stated below (additionally, on the introduction of this transaction you have a brief explanation in regards of how to retrieve the whole portfolio while using the @Token). |
@RecordsPerPage | Y | Integer | Records to be shown per page. Allows for a maximum of 500. |
@Token | Y | String | Token of the next page. Should not be included if we’re on the first page. |
{Login} | N | - | Customer login to access the Web Service |
AccommodationPortfolioRequest | Y | - | Optional parameters from the transaction. |
./AccommodationPortfolioRequest/@ModificationDate | Y | DateTime | If included, will filter the accommodation codes from the response so that they will only be included if they were modified at or after the specified modification date. If you plan on using this feature, we recommend for you to always perform the first accommodation code retrieval process without specifying any @ModificationDate, and then to include the @ModificationDate property along with the DateTime on which you initiated the previous accommodation code retrieval process on your subsequent requests (so that you retrieve all of the accommodation codes that were modified between the time on which you performed the previous retrieval process and now). |
Example for the first page:
<soapenv:Envelope xmlns:soapenv = "http://schemas.xmlsoap.org/soap/envelope/" xmlns = "http://www.juniper.es/webservice/2007/">
<soapenv:Header/>
<soapenv:Body>
<AccommodationPortfolio>
<AccommodationPortfolioRQ Version = "1.1" Language = "en" RecordsPerPage = "500">
<Login Email="user@mydomain.com" Password="pass"/>
</AccommodationPortfolioRQ>
</AccommodationPortfolio>
</soapenv:Body>
</soapenv:Envelope>
Example for subsequent pages:
<soapenv:Envelope xmlns:soapenv = "http://schemas.xmlsoap.org/soap/envelope/" xmlns = "http://www.juniper.es/webservice/2007/">
<soapenv:Header/>
<soapenv:Body>
<AccommodationPortfolio>
<AccommodationPortfolioRQ Version = "1.1" Language = "en" RecordsPerPage = "500" Token = "CrX+Y3DpWKIrv33F9YLEYw==">
<Login Email="user@mydomain.com" Password="pass"/>
</AccommodationPortfolioRQ>
</AccommodationPortfolio>
</soapenv:Body>
</soapenv:Envelope>
Node / Attribute (@) | Opt | Type | Description |
---|---|---|---|
@Url | N | String | URL endpoint |
@TimeStamp | N | DateTime | Response date and time. Format: yyyy-MM-ddThh:mm:ss (UTC) |
@IntCode | N | String | Internal control code |
{Errors} | Y | - | Applicable errors. |
{Warnings} | Y | - | Applicable warnings. |
AccommodationPortfolio | N | - | Portfolio container |
./AccommodationPortfolio/@Page | Y | Integer | Page number |
./AccommodationPortfolio/@RecordsPerPage | Y | Integer | Number of hotels shown in the response |
./AccommodationPortfolio/@TotalPages | Y | Integer | Total number of pages available. |
./AccommodationPortfolio/@TotalRecords | Y | Integer | Total number of hotels available |
./AccommodationPortfolio/@NextToken | Y | String | Token that needs to be used on the request (@Token) in order to retrieve the next page. If missing (while using tokens on your requests) it will identify that we’re on the last page. |
./AccommodationPortfolio/Hotel | N | - | Hotel container |
./Hotel/@Code | N | String | Hotel code. |
./Hotel/Name | N | String | Hotel name. |
./Hotel/Zone | N | String | Zone |
./Zone/@JPDCode | N | String | Shared zone identificator between all Juniper clients |
./Zone/@Code | N | String | Zone code |
./Zone/Name | N | String | Name of the zone tree, separated by | . The first instance (ZONE1|ZONE2|...) will always be the name of the zone that the hotel resides on. |
./Hotel/Address | N | String | Hotel address |
./Hotel/Latitude | N | Double | Hotel latitude coordinate |
./Hotel/Longitude | N | Double | Hotel longitude coordinate |
./Hotel/HotelCategory | N | String | Hotel category description |
./HotelCategory/@Type | Y | String | Hotel category type. Please note that this is the property that, when available (as it will be unavailable when the hotel category is not mapped on our end), you have to use for mapping purposes. |
./HotelCategory/@Code | N | Integer | Hotel category internal code. Please note that this is an internal code that you shouldn’t usually use for mapping purposes. |
./Hotel/City | Y | String | City of the hotel from the CityList transaction. This node will only be returned when available. |
./City/@Id | Y | String | City code |
./City/@JPDCode | N | String | City JPDCode. Shared zone identificator between all Juniper clients. |
Example for the first page:
<soap:Envelope xmlns:soap = "http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd = "http://www.w3.org/2001/XMLSchema">
<soap:Body>
<AccommodationPortfolioResponse xmlns = "http://www.juniper.es/webservice/2007/">
<AccommodationPortfolioRS Url = "https://xml-uat.bookingengine.es" TimeStamp = "2019-05-21T17:00:59.431716+02:00" IntCode = "VW95b5yURKkY7TbwOB+JvXl83s+3tWaQQiqLULrxcpI=">
<AccommodationPortfolio Page = "1" TotalPages = "1231" TotalRecords = "615302" NextToken = "CrX+Y3DpWKIrv33F9YLEYw==">
<Hotel xsi:type = "JP_AccommodationInfoPortfolio" Code = "CvLlC7A+qwjU8IuJzBxcfQ==">
<Name>Venice Roulette Hotel 3*</Name>
<Address>Venice Center,Venice Veneto, Italy</Address>
<Latitude>45.4408474</Latitude>
<Longitude>12.3155151</Longitude>
<HotelCategory Type = "3Est" Code = "3">3 Stars</HotelCategory>
</Hotel>
<Hotel xsi:type = "JP_AccommodationInfoPortfolio" Code = "6NuEfovo5vUgijYIc+0BDw==">
<Name>Roulette Playa de Palma</Name>
<Zone JPDCode = "JPD000004" Code = "2">
<Name>Playa De Palma|Palma de Mallorca|Majorca|Spain</Name>
</Zone>
<Address>Carrer Antas de Ullà, 14, 07610 Palma, Illes Balears, Spain</Address>
<Latitude>39.5091784</Latitude>
<Longitude>2.7549551</Longitude>
<HotelCategory Type = "4Est" Code = "4">4 Stars</HotelCategory>
<City Id = "15011" JPDCode = "JPD054557">Palma de Mallorca</City>
</Hotel>
</AccommodationPortfolio>
</AccommodationPortfolioRS>
</AccommodationPortfolioResponse>
</soap:Body>
</soap:Envelope>
Example for subsequent pages:
<AccommodationPortfolioRS Url = "https://xml-uat.bookingengine.es" TimeStamp = "2019-05-21T17:08:10.6662789+02:00" IntCode = "bNF2z3kbZwFa+LLboKoL51jWCCCpZw3JXSnUIGsFFRY=">
<AccommodationPortfolio NextToken = "qW7qWAodTQxfvQx/xmeBfg==">
Example for the last page:
<AccommodationPortfolioRS Url = "https://xml-uat.bookingengine.es" TimeStamp = "2019-05-21T17:38:10.6662789+02:00" IntCode = "bNF2z3kbZwFa+LLboKoL51jWCCCpZw3JXSnUIGsFFRY=">
<AccommodationPortfolio>
This transaction allows you to retrieve all of the available juniper room codes (@JRCode) of your supplier. Note that this transaction will require your Juniper supplier to have the unique hotel and room mapping modules (please contact Juniper for further information).
Node / Attribute (@) | Opt | Type | Description |
---|---|---|---|
@Version | N | String | Web Service version |
@Language | N | String | Language in which the response will be returned. Please, contact Juniper for available languages. |
@RecordsPerPage | N | Integer | Records to be shown per page. |
@Token | Y | String | Token of the next page. Should not be included if we’re on the first page. |
{Login} | N | - | Customer login to access the Web Service |
Example for the first page:
<soapenv:Envelope xmlns:soapenv = "http://schemas.xmlsoap.org/soap/envelope/" xmlns = "http://www.juniper.es/webservice/2007/">
<soapenv:Header/>
<soapenv:Body>
<RoomList>
<RoomListRQ Version = "1.1" Language = "en" RecordsPerPage = "5000">
<Login Email = "user@mydomain.com" Password = "pass"/>
</RoomListRQ>
</RoomList>
</soapenv:Body>
</soapenv:Envelope>
Example for subsequent pages:
<soapenv:Envelope xmlns:soapenv = "http://schemas.xmlsoap.org/soap/envelope/" xmlns = "http://www.juniper.es/webservice/2007/">
<soapenv:Header/>
<soapenv:Body>
<RoomList>
<RoomListRQ Version = "1.1" Language = "en" RecordsPerPage = "5000" Token = "AV6DQwhyTqc=">
<Login Email = "user@mydomain.com" Password = "pass"/>
</RoomListRQ>
</RoomList>
</soapenv:Body>
</soapenv:Envelope>
Node / Attribute (@) | Opt | Type | Description |
---|---|---|---|
@Url | N | String | URL endpoint |
@TimeStamp | N | DateTime | Response date and time. Format: yyyy-MM-ddThh:mm:ss (UTC) |
@IntCode | N | String | Internal control code |
{Errors} | Y | - | Applicable errors. |
{Warnings} | Y | - | Applicable warnings. |
RoomList | N | - | - |
./RoomList/@RecordsPerPage | N | Integer | Number of hotels shown in the response |
./RoomList/@TotalRecords | N | String | Total number of records returned in the response. |
./RoomList/@NextToken | Y | String | Token that needs to be used on the request (@Token) in order to retrieve the next page. If missing, it will identify that we’re on the last page. |
./RoomList/Room | N | - | Room item |
./Room/@JRCode | N | String | Room JRCode |
./Room/Name | N | String | Room name |
Example for the first page:
<soap:Envelope xmlns:soap = "http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd = "http://www.w3.org/2001/XMLSchema">
<soap:Body>
<RoomListResponse xmlns = "http://www.juniper.es/webservice/2007/">
<RoomListRS Url = "http://xml-uat.bookingengine.es" TimeStamp = "2022-07-21T12:37:05.1922787+02:00" IntCode = "o/5+AFKUAnCSw6vwj4plW8uyMRlZ4k2+qyzbDNG3JXY=">
<RoomList RecordsPerPage = "5000" TotalRecords = "1298762" NextToken = "AV6DQwhyTqc=">
<Room JRCode = "JR000003">
<Name>DOUBLE ROOM KING BED</Name>
</Room>
<Room JRCode = "JR000004">
<Name>KING BED</Name>
</Room>
<Room JRCode = "JR000005">
<Name>TRIPLE ROOM</Name>
</Room>
<Room JRCode = "JR000006">
<Name>DOUBLE ROOM SEA VIEW</Name>
</Room>
<Room JRCode = "JR000007">
<Name>DOUBLE ROOM</Name>
</Room>
<Room JRCode = "JR000008">
<Name>RUN OF HOUSE</Name>
</Room>
</RoomList>
</RoomListRS>
</RoomListResponse>
</soap:Body>
</soap:Envelope>
Example for the last page:
<RoomListRS Url = "http://xml-uat.bookingengine.es" TimeStamp = "2022-07-21T12:39:17.1422787+02:00" IntCode = "JY4X6wKa5O26ii6Ex+ycYsPYtqdZl7ok7bgMb0eHWwU=">
<RoomList RecordsPerPage = "5000" TotalRecords = "1298762">
Availability request which, given a specific set of search filters, will provide you with all the results available (corresponding to the previously requested search filters) from your Juniper supplier.
The use of this request will require for the following mandatory fields to be specified (on all of your availability requests):
While you will never be able to obtain results of availability requests of more than 500 hotel codes (as we just mentioned), we recommend for you to allow for this hotel amount per request to be configurable on your integration (configuration that should not be able to exceed the 500 hotel code count, as to avoid allowing your customers to configure this erroneously), as some supplier connections may request you to limit the hotel code number ever further.
Node / Attribute (@) | Opt | Type | Description |
---|---|---|---|
@Version | N | String | Web Service version |
@Context | Y | String | Context key of the request. Having a proper context will allow our system optimize the performance of your request. List of possible values described on Context. Recommended contexts for this request: CACHEROBOT, CACHEMETASEARCH, FULLAVAIL, SINGLEAVAIL |
@Language | N | String | Language in which the response will be returned. Please, contact Juniper for available languages. |
{Login} | N | - | Customer login to access the Web Service |
{Paxes} | N | - | Indicates the passenger information. Array of passangers. Fields necessary for this transaction: • @IdPax (required) • Age (optional for adults) If the age is not specified the system will always understand that it is a 30 years old adult. |
HotelRequest | N | - | - |
./HotelRequest/SearchSegmentsHotels | N | - | Search properties. Hotels have only 1 SearchSegmentsHotels type |
./SearchSegmentsHotels/SearchSegmentHotels | N | - | Basic search properties |
./SearchSegmentHotels/@Start | N | Date | Check-In date. Format: yyyy-MM-dd |
./SearchSegmentHotels/@End | N | Date | Check-out date. Format: yyyy-MM-dd |
./SearchSegmentHotels/@DestinationZone | Y | Integer | NOT SUPPORTED. Code of the destination that you would like to search availability for. If you need assistance on how to replicate per-destination searches from your system on our API, kindly refer to the following entrey from our FAQ: How may I identify the List of Hotel Codes that I need to send availability for when replicating per-destination searches |
./SearchSegmentHotels/@JPDCode | Y | String | NOT SUPPORTED. Unique destination code (shared between all Juniper suppliers) of the destination that you would like to search availability for. |
./SearchSegmentsHotels/Suppliers | Y | - | Supplier filter (this does not refer to the direct Juniper supplier to which you will be connecting, but to all of the internal suppliers that your direct supplier may operate with). If not informed, results from all available suppliers will be included. This feature is restricted by default. Kindly contact with Juniper for further information. |
./Suppliers/@Excluded | Y | Boolean | Makes it so that these suppliers will be excluded from the results instead of only searching availability for them. |
./Suppliers/Supplier | N | String | Supplier code. |
./SearchSegmentsHotels/HotelCodes | Y | - | List of hotel codes that you would like to search availability for. On most supplier connections, you will be able to inform to up to 500 hotel codes per request (needing to send multiple parallel requests if you wish to request more), although note that some suppliers may require you to send less of them per request. When sending more than one hotel code per request, it is strongly recommended for all of these hotel codes to be from the same destination as, otherwise, we will not be able to ensure an optimal response time. If you need assistance on how to retrieve these hotel codes, kindly refer to the following entry from our FAQ: How may I retrieve Hotel Codes on your API |
./HotelCodes/HotelCode | N | String | Hotel code. |
./SearchSegmentsHotels/HotelName | Y | String | If included, the results will be filtered so that only results that contain this hotel name will be included. |
./SearchSegmentsHotels/CountryOfResidence | N | String | Nationality of the holder of the booking. Please note that the nationality of the holder will have to be consistent between all of the steps of the booking flow and that, consequently, you will have to set the nationality of the holder along the same value on the HotelBooking request. This code follows the ISO-3166-1 standard, you may refer to the FAQ section for further information. |
./SearchSegmentsHotels/PackageContracts | Y | String | You can search for package contracts. Possible values: • Hotel (or simply skipping the node): Normal availability • Package: Package rates will be preferred but nonpackage rates will also be retrieved. • OnlyPackage: Only package rates will be returned Note that, if included, you will have to specify the same on the HotelBooking transaction. |
./SearchSegmentsHotels/HotelCategories | Y | - | Search by categories. You can inform all categories you wish. |
./HotelCategories/HotelCategory | Y | String | Hotel category. |
./HotelCategory/@Type | N | String | Category type. Use HotelStaticData operation to retrieve all available categories |
./SearchSegmentsHotels/HotelTypes | Y | - | Search by hotel type. NOT IMPLEMENTED |
./HotelTypes/HotelType | N | String | Hotel type. |
./HotelType/@Type | N | String | Hotel type. Use HotelStaticData operation to retrieve all available types. |
./SearchSegmentsHotels/PropertyTypes | Y | - | Filter by Property Type. Only implemented on certain suppliers. |
./PropertyTypes/PropertyType | N | String | Property type |
./PropertyType/@Type | N | String | Property type code. Possible values: • HTL: Hotel • VLL: Villa |
./SearchSegmentsHotels/Boards | Y | - | With this option you can specify the meal plan board you wish. |
./Boards/Board | N | - | Board information |
./Board/@Type | N | String | Board type. Kindly refer to the HotelCatalogueData request for a list of all of the available board types. |
./Board/@Code | Y | String | Board internal code. This property is mainly meant for PUSH-PULL integrations as it will allow for you to request availability of internal board codes that you previously retrieved through the PUSH files. Kindly contact with Juniper for futher information. |
./SearchSegmentsHotels/SupplementTypes | Y | - | With this option you can specify the supplements you wish. Only 1 item is permitted. NOT IMPLEMENTED |
./SupplementTypes/SupplementType | N | String | Supplement Code. Use HotelStaticData operation to retrieve all available supplements. |
./SearchSegmentsHotels/PromoCodes | Y | - | Offer promotional code, will look for offers on the system that have a matching promotional code in order to be applied (not to confuse them with the system-wide promo codes that may be used on the discounts module). Only 1 item is permitted. |
./PromoCodes/Promocode | N | String | Promotional code |
./SearchSegmentsHotels/PaymentType | Y | String | Using this option, you can specify the payment type that you wish for the results to include. Possible values: • ExcludePaymentInDestination (default value) • OnlyPaymentInDestination • All |
./SearchSegmentsHotels/ContractCodes | Y | - | Search by contract codes. This property is mainly meant for PUSH-PULL integrations as it will allow for you to request availability of internal contract codes that you previously retrieved through the PUSH files. This feature is restricted by default, kindly contact with Juniper for futher information. |
./ContractCodes/Contracts | N | - | Contracts container. |
./Contracts/@Type | N | String | Contract type. • S: Sales • C: Cost |
./Contracts/Contract | N | - | Contract container. |
./Contract/@Code | N | String | Contract code. |
./HotelRequest/RelPaxesDist | N | - | Distribution of passengers (how many passengers there will be on the reservation and how should they be distributed between rooms) that you would like to search availability for. Complimentary to the list of Paxes that you've already specified on the previous node. |
./RelPaxesDist/RelPaxDist | N | - | Distribution list, each one of them corresponds to a single room (if you wish to search availability for multiple rooms, you will need to specific multiple instances of this node). |
./RelPaxDist/RelPaxes | N | - | Passengers list of this distribution/room. |
./RelPaxes/RelPax | N | - | Specific passenger. |
./RelPax/@IdPax | N | Integer | Passenger identifier. It should match with a Pax@IdPax from the previous Paxes node. |
./RelPaxDist/Rooms | Y | - | Using this node you may specify the room categories that you wish to search availability for. |
./Rooms/Room | N | - | Room category |
./Room/@CategoryType | Y | String | Room category type. Kindly refer to the HotelCatalogueData request for a list of all of the available room category types. |
./Room/@Code | Y | String | Room internal code. This property is mainly meant for PUSH-PULL integrations as it will allow for you to request availability of internal room codes that you previously retrieved through the PUSH files. Kindly contact with Juniper for futher information. |
./Room/@CombinationCode | Y | String | Room internal combination code. This property is mainly meant for PUSH-PULL integrations as it will allow for you to request availability of internal room codes that you previously retrieved through the PUSH files. Kindly contact with Juniper for futher information. |
./HotelRequest/Rebook | Y | - | Used for the Juniper reselling functionality, using this node will imply that the current booking flow will be used for reselling an already existing booking rather than creating a completely new one. If a resell process is intended, it is mandatory to specify this node in each of the booking flow requests. This is a restricted feature that may only be used with Juniper's Reselling functionality. Kindly contact with Juniper for further information. |
./Rebook/@ItemId | N | Integer | Item id of the booking line that is to be rebooked. Used in order to load some of the configuration related to the booking line that is going to be rebooked. |
AdvancedOptions | Y | - | Optional parameters. |
./AdvancedOptions/UseCurrency | Y | String | This value allows you to set the currency code that will be used on the booking flow process. It is important to understand that if a currency is specified on the availability request, you will also need to set the same UseCurrency AdvancedOption along with the same value on the rest of your booking flow requests. It is also important to note that the list of available currencies for you to use (if any, as the feature could not be available) will entirely depend on the Juniper supplier that you will be connecting to. Last of all, please note that if no currency is set on the request the system will then use the default currency configured by your Juniper supplier. |
./AdvancedOptions/ShowBreakdownPrice | Y | Boolean | If the value is true, it will show the full price object with all the information about the prices. If not specified, false is assumed by default. |
./AdvancedOptions/ShowHotelInfo | Y | Boolean | If the value is true, it will show extra information about the hotels. |
./AdvancedOptions/ShowOnlyAvailable | Y | Boolean | If the value is true, it will only show rooms with availability. If not specified, it will show all the rooms. If you plan on using this option, then please refer to the following section from the FAQ. |
./AdvancedOptions/ShowAllCombinations | Y | Boolean | If the value is true, it will show all the possible room combinations. |
./AdvancedOptions/ShowAllChildrenCombinations | Y | Boolean | If the value is true, it will show all the available combinations assuming children as adults. This may result in a slower response. This option only applies for directly contracted hotels. |
./AdvancedOptions/ShowCancellationPolicies | Y | Boolean | If the value is true, it will show the combination cancellation policies. It is important to understand that not all hotels/results will have cancellation policies under the availability response, as these are optional and rely on the original hotel availability (due to this, even if you will be implementing and using this feature, it will be imperative for you to control the possibility of not having cancellation policies under this response). Kindly contact Juniper if you would like to know if this option is available on your supplier connection. |
./AdvancedOptions/ShowOnlyBestPriceCombination | Y | Boolean | If the value is true, the response will only contain the cheapest available combination (per-hotel). This option will reduce the response size considerably (at the expense of only have the cheapest combination) and allow for faster transfer times. This is useful for those booking flows that are made of, at least, two availability requests, each of them focusing on, for example: • A first multi-hotel availability request on which you would only like to get the lowest price possible (true). • And a second mono-hotel availability request on which you want to retrieve all of the results available (false). Due to this, keep in mind that on single-hotel requests the parameters will not be effective, returning all results when being used on such type of availability request. |
./AdvancedOptions/MaxCombinations | Y | Numeric | Use this option if you only want to retrieve the n cheapest available combinations. This option will considerable reduce the size of the response at the expense of only getting the cheapest available combinations. |
./AdvancedOptions/ShowDynamicInventory | Y | Boolean | If the value is true, the response will include if a result originated from dynamic inventory or not (whenever this information is available). |
./AdvancedOptions/HideRatePlanCode | Y | Boolean | If the value is true, it will hide the RatePlanCode property from the response. This option is only useful on those cases that you wish to perform non-bookingflow availabilities and you want to make the response as small as possible. Please contact Juniper if you plan on using this option. |
./AdvancedOptions/TimeOut | Y | Integer | This value allows you to set the timeout that will be used on the availability request. Note that this node expects milliseconds (for example; 5000 for a 5 second timeout). This feature is recommended to be used only on single hotel availability requests on which you need to set a different timeout than the one that you use on the multi hotel / zone availability (as note that the default timeout is directly configured by your supplier, contact with your supplier if you wish for the mentioned to be adjusted). Note that the maximum timeout that the WebSevice interface allows is 8 seconds. |
./AdvancedOptions/ShowAvailabilityBreakdown | Y | Boolean | If the value is true, the response will include the daily availability breakdown. It is worth noting that this is optional information and may not be available. |
./AdvancedOptions/MinimumPrice | Y | Numeric | Use this option if you want to retreive the rate with the minimum price closest to the value indicated. The price indicated will be applied according the currency configured to the sales channel. |
On this XML request we will do a hotel code availability request (concretely, three of them) for a combination of two rooms (one room of one adult and one room of one adult plus one children of 8 years old).
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://www.juniper.es/webservice/2007/">
<soapenv:Header/>
<soapenv:Body>
<HotelAvail>
<HotelAvailRQ Version="1.1" Language="en">
<Login Email="user@mydomain.com" Password="pass"/>
<Paxes>
<Pax IdPax="1"/>
<Pax IdPax="2"/>
<Pax IdPax="3">
<Age>8</Age>
</Pax>
</Paxes>
<HotelRequest>
<SearchSegmentsHotels>
<SearchSegmentHotels Start="2019-11-20" End="2019-11-22"/>
<CountryOfResidence>ES</CountryOfResidence>
<HotelCodes>
<HotelCode>JP046300</HotelCode>
<HotelCode>JP150074</HotelCode>
<HotelCode>JP046391</HotelCode>
</HotelCodes>
</SearchSegmentsHotels>
<RelPaxesDist>
<RelPaxDist>
<RelPaxes>
<RelPax IdPax="1"/>
</RelPaxes>
</RelPaxDist>
<RelPaxDist>
<RelPaxes>
<RelPax IdPax="2"/>
<RelPax IdPax="3"/>
</RelPaxes>
</RelPaxDist>
</RelPaxesDist>
</HotelRequest>
<AdvancedOptions>
<ShowHotelInfo>false</ShowHotelInfo>
<ShowOnlyBestPriceCombination>true</ShowOnlyBestPriceCombination>
<TimeOut>8000</TimeOut>
</AdvancedOptions>
</HotelAvailRQ>
</HotelAvail>
</soapenv:Body>
</soapenv:Envelope>
On this XML request we will do a hotel code availability request (concretely, three of them) for a combination of one room (of 3 adults specifically, of 35, 30 and 40 years old).
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://www.juniper.es/webservice/2007/">
<soapenv:Header/>
<soapenv:Body>
<HotelAvail>
<HotelAvailRQ Version="1.1" Language="en">
<Login Email="user@mydomain.com" Password="pass"/>
<Paxes>
<Pax IdPax="1">
<Age>35</Age>
</Pax>
<Pax IdPax="2">
<Age>30</Age>
</Pax>
<Pax IdPax="3">
<Age>40</Age>
</Pax>
</Paxes>
<HotelRequest>
<SearchSegmentsHotels>
<SearchSegmentHotels Start="2019-11-20" End="2019-11-22"/>
<CountryOfResidence>ES</CountryOfResidence>
<HotelCodes>
<HotelCode>JP046300</HotelCode>
<HotelCode>JP150074</HotelCode>
<HotelCode>JP046391</HotelCode>
</HotelCodes>
</SearchSegmentsHotels>
<RelPaxesDist>
<RelPaxDist>
<RelPaxes>
<RelPax IdPax="1"/>
<RelPax IdPax="2"/>
<RelPax IdPax="3"/>
</RelPaxes>
</RelPaxDist>
</RelPaxesDist>
</HotelRequest>
<AdvancedOptions>
<ShowHotelInfo>false</ShowHotelInfo>
<ShowOnlyBestPriceCombination>true</ShowOnlyBestPriceCombination>
<TimeOut>8000</TimeOut>
</AdvancedOptions>
</HotelAvailRQ>
</HotelAvail>
</soapenv:Body>
</soapenv:Envelope>
Node / Attribute (@) | Opt | Type | Description |
---|---|---|---|
@Url | N | String | URL endpoint |
@TimeStamp | N | DateTime | Response date and time. Format: yyyy-MM-ddThh:mm:ss (UTC) |
@IntCode | N | String | Internal control code |
{Errors} | Y | - | Applicable errors. |
{Warnings} | Y | - | Applicable warnings. |
Results | Y | - | List of results |
./Results/HotelResult | N | - | Hotel result |
./HotelResult/@Code | N | String | Hotel code |
./HotelResult/@JPCode | N | String | Hotel JPCode, this is a unique hotel code that identifies the hotel on the system. It is important to note that, when the warning warnObsoleteJPCode is shown, this property will identify the master JPCode related to the synonym JPCode that has been initially requested. |
./HotelResult/@DestinationZone | N | String | Destination Code |
./HotelResult/@JPDCode | N | String | Shared zone identificator between all Juniper clients. |
./HotelResult/@BestDeal | N | Boolean | Indicates if the hotel is a BestDeal. |
./HotelResult/@Type | N | String | Type of hotel. Posible values: • HOTEL • ACCOMMODATION |
./HotelResult/HotelInfo | Y | - | Hotel basic information. By default they are not displayed. To do so, please, use the Extra ShowHotelInfo. |
./HotelInfo/Name | Y | String | Hotel name |
./HotelInfo/Description | Y | String | Hotel description |
./HotelInfo/Images | Y | - | List of images |
./Images/Image | Y | String | URL image |
./HotelInfo/HotelChain | Y | - | Hotel chain |
./HotelChain/Name | Y | String | Hotel chain name |
./HotelInfo/HotelCategory | Y | String | Hotel category |
./HotelCategory/@Type | Y | String | Hotel category type |
./HotelInfo/PropertyType | Y | String | Property type. This value will only be returned on those hotels that allow PropertyType filtering. |
./PropertyType/@Type | Y | String | Property type code |
./HotelInfo/Label | Y | - | Label of this hotel. |
./Label/@Code | Y | Integer | Label Code |
./Label/@SortPriority | Y | Integer | Sort order of this label |
./Label/Description | Y | String | Label description |
./HotelInfo/HotelType | Y | String | Hotel type |
./HotelType/@Type | Y | String | Hotel type type |
./HotelInfo/Address | Y | String | Hotel address |
./HotelInfo/TimeInformation | Y | - | Hotel time information |
./TimeInformation/CheckTime | Y | - | Hotel checkin and checkout times |
./CheckTime/@CheckIn | Y | String | Hotel checkin time |
./CheckTime/@CheckOut | Y | String | Hotel checkout time |
./HotelInfo/Latitude | Y | String | Hotel latitude |
./HotelInfo/Longitude | Y | String | Hotel lontitude |
./HotelInfo/{ContentProviders} | Y | - | List of hotel media content |
./HotelResult/HotelOptions | N | - | List of combinations |
./HotelOptions/HotelOption | N | - | Room combination |
./HotelOption/@RatePlanCode | Y | String | Code that identifies the combination. It will be required in subsequent requests in order to continue with the booking flow. It is not recommended for you to cache the same on a long period of time (as the higher the time the more likely for the subsequent request to fail due to lack of availability). If missing, it will imply that this combination will require an additional mono hotel availability request (an availability request that includes the HotelCode of the mentioned hotel) which will then supply you with all of the available combinations for this hotel. |
./HotelOption/@Status | Y | String | Availability status. Posible values: • OK – Available • RQ – On Request |
./HotelOption/@PaymentDestination | Y | Boolean | Indicates if the payment is made by the hotel with the final user credit card. If not specified, false is assumed. If you want to confirm a payment in destination booking, the credit card must be provided in the HotelBooking request (as a guarantee). Payment in destination is deactivated by default. In order to get results with payment in destination, you must specify it in the availability request. |
./HotelOption/@NonRefundable | Y | Boolean | Indicates if the combination is non refundable. If it’s true, the cancellation will have a 100% penalty cost from the date in which the booking is confirmed. |
./HotelOption/@PackageContract | Y | Boolean | Indicates if the combination is a package contact |
./HotelOption/@DynamicInventory | Y | Boolean | Indicates if the combination is a dynamic inventory |
./HotelOption/@ExtranetContract | Y | Boolean | Indicates if any of the contracts involved in this combination are managed though the extranet. It is not available for all of the hotels. |
./HotelOption/Supplier | Y | - | Supplier information. Restricted. |
./Supplier/@Code | Y | String | Supplier code |
./Supplier/@IntCode | Y | String | Supplier internal code |
./HotelOption/Board | Y | String | Board plan name/description. |
./Board/@Type | Y | String | Board plan type. It's important to understand that this property is optional, as some results may not have a typified board plan type mapping available. |
./Board/@Code | Y | String | Board plan internal code. This optional information requires for a specific permission to be enabled. |
./Board/@ExternalCode | Y | String | Board plan external code. This optional information requires for a specific permission to be enabled. |
./HotelOption/{Prices} | N | - | Prices |
./HotelOption/{CancellationPolicy} | Y | - | Cancellation policies. Refer to the HotelBookingRules step for examples. Note that this information is only available on directly contracted hotels through the use of the ShowCancellationPolicies option. |
./HotelOption/{CancellationPolicyCost} | Y | - | Cost cancellation policies. In addition to the mentioned above, this is restricted information, contract with Juniper for more information. |
./HotelOption/HotelRooms | N | - | List of rooms |
./HotelRooms/HotelRoom | N | - | Room |
./HotelRoom/@Units | Y | Integer | Number of rooms |
./HotelRoom/@Source | Y | String | Room identifier within the list. Example: “1”, “2”, “1,2” (if Units > 1) |
./HotelRoom/@AvailRooms | Y | Integer | Available rooms |
./HotelRoom/@Code | Y | String | Room code. This optional information requires for a specific permission to be enabled. |
./HotelRoom/@CombinationCode | Y | String | Room combination code. This optional information requires for a specific permission to be enabled and is mainly meant for PUSH-PULL integrations. |
./HotelRoom/@JRCode | Y | String | Juniper room code. If available (as this transaction requires for the unique hotel module and for the room mapping feature to be available), you will be capable of retrieving a list with all of the available JRCodes of a specific Juniper supplier through the use of the RoomList transaction. |
./HotelRoom/Name | Y | String | Room type name |
./HotelRoom/Description | Y | String | Room description |
./HotelRoom/RoomCategory | Y | String | Room category |
./RoomCategory/@Type | Y | String | Room category type |
./RoomCategory/@Code | Y | String | Room category code. This optional information requires for a specific permission to be enabled. |
./HotelRoom/RoomOccupancy | Y | - | Room occupancy details |
./RoomOccupancy/@Occupancy | Y | Integer | Total room occupancy |
./RoomOccupancy/@MaxOccupancy | Y | Integer | Maximum occupancy per room |
./RoomOccupancy/@MinOccupancy | Y | Integer | Minimum occupancy per room |
./RoomOccupancy/@Adults | Y | Integer | Adult occupancy per room |
./RoomOccupancy/@MaxAdults | Y | Integer | Maximum adult occupancy per room |
./RoomOccupancy/@MinAdults | Y | Integer | Minimum adult occupancy per room |
./RoomOccupancy/@Children | Y | Integer | Children occupancy per room |
./RoomOccupancy/@MaxChildren | Y | Integer | Maximum children occupancy per room |
./HotelRoom/Rate | Y | - | Rate information. This optional information requires for a specific permission to be enabled. |
./Rate/@Type | N | String | Rate information type. Posible values: • Private |
./HotelRoom/Contracts | Y | - | Combination contract information. This optional information requires for a specific permission to be enabled. |
./Contracts/Contract | Y | - | Contract |
./Contract/@IntCode | Y | String | Contract code |
./Contract/@IsSalesContract | Y | Boolean | Indicates if it is a sales (true) or a cost (false) contract |
./Contract/@Type | Y | String | Contract type |
./Contract/@ExternalType | Y | String | External contract type |
./Contract/@Name | Y | String | Contract name |
./Contract/Days | Y | - | Days on which each contract applies |
./Days/Day | Y | Integer | Day on which the contract applies (starting at 0) |
./Day/@AvailRooms | Y | Integer | Optional information that conveys the number of available rooms. Requires for the ShowAvailabilityBreakdown option to be included at the request. |
./HotelOption/{AdditionalElements} | Y | - | Additional elements that contain a combination, such as offers or supplements. The prices are included in the total price of the combination. |
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<HotelAvailResponse xmlns="http://www.juniper.es/webservice/2007/">
<AvailabilityRS Url="http://xml-uat.bookingengine.es" TimeStamp="2019-10-02T16:59:02.6731054+02:00" IntCode="lfCSSOSzATn9XmWSToAWAXrPcfJUutKhnLRF3+UIf70=">
<Results>
<HotelResult Code="JP150074" JPCode="JP150074" JPDCode="JPD086188" BestDeal="false" DestinationZone="48782">
<HotelOptions>
<HotelOption RatePlanCode="bseM9QAwf0kqHpQVCRbxJ+QmgH4snflsSkx3RWyY+aDPNrKniKsx6TJDOPbgpZCq15cR1LBHAHoWhYpd1dTyjBv6H1YKq7Yo1nlMwmP20c0VLH....." Status="OK" NonRefundable="false" PackageContract="false">
<Board Type="AD">BED AND BREAKFAST</Board>
<Prices>
<Price Type="S" Currency="EUR">
<TotalFixAmounts Gross="218.64" Nett="218.64">
<Service Amount="218.64"/>
</TotalFixAmounts>
</Price>
</Prices>
<HotelRooms>
<HotelRoom Units="1" Source="1">
<Name>DOUBLE SINGLE USE STANDARD</Name>
<RoomCategory Type="DUS.ST"/>
</HotelRoom>
<HotelRoom Units="1" Source="2">
<Name>Double or Twin STANDARD</Name>
<RoomCategory Type="DBT.ST"/>
</HotelRoom>
</HotelRooms>
<AdditionalElements>
<HotelOffers>
<HotelOffer Begin="2019-11-20" End="2019-11-22" RoomCategory="DUS.ST">
<Name>Special Offer</Name>
<Description>Special offer - Special offer</Description>
</HotelOffer>
</HotelOffers>
</AdditionalElements>
</HotelOption>
<HotelOption RatePlanCode="bseM9QAwf0kqHpQVCRbxJ+QmgH4snflsSkx3RWyY+aAkwFCoaVOcE2JyDqqO2slDqZ4xlFV0G5rAUxS7yPIx7WRT5aHDWukvZwtRpCm....." Status="OK" NonRefundable="false" PackageContract="false">
<Board Type="MP">HALF BOARD</Board>
<Prices>
<Price Type="S" Currency="EUR">
<TotalFixAmounts Gross="237.5" Nett="237.5">
<Service Amount="237.5"/>
</TotalFixAmounts>
</Price>
</Prices>
<HotelRooms>
<HotelRoom Units="1" Source="1">
<Name>DOUBLE SINGLE USE STANDARD</Name>
<RoomCategory Type="DUS.ST"/>
</HotelRoom>
<HotelRoom Units="1" Source="2">
<Name>Double or Twin STANDARD</Name>
<RoomCategory Type="DBT.ST"/>
</HotelRoom>
</HotelRooms>
<AdditionalElements>
<HotelOffers>
<HotelOffer Begin="2019-11-20" End="2019-11-22" RoomCategory="DUS.ST">
<Name>Special Offer</Name>
<Description>Special offer. Special offer</Description>
</HotelOffer>
</HotelOffers>
</AdditionalElements>
</HotelOption>
</HotelOptions>
</HotelResult>
<HotelResult Code="JP046391" JPCode="JP046391" JPDCode="JPD079092" BestDeal="false" DestinationZone="42455">
<HotelOptions>
<HotelOption RatePlanCode="c98OjjwLn7d5JZZLls8jXfugjnkj+Fw/gQB8GgU4C2cCQgyWG50bpVdAw0Yk8V6RCNF45xgKKBxe791BH1FgsijwG4/2OBdJvmM+b4r....." Status="OK" NonRefundable="true" PackageContract="false">
<Board Type="SA">ROOM ONLY</Board>
<Prices>
<Price Type="S" Currency="EUR">
<TotalFixAmounts Gross="249.8" Nett="249.8">
<Service Amount="249.8"/>
</TotalFixAmounts>
</Price>
</Prices>
<HotelRooms>
<HotelRoom Units="1" Source="1">
<Name>DOUBLE SINGLE USE STANDARD</Name>
<RoomCategory Type="DUS.ST"/>
</HotelRoom>
<HotelRoom Units="1" Source="2">
<Name>Double or Twin STANDARD</Name>
<RoomCategory Type="DBT.ST"/>
</HotelRoom>
</HotelRooms>
<AdditionalElements>
<HotelOffers>
<HotelOffer Begin="2019-11-20" End="2019-11-22" RoomCategory="DUS.ST">
<Name>Non-refundable rate. No amendments permitted</Name>
<Description>Non-refundable rate. No amendments permitted</Description>
</HotelOffer>
</HotelOffers>
</AdditionalElements>
</HotelOption>
</HotelOptions>
</HotelResult>
<HotelResult Code="JP046300" JPCode="JP046300" JPDCode="JPD086855" BestDeal="false" DestinationZone="49435">
<HotelOptions>
<HotelOption RatePlanCode="ya79dM4dS6R6EywV4XhfEvwItLN5sfa4xcKoRWYtG4YXaAFcoYl/FpRuCFCh+uxEwbrmOsEggbZmAGCui7pl+tgMj/w39NVt....." Status="OK" NonRefundable="true" PackageContract="false">
<Board Type="SA">Room Only</Board>
<Prices>
<Price Type="S" Currency="EUR">
<TotalFixAmounts Gross="447.13" Nett="447.13">
<Service Amount="406.48"/>
<ServiceTaxes Included="false" Amount="40.65"/>
</TotalFixAmounts>
</Price>
</Prices>
<HotelRooms>
<HotelRoom Units="1" Source="1" AvailRooms="100">
<Name>Non refundable room</Name>
<RoomCategory Type="2">Category 2</RoomCategory>
<RoomOccupancy Occupancy="1" Adults="1" Children="0"/>
</HotelRoom>
<HotelRoom Units="1" Source="2" AvailRooms="99">
<Name>Non refundable room</Name>
<RoomCategory Type="2">Category 2</RoomCategory>
<RoomOccupancy Occupancy="2" Adults="1" Children="1"/>
</HotelRoom>
</HotelRooms>
<AdditionalElements>
<HotelOffers>
<HotelOffer Code="843" Category="GEN">
<Name>[2019] 5% discount</Name>
<Description>Offer description</Description>
</HotelOffer>
</HotelOffers>
</AdditionalElements>
</HotelOption>
<HotelOption RatePlanCode="ya79dM4dS6R6EywV4XhfEvwItLN5sfa4xcKoRWYtG4YXaAFcoYl/FpRuCFCh+uxEwbrmOsEggbZmAGCui7pl+tgMj/w39N....." Status="OK" NonRefundable="true" PackageContract="false">
<Board Type="SA">Room Only</Board>
<Prices>
<Price Type="S" Currency="EUR">
<TotalFixAmounts Gross="447.13" Nett="447.13">
<Service Amount="406.48"/>
<ServiceTaxes Included="false" Amount="40.65"/>
</TotalFixAmounts>
</Price>
</Prices>
<HotelRooms>
<HotelRoom Units="1" Source="1" AvailRooms="800">
<Name>Single</Name>
<RoomCategory Type="1">Category 1</RoomCategory>
<RoomOccupancy Occupancy="1" Adults="1" Children="0"/>
</HotelRoom>
<HotelRoom Units="1" Source="2" AvailRooms="100">
<Name>Non refundable room</Name>
<RoomCategory Type="2">Category 2</RoomCategory>
<RoomOccupancy Occupancy="2" Adults="1" Children="1"/>
</HotelRoom>
</HotelRooms>
<AdditionalElements>
<HotelOffers>
<HotelOffer Code="843" Category="GEN">
<Name>[2019] 5% discount</Name>
<Description>Offer description</Description>
</HotelOffer>
</HotelOffers>
</AdditionalElements>
</HotelOption>
</HotelOptions>
</HotelResult>
</Results>
</AvailabilityRS>
</HotelAvailResponse>
</soap:Body>
</soap:Envelope>
This service retrieves a calendar of hotel availability for specific hotels and dates. It returns a single availability for each range of dates. Each date range depends on the number of nights you want to obtain.
The following example is an availability request, and mandatory information for this request is:
You can also filter by board and/or room type.
Node / Attribute (@) | Opt | Type | Description |
---|---|---|---|
@Version | N | String | Web Service version |
@Language | N | String | Language in which the response will be returned. Please, contact Juniper for available languages. |
{Login} | N | - | Customer login to access the Web Service |
{Paxes} | N | - | Indicates the passenger information. Array of passangers. Fields necessary for this transaction: • @IdPax (Required) • Age (Optional for adults) |
HotelCalendarRequest | N | - | - |
./HotelCalendarRequest/SearchSegmentsHotels | N | - | Search properties. Hotels have only 1 SearchSegmentsHotels type |
./SearchSegmentsHotels/SearchSegmentHotel | N | - | Basic search properties |
./SearchSegmentHotel/@Start | N | Date | Check-In date. Format: yyyy-MM-dd |
./SearchSegmentHotel/@End | N | Date | Check-out date. Format: yyyy-MM-dd |
./SearchSegmentsHotels/Nights | N | Integer | Number of nights of each day of the calendar |
./SearchSegmentsHotels/HotelCodes | Y | - | |
./HotelCodes/HotelCode | N | String | Hotel Code. Limited to 1 per request. You can get the codes by requesting a common availability |
./SearchSegmentsHotels/CountryOfResidence | N | String | Nationality of the holder of the booking. Please note that the nationality of the holder will have to be consistent between all of the steps of the booking flow and that, consequently, you will have to set the nationality of the holder along the same value on the HotelBooking request. This code follows the ISO-3166-1 standard, you may refer to the FAQ section for further information. |
./SearchSegmentsHotels/Boards | Y | - | With this option you can specify the meal plan board you wish. Currently our system only allows 1. NOT IMPLEMENTED |
./Boards/Board | Y | - | Board information |
./Board/@Type | N | String | Board Code. Ask Juniper for available boards. At this moment it is not possible to specify more than one board. |
./HotelCalendarRequest/RelPaxesDist | N | - | Passenger distribution. Normally you can search up to 3 rooms, but this number can change depending on the supplier. Please contact Juniper’s support for more information |
./RelPaxesDist/RelPaxDist | N | - | Distribution list. Each one them corresponds to a room. |
./RelPaxDist/RelPaxes | N | - | Passengers list of this distribution/room. |
./RelPaxes/RelPax | N | - | Passenger |
./RelPax/@IdPax | N | Integer | Passenger Identifier. It should match with a Pax@IdPax |
./RelPaxDist/RoomCategories | Y | - | Room category |
./RoomCategories/RoomCategory | N | - | Room category |
./RoomCategory/@Type | N | String | Room category type. You can get the complete list with HotelCatalogueData. |
AdvancedOptions | Y | - | Optional parameters. |
./AdvancedOptions/ShowBreakdownPrice | Y | Boolean | If the value is true, it will show the full price object with all the information about the prices. If not specified, false is assumed by default. |
./AdvancedOptions/ShowHotelInfo | Y | Boolean | If the value is true, it will show extra information about the hotels. |
./AdvancedOptions/ShowOnlyAvailable | Y | Boolean | If the value is true, it will only show rooms with availability. If not specified, it will show all the rooms. If you plan on using this option, then please refer to the following section from the FAQ. |
./AdvancedOptions/ShowAllCombinations | Y | Boolean | If the value is true, it will show all the possible room combinations. |
./AdvancedOptions/ShowAllChildrenCombinations | Y | Boolean | If the value is true, it will show all the available combinations assuming children as adults. This may result in a slower response. This option only applies for directly contracted hotels. |
./AdvancedOptions/UseCurrency | Y | String | This value allows you to set the currency code that will be used on the booking flow process. It is important to note that if a currency is specified on the availability request, you will then need to set the same AdvancedOption along the same value on the rest of the booking flow transactions. It is also important to note that the list of available currencies for your use (if any, as the feature could not be available) will entirely depend of the Juniper supplier that you will be connecting to. Last of all, please note that if no currency is set on the request the system will then use the default currency configured by your Juniper supplier. |
We look for 1 room with 2 adults:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://www.juniper.es/webservice/2007/">
<soapenv:Header/>
<soapenv:Body>
<HotelAvailCalendar>
<HotelAvailCalendarRQ Version="1.1" Language="en">
<Login Email="user@mydomain.com" Password="pass"/>
<Paxes>
<Pax IdPax="1"/>
<Pax IdPax="2"/>
</Paxes>
<HotelCalendarRequest>
<SearchSegmentsHotels>
<SearchSegmentHotels Start="2019-11-02" End="2019-11-03"/>
<Nights>2</Nights>
<HotelCodes>
<HotelCode>JP046300</HotelCode>
</HotelCodes>
<CountryOfResidence>ES</CountryOfResidence>
</SearchSegmentsHotels>
<RelPaxesDist>
<RelPaxDist>
<RelPaxes>
<RelPax IdPax="1"/>
<RelPax IdPax="2"/>
</RelPaxes>
</RelPaxDist>
</RelPaxesDist>
</HotelCalendarRequest>
</HotelAvailCalendarRQ>
</HotelAvailCalendar>
</soapenv:Body>
</soapenv:Envelope>
Node / Attribute (@) | Opt | Type | Description |
---|---|---|---|
@Url | N | String | URL endpoint |
@TimeStamp | N | DateTime | Response date and time. Format: yyyy-MM-ddThh:mm:ss (UTC) |
@IntCode | N | String | Internal control code |
{Errors} | Y | - | Applicable errors. |
{Warnings} | Y | - | Applicable warnings. |
Results | N | - | List of results |
./Results/HotelCalendarResult | N | - | List of availabilities by date range |
./HotelCalendarResult/@Start | N | Date | Check in date Format: yyyy-MM-dd |
./HotelCalendarResult/@End | N | Date | Check out date Format: yyyy-MM-dd |
./HotelCalendarResult/HotelResults | N | - | List of hotels. Limited to 1 HotelResult by request |
./HotelResults/HotelResult | N | - | List of available combinations |
./HotelResult/@Code | N | String | Hotel code |
./HotelResult/@JPCode | N | String | Hotel JPCode, this is a unique hotel that identifies the hotel on the system. |
./HotelResult/@DestinationZone | N | String | Destination Code |
./HotelResult/@JPDCode | N | String | Shared zone identificator between all Juniper clients. |
./HotelResult/HotelOptions | N | - | List of combinations |
./HotelOptions/HotelOption | N | - | Room combination |
./HotelOption/@RatePlanCode | N | String | Code that identifies the combination. If it is not specified, it will mean that the combination requires another availability request with the HotelCode specified in order to return all of its valid combinations. |
./HotelOption/@Status | Y | String | Availability status. Posible values: • OK – Available • RQ – On Request |
./HotelOption/@NonRefundable | Y | Boolean | Indicates if the combination is non refundable. If it’s true, the cancellation will have a 100% penalty cost from the date in which the booking is confirmed. |
./HotelOption/@ExtranetContract | Y | Boolean | Indicates if any of the contracts involved in this combination are managed though the extranet. It is not available for all of the hotels. |
./HotelOption/Supplier | Y | - | Supplier information. Restricted. |
./Supplier/@Code | Y | String | Supplier code |
./Supplier/@IntCode | Y | String | Supplier internal code |
./HotelOption/Board | Y | String | Room board / meal plan |
./Board/@Type | Y | String | Board type |
./HotelOption/{Prices} | N | - | Prices |
./HotelOption/HotelRooms | N | - | List of rooms |
./HotelRooms/HotelRoom | N | - | Room |
./HotelRoom/@Units | Y | Integer | Number of rooms |
./HotelRoom/@Source | Y | String | Room identifier within the list. Example: “1”, “2”, “1,2” (if Units > 1) |
./HotelRoom/@AvailRooms | Y | Integer | Available rooms |
./HotelRoom/@CombinationCode | Y | String | Room combination code. This optional information requires for a specific permission to be enabled and is mainly meant for PUSH-PULL integrations. |
./HotelRoom/Name | Y | String | Room type name |
./HotelRoom/Description | Y | String | Room description |
./HotelRoom/RoomCategory | Y | String | Room category |
./RoomCategory/@Type | Y | String | Room category type |
./HotelOption/{AdditionalElements} | Y | - | Additional elements that contain a combination, such as offers or supplements. The prices are included in the total price of the combination. |
The request is from 2019-11-02 to 2019-11-03, with a range of 2 nights. The Web service returns the following date ranges:
-[2019-11-02 – 2019-11-04]
-[2019-11-03 – 2019-11-05]
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<HotelAvailCalendarResponse xmlns="http://www.juniper.es/webservice/2007/">
<AvailabilityRS Url="http://xml-uat.bookingengine.es" TimeStamp="2019-10-02T17:14:42.2211786+02:00" IntCode="8O9I7aVOYqHwvRJ1p7VQt2aAiGCs4VsN4GapOC1G2lE=">
<Results>
<HotelCalendarResult Start="2019-11-02" End="2019-11-04">
<HotelResults>
<HotelResult Code="JP046300" JPCode="JP046300" JPDCode="JPD086855" BestDeal="false" DestinationZone="49435">
<HotelOptions>
<HotelOption RatePlanCode="ya79dM4dS6R6EywV4XhfEhYs9BsOUYbdP3281rKZt7BK9uqQB01iEUwps6+SM0DUxXdca2UaWlPHtr/4zsPU0JkwgiyKoHNBVXkhjiJJgP9WIIqYgzm....." Status="OK" NonRefundable="true" PackageContract="false">
<Board Type="SA">Room Only</Board>
<Prices>
<Price Type="S" Currency="EUR">
<TotalFixAmounts Gross="223.56" Nett="223.56">
<Service Amount="203.24"/>
<ServiceTaxes Included="false" Amount="20.32"/>
</TotalFixAmounts>
</Price>
</Prices>
<HotelRooms>
<HotelRoom Units="1" Source="1" AvailRooms="88">
<Name>Non refundable room</Name>
<RoomCategory Type="2">Category 2</RoomCategory>
<RoomOccupancy Occupancy="2" Adults="2" Children="0"/>
</HotelRoom>
</HotelRooms>
<AdditionalElements>
<HotelOffers>
<HotelOffer Code="843" Category="GEN">
<Name>[2019] 5% discount</Name>
<Description>Offer description</Description>
</HotelOffer>
</HotelOffers>
</AdditionalElements>
</HotelOption>
<HotelOption RatePlanCode="ya79dM4dS6R6EywV4XhfEhYs9BsOUYbdP3281rKZt7At10uXvmQdPdJf6eOBuZ0wg5UVz7pE3iBr2vHmSZrRCFt7F1UGyT77IVPVO7H1tUiSQ....." Status="OK" NonRefundable="true" PackageContract="false">
<Board Type="MP">Half Board</Board>
<Prices>
<Price Type="S" Currency="EUR">
<TotalFixAmounts Gross="335.35" Nett="335.35">
<Service Amount="304.86"/>
<ServiceTaxes Included="false" Amount="30.49"/>
</TotalFixAmounts>
</Price>
</Prices>
<HotelRooms>
<HotelRoom Units="1" Source="1" AvailRooms="88">
<Name>Non refundable room</Name>
<RoomCategory Type="2">Category 2</RoomCategory>
<RoomOccupancy Occupancy="2" Adults="2" Children="0"/>
</HotelRoom>
</HotelRooms>
<AdditionalElements>
<HotelOffers>
<HotelOffer Code="843" Category="GEN">
<Name>[2019] 5% discount</Name>
<Description>Offer description</Description>
</HotelOffer>
</HotelOffers>
</AdditionalElements>
</HotelOption>
</HotelOptions>
</HotelResult>
</HotelResults>
</HotelCalendarResult>
<HotelCalendarResult Start="2019-11-03" End="2019-11-05">
<HotelResults>
<HotelResult Code="JP046300" JPCode="JP046300" JPDCode="JPD086855" BestDeal="false" DestinationZone="49435">
<HotelOptions>
<HotelOption RatePlanCode="ya79dM4dS6R6EywV4XhfEiYGp/cqHKNOZWADsIB1Au1ieW1WyRnU833NUg75xUnQ7EHGfWItFMAQHCXiTV7U1tsge....." Status="OK" NonRefundable="true" PackageContract="false">
<Board Type="SA">Room Only</Board>
<Prices>
<Price Type="S" Currency="EUR">
<TotalFixAmounts Gross="223.56" Nett="223.56">
<Service Amount="203.24"/>
<ServiceTaxes Included="false" Amount="20.32"/>
</TotalFixAmounts>
</Price>
</Prices>
<HotelRooms>
<HotelRoom Units="1" Source="1" AvailRooms="88">
<Name>Non refundable room</Name>
<RoomCategory Type="2">Category 2</RoomCategory>
<RoomOccupancy Occupancy="2" Adults="2" Children="0"/>
</HotelRoom>
</HotelRooms>
<AdditionalElements>
<HotelOffers>
<HotelOffer Code="843" Category="GEN">
<Name>[2019] 5% discount</Name>
<Description>Offer description</Description>
</HotelOffer>
</HotelOffers>
</AdditionalElements>
</HotelOption>
<HotelOption RatePlanCode="ya79dM4dS6R6EywV4XhfEiYGp/cqHKNOZWADsIB1Au2z+eaYewkjvx4BbcY+/G0pSQbeHLeJxf1BLqXukCYHNKGcGSjwZK....." Status="OK" NonRefundable="true" PackageContract="false">
<Board Type="MP">Half Board</Board>
<Prices>
<Price Type="S" Currency="EUR">
<TotalFixAmounts Gross="335.35" Nett="335.35">
<Service Amount="304.86"/>
<ServiceTaxes Included="false" Amount="30.49"/>
</TotalFixAmounts>
</Price>
</Prices>
<HotelRooms>
<HotelRoom Units="1" Source="1" AvailRooms="88">
<Name>Non refundable room</Name>
<RoomCategory Type="2">Category 2</RoomCategory>
<RoomOccupancy Occupancy="2" Adults="2" Children="0"/>
</HotelRoom>
</HotelRooms>
<AdditionalElements>
<HotelOffers>
<HotelOffer Code="843" Category="GEN">
<Name>[2019] 5% discount</Name>
<Description>Offer description</Description>
</HotelOffer>
</HotelOffers>
</AdditionalElements>
</HotelOption>
</HotelOptions>
</HotelResult>
</HotelResults>
</HotelCalendarResult>
</Results>
</AvailabilityRS>
</HotelAvailCalendarResponse>
</soap:Body>
</soap:Envelope>
This transaction allows for the retrieval of ranges of future dates. It can also make availability requests with the ability to bypass most mandatory filters. It has a similar functionality of the HotelAvailCalendar where it sends a range of dates and defines duration of the stay. The service will display all available rates for the date range and duration of stay indicated.
The service is inactive by default and is only available for directly contracted hotels. Please contact Juniper if you would like access to this service.
The only required information will be the date range (start/end) for which you may wish to obtain the rates. This transaction alos has the following optional information:
You can also filter by board and/or room type.
Node / Attribute (@) | Opt | Type | Description |
---|---|---|---|
@Version | N | String | Web Service version |
@Language | N | String | Language in which the response will be returned. Please, contact Juniper for available languages. |
{Login} | N | - | Customer login to access the Web Service |
{Paxes} | N | - | Indicates the passenger information. Array of passangers. Fields necessary for this transaction: • @IdPax (Required) • Age (Optional for adults) |
HotelFutureRatesRequest | N | - | - |
./HotelFutureRatesRequest/SearchSegmentsHotelFutureRates | N | - | Search properties. Hotels have only 1 SearchSegmentsHotels type |
./SearchSegmentsHotelFutureRates/SearchSegmentHotels | N | - | Basic search properties |
./SearchSegmentHotels/@Start | N | Date | If Nights > 0: start date range If Nights = 0: check-in date Format: yyyy-MM-dd |
./SearchSegmentHotels/@End | N | Date | If Nights > 0: end date range If Nights = 0: check-out date Format: yyyy-MM-dd |
./SearchSegmentHotels/@DestinationZone | Y | Date | Destination zone determined for the search. This is an optional parameter, if no value is specified the 10 most common/searched destinations will be displayed instead. |
./SearchSegmentHotels/@JPDCode | Y | Date | Shared zone identificator between all Juniper clients. This is an optional parameter, if no value is specified the 10 most common/searched destinations will be displayed instead. |
./SearchSegmentHotels/Nights | N | Integer | Number of nights in each calendar day. If not specified, it will take @Start/@End as common stay dates, not as a date range. |
./SearchSegmentHotels/HotelCodes | Y | - | |
./HotelCodes/HotelCode | N | String | Hotel Code. |
./SearchSegmentHotels/CountryOfResidence | N | String | Nationality of the holder of the booking. Please note that the nationality of the holder will have to be consistent between all of the steps of the booking flow and that, consequently, you will have to set the nationality of the holder along the same value on the HotelBooking request. This code follows the ISO-3166-1 standard, you may refer to the FAQ section for further information. |
./SearchSegmentHotels/Boards | Y | - | With this option you can specify the meal plan board you wish. Currently our system only allows 1. |
./Boards/Board | Y | - | Board information |
./Board/@Type | N | String | Board Code. Ask Juniper for available boards. At this moment it is not possible to specify more than one board. |
./SearchSegmentsHotelFutureRates/RelPaxesDist | N | - | Specifies Passenger distribution. It is important to note that the distributions will not be grouped in combinations such as in availability. That is, each distribution will generate a different result. This is an optional parameter. If not specified will be searched 8 most common distributions: 1AD, 2AD, 3AD, 4AD, 1AD+1CH, 1AD+2CH, 2AD+2CH, 3AD+2CH. |
./RelPaxesDist/RelPaxDist | N | - | Distribution list. Each one them corresponds to a room. |
./RelPaxDist/RelPaxes | N | - | Passengers list of this distribution/room. |
./RelPaxes/RelPax | N | - | Passenger |
./RelPax/@IdPax | N | Integer | Passenger Identifier. It should match with a Pax@IdPax |
./RelPaxDist/RoomCategories | Y | - | Room category |
./RoomCategories/RoomCategory | N | - | Room category |
./RoomCategory/@Type | N | String | Room category type. Ask Juniper for available room categories. |
AdvancedOptions | Y | - | Optional parameters. |
./AdvancedOptions/ShowBreakdownPrice | Y | Boolean | If the value is true, it will show the full price object with all the information about the prices. If not specified, false is assumed by default. |
./AdvancedOptions/ShowHotelInfo | Y | Boolean | If the value is true, it will show extra information about the hotels. |
./AdvancedOptions/ShowOnlyAvailable | Y | Boolean | If the value is true, it will only show rooms with availability. If not specified, it will show all the rooms. If you plan on using this option, then please refer to the following section from the FAQ. |
./AdvancedOptions/ShowAllCombinations | Y | Boolean | If the value is true, it will show all the possible room combinations. |
./AdvancedOptions/UseCurrency | Y | String | This value allows you to set the currency code that will be used on the booking flow process. It is important to note that if a currency is specified on the availability request, you will then need to set the same AdvancedOption along the same value on the rest of the booking flow transactions. It is also important to note that the list of available currencies for your use (if any, as the feature could not be available) will entirely depend of the Juniper supplier that you will be connecting to. Last of all, please note that if no currency is set on the request the system will then use the default currency configured by your Juniper supplier. |
Example 1: A basic request without filters. In this example we want to obtain all possible results for the dates: November 02 to November 03. The system will gather the default values needed for the search and apply the default filters as previously stated: 10 most common/searched destinations, for 8 distributions.
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://www.juniper.es/webservice/2007/">
<soapenv:Header/>
<soapenv:Body>
<HotelFutureRates>
<HotelFutureRatesRQ Version="1.1" Language="en">
<Login Email="user@mydomain.com" Password="pass"/>
<HotelFutureRatesRequest>
<SearchSegmentsHotelFutureRates>
<SearchSegmentHotels Start="2019-11-02" End="2019-11-03"/>
<CountryOfResidence>ES</CountryOfResidence>
</SearchSegmentsHotelFutureRates>
</HotelFutureRatesRequest>
</HotelFutureRatesRQ>
</HotelFutureRates>
</soapenv:Body>
</soapenv:Envelope>
Example 2: We want the rates of the “JP046300” hotel on the duration of 5 nights and the range of November 02 to November 03. We will also search for rooms that can accommodate 1AD + 1CH and/or 1AD. As you can see, the request is very similar to the availability request (HotelAvail).
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://www.juniper.es/webservice/2007/">
<soapenv:Header/>
<soapenv:Body>
<HotelFutureRates>
<HotelFutureRatesRQ Version="1.1" Language="en">
<Login Email="user@mydomain.com" Password="pass"/>
<Paxes>
<Pax IdPax="1">
<Age>45</Age>
</Pax>
<Pax IdPax="2">
<Age>3</Age>
</Pax>
<Pax IdPax="3">
<Age>54</Age>
</Pax>
</Paxes>
<HotelFutureRatesRequest>
<SearchSegmentsHotelFutureRates>
<SearchSegmentHotels Start="2019-11-02" End="2019-11-03"/>
<Nights>7</Nights>
<CountryOfResidence>ES</CountryOfResidence>
<HotelCodes>
<HotelCode>JP046300</HotelCode>
</HotelCodes>
</SearchSegmentsHotelFutureRates>
<RelPaxesDist>
<RelPaxDist>
<RelPaxes>
<RelPax IdPax="1"/>
<RelPax IdPax="2"/>
</RelPaxes>
</RelPaxDist>
<RelPaxDist>
<RelPaxes>
<RelPax IdPax="3"/>
</RelPaxes>
</RelPaxDist>
</RelPaxesDist>
</HotelFutureRatesRequest>
</HotelFutureRatesRQ>
</HotelFutureRates>
</soapenv:Body>
</soapenv:Envelope>
Node / Attribute (@) | Opt | Type | Description |
---|---|---|---|
@Url | N | String | URL endpoint |
@TimeStamp | N | DateTime | Response date and time. Format: yyyy-MM-ddThh:mm:ss (UTC) |
@IntCode | N | String | Internal control code |
{Errors} | Y | - | Applicable errors. |
{Warnings} | Y | - | Applicable warnings. |
Results | N | - | List of results |
./Results/HotelFutureRatesResults | N | - | List of results |
./HotelFutureRatesResults/HotelFutureRatesResult | N | - | Result |
./HotelFutureRatesResult/ResultInfo | N | - | Basic information corresponding with the search results. Each result is tied to a specific hotel, date range and distribution. |
./ResultInfo/Start | N | Date | Check in date Format: yyyy-MM-dd |
./ResultInfo/End | N | Date | Check out date Format: yyyy-MM-dd |
./ResultInfo/DestinationZone | N | Integer | Hotel destination code. |
./ResultInfo/JPDCode | N | String | Shared zone identificator between all Juniper clients. |
./ResultInfo/Hotelcode | N | String | Hotel code |
./ResultInfo/{Paxes} | N | - | Passenger distribution resulting from the outcome of the search. Each result has only one distribution and in part, belongs to a single room. |
./HotelFutureRatesResult/HotelResult | N | - | Hotel result |
./HotelResult/@Code | N | String | Hotel code |
./HotelResult/@JPCode | N | String | Hotel JPCode, this is a unique hotel that identifies the hotel on the system. |
./HotelResult/@DestinationZone | N | String | Destination Code |
./HotelResult/@JPDCode | N | String | Shared zone identificator between all Juniper clients. |
./HotelResult/HotelOptions | N | - | List of combinations |
./HotelOptions/HotelOption | N | - | Room combination |
./HotelOption/@RatePlanCode | N | String | Code that identifies the combination. If it is not specified, it will mean that the combination requires another availability request with the HotelCode specified in order to return all of its valid combinations. |
./HotelOption/@Status | Y | String | Availability status. Posible values: • OK – Available • RQ – On Request |
./HotelOption/@NonRefundable | Y | Boolean | Indicates if the combination is non refundable. If it’s true, the cancellation will have a 100% penalty cost from the date in which the booking is confirmed. |
./HotelOption/Supplier | Y | - | Supplier information. Restricted. |
./Supplier/@Code | Y | String | Supplier code |
./Supplier/@IntCode | Y | String | Supplier internal code |
./HotelOption/Board | Y | String | Room board / meal plan |
./Board/@Type | Y | String | Board type |
./HotelOption/{Prices} | N | - | Prices |
./HotelOption/HotelRooms | N | - | List of rooms |
./HotelRooms/HotelRoom | N | - | Room |
./HotelRoom/@Units | Y | Integer | Number of rooms |
./HotelRoom/@Source | Y | String | Room identifier within the list. Example: “1”, “2”, “1,2” (if Units > 1) |
./HotelRoom/@AvailRooms | Y | Integer | Available rooms |
./HotelRoom/@CombinationCode | Y | String | Room combination code. This optional information requires for a specific permission to be enabled and is mainly meant for PUSH-PULL integrations. |
./HotelRoom/Name | Y | String | Room type name |
./HotelRoom/Description | Y | String | Room description |
./HotelRoom/RoomCategory | Y | String | Room category |
./RoomCategory/@Type | Y | String | Room category type |
./HotelOption/{AdditionalElements} | Y | - | Additional elements that contain a combination, such as offers or supplements. The prices are included in the total price of the combination. |
./HotelFutureRatesResults/WarningDetails | Y | - | If an overload has been detected, this node indicates the sensitive information and a feasible request split. |
./WarningDetails/Dates | Y | - | List of new date ranges |
./Dates/Date | N | - | Date range |
./Date/@Start | Y | Date | Start date range Format: yyyy-MM-dd |
./Date/@End | Y | Date | End date range Format: yyyy-MM-dd |
./WarningDetails/DestinationZones | Y | - | List of destination zones. Returns a list of child zones or, if it is not possible or there are too many child zones, the list you have requested. |
./DestinationZones/DestinationZone | N | String | Zone code |
./WarningDetails/HotelCodes | Y | - | List of hotel codes you have requested. It indicates that there are too many hotels. |
./HotelCodes/HotelCode | N | String | Hotel code |
./WarningDetails/Distributions | Y | - | List of distributions or “RelPaxDist” you have requested. |
./Distributions/Distribution | N | - | Distribution |
./Distribution/@Adults | N | Integer | Number of adults |
./Distribution/@Children | N | Integer | Number of children |
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<HotelFutureRatesResponse xmlns="http://www.juniper.es/webservice/2007/">
<FutureRatesRS Url="http://xml-uat.bookingengine.es" TimeStamp="2019-10-02T17:23:59.6156976+02:00" IntCode="Us8XbDHn/+T/oooOeAHxu/tl0c2D6fhTNNd5MkGp4oA=">
<Results>
<HotelFutureRatesResults>
<HotelFutureRatesResult>
<ResultInfo>
<Start>2019-11-02</Start>
<End>2019-11-09</End>
<DestinationZone>49435</DestinationZone>
<HotelCode>JP046300</HotelCode>
<Paxes>
<Pax IdPax="1">
<Age>54</Age>
</Pax>
</Paxes>
</ResultInfo>
<HotelResult Code="JP046300" JPCode="JP046300" JPDCode="JPD086855" BestDeal="false" DestinationZone="49435">
<HotelOptions>
<HotelOption RatePlanCode="ya79dM4dS6R6EywV4XhfEmuw3edCAUC5074cwzPeamWhuAzK34CQQlZLP3obHGEkRXSpeN/maDtikkVhu2ziJdFd8iI+uV1Tw....." Status="OK" NonRefundable="true" PackageContract="false">
<Board Type="SA">Room Only</Board>
<Prices>
<Price Type="S" Currency="EUR">
<TotalFixAmounts Gross="782.47" Nett="782.47">
<Service Amount="711.34"/>
<ServiceTaxes Included="false" Amount="71.13"/>
</TotalFixAmounts>
</Price>
</Prices>
<HotelRooms>
<HotelRoom Units="1" Source="1" AvailRooms="88">
<Name>Non refundable room</Name>
<RoomCategory Type="2">Category 2</RoomCategory>
<RoomOccupancy Occupancy="1" Adults="1" Children="0"/>
</HotelRoom>
</HotelRooms>
<AdditionalElements>
<HotelOffers>
<HotelOffer Code="843" Category="GEN">
<Name>[2019] 5% discount</Name>
<Description>Offer description</Description>
</HotelOffer>
</HotelOffers>
</AdditionalElements>
</HotelOption>
</HotelOptions>
</HotelResult>
</HotelFutureRatesResult>
<HotelFutureRatesResult>
<ResultInfo>
<Start>2019-11-02</Start>
<End>2019-11-09</End>
<DestinationZone>49435</DestinationZone>
<HotelCode>JP046300</HotelCode>
<Paxes>
<Pax IdPax="1">
<Age>45</Age>
</Pax>
<Pax IdPax="2">
<Age>3</Age>
</Pax>
</Paxes>
</ResultInfo>
<HotelResult Code="JP046300" JPCode="JP046300" JPDCode="JPD086855" BestDeal="false" DestinationZone="49435">
<HotelOptions>
<HotelOption RatePlanCode="ya79dM4dS6R6EywV4XhfEkuHfn1J5pSDOUi1oTeKue3q0uxcqJMjQZQSA3GRv0kDuQLRM+lpzQZf68kA9aclYacjeg2L9XO5phwNhTtEZSr+AZQv....." Status="OK" NonRefundable="true" PackageContract="false">
<Board Type="SA">Room Only</Board>
<Prices>
<Price Type="S" Currency="EUR">
<TotalFixAmounts Gross="782.47" Nett="782.47">
<Service Amount="711.34"/>
<ServiceTaxes Included="false" Amount="71.13"/>
</TotalFixAmounts>
</Price>
</Prices>
<HotelRooms>
<HotelRoom Units="1" Source="1" AvailRooms="88">
<Name>Non refundable room</Name>
<RoomCategory Type="2">Category 2</RoomCategory>
<RoomOccupancy Occupancy="2" Adults="1" Children="1"/>
</HotelRoom>
</HotelRooms>
<AdditionalElements>
<HotelOffers>
<HotelOffer Code="843" Category="GEN">
<Name>[2019] 5% discount</Name>
<Description>Offer description</Description>
</HotelOffer>
</HotelOffers>
</AdditionalElements>
</HotelOption>
<HotelOption RatePlanCode="ya79dM4dS6R6EywV4XhfEkuHfn1J5pSDOUi1oTeKue0cG1NIKIfoMnzkb155GdCjTQyQt1nDdZXegTZ5/raeBltKMC2RfQG8n94q....." Status="OK" NonRefundable="true" PackageContract="false">
<Board Type="MP">Half Board</Board>
<Prices>
<Price Type="S" Currency="EUR">
<TotalFixAmounts Gross="1173.71" Nett="1173.71">
<Service Amount="1067.01"/>
<ServiceTaxes Included="false" Amount="106.7"/>
</TotalFixAmounts>
</Price>
</Prices>
<HotelRooms>
<HotelRoom Units="1" Source="1" AvailRooms="88">
<Name>Non refundable room</Name>
<RoomCategory Type="2">Category 2</RoomCategory>
<RoomOccupancy Occupancy="2" Adults="1" Children="1"/>
</HotelRoom>
</HotelRooms>
<AdditionalElements>
<HotelOffers>
<HotelOffer Code="843" Category="GEN">
<Name>[2019] 5% discount</Name>
<Description>Offer description</Description>
</HotelOffer>
</HotelOffers>
</AdditionalElements>
</HotelOption>
</HotelOptions>
</HotelResult>
</HotelFutureRatesResult>
<HotelFutureRatesResult>
<ResultInfo>
<Start>2019-11-03</Start>
<End>2019-11-10</End>
<DestinationZone>49435</DestinationZone>
<HotelCode>JP046300</HotelCode>
<Paxes>
<Pax IdPax="1">
<Age>45</Age>
</Pax>
<Pax IdPax="2">
<Age>3</Age>
</Pax>
</Paxes>
</ResultInfo>
<HotelResult Code="JP046300" JPCode="JP046300" JPDCode="JPD086855" BestDeal="false" DestinationZone="49435">
<HotelOptions>
<HotelOption RatePlanCode="ya79dM4dS6R6EywV4XhfEsJldDWxCTZTUrEZQ7cANft3wZyh2cZWf8bV4RfzSQaMZ9NplARanDKqv+nGKtVLnKvg29gPFeNy9....." Status="OK" NonRefundable="true" PackageContract="false">
<Board Type="SA">Room Only</Board>
<Prices>
<Price Type="S" Currency="EUR">
<TotalFixAmounts Gross="782.47" Nett="782.47">
<Service Amount="711.34"/>
<ServiceTaxes Included="false" Amount="71.13"/>
</TotalFixAmounts>
</Price>
</Prices>
<HotelRooms>
<HotelRoom Units="1" Source="1" AvailRooms="88">
<Name>Non refundable room</Name>
<RoomCategory Type="2">Category 2</RoomCategory>
<RoomOccupancy Occupancy="2" Adults="1" Children="1"/>
</HotelRoom>
</HotelRooms>
<AdditionalElements>
<HotelOffers>
<HotelOffer Code="843" Category="GEN">
<Name>[2019] 5% discount</Name>
<Description>Offer description</Description>
</HotelOffer>
</HotelOffers>
</AdditionalElements>
</HotelOption>
</HotelOptions>
</HotelResult>
</HotelFutureRatesResult>
<HotelFutureRatesResult>
<ResultInfo>
<Start>2019-11-03</Start>
<End>2019-11-10</End>
<DestinationZone>49435</DestinationZone>
<HotelCode>JP046300</HotelCode>
<Paxes>
<Pax IdPax="1">
<Age>54</Age>
</Pax>
</Paxes>
</ResultInfo>
<HotelResult Code="JP046300" JPCode="JP046300" JPDCode="JPD086855" BestDeal="false" DestinationZone="49435">
<HotelOptions>
<HotelOption RatePlanCode="ya79dM4dS6R6EywV4XhfEvxr3OE+wugLVfOz++0WEiVloPXzyen5XfLmH6PXZ5U9RVj/aDmu/oCcOaSCmKFlV8O+CYGsFFJ+x....." Status="OK" NonRefundable="true" PackageContract="false">
<Board Type="SA">Room Only</Board>
<Prices>
<Price Type="S" Currency="EUR">
<TotalFixAmounts Gross="782.47" Nett="782.47">
<Service Amount="711.34"/>
<ServiceTaxes Included="false" Amount="71.13"/>
</TotalFixAmounts>
</Price>
</Prices>
<HotelRooms>
<HotelRoom Units="1" Source="1" AvailRooms="88">
<Name>Non refundable room</Name>
<RoomCategory Type="2">Category 2</RoomCategory>
<RoomOccupancy Occupancy="1" Adults="1" Children="0"/>
</HotelRoom>
</HotelRooms>
<AdditionalElements>
<HotelOffers>
<HotelOffer Code="843" Category="GEN">
<Name>[2019] 5% discount</Name>
<Description>Offer description</Description>
</HotelOffer>
</HotelOffers>
</AdditionalElements>
</HotelOption>
</HotelOptions>
</HotelResult>
</HotelFutureRatesResult>
</HotelFutureRatesResults>
</Results>
</FutureRatesRS>
</HotelFutureRatesResponse>
</soap:Body>
</soap:Envelope>
Important note:
It is important to check the Warnings node. This transaction has a security control, and if an overload is detected the process is cut off and the response returns a warning.
In this example we want to obtain all possible results for the dates August 1 to August 14, destination 15548 and 3 room distributions. The system detects an overload and returns a feasible request split:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<HotelFutureRatesResponse xmlns="http://www.juniper.es/webservice/2007/">
<FutureRatesRS Url="http://xml-uat.bookingengine.es" TimeStamp="2019-10-02T17:23:59.6156976+02:00" IntCode="onIEiyDfo40qWqfjLHDCM895/wmNSkwdC7U1m1QECg8=">
<Warnings>
<Warning Code="warnProcessExcededFutureRates" Text="Overload detected, please restrict request parameters and/or divide into several requests."/>
</Warnings>
<Results>
<HotelFutureRatesResults>
<WarningDetails>
<Dates>
<Date Start="2013-08-01" End="2013-08-07"/>
<Date Start="2013-08-08" End="2013-08-14"/>
</Dates>
<DestinationZones>
<DestinationZone>62888</DestinationZone>
<DestinationZone>41872</DestinationZone>
<DestinationZone>41874</DestinationZone>
</DestinationZones>
<Distributions>
<Distribution Adults="1" Children="0"/>
<Distribution Adults="2" Children="0"/>
<Distribution Adults="1" Children="1"/>
</Distributions>
</WarningDetails>
</HotelFutureRatesResults>
</Results>
</FutureRatesRS>
</HotelFutureRatesResponse>
</soap:Body>
</soap:Envelope>
Also, if the response contains too much information, the system trims the result:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<HotelFutureRatesResponse xmlns="http://www.juniper.es/webservice/2007/">
<FutureRatesRS Url="http://xml-uat.bookingengine.es" TimeStamp="2019-10-02T17:23:59.6156976+02:00" IntCode="u7PZK5wmW39OmxAvv6GhlRFy+UObAbnYH94pRtys1Ng=">
<Warnings>
<Warning Code="warnMaxFutureRates" Text="Too many results. Response has been trimmed."/>
</Warnings>
<Results>
<HotelFutureRatesResults>
<HotelFutureRatesResult>
<ResultInfo>
<Start>2019-11-03</Start>
<End>2019-11-10</End>
<DestinationZone>49435</DestinationZone>
<HotelCode>JP046300</HotelCode>
<Paxes>
<Pax IdPax="1">
<Age>45</Age>
</Pax>
<Pax IdPax="2">
<Age>45</Age>
</Pax>
</Paxes>
</ResultInfo>
<HotelResult Code="7b0LYEzfsd0HH90sd" DestinationZone="1953">
<HotelOptions>
<HotelOption RatePlanCode="+z1uS0YnJX/wqz6HCJYnf4bQWKg05ZQQtx+Eu5HGHqhSh/U6d2XBdCQo55ecn2/yHyTHL7im7xQxt5s0fh26XD7735P/S9IN+8Nsd5qA+....." Status="OK">
<Board Type="SA">ROOM ONLY</Board>
<Prices>
...
This transaction is used in order to verify the availability from an already selected combination from the availability response. If the price and/or status changes, a warning will advise about the changes. Also, a RatePlanCode will be genereated by the system which will be the one used in later transactions.
Important note:
It is recommended to use this transaction whenever there has been a considerable delay since you first retrieved the combination from the availability response (for example, if your system caches availability responses). Otherwise, you may skip this transaction and directly proceed to the HotelBookingRules step.
Node / Attribute (@) | Opt | Type | Description |
---|---|---|---|
@Version | N | String | Web Service version |
@Context | Y | String | Context key of the request. Having a proper context will allow our system optimize the performance of your request. List of possible values described on Context. Recommended contexts for this request: SINGLEAVAIL, VALUATION |
@Language | N | String | Language in which the response will be returned. Please, contact Juniper for available languages. |
{Login} | N | - | Customer login to access the Web Service |
HotelCheckAvailRequest | N | - | - |
./HotelCheckAvailRequest/HotelOption | Y | - | |
./HotelOption/@RatePlanCode | N | String | Encoded data obtained from either the HotelAvail response. Identifies a unique combination of rooms from an specific hotel. |
./HotelCheckAvailRequest/SearchSegmentsHotels | Y | - | Search properties container. |
./SearchSegmentsHotels/SearchSegmentHotels | N | - | Search properties related to the RatePlanCode that is being requestes for. This information will be used for verification purposes in order to ensure that the RatePlanCode that is being requested matches with the same |
./SearchSegmentHotels/@Start | N | Date | Check-in date. Format: yyyy-MM-dd |
./SearchSegmentHotels/@End | N | Date | Check-out date. Format: yyyy-MM-dd |
./SearchSegmentsHotels/HotelCodes | N | - | Hotel codes container. |
./HotelCodes/HotelCode | N | - | Hotel code related to the RatePlanCode that is being requested for. |
AdvancedOptions | Y | - | Optional parameters |
./AdvancedOptions/ShowBreakdownPrice | Y | Boolean | If the value is true, it will show the full price object with all the information about the prices. If not specified, false is assumed by default. |
./AdvancedOptions/UseCurrency | Y | String | This value allows you to set the currency code that will be used on the booking flow process. It is important to note that if a currency is specified on the availability request, you will then need to set the same AdvancedOption along the same value on the rest of the booking flow transactions. It is also important to note that the list of available currencies for your use (if any, as the feature could not be available) will entirely depend of the Juniper supplier that you will be connecting to. Last of all, please note that if no currency is set on the request the system will then use the default currency configured by your Juniper supplier. |
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://www.juniper.es/webservice/2007/">
<soapenv:Header/>
<soapenv:Body>
<HotelCheckAvail>
<HotelCheckAvailRQ Version="1.1" Language="en">
<Login Email="user@mydomain.com" Password="pass"/>
<HotelCheckAvailRequest>
<HotelOption RatePlanCode="ya79dM4dS6R6EywV4XhfEjz0JYHFoZhoRcbbmqH3aaH3tVth8bhV1Vf1SoRyXBzhB5Khvb878rII4rPLkS7XxjTF6YQOypc2GEQgjux2lc3Qr....."/>
<SearchSegmentsHotels>
<SearchSegmentHotels Start="2020-12-20" End="2020-12-25"/>
<HotelCodes>
<HotelCode>JP046300</HotelCode>
</HotelCodes>
</SearchSegmentsHotels>
</HotelCheckAvailRequest>
</HotelCheckAvailRQ>
</HotelCheckAvail>
</soapenv:Body>
</soapenv:Envelope>
Node / Attribute (@) | Opt | Type | Description |
---|---|---|---|
@Url | N | String | URL endpoint |
@TimeStamp | N | DateTime | Response date and time. Format: yyyy-MM-ddThh:mm:ss (UTC) |
@IntCode | N | String | Internal control code |
{Errors} | Y | - | Applicable errors. |
{Warnings} | Y | - | Applicable warnings. Implementing the warnings node on this transaction will be very important as it will let you identify if there has been any change on the same and/or if there is anything that should be brought to your attention, some of the most important warning codes here are warnPriceChanged, warnStatusChanged and warnCheckNotPossible. |
Results | N | - | List of results |
./Results/HotelResult | N | - | Hotel result |
./HotelResult/HotelOptions | N | - | List of available options |
./HotelOptions/HotelOption | N | - | Hotel option |
./HotelOption/@RatePlanCode | N | String | RatePlanCode of the combination. It is important to note that you should use this RatePlanCode in order to proceed with the booking flow instead of using the one that you previously retrieved on the HotelAvail response. |
./HotelOption/@PaymentDestination | Y | Boolean | Indicates if the payment is made by the hotel with the final user credit card. If not specified, false is assumed. If you want to confirm a payment in destination booking, the credit card must be provided in the HotelBooking request (as a guarantee). Payment in destination is deactivated by default. In order to get results with payment in destination, you must specify it in the availability request. |
./HotelOption/@Status | Y | String | Availability status. Posible values: • OK – Available • RQ – On Request |
./HotelOption/@VervotechCode | Y | String | Vervotech mapping code. Only available on vervotech-enabled environments and when there ir a mapping code available for the relevant results. Meant so that buyers that operate with Vervotech may verify that the hotel mapping that it is being returned is the one that was originally intended. Additionally, if a mapping discrepancy is detected on Juniper, you will be provided with a warnMappingVervotech warning for your reference (for you to decide if you wish to continue with the reservation). |
./HotelOption/Supplier | Y | - | Supplier information. Restricted. |
./Supplier/@Code | Y | String | Supplier code |
./Supplier/@IntCode | Y | String | Supplier internal code |
./HotelOption/Board | Y | String | Board plan name/description. |
./Board/@Type | Y | String | Board plan type. It's important to understand that this property is optional, as some results may not have a typified board plan type mapping available. |
./HotelOption/{Prices} | N | - | Selected combination price. |
./HotelOption/HotelRooms | Y | - | List of rooms |
./HotelRooms/HotelRoom | Y | - | Room |
./HotelRoom/@Units | Y | Integer | Number of rooms |
./HotelRoom/@Source | Y | String | Room identifier within the list. Example: “1”, “2”, “1,2” (if Units > 1) |
./HotelRoom/@AvailRooms | Y | Integer | Available rooms |
./HotelRoom/Name | Y | String | Room type name |
./HotelRoom/Description | Y | String | Room description |
./HotelRoom/RoomCategory | Y | String | Room category |
./RoomCategory/@Type | Y | String | Room category type |
./HotelRoom/RoomOccupancy | Y | - | Room occupancy details |
./RoomOccupancy/@Occupancy | Y | Integer | Total room occupancy |
./RoomOccupancy/@MaxOccupancy | Y | Integer | Maximum occupancy per room |
./RoomOccupancy/@MinOccupancy | Y | Integer | Minimum occupancy per room |
./RoomOccupancy/@Adults | Y | Integer | Adult occupancy per room |
./RoomOccupancy/@MaxAdults | Y | Integer | Maximum adult occupancy per room |
./RoomOccupancy/@MinAdults | Y | Integer | Minimum adult occupancy per room |
./RoomOccupancy/@Children | Y | Integer | Children occupancy per room |
./RoomOccupancy/@MaxChildren | Y | Integer | Maximum children occupancy per room |
./HotelOption/Comments | Y | - | Object that contains all comments about price validation |
./Comments/Comment | N | String | [1..N] Comments that indicate the changes performed on the prices or on availability. |
./Comment/@Type | Y | String | Type of comment. Posible values: • CHKAV – Availability check comments. |
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<HotelCheckAvailResponse xmlns="http://www.juniper.es/webservice/2007/">
<CheckAvailRS Url="http://xml-uat.bookingengine.es" TimeStamp="2019-09-30T12:24:23.2827441+02:00" IntCode="3TcqBkWJhWde1j6Wm6s7V1jBKi2+VMFfU5Tzy5sxGuI=">
<Warnings>
<Warning Code="warnPriceChanged" Text="Price changed. A new RatePlanCode has been returned. Use the new RatePlanCode."/>
</Warnings>
<Results>
<HotelResult>
<HotelOptions>
<HotelOption RatePlanCode="ya79dM4dS6R6EywV4XhfEjz0JYHFoZhoRcbbmqH3aaH3tVth8bhV1Vf1SoRyXBzhB5Khvb878rII4rPLkS7XxjTF6YQOypc2GEQgjux2lc3Qr....." Status="OK">
<Board Type="SA">Room Only</Board>
<HotelRooms>
<HotelRoom Units="1" Source="1" AvailRooms="800">
<Name>Double</Name>
<RoomCategory Type="2">Category 2</RoomCategory>
<RoomOccupancy Occupancy="2" Adults="2" Children="0"/>
</HotelRoom>
</HotelRooms>
<Prices>
<Price Type="S" Currency="EUR">
<TotalFixAmounts Gross="1116.94" Nett="1116.94">
<Service Amount="1015.4"/>
<ServiceTaxes Included="false" Amount="101.54"/>
</TotalFixAmounts>
</Price>
</Prices>
</HotelOption>
</HotelOptions>
</HotelResult>
</Results>
</CheckAvailRS>
</HotelCheckAvailResponse>
</soap:Body>
</soap:Envelope>
This is the valuation request which, given a specific RatePlanCode (retrieved from either the HotelAvail, HotelCheckAvail and/or previous HotelBookingRules response), will validate the combination and supply you with all of the neccesary information in order to complete the booking flow process.
The information that is supplied through this transaction includes:
NOTE: At the extended information section from the specifications of the response you will find either additional information and/or examples of most of these items.
Important note:
The static data information returned within the HotelContent node (concretely, the hotel name, hotel address and hotel category) is the information that we require for you to display on your end in order to succesfully complete the static data certification process. This same will also need to be applied on the HotelBooking step.
Node / Attribute (@) | Opt | Type | Description |
---|---|---|---|
@Version | N | String | Web Service version |
@Context | Y | String | Context key of the request. Having a proper context will allow our system optimize the performance of your request. List of possible values described on Context. Recommended contexts for this request: VALUATION, BOOKING, PAYMENT |
@Language | N | String | Language in which the response will be returned. Please, contact Juniper for available languages. |
{Login} | N | - | Customer login to access the Web Service |
HotelBookingRulesRequest | N | - | - |
./HotelBookingRulesRequest/HotelOption | Y | - | |
./HotelOption/@RatePlanCode | N | String | Encoded data obtained from either the HotelAvail or HotelCheckAvail response. Identifies a unique combination of rooms from an specific hotel. |
./HotelBookingRulesRequest/SearchSegmentsHotels | Y | - | Search properties container. |
./SearchSegmentsHotels/SearchSegmentHotels | N | - | Search properties related to the RatePlanCode that is being requestes for. This information will be used for verification purposes in order to ensure that the RatePlanCode that is being requested matches with the same |
./SearchSegmentHotels/@Start | N | Date | Check-in date. Format: yyyy-MM-dd |
./SearchSegmentHotels/@End | N | Date | Check-out date. Format: yyyy-MM-dd |
./SearchSegmentsHotels/HotelCodes | N | - | Hotel codes container. |
./HotelCodes/HotelCode | N | - | Hotel code related to the RatePlanCode that is being requested for. |
./HotelBookingRulesRequest/Rebook | Y | - | Used for the Juniper reselling functionality, using this node will imply that the current booking flow will be used for reselling an already existing booking rather than creating a completely new one. If a resell process is intended, it is mandatory to specify this node in each of the booking flow requests. This is a restricted feature that may only be used with Juniper's Reselling functionality. Kindly contact with Juniper for further information. |
./Rebook/@ItemId | N | Integer | Item id of the booking line that is to be rebooked. Used in order to load some of the configuration related to the booking line that is going to be rebooked. |
AdvancedOptions | Y | - | Optional parameters |
./AdvancedOptions/UseCurrency | Y | String | This value allows you to set the currency code that will be used on the booking flow process. It is important to note that if a currency is specified on the availability request, you will then need to set the same AdvancedOption along the same value on the rest of the booking flow transactions. It is also important to note that the list of available currencies for your use (if any, as the feature could not be available) will entirely depend of the Juniper supplier that you will be connecting to. Last of all, please note that if no currency is set on the request the system will then use the default currency configured by your Juniper supplier. |
./AdvancedOptions/ShowOnlyBasicInfo | Y | Boolean | If the value is true, it will hide the following nodes of the HotelContent object: ContactInfo, Images, Descriptions and Features as to decrease the data transfer related to this request. If not specified, false is assumed by default. |
./AdvancedOptions/ChangeFirstDaySupplement | Y | - | When there are supplements that allow for the change of its first day, you will be able to change the same by sending an additional BookingRule request (along the BookingCode from the response) while using this node. |
./ChangeFirstDaySupplement/@Code | N | String | Code of the supplement that is going to be changed. |
./ChangeFirstDaySupplement/@FirstDay | N | Integer | The desired first day. |
./AdvancedOptions/ShowBreakdownPrice | Y | Boolean | If the value is true, it will show the full price object with all the information about the prices. If not specified, false is assumed by default. |
./AdvancedOptions/PromoCode | Y | String | Promotional code that you would like to apply to the combination. • If found and applied, the promotion will not be included within the HotelResult price and, instead, be returned through its own AdjustmentElement. • If unsuccessful, the response will include a warnPromoNotApply warning. |
./PromoCode/@BinCode | Y | String | BinCode for which you would like to search for an applicable promotion. May be sent along with a PromoCode, case on which the system will look for the best possible promotion available within the two. |
./AdvancedOptions/ShowCompleteInfo | Y | Boolean | If the value is true and if this information is available, it will show the full HotelRoom information object with the information about the room description and room images. If not specified, false is assumed by default. |
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns="http://www.juniper.es/webservice/2007/">
<soap:Header/>
<soap:Body>
<HotelBookingRules>
<HotelBookingRulesRQ Version="1.1" Language="en">
<Login Email="user@mydomain.com" Password="pass"/>
<HotelBookingRulesRequest>
<HotelOption RatePlanCode="ya79dM4dS6R6EywV4XhfEvwItLN5sfa4xcKoRWYtG4b/utM1C8FoU7wtvxeqXKhz2utopk4+5bpJX0EGM8YWSGAwgLA0lkvt/PL....."/>
<SearchSegmentsHotels>
<SearchSegmentHotels Start="2019-11-20" End="2019-11-22"/>
<HotelCodes>
<HotelCode>JP046300</HotelCode>
</HotelCodes>
</SearchSegmentsHotels>
</HotelBookingRulesRequest>
</HotelBookingRulesRQ>
</HotelBookingRules>
</soap:Body>
</soap:Envelope>
Node / Attribute (@) | Opt | Type | Description |
---|---|---|---|
@Url | N | String | URL endpoint |
@TimeStamp | N | DateTime | Response date and time. Format: yyyy-MM-ddThh:mm:ss (UTC) |
@IntCode | N | String | Internal control code |
{Errors} | Y | - | Applicable errors. |
{Warnings} | Y | - | Applicable warnings. Implementing the warnings node on this transaction will be very important as it will let you identify if there has been any change on the same and/or if there is anything that should be brought to your attention, some of the most important warning codes here are warnPriceChanged, warnStatusChanged and warnCheckNotPossible. |
Results | N | - | List of results |
./Results/HotelResult | N | - | Hotel result |
./HotelResult/HotelOptions | N | - | List of available options |
./HotelOptions/HotelOption | N | - | Hotel option |
./HotelOption/@Status | Y | String | Availability status. Posible values: • OK – Available • RQ – On Request |
./HotelOption/@PaymentDestination | Y | Boolean | Indicates if the payment is made by the hotel with the final user credit card. If not specified, false is assumed. If you want to confirm a payment in destination booking, the credit card must be provided in the HotelBooking request (as a guarantee). Payment in destination is deactivated by default. In order to get results with payment in destination, you must specify it in the availability request. |
./HotelOption/@VervotechCode | Y | String | Vervotech mapping code. Only available on vervotech-enabled environments and when there ir a mapping code available for the relevant results. Meant so that buyers that operate with Vervotech may verify that the hotel mapping that it is being returned is the one that was originally intended. Additionally, if a mapping discrepancy is detected on Juniper, you will be provided with a warnMappingVervotech warning for your reference (for you to decide if you wish to continue with the reservation). |
./HotelOption/BookingCode | N | String | Key reference necessary to make a booking. This key reference has an expiry date, if it exceeds this date, the keyword is no longer valid, and so it should regenerate a key reference sending again the transaction HotelBookingRules. |
./BookingCode/@ExpirationDate | N | DateTime | Expiry date or key reference expiry. Normally, it is 10 minutes more. Format: yyyy-MM-ddThh:mm:ss (UTC) |
./HotelOption/{HotelRequiredFields} | N | - | Required fields for the booking process. Only the nodes and attributes that are returned in this structure will be mandatory, the rest of the information will be considered as optional. The structure matches with a HotelBooking request, refer to the mentioned for a list of all of the possible required fields. Additionally, kindly refer to the below section on which you will be able to find: * A practical example of all of the required fields that you may be asked for on a specific combination. * Special considerations that must be kept in mind when implementing this functionality. |
./HotelOption/VirtualCreditCardInfo | Y | String | Virtual credit card payment at a supplier contract level. |
./VirtualCreditCardInfo/@Currency | N | String | Currency with which the virtual credit card payment is made at a supplier contract level. |
./VirtualCreditCardInfo/@ValidFrom | N | String | Day in which the charge will be made via the virtual credit card at a supplier contract level. |
./VirtualCreditCardInfo/@IncreaseDays | N | Integer | It determines the days to increment from the specified VCC payment date. |
./VirtualCreditCardInfo/@Email | N | String | Email address where you want to receive virtual credit card payment information. |
./HotelOption/{CancellationPolicy} | Y | - | Cancellation policies. At the extended information section of these specifications you will be able to find examples which aim to clarify the functioning of the cancellation policies. |
./HotelOption/{CancellationPolicyCost} | Y | - | Cost cancellation policies. Restricted information, contract with Juniper for more information. |
./HotelOption/PriceInformation | Y | - | Price information, including basic information of the selected combination. |
./PriceInformation/Supplier | Y | - | Supplier information. Keep in mind that this information is, by default, restricted. |
./Supplier/@Code | N | String | Supplier code |
./Supplier/@IntCode | Y | String | Supplier internal code |
./PriceInformation/Board | Y | String | Board plan name/description. |
./Board/@Type | Y | String | Board plan type. It's important to understand that this property is optional, as some results may not have a typified board plan type mapping available. |
./Board/@Code | Y | String | Board plan internal code. This optional information requires for a specific permission to be enabled. |
./Board/@ExternalCode | Y | String | Board plan external code. This optional information requires for a specific permission to be enabled. |
./PriceInformation/HotelRooms | Y | - | List of rooms |
./HotelRooms/HotelRoom | Y | - | Room |
./HotelRoom/@Units | Y | Integer | Number of rooms |
./HotelRoom/@Source | Y | String | Room identifier within the list. Example: “1”, “2”, “1,2” (if Units > 1) |
./HotelRoom/@AvailRooms | Y | Integer | Available rooms |
./HotelRoom/@Code | Y | String | Room code. This optional information requires for a specific permission to be enabled. |
./HotelRoom/@CombinationCode | Y | String | Room combination code. This optional information requires for a specific permission to be enabled and is mainly meant for PUSH-PULL integrations. |
./HotelRoom/Name | Y | String | Room type name |
./HotelRoom/Description | Y | String | Room description |
./HotelRoom/RoomCategory | Y | String | Room category |
./RoomCategory/@Type | Y | String | Room category type |
./RoomCategory/@Code | Y | String | Room category code. This optional information requires for a specific permission to be enabled. |
./HotelRoom/Images | Y | - | List of room images |
./Images/Image | Y | - | Room image |
./Image/@Type | Y | String | Room image type (THB or BIG) |
./Image/FileName | Y | String | Image URL |
./HotelRoom/RoomOccupancy | Y | - | Room occupancy details |
./RoomOccupancy/@Occupancy | Y | Integer | Total room occupancy |
./RoomOccupancy/@MaxOccupancy | Y | Integer | Maximum occupancy per room |
./RoomOccupancy/@MinOccupancy | Y | Integer | Minimum occupancy per room |
./RoomOccupancy/@Adults | Y | Integer | Adult occupancy per room |
./RoomOccupancy/@MaxAdults | Y | Integer | Maximum adult occupancy per room |
./RoomOccupancy/@MinAdults | Y | Integer | Minimum adult occupancy per room |
./RoomOccupancy/@Children | Y | Integer | Children occupancy per room |
./RoomOccupancy/@MaxChildren | Y | Integer | Maximum children occupancy per room |
./PriceInformation/{Prices} | N | - | Selected combination price. |
./PriceInformation/{AdditionalElements} | Y | - | Additional elements that contain a combination, such as offers or supplements. The prices are included in the total price of the combination. |
./PriceInformation/{HotelContent} | N | - | Detailed hotel information. Refer to the {HotelContent} specifications for further information. |
./PriceInformation/BillingOrganization | Y | String | Billing organization name. This information is restricted and will not be available by default. |
./BillingOrganization/@Code | Y | String | Billing organization code. |
./HotelOption/OptionalElements | Y | - | Additional information. |
./OptionalElements/Comments | Y | - | List of comments |
./Comments/@Type | N | String | Type of comment. Posible values: • HOT – Comment from the hotel. Keeping mind of this information is important as through these comments the hotel could supply you with vital information like the unavailability of a specific service or the need to pay an additional tax on arrival. |
./Comments/Text | N | String | Comment text. |
./OptionalElements/HotelSupplements | Y | - | Optional supplements applicable to the combination. NOT IMPLEMENTED. |
./HotelSupplements/{HotelSupplement} | N | String | Optional supplement applicable to the combination. If order to apply the mentioned you will have to send an additional HotelBookingRules request along the selected optional supplement RatePlanCode. |
./OptionalElements/Preferences | Y | - | Available booking preferences. Only implemented on certain suppliers. |
./Preferences/Preference | Y | - | |
./Preference/@Code | N | String | Preference code needed in order to select it. |
./Preference/Description | N | String | Preference description. |
./OptionalElements/AllowedCreditCards | Y | - | If the desired booking is payment in destination and the data is available, a list of accepted credit card types will appear. |
./AllowedCreditCards/CreditCard | N | String | Credit card name |
./CreditCard/@Code | N | String | Credit card code. Please see the HotelBooking Request section to see the possible values. |
./Results/{AdjustmentResult} | Y | - | Additional adjustment result. It will be available if, for example, you've manually added a PromoCode by using the AdvancedOption found within this same transaction request. |
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<HotelBookingRulesResponse xmlns="http://www.juniper.es/webservice/2007/">
<BookingRulesRS Url="http://xml-uat.bookingengine.es" TimeStamp="2019-10-03T09:36:30.0740353+02:00" IntCode="3TcqBkWJhWde1j6Wm6s7V8jmehwG5VR1rbUyY/4ufMs=">
<Results>
<HotelResult>
<HotelOptions>
<HotelOption Status="OK">
<BookingCode ExpirationDate="2019-10-03T09:46:30.0740353+02:00">ya79dM4dS6R6EywV4XhfEvwItLN5sfa4xcKoRWYtG4b/utM1C8FoU7wtvxeqXKhz2utopk4+5bpJX0EGM8YWSGAwgLA0lkvt/PLN1rsHUrCU.....</BookingCode>
<HotelRequiredFields>
<HotelBooking>
<Paxes>
<Pax IdPax="1">
<Name>Holder Name</Name>
<Surname>Holder Surname</Surname>
<PhoneNumbers>
<PhoneNumber>000000000</PhoneNumber>
</PhoneNumbers>
<Address>Address</Address>
<City>City</City>
<Country>Country</Country>
<PostalCode>00000</PostalCode>
<Age>30</Age>
</Pax>
<Pax IdPax="2">
<Age>30</Age>
</Pax>
<Pax IdPax="3">
<Age>8</Age>
</Pax>
</Paxes>
<Holder>
<RelPax IdPax="1"/>
</Holder>
<Elements>
<HotelElement>
<BookingCode>ya79dM4dS6R6EywV4XhfEvwItLN5sfa4xcKoRWYtG4b/utM1C8FoU7wtvxeqXKhz2utopk4+5bpJX0EGM8YWSGAwgLA0lkvt/PLN1rsHUrCU.....</BookingCode>
<RelPaxesDist>
<RelPaxDist>
<RelPaxes>
<RelPax IdPax="1"/>
</RelPaxes>
</RelPaxDist>
<RelPaxDist>
<RelPaxes>
<RelPax IdPax="2"/>
<RelPax IdPax="3"/>
</RelPaxes>
</RelPaxDist>
</RelPaxesDist>
<HotelBookingInfo Start="2019-11-20" End="2019-11-22">
<Price>
<PriceRange Minimum="953.39" Maximum="1053.75" Currency="EUR"/>
</Price>
<HotelCode>JP046300</HotelCode>
</HotelBookingInfo>
</HotelElement>
</Elements>
</HotelBooking>
</HotelRequiredFields>
<CancellationPolicy CurrencyCode="EUR">
<FirstDayCostCancellation Hour="00:00">2019-11-13</FirstDayCostCancellation>
<Description>* Cancelling from 17/11/2019 at 00:00:00 to 21/11/2019 at 00:00:00: 100.00 % of expenses * Cancelling from 13/11/2019 at 00:00:00 to 17/11/2019 at 00:00:00: 25.00 % of expenses * Cancelling from 03/10/2019 at 00:00:00 to 13/11/2019 at 00:00:00: 0 &euro;</Description>
<PolicyRules>
<Rule From="0" To="3" DateFrom="2019-11-17" DateFromHour="00:00" DateTo="2019-11-21" DateToHour="00:00" Type="V" FixedPrice="0" PercentPrice="100" Nights="0" ApplicationTypeNights="Average"/>
<Rule From="4" To="7" DateFrom="2019-11-13" DateFromHour="00:00" DateTo="2019-11-17" DateToHour="00:00" Type="V" FixedPrice="0" PercentPrice="25" Nights="0" ApplicationTypeNights="Average"/>
<Rule From="8" DateFrom="2019-10-03" DateFromHour="00:00" DateTo="2019-11-13" DateToHour="00:00" Type="V" FixedPrice="0" PercentPrice="0" Nights="0" ApplicationTypeNights="Average"/>
</PolicyRules>
</CancellationPolicy>
<PriceInformation>
<Board Type="AD">Bed & Breakfast</Board>
<HotelRooms>
<HotelRoom Units="1" Source="1" AvailRooms="800">
<Name>Single</Name>
<RoomCategory Type="1">Category 1</RoomCategory>
<RoomOccupancy Occupancy="1" Adults="1" Children="0"/>
</HotelRoom>
<HotelRoom Units="1" Source="2" AvailRooms="799">
<Name>Double</Name>
<RoomCategory Type="2">Category 2</RoomCategory>
<RoomOccupancy Occupancy="2" Adults="1" Children="1"/>
</HotelRoom>
</HotelRooms>
<Prices>
<Price Type="S" Currency="EUR">
<TotalFixAmounts Gross="1003.57" Nett="1003.57">
<Service Amount="912.34"/>
<ServiceTaxes Included="false" Amount="91.23"/>
</TotalFixAmounts>
</Price>
</Prices>
<AdditionalElements>
<HotelOffers>
<HotelOffer Code="843">
<Name>[2019] 5% discount</Name>
<Description>Offer description</Description>
</HotelOffer>
</HotelOffers>
</AdditionalElements>
<HotelContent Code="JP046300">
<HotelName>APARTAMENTOS ALLSUN PIL-LARI PLAYA</HotelName>
<Zone JPDCode="JPD086855" Code="49435"/>
<HotelCategory Type="3est">3 Stars</HotelCategory>
<HotelType Type="GEN">General</HotelType>
<Label SortPriority="3" Code="3">
<Description>Recommended</Description>
</Label>
<Address>
<Address>Calle Marbella 24</Address>
<Latitude>39.564713</Latitude>
<Longitude>2.627979</Longitude>
</Address>
</HotelContent>
</PriceInformation>
<OptionalElements>
<Comments>
<Comment Type="HOT">
<![CDATA[* 13/06/2018 - 31/12/2030: Please note that on this field hotels have the possibility of supplying you with important information like:<br><br>- Additional taxes (like, for example, a city tax).<br>- Additional features (like, for example, a detailed explanation of a promotion)<br>- Additional warnings (like, for example, the pool being closed due to renovations)<br>- Additional information (like, for example, the emergency phone)<br><br>Among other examples.<br>]]>
</Comment>
</Comments>
<HotelSupplements>
<HotelSupplement RatePlanCode="ya79dM4dS6R6EywV4XhfEvwItLN5sfa4xcKoRWYtG4b/utM1C8FoU7wtvxeqXKhz2utopk4+5bpJX0EGM8YWSGAwgLA0.....">
<Name>Buy now and safe</Name>
<Prices>
<Price Type="S" Currency="EUR">
<TotalFixAmounts Gross="1176.43" Nett="1003.57">
<Service Amount="912.34"/>
<ServiceTaxes Included="false" Amount="91.23"/>
</TotalFixAmounts>
</Price>
</Prices>
</HotelSupplement>
</HotelSupplements>
</OptionalElements>
</HotelOption>
</HotelOptions>
</HotelResult>
</Results>
</BookingRulesRS>
</HotelBookingRulesResponse>
</soap:Body>
</soap:Envelope>
Next, we will provide you with further information and examples for the key subjects from this response:
Important note:
If there are no rules available, you will then need to use the cancellation policy text/desctiption. Alternatively, if your system does not allow for the same (for the retrieval of text based cancellation policies), you will then need to assume that the combination is non-refundable.
<Rule Type = "S" DateFrom = "2013-08-20" DateFromHour = "12:00" FixedPrice = "0" PercentPrice = "100" Nights = "0"/>
<Rule Type = "V" DateFrom = "2013-08-20" DateFromHour = "12:00" DateTo = "2013-08-22" DateToHour = "12:00" FixedPrice = "10" PercentPrice = "0" Nights = "0"/>
<Rule Type = "R" From = "2" DateFrom = "2013-08-20" DateFromHour = "12:00" FixedPrice = "0" PercentPrice = "25" Nights = "0"/>
<Rule Type = "V" From = "7" DateFrom = "2013-08-20" DateFromHour = "12:00" FixedPrice = "0" PercentPrice = "0" Nights = "0"/>
<Rule Type = "V" From = "14" DateFrom = "2013-04-05" DateFromHour = "11:39" DateTo = "2013-08-16" DateToHour = "12:00" FixedPrice = "0" PercentPrice = "0" Nights = "0"/>
<Rule Type = "V" From = "8" To = "13" DateFrom = "2013-08-16" DateFromHour = "12:00" DateTo = "2013-08-22" DateToHour = "12:00" FixedPrice = "0" PercentPrice = "10" Nights = "0"/>
<Rule Type = "V" From = "0" To = "7" DateFrom = "2013-08-22" DateFromHour = "12:00" DateTo = "2013-08-30" DateToHour = "12:00" FixedPrice = "0" PercentPrice = "10" Nights = "0"/>
<Rule Type = "S" FixedPrice = "0" PercentPrice = "50" Nights = "0"/>
<Rule Type = "V" From = "7" DateFrom = "2013-08-10" DateFromHour = "12:00" FixedPrice = "0" PercentPrice = "0" Nights = "1" ApplicationTypeNights = "FirstNight"/>
<Rule Type = "V" From = "7" DateFrom = "2013-08-10" DateFromHour = "12:00" FixedPrice = "0" PercentPrice = "0" Nights = "1" ApplicationTypeNights = "FirstNight" FirstNightPrice = "145"/>
<Rule Type = "V" From = "7" DateFrom = "2013-08-10" DateFromHour = "00:00" FixedPrice = "0" PercentPrice = "0" Nights = "1" MostExpensiveNightPrice = "733.33" ApplicationTypeNights = "MostExpensiveNight"/>
In the AdditionalElements node the PriceInformation we have the offers and supplements already included in the rate, so the Price comes added or deducted in the total Price of the combination.
<Prices>
<Price Type="S" Currency="USD">
<TotalFixAmounts Gross="615.34" Nett="615.34">
<Service Amount="615.34"/>
<ServiceTaxes Included="true" Amount="0"/>
<Commissions Included="true" Amount="0"/>
<HandlingFees Included="true" Amount="0"/>
<Discount Amount="-0"/>
</TotalFixAmounts>
</Price>
</Prices>
<AdditionalElements>
<HotelSupplements>
<HotelSupplement>
<Name>Short stay Supplement</Name>
</HotelSupplement>
</HotelSupplements>
<HotelOffers>
<HotelOffer>
<Name>Early Booking</Name>
</HotelOffer>
</HotelOffers>
</AdditionalElements>
The previous point indicates the supplements and offers that are included in the rates, but there also may be optional supplements. These supplements are not added, therefore, they are not reflected in the combination price. Through this transaction you may obtain and add the optional supplements you wish. Let’s see an example:
*First we may send a request to see if there are any optional supplements. In the following example we have an optional supplement available. Also, we have a supplement and an offer that were already added:
<HotelOption Status = "RQ">
<BookingCode ExpirationDate = "2013-04-03T12:10:51.4779694+02:00">pv+wKdpGFMlpYAI1m4ICAUdE2J390nVqJv76UoD8KQCtQbRrcsQuxq21geWHdg4X4Sx3mh8qEvFc3ENbreQthKRaEmMKtrNhvEX3hCxjTC7.....</BookingCode>
<CancellationPolicy CurrencyCode = "USD">
<FirstDayCostCancellation Hour = "11:57">2013-04-03</FirstDayCostCancellation>
<Description>* From 1 From 03/04/2013 11:57:43 to 19/08/2013 12:00:00 days before trip: 50 %<br></Description>
<PolicyRules>
<Rule From = "1" DateFrom = "2013-04-03" DateFromHour = "11:57" DateTo = "2013-08-19" DateToHour = "12:00" Type = "V" FixedPrice = "0" PercentPrice = "50" Nights = "0"/>
</PolicyRules>
</CancellationPolicy>
<PriceInformation>
<HotelRooms>
<HotelRoom Units = "1" Source = "1" AvailRooms = "0">
<Name>2 ad + 1 chd/ 3 ad</Name>
<Description>2Ad / 0 a 1 Nin ... MÁX. 3</Description>
<RoomCategory Type = "358"/>
</HotelRoom>
</HotelRooms>
<Prices>
<Price Type = "S" Currency = "USD">
<TotalFixAmounts Gross = "615.34" Nett = "615.34">
<Service Amount = "615.34"/>
<ServiceTaxes Included = "true" Amount = "0"/>
<Commissions Included = "true" Amount = "0"/>
<HandlingFees Included = "true" Amount = "0"/>
<Discount Amount = "-0"/>
</TotalFixAmounts>
</Price>
</Prices>
<AdditionalElements>
<HotelSupplements>
<HotelSupplement>
<Name>Short stay Supplement</Name>
</HotelSupplement>
</HotelSupplements>
<HotelOffers>
<HotelOffer>
<Name>Early Booking</Name>
</HotelOffer>
</HotelOffers>
</AdditionalElements>
</PriceInformation>
<OptionalElements>
<HotelSupplements>
<HotelSupplement RatePlanCode = " pv+wKdpGFMlpYAI1m4ICAUdE2J390nVqJv76UoD8KQCtQbRrcsQuxq21geWHdg4X4Sx.....">
<Name>Supplement HB Upgrade</Name>
<Prices>
<Price Type = "S" Currency = "USD">
<TotalFixAmounts Gross = "635.34" Nett = "635.34">
<Service Amount = "635.34"/>
<ServiceTaxes Included = "true" Amount = "0"/>
<Commissions Included = "true" Amount = "0"/>
<HandlingFees Included = "true" Amount = "0"/>
<Discount Amount = "-0"/>
</TotalFixAmounts>
</Price>
</Prices>
</HotelSupplement>
</HotelSupplements>
</OptionalElements>
</HotelOption>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://www.juniper.es/webservice/2007/">
<soapenv:Header/>
<soapenv:Body>
<HotelBookingRules>
<HotelBookingRulesRQ Version="1.1" Language="en">
<Login Email="user@mydomain.com" Password="pass"/>
<HotelBookingRuleRequest>
<HotelOption RatePlanCode="pv+wKdpGFMlpYAI1m4ICAUdE2J390nVqJv76UoD8KQCtQbRrcsQuxq21geWHdg4X4Sx....."/>
<SearchSegmentsHotels>
<SearchSegmentHotels Start="2013-08-20" End="2013-08-22"/>
<HotelCodes>
<HotelCode>JP046300</HotelCode>
</HotelCodes>
</SearchSegmentsHotels>
</HotelBookingRuleRequest>
</HotelBookingRulesRQ>
</HotelBookingRules>
</soapenv:Body>
</soapenv:Envelope>
*The response returns the combination with the added supplement and the updated prices. Take into account that each time you add an optional supplement, the BookingCode will change. Also, if you wish to add more optional supplements you should send a new BookingCode as the attribute RatePlanCode. If you do not do this you will lose the optional supplements that you already added.
<HotelOption Status="RQ">
<BookingCode ExpirationDate="2013-04-03T12:15:53.5488435+02:00">v29WBuxq21gele2v0l76UoD8KQCtQbRrcs8o/6Cw Quxq21geWHdg4X4Sx3mh8qEvFc3ENbreQthKRaEmMKtrNhvEX3hCxjT.....</BookingCode>
<CancellationPolicy CurrencyCode="USD">
<FirstDayCostCancellation Hour="11:57">2013-04-03</FirstDayCostCancellation>
<Description>* From 1 From 03/04/2013 11:57:43 to 19/08/2013 12:00:00 days before trip: 50 %<br></Description>
<PolicyRules>
<Rule From="1" DateFrom="2013-04-03" DateFromHour="11:57" DateTo="2013-08-19" DateToHour="12:00" Type="V" FixedPrice="0" PercentPrice="50" Nights="0"/>
</PolicyRules>
</CancellationPolicy>
<PriceInformation>
<HotelRooms>
<HotelRoom Units="1" Source="1" AvailRooms="0">
<Name>2 ad + 1 chd/ 3 ad</Name>
<Description>2Ad / 0 a 1 Nin ... MÁX. 3</Description>
<RoomCategory Type="358"/>
</HotelRoom>
</HotelRooms>
<Prices>
<Price Type="S" Currency="USD">
<TotalFixAmounts Gross="635.34" Nett="635.34">
<Service Amount="635.34"/>
<ServiceTaxes Included="true" Amount="0"/>
<Commissions Included="true" Amount="0"/>
<HandlingFees Included="true" Amount="0"/>
<Discount Amount="-0"/>
</TotalFixAmounts>
</Price>
</Prices>
<AdditionalElements>
<HotelSupplements>
<HotelSupplement>
<Name>Short stay Supplement</Name>
</HotelSupplement>
<HotelSupplement Optional="true">
<Name>Supplement HB Upgrade</Name>
</HotelSupplement>
</HotelSupplements>
<HotelOffers>
<HotelOffer>
<Name>Early Booking</Name>
</HotelOffer>
</HotelOffers>
</AdditionalElements>
</PriceInformation>
<OptionalElements>
<HotelSupplements>
<HotelSupplement SpecialCode=" pv+wKdpGFMlpYAI1m4ICAUdE2J390nVqJv76UoD8KQCtQbRrcsQuxq21geWHdg4X4Sx3mh8qEvFc3ENbreQthKRaEmMKtrNhvEX3hCxjTC4PNIvb2Yc8c6MJPcD6KXNSFfudfFJdi3fKFJE3i4sjf3JF" Class="OPTIONAL_SUPPLEMENT" Type="O">
<Name>Supplement HB Upgrade</Name>
<Prices>
<Price Type="S" Currency="USD">
<TotalFixAmounts Gross="655.34" Nett="655.34">
<Service Amount="655.34"/>
<ServiceTaxes Included="true" Amount="0"/>
<Commissions Included="true" Amount="0"/>
<HandlingFees Included="true" Amount="0"/>
<Discount Amount="-0"/>
</TotalFixAmounts>
</Price>
</Prices>
</HotelSupplement>
</HotelSupplements>
</OptionalElements>
</HotelOption>
Required fields are mandatory information in the booking request. There is information that will always be mandatory, such as the BookingCode, stay dates, hotel code, etc, but there is other information that is only mandatory in specific cases depending on the hotel to which the selected combination belongs to. For example, the phone number or email of the booking holder.
You should consider mandatory all nodes and attributes that are returned in the HotelRequiredFields, whether they have a value or not. If a node is not returned it will not be necessary to send it when booking. Additionally, consider that the returned information is generic, and therefore not related: in any case you should not send this information when booking, but instead, you should create the request from scratch.
Example of HotelRequiredFields of a combination of two rooms, one room of a 30 year old adult and a 8 year old child along another room of a 45 year old adult. All returned information is mandatory. You should pay special attention to passengers:
<HotelRequiredFields>
<HotelBooking>
<Paxes>
<Pax IdPax = "1">
<Name>HOLDERNAME</Name>
<Surname>HOLDERSURNAME</Surname>
<PhoneNumbers>
<PhoneNumber>000000000</PhoneNumber>
</PhoneNumbers>
<Email>holder@email.com</Email>
<Address>FULL ADDRESS</Address>
<City>CITY NAME</City>
<Country>COUNTRY NAME</Country>
<PostalCode>07014</PostalCode>
<Age>30</Age>
<Nationality>ES</Nationality>
</Pax>
<Pax IdPax = "2">
<Name>PAXNAMEA</Name>
<Surname>PAXSURNAMEA</Surname>
<Age>8</Age>
</Pax>
<Pax IdPax = "3">
<Name>PAXNAMEB</Name>
<Surname>PAXSURNAMEB</Surname>
<Age>45</Age>
</Pax>
</Paxes>
<Holder>
<RelPax IdPax = "1"/>
</Holder>
<Elements>
<HotelElement>
<BookingCode>dcFZbKty1cJGKeRtgxIDGe47p2fM9ZW6Tts2es9L2fatnslxwMxOEaqKxHGZYBQax6VKWvuoLnyO3htfvYxt6jLh8rR08xDLUY1BCn1kCTbh0b7udQDVmOullly4f5B1.....</BookingCode>
<RelPaxesDist>
<RelPaxDist>
<RelPaxes>
<RelPax IdPax = "1"/>
<RelPax IdPax = "2"/>
</RelPaxes>
</RelPaxDist>
<RelPaxDist>
<RelPaxes>
<RelPax IdPax = "3"/>
</RelPaxes>
</RelPaxDist>
</RelPaxesDist>
<CreditCard CardCode = "AX" CvC = "" CardNumber = "" ExpireDate = "">
<Name/>
<Surname/>
<Address/>
</CreditCard>
<HotelBookingInfo Start = "2013-08-20" End = "2013-08-22">
<Price>
<PriceRange Minimum = "401.907" Maximum = "444.213" Currency = "USD"/>
</Price>
<HotelCode>JP003600</HotelCode>
</HotelBookingInfo>
</HotelElement>
</Elements>
</HotelBooking>
</HotelRequiredFields>
In the OptionalElements node we may have a list of available Preferences for the selected combination.
<OptionalElements>
<Preferences>
<Preference Code="18961~18961~NS">
<Description>Classic room – Room only: Non smoking room.</Description>
</Preference>
</Preferences>
</OptionalElements>
Some hotels may provide you with supplements that include pick-up points, such as in the below example taken from the HotelAvail response:
<HotelSupplement Code = "323193" Category = "GEN" OnlyResidents = "false">
<Name>Test Mandatory Pickup Supplement</Name>
<PickUpPoints>
<PickUpPoint DestinationZone = "15011" MeetingTime = "00:15">
<Address>Pick-up point 1 address</Address>
</PickUpPoint>
<PickUpPoint DestinationZone = "15011" MeetingTime = "00:45">
<Address>Pick-up point 2 address</Address>
</PickUpPoint>
<PickUpPoint DestinationZone = "15011" MeetingTime = "01:30">
<Address>Pick-up point 3 address</Address>
</PickUpPoint>
</PickUpPoints>
</HotelSupplement>
In this event, selecting a pick-up option prior to confirming the reservation will become mandatory (otherwise, a JP_BOOK_SUPPLEMENTPICKUP error response will be provided on the HotelBooking response).
This is done on the HotelBookingRules step, on which you will be provided with all of the different pick-up options available as different HotelSupplement options (that have the same HotelSupplement@Code that was previously provided on the HotelAvail response) with their respective RatePlanCode available, such as in the example below:
<HotelSupplement Code = "323193" Type = "M" RatePlanCode = "ya79dM4dS6R6EywV4XhfEu7QsdhJGq+tBIQs4B+sWuF6YF66YDfuwb6KqtgBg...">
<Name>Test Mandatory Pickup Supplement</Name>
<Prices>
<Price Type = "S" Currency = "EUR">
<TotalFixAmounts Gross = "243.39" Nett = "243.39">
<Service Amount = "223.92"/>
<ServiceTaxes Included = "false" Amount = "19.47"/>
</TotalFixAmounts>
</Price>
</Prices>
<PickUpPoints>
<PickUpPoint DestinationZone = "15011" MeetingTime = "00:15">
<Address>Pick-up point 1 address</Address>
</PickUpPoint>
</PickUpPoints>
</HotelSupplement>
<HotelSupplement Code = "323193" Type = "M" RatePlanCode = "ya79dM4dS6R6EywV4XhfEu7QsdhJGq+tBIQs4B+sWuF6YF66YDfuwb6KqqDq..">
<Name>Test Mandatory Pickup Supplement</Name>
<Prices>
<Price Type = "S" Currency = "EUR">
<TotalFixAmounts Gross = "243.39" Nett = "243.39">
<Service Amount = "223.92"/>
<ServiceTaxes Included = "false" Amount = "19.47"/>
</TotalFixAmounts>
</Price>
</Prices>
<PickUpPoints>
<PickUpPoint DestinationZone = "15011" MeetingTime = "00:45">
<Address>Pick-up point 2 address</Address>
</PickUpPoint>
</PickUpPoints>
</HotelSupplement>
<HotelSupplement Code = "323193" Type = "M" RatePlanCode = "ya79dM4dS6R6EywV4XhfEu7QsdhJGq+tBIQs4B+sWuF6YF66YDfuwb6KjDhrY...">
<Name>Test Mandatory Pickup Supplement</Name>
<Prices>
<Price Type = "S" Currency = "EUR">
<TotalFixAmounts Gross = "243.39" Nett = "243.39">
<Service Amount = "223.92"/>
<ServiceTaxes Included = "false" Amount = "19.47"/>
</TotalFixAmounts>
</Price>
</Prices>
<PickUpPoints>
<PickUpPoint DestinationZone = "15011" MeetingTime = "01:30">
<Address>Pick-up point 3 address</Address>
</PickUpPoint>
</PickUpPoints>
</HotelSupplement>
This way, by iterating the HotelBookingRules request along with the RatePlanCode of the selected pick-up option, you will have applied this option to your reservation and you may then proceed with the booking flow as usual (by using the BookingCode of the latest HotelBookingRules available).
For your reference, you will be able to verify that the pick-up option got property selected, by looking up the HotelSupplement that was already applied to the reservation (the one available within AdditionalElements) and checking there that this supplement will now only have the selected pick-up (rather than all of the available options for selection):
<AdditionalElements>
<HotelSupplements>
<HotelSupplement Code = "323193" OnlyResidents = "false">
<Name>Test Mandatory Pickup Supplement</Name>
<PickUpPoints>
<PickUpPoint DestinationZone = "15011" MeetingTime = "00:45">
<Address>Pick-up point 2 address</Address>
</PickUpPoint>
</PickUpPoints>
</HotelSupplement>
</HotelSupplements>
</AdditionalElements>
This is the booking confirmation request which, given a specific BookingCode (retrieved from the HotelBookingRules response), will attempt to confirm the selected combination and, if successful, supply you with the confirmation code along all of the information related to the same. It will be very important for you to verify the status code of the booking as it will be possible for the mentioned to have found some kind of problem on the confirmation process.
While using this transaction, it will be very important to fulfill all of the necessary fields as, otherwise, it will supply you with an error response. The necessary fields from this transaction includes:
Important note:
The static data information returned within the HotelContent node (concretely, the hotel name, hotel address and hotel category) is the information that we require for you to display on your end in order to succesfully complete the static data certification process. It is not allowed to use previously downloaded information.
Additionally, this transaction also allows for the confirmation of multiple combinations under the same @Locator, either by:
NOTE: While grouping combinations under the same Locator, it will be important to note that any of the cancellation costs involved on any of these combinations will be treated separately.
Node / Attribute (@) | Opt | Type | Description |
---|---|---|---|
@Version | N | String | Web Service version |
@Language | N | String | Language in which the response will be returned. Please, contact Juniper for available languages. |
@TimeStamp | Y | DateTime | This is an optional field that allows for you to send your own time stamp. It will be useful for your Juniper client to verify that there is nothing wrong in regards to the booking confirmation response time. Format: yyyy-MM-ddThh:mm:ss (UTC) |
{Login} | N | - | Customer login to access the Web Service |
{Paxes} | N | - | Indicates the passenger information. Array of passangers. It should indicate the name, surname and passenger age. If it is the booking holder, you should also indicate the identity document. |
ReservationLocator | Y | String | You may indicate an existing booking code to add a hotel reservation to it. Remarcable points: • If no data of the main pax is sent, current data of the booking holder will be taken. • If some data of the main pax is sent, name and surname should match to the current booking holder. The rest of the info will be updated. |
ExternalBookingReference | Y | String | Free text field through which you may send the agency reference, booking code and/or any information that may later help you identify this booking on your supplier system. It cannot exceed the 50 characters. Note that, if neccesary, you will later be capable of searching for the requested booking through this reference on the BookingList request, kindly refer to the related spec as per additional information in this regard. |
PlatformBookingReference | Y | String | Free text field through which you may send the reference of your platform (ideally you should always prioritize the ExternalBookingReference but, if you would like to differentiate between your platform and the agency's final booking reference, send the agency one on ExternalBookingReference and yours here). Right now this is mainly a referential purposes, and cannot be used in order to search and/or identify bookings. |
FileNumber | Y | String | File number field within the Juniper system, optional field that is mainly used for internal purposes. |
Agent | Y | - | If you are interested you may modify the name and email of the user that is making the booking. By default, the ones that are configured are used in the user. |
./Agent/@Name | Y | String | Agent name. |
./Agent/@Email | Y | String | Agent email. |
Holder | N | - | Booking holder. It is mandatory to indicate which of the passengers of the Paxes node that you wish to be the booking holder. Any passenger that stays at the hotel may be the booking holder or you may add a new passenger. |
./Holder/RelPax | N | - | |
./RelPax/@IdPax | N | Integer | Booking passenger Id. It should match with a Pax@IdPax. |
Comments | Y | - | General booking comments (meant for notifications that you wish to address to your direct supplier, for special request and/or customer comments kindly refer to the HotelElement comments found below). |
./Comments/Comment | Y | String | Comment text. |
./Comment/@Type | Y | String | Comment type, it's very important to set the proper @Type or the comment won’t be recognized and saved. Possible values: • RES: General booking comments • INT: Internal booking comments. Kindly note that these comments are restricted, contact with Juniper for more information. |
Elements | N | - | Contains one or more items HotelElement. |
./Elements/HotelElement | N | - | Information related to a specific combination. |
./HotelElement/BookingCode | N | String | BookingCode is the code that is used to identify the combination. You must get it from HotelBookingRules response. |
./HotelElement/RelPaxesDist | N | - | Passengers’ distribution you wish to request. |
./RelPaxesDist/RelPaxDist | N | - | Distribution list. Each one them corresponds to a room. |
./RelPaxDist/RelPaxes | N | - | Passengers list of this distribution/room. |
./RelPaxes/RelPax | N | - | Passenger |
./RelPax/@IdPax | N | Integer | Passenger Identifier. It should match with a Pax@IdPax |
./HotelElement/Comments | Y | - | Hotel element comments. It's important to note that, although we will not be able to ensure this (as not all hotel chains allow for us to supply them with this information), this is the node on which you should send any special requests and/or comments that your customer may have. |
./Comments/Comment | Y | String | Comment text. |
./Comment/@Type | Y | String | Comment type, it's very important to set the proper @Type or the comment won’t be recognized and saved. Possible values: • ELE: Booking element comments |
./HotelElement/CreditCard | Y | - | Credit card to be used as a guarantee in the confirmation of payment in destination reservations. |
./CreditCard/@CardCode | N | String | Credit card code. It is important to understand that this is a sample of credit card codes, and that the actual list of supported card type codes will always depend on your supplier reason for which, if you are interested on performing these kind of payments, it will be necessary for you to clarify the list of supported card type codes directly with your supplier. Possible values: • AX: American Express • CA: Cabal • DC: Diners Club Card • DS: Discover Card • ER: enRoute Card • IT: ItalCred • JC: JCB Card • MA: Maestro • MC: MasterCard • NR: Naranja • NT: Nativa • VE: Visa Electron • VI: Visa • OT: Others Setting a non supported card code will result in a JP_BOOK_INVALIDCREDITCARDCODE error response. |
./CreditCard/@CvC | N | String | Credit card series/security/validation code. |
./CreditCard/@CardNumber | N | String | Credit card number. |
./CreditCard/@ExpireDate | N | String | Credit card expiration date with format “mm/yy”. Ex: “06/16” (June 2016) |
./CreditCard/Name | N | String | Credit card holder name. |
./CreditCard/Surname | N | String | Credit card holder surname. |
./CreditCard/Email | Y | String | Credit card holder email. |
./HotelElement/HotelBookingInfo | N | - | Element basic information. It is necessary to validate the request. |
./HotelBookingInfo/@Start | N | Date | Check-in date Format: yyyy-MM-dd |
./HotelBookingInfo/@End | N | Date | Check-out date Format: yyyy-MM-dd |
./HotelBookingInfo/Price | N | - | Price to which the element will be booked. You may obtain it from the transaction HotelBookingRules. |
./Price/PriceRange | N | - | In this node you will be able to set the minimium a maximum price to which you will allow for the booking price to be modified between the HotelBookingRules and the HotelBooking steps. By default, the HotelBookingRules response supplies you with a -/+ 5% rule of the original price of the booking (a minimum of the 95% of the price of the booking and a maximum of the 105% of the price of the booking) but you’re allowed to set any price in the @Minimum and @Maximum properties so that the mentioned will fit your needs, for example: -If your system does not allow any kind of price modification, then you’re advised to send the 100% of the original price of the booking in both the @Minimum and the @Maximum -Otherwise, if you allow for the price to be modified as long as the new price is lower than the original one, you could for example set a @Minimum of the 25% of the original price of the booking and a @Maximum of the 100% of the original price of the booking. |
./PriceRange/@Currency | N | String | Currency. Note that the currency has to be the same that is supplied on the HotelBookingRules response. |
./PriceRange/@Minimum | N | Double | Minimum price to which you allow for the booking to be modified, if you do not allow for price modifications set the 100% of the original price of the booking. |
./PriceRange/@Maximum | N | Double | Maximum price to which you allow for the booking to be modified, if you do not allow for price modifications set the 100% of the original price of the booking. |
./HotelBookingInfo/Status | Y | String | If specified, it can have the values OK or RQ. If it is specified, the booking will only be confirmed if its status is the same as the requested. For example, if you use Status=OK and the reservation changes to “on request” (because some booked the last room before you), the booking will fail. In this way you can prevent undesired on request bookings. If not specified, no status validation will be performed. |
./HotelBookingInfo/PackageContracts | Y | String | Package contract. Possible values: • Package: Package rates will be preferred but non-package rates will also be retrieved. • OnlyPackage: Only package rates will be returned To be specified if you previously requested for package rates on the availability request. |
./HotelBookingInfo/HotelCode | N | String | Code of the hotel that's going to get booked. |
./HotelBookingInfo/Preferences | Y | - | Preference container. Available if the previous HotelBookingRules response supplied you with preference options. |
./Preferences/Preference | Y | - | Preference item. |
./Preference/@Code | Y | - | Preference code. You may obtain it from the transaction HotelBookingRules. |
./HotelBookingInfo/FlightInfo | Y | - | Flight related information. Used only on those hotel products that require flight info to be provided. |
./FlightInfo/Arrival | Y | - | Arrival related information. |
./Arrival/@FlightTime | N | DateTime | Arrival flight time. |
./Arrival/@FlightNumber | Y | String | Arrival flight number. |
./FlightInfo/Departure | Y | - | Departure related information. |
./Departure/@FlightTime | N | DateTime | Departure flight time. |
./Departure/@FlightNumber | Y | String | Departure flight number. |
./HotelElement/Rebook | Y | - | Used for the Juniper reselling functionality, using this node will imply that the current booking flow will be used for reselling an already existing booking rather than creating a completely new one. If a resell process is intended, it is mandatory to specify this node in each of the booking flow requests. This is a restricted feature that may only be used with Juniper's Reselling functionality. Kindly contact with Juniper for further information. |
./Rebook/@ItemId | N | Integer | Item id of the booking line that is to be rebooked. Used in order to load some of the configuration related to the booking line that is going to be rebooked. |
AdvancedOptions | Y | - | Optional parameters |
./AdvancedOptions/UseCurrency | Y | String | This value allows you to set the currency code that will be used on the booking flow process. It is important to note that if a currency is specified on the availability request, you will then need to set the same AdvancedOption along the same value on the rest of the booking flow transactions. It is also important to note that the list of available currencies for your use (if any, as the feature could not be available) will entirely depend of the Juniper supplier that you will be connecting to. Last of all, please note that if no currency is set on the request the system will then use the default currency configured by your Juniper supplier. |
./AdvancedOptions/SendMailTo | Y | String | If included with the ALL value a booking confirmation email will be sent to your email account. |
./AdvancedOptions/ShowBreakdownPrice | Y | Boolean | If the value is true, it will show the full price object with all the information about the prices. If not specified, false is assumed by default. |
./AdvancedOptions/BookingPaid | Y | Boolean | Parameter meant for internal use only. |
On this XML request we will book a combination of two rooms. A 50 year old adult will stay in the first room and a 30 year old adult will stay with an 8 year old child in the second room. To indicate the booking holder, we use an already existing Pax (IdPax=1) but it could be a new one.
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns="http://www.juniper.es/webservice/2007/">
<soapenv:Body>
<HotelBooking>
<HotelBookingRQ Version="1.1" Language="en">
<Login Email="user@mydomain.com" Password="pass"/>
<Paxes>
<Pax IdPax="1">
<Name>Holder Name</Name>
<Surname>Holder Surname</Surname>
<PhoneNumbers>
<PhoneNumber>+34600555999</PhoneNumber>
</PhoneNumbers>
<Email>holder@yourdomain.com</Email>
<Document Type="DNI">43258752A</Document>
<Address>Address Holder 67</Address>
<City>Palma de Mallorca</City>
<Country>Spain</Country>
<PostalCode>05278</PostalCode>
<Age>50</Age>
<Nationality>ES</Nationality>
</Pax>
<Pax IdPax="2">
<Name>Second Passenger Name</Name>
<Surname>Second Passenger Surname</Surname>
<Age>30</Age>
</Pax>
<Pax IdPax="3">
<Name>Child Name</Name>
<Surname>Child Surname</Surname>
<Age>8</Age>
</Pax>
</Paxes>
<Holder>
<RelPax IdPax="1"/>
</Holder>
<ExternalBookingReference>YOUR_OWN_REFERENCE_123</ExternalBookingReference>
<Comments>
<Comment Type="RES">GENERAL BOOKING COMMENTS</Comment>
</Comments>
<Elements>
<HotelElement>
<BookingCode>ya79dM4dS6R6EywV4XhfEvwItLN5sfa4xcKoRWYtG4b/utM1C8FoU7wtvxeqXKhz2utopk4+5bpJX0EGM8YWSGAwgLA0lkvt/PLN1rsHUrCU.....</BookingCode>
<RelPaxesDist>
<RelPaxDist>
<RelPaxes>
<RelPax IdPax="1"/>
</RelPaxes>
</RelPaxDist>
<RelPaxDist>
<RelPaxes>
<RelPax IdPax="2"/>
<RelPax IdPax="3"/>
</RelPaxes>
</RelPaxDist>
</RelPaxesDist>
<Comments>
<Comment Type="ELE">SPECIFIC HOTEL/SUPPLIER COMMENTS</Comment>
</Comments>
<HotelBookingInfo Start="2019-11-20" End="2019-11-22">
<Price>
<PriceRange Minimum="0" Maximum="1003.57" Currency="EUR"/>
</Price>
<HotelCode>JP046300</HotelCode>
</HotelBookingInfo>
</HotelElement>
</Elements>
</HotelBookingRQ>
</HotelBooking>
</soapenv:Body>
</soapenv:Envelope>
On this XML request we will book two hotels. First one includes a combination of two rooms: a 50 year old adult will stay in the first room and a 30 year old adult will stay with an 8 year old child in the second room. For the second hotel, we book just one room for a 40 years old adult. In order to indicate the booking holder, we use an already existing Pax (IdPax=1) but it could be a new one.
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://www.juniper.es/webservice/2007/">
<soapenv:Header/>
<soapenv:Body>
<HotelBooking>
<HotelBookingRQ Version="1.1" Language="en">
<Login Email="user@mydomain.com" Password="pass"/>
<Paxes>
<Pax IdPax="1">
<Name>Holder Name</Name>
<Surname>Holder Surname</Surname>
<Age>50</Age>
<PhoneNumbers>
<PhoneNumber>111111111</PhoneNumber>
</PhoneNumbers>
<Email>holder@yourdomain.com</Email>
<Document Type="DNI">22222222E</Document>
<Address>Address Holder 67</Address>
<City>Palma de Mallorca</City>
<Country>Spain</Country>
<PostalCode>5555</PostalCode>
<Nationality>ES</Nationality>
</Pax>
<Pax IdPax="2">
<Name>Name B</Name>
<Surname>Surname B</Surname>
<Age>30</Age>
</Pax>
<Pax IdPax="3">
<Name>Name C</Name>
<Surname>Surname C</Surname>
<Age>8</Age>
</Pax>
<Pax IdPax="4">
<Age>40</Age>
<Name>Name D</Name>
<Surname>Surname D</Surname>
</Pax>
</Paxes>
<Holder>
<RelPax IdPax="1"/>
</Holder>
<ExternalBookingReference>YOUR_OWN_REFERENCE_123</ExternalBookingReference>
<Comments>
<Comment Type="RES">GENERAL BOOKING COMMENTS</Comment>
</Comments>
<Elements>
<HotelElement>
<BookingCode>dcFZbKty1cJGKeRtgxIDGUZAprp1mua8ySl4iVIZ7NVKBF/PGk8lhZlN7Hcszjs2RwUR2Dxsrv5l0cZDORKz6frEmPdibqOyV2Jg4Dxz8/bmoX04.....</BookingCode>
<RelPaxesDist>
<RelPaxDist>
<RelPaxes>
<RelPax IdPax="1"/>
</RelPaxes>
</RelPaxDist>
<RelPaxDist>
<RelPaxes>
<RelPax IdPax="2"/>
<RelPax IdPax="3"/>
</RelPaxes>
</RelPaxDist>
</RelPaxesDist>
<HotelBookingInfo Start="2013-08-20" End="2013-08-22">
<HotelCode>JP003600</HotelCode>
<Price>
<PriceRange Currency="USD" Minimum="353.65" Maximum="353.65"/>
</Price>
</HotelBookingInfo>
</HotelElement>
<HotelElement>
<BookingCode>dT5SNG1wB3IJ2W7Dt4k/g+UZAprp1mua8ySl4iVIZ7NVKBF/PGk8lhZlN7Hcszjs2RwUR2Dxsrv5l0cZDORKz6frEmPdibqOyV2Jg4Dxz8/bmoX0.....</BookingCode>
<RelPaxesDist>
<RelPaxDist>
<RelPaxes>
<RelPax IdPax="4"/>
</RelPaxes>
</RelPaxDist>
</RelPaxesDist>
<HotelBookingInfo Start="2013-08-23" End="2013-08-25">
<HotelCode>JP003600</HotelCode>
<Price>
<PriceRange Currency="USD" Minimum="456.78" Maximum="456.78"/>
</Price>
</HotelBookingInfo>
</HotelElement>
</Elements>
</HotelBookingRQ>
</HotelBooking>
</soapenv:Body>
</soapenv:Envelope>
Node / Attribute (@) | Opt | Type | Description |
---|---|---|---|
@Url | N | String | URL endpoint |
@TimeStamp | N | DateTime | Response date and time. Format: yyyy-MM-ddThh:mm:ss (UTC) |
@IntCode | N | String | Internal control code |
{Errors} | Y | - | Applicable errors. |
{Warnings} | Y | - | Applicable warnings. |
Reservations | N | - | Reservations container |
./Reservations/Reservation | N | - | Reservation item |
./Reservation/@Locator | N | String | Booking confirmation locator, you should store the same in your system in order to identify the booking. You will also need the same if you wish to read and/or cancel the booking. For example: MSZB3S |
./Reservation/@Status | N | String | Booking confirmation status. Possible values are: • PAG: Booking confirmed and paid • CON: Booking confirmed • CAN or CAC: Booking cancelled • PRE or PDI: Booking on request • QUO: Quotation (this is a similar status to on request that will always be received when your account requires for the payment of the booking through the WebService) • TAR: Pending credit card payment (usually API connections do not use this status) It is very important to check the Status attribute in order to verify the booking is confirmed. |
./Reservation/@PaymentDestination | Y | Boolean | Indicates if the payment is made by the hotel with the final user credit card. If not specified, false is assumed. |
./Reservation/ExternalBookingReference | Y | String | Free text that may indicate its agency reference, booking code or any code you wish to identify the booking. It will not exceed 50 characters. |
./Reservation/Holder | N | - | Booking holder. Indicates which passenger from the Paxes node is the booking holder. It may not match with one of the booking passengers. Please note that, even if you do not specify the same on your request, the system will always create an additional holder passenger (identified through this node) on the response as it saves the holder information separatedly from the rest of the passengers. For example: Let’s say you ask for a booking of 4 passengers while setting the first one as the holder, given the case, the system will answer you with 5 passengers, the first 4 being the ones included on the booking and the fifth one being the holder itself. |
./Holder/RelPax | N | - | |
./RelPax/@IdPax | N | Integer | Passenger identifier. |
./Reservation/{Paxes} | N | - | Passengers and booking holder. |
./Reservation/Comments | Y | - | Booking comments |
./Comments/Comment | Y | String | Comment text. |
./Comment/@Type | Y | String | Comment type. Possible values: • RES: General booking comments • INT: Internal booking comments |
./Reservation/AgenciesData | Y | - | Agency related information (account from which your credentials originate from). |
./AgenciesData/AgencyData | Y | - | Specific agency. |
./AgencyData/ReferencedAgency | Y | Boolean | If it is a referenced agency. |
./AgencyData/AgencyCode | Y | Integer | Agency internal code. |
./AgencyData/AgencyName | Y | String | Agency name. |
./AgencyData/AgencyHandledBy | Y | String | Name of the agent. |
./AgencyData/AgencyEmail | Y | String | Agency mail. |
./AgencyData/AgencyReference | Y | String | Agency reference for the reservation (ExternalBookingReference). |
./Reservation/Items | N | - | Contains one or more elements HotelItem |
./Items/HotelItem | N | - | Identifies an element or room combination |
./HotelItem/@ItemId | N | String | Item identifier |
./HotelItem/@Status | N | String | Item status. Possible values are: • OK or AV - Available • RQ - On request • CA - Cancelled |
./HotelItem/ExternalInfo | Y | - | External information. Restricted information that depends on a permission. |
./ExternalInfo/Supplier | Y | - | Supplier information |
./Supplier/@Code | Y | String | Supplier code |
./Supplier/@IntCode | Y | String | Supplier internal code |
./Supplier/@PhoneNumber1 | Y | String | Supplier phone number |
./Supplier/@PhoneNumber2 | Y | String | Supplier phone number 2 |
./ExternalInfo/ExternalLocator | Y | String | Supplier locator |
./ExternalInfo/ExternalCancellationLocator | Y | String | Supplier cancellation locator |
./ExternalInfo/ExternalTransactionIDS | Y | - | Supplier transaction ids. |
./ExternalTransactionIDS/ExternalTransactionID | N | - | Supplier transaction id. |
./ExternalTransactionID/@Type | N | String | Transaction type. Possible values: • CONFIRM • MODIFY • CANCEL |
./ExternalTransactionID/@Value | N | String | Transaction id. |
./ExternalInfo/HotelConfirmationNumber | Y | String | Hotel confirmation number. |
./HotelItem/TaxReference | Y | String | Payable tax reference. Restricted information that depends on configuration. |
./HotelItem/{Prices} | N | - | Item prices or combination. |
./HotelItem/{CancellationPolicy} | Y | - | Cancellation policies. |
./HotelItem/{CancellationPolicyCost} | Y | - | Cost cancellation policies. Restricted information, contract with Juniper for more information. |
./HotelItem/Comments | Y | - | Item or hotel comments. |
./Comments/Comment | N | String | Comment text. |
./Comment/@Type | N | String | Comment type. Possible values: • ELE: Booking element comments • HOT: Comments from the hotel or provider |
./HotelItem/HotelInfo | N | - | Hotel basic information |
./HotelInfo/@Code | N | String | Hotel code |
./HotelInfo/@JPCode | Y | String | Hotel JPCode. Informative value that requires a specific configuration. |
./HotelInfo/@DestinationZone | N | String | Destination zone |
./HotelInfo/@JPDCode | N | String | Shared zone identificator between all Juniper clients. |
./HotelInfo/@VervotechCode | Y | String | Vervotech mapping code. Only available on vervotech-enabled environments and when there ir a mapping code available for the relevant results. Meant so that buyers that operate with Vervotech may verify that the hotel mapping that it is being returned is the one that was originally intended. Additionally, if a mapping discrepancy is detected on Juniper, you will be provided with a warnMappingVervotech warning for your reference (for you to decide if you wish to continue with the reservation). |
./HotelInfo/Name | N | String | Hotel name |
./HotelInfo/Description | Y | String | Hotel description |
./HotelInfo/HotelCategory | Y | String | Hotel category |
./HotelCategory/@Type | Y | String | Hotel category type |
./HotelInfo/Address | Y | String | Hotel address |
./HotelItem/Board | Y | String | Board plan name/description. |
./Board/@Type | Y | String | Board plan type. It's important to understand that this property is optional, as some results may not have a typified board plan type mapping available. |
./Board/@Code | Y | String | Board plan internal code. This optional information requires for a specific permission to be enabled. |
./Board/@ExternalCode | Y | String | Board plan external code. This optional information requires for a specific permission to be enabled. |
./HotelItem/HotelRooms | N | - | Combination rooms list |
./HotelRooms/HotelRoom | N | - | Room |
./HotelRoom/@Source | Y | String | Room identifier within the list. Example: “1”, “2”, “1,2” (if Units > 1) |
./HotelRoom/@Code | Y | String | Room code. This optional information requires for a specific permission to be enabled. |
./HotelRoom/Name | Y | String | Room type name |
./HotelRoom/Description | Y | String | Room description |
./HotelRoom/RoomCategory | Y | String | Room category |
./RoomCategory/@Type | Y | String | Room category type |
./RoomCategory/@Code | Y | String | Room category code. This optional information requires for a specific permission to be enabled. |
./HotelRoom/RelPaxes | N | - | Room passengers. |
./RelPaxes/RelPax | N | - | |
./RelPax/@IdPax | N | Integer | Passenger identifier. It should match with a Pax@IdPax |
./HotelRoom/Contracts | Y | - | Contracts. This optional information requires for a specific permission to be enabled. |
./Contracts/DailyContracts | N | - | Daily contracts |
./DailyContracts/@Type | N | String | Contacts type |
./DailyContracts/DailyContract | N | String | Daily contract |
./DailyContract/@Type | N | String | FIT, PRO, GTD,… |
./DailyContract/@Code | N | Integer | Contract code |
./DailyContract/@Start | Y | Date | Start day contract period |
./DailyContract/@Days | Y | Integer | Number of days with the same contract |
./DailyContract/@ExtranetContract | Y | Boolean | If it is an extranet contract |
./DailyContract/Name | N | String | Contract name |
./HotelItem/{AdditionalElements} | Y | - | Combination additional elements, such as offers or supplements. |
./HotelItem/Rebook | Y | - | Used for the Juniper reselling functionality, only available on reselling-related responses. This is a restricted feature that may only be used with Juniper's reselling functionality. Kindly contact with Juniper for further information. |
./Rebook/@ItemId | N | Integer | Item id of the rebook booking line. |
./Items/{AdjustmentItem} | Y | - | Additional adjustment item. It will be available if, for example, you've manually added a PromoCode on the previous BookingRules step. |
./Reservation/Payment | Y | - | Payment information. |
./Payment/@Type | N | String | Payment type code. Possivle values: • C: Credit • B: Bank • T: POS (Point of sale) |
On this XML response we can see an example of a succesfully confirmed booking.
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<HotelBookingResponse xmlns="http://www.juniper.es/webservice/2007/">
<BookingRS Url="http://xml-uat.bookingengine.es" TimeStamp="2019-10-03T09:46:09.6658059+02:00" IntCode="H5OUJ+keBjNiv1N6TNanV1X11BZlsYBWfqjJMpVo/j4=">
<Reservations>
<Reservation Locator="TQ1TBG" Status="PAG" Language="en">
<ExternalBookingReference>YOUR_OWN_REFERENCE_123</ExternalBookingReference>
<Holder>
<RelPax IdPax="4"/>
</Holder>
<Paxes>
<Pax IdPax="1">
<Document Type="DNI">43258752A</Document>
<PhoneNumbers>
<PhoneNumber>+34600555999</PhoneNumber>
</PhoneNumbers>
<Name>Holder Name</Name>
<Surname>Holder Surname</Surname>
<Age>50</Age>
<Email>holder@yourdomain.com</Email>
<Address>Address Holder 67</Address>
<City>Palma de Mallorca</City>
<Country>Spain</Country>
<PostalCode>05278</PostalCode>
<Nationality>ES</Nationality>
</Pax>
<Pax IdPax="2">
<Name>Second Passenger Name</Name>
<Surname>Second Passenger Surname</Surname>
<Age>30</Age>
</Pax>
<Pax IdPax="3">
<Name>Child Name</Name>
<Surname>Child Surname</Surname>
<Age>8</Age>
</Pax>
<Pax IdPax="4">
<Document Type="DNI">43258752A</Document>
<PhoneNumbers>
<PhoneNumber Type="TFN">+34600555999</PhoneNumber>
</PhoneNumbers>
<Name>Holder Name</Name>
<Surname>Holder Surname</Surname>
<Age>50</Age>
<Email>holder@yourdomain.com</Email>
<Address>Address Holder 67</Address>
<City>Palma de Mallorca</City>
<Country>Spain</Country>
<PostalCode>05278</PostalCode>
<Nationality>ES</Nationality>
</Pax>
</Paxes>
<Comments>
<Comment Type="RES">GENERAL BOOKING COMMENTS</Comment>
</Comments>
<AgenciesData>
<AgencyData>
<ReferencedAgency>false</ReferencedAgency>
<AgencyCode>123</AgencyCode>
<AgencyName>Test XML Juniper</AgencyName>
<AgencyHandledBy>XML Agent</AgencyHandledBy>
<AgencyEmail>noreply@ejuniper.com</AgencyEmail>
<AgencyReference>YOUR_OWN_REFERENCE_123</AgencyReference>
</AgencyData>
<AgencyData>
<ReferencedAgency>true</ReferencedAgency>
<AgencyCode>0</AgencyCode>
</AgencyData>
</AgenciesData>
<Items>
<HotelItem ItemId="148012" Status="OK" Start="2019-11-20" End="2019-11-22">
<Prices>
<Price Type="S" Currency="EUR">
<TotalFixAmounts Gross="1003.57" Nett="1003.57">
<Service Amount="912.34"/>
<ServiceTaxes Included="false" Amount="91.23"/>
</TotalFixAmounts>
</Price>
</Prices>
<CancellationPolicy CurrencyCode="EUR">
<FirstDayCostCancellation Hour="00:00">2019-11-13</FirstDayCostCancellation>
<Description>* Cancelling from 17/11/2019 at 00:00:00 to 21/11/2019 at 00:00:00: 100.00 % of expenses * Cancelling from 13/11/2019 at 00:00:00 to 17/11/2019 at 00:00:00: 25.00 % of expenses * Cancelling from 03/10/2019 at 00:00:00 to 13/11/2019 at 00:00:00: 0 &euro;</Description>
<PolicyRules>
<Rule From="0" To="3" DateFrom="2019-11-17" DateFromHour="00:00" DateTo="2019-11-21" DateToHour="00:00" Type="V" FixedPrice="0" PercentPrice="100" Nights="0" ApplicationTypeNights="Average"/>
<Rule From="4" To="7" DateFrom="2019-11-13" DateFromHour="00:00" DateTo="2019-11-17" DateToHour="00:00" Type="V" FixedPrice="0" PercentPrice="25" Nights="0" ApplicationTypeNights="Average"/>
<Rule From="8" DateFrom="2019-10-03" DateFromHour="00:00" DateTo="2019-11-13" DateToHour="00:00" Type="V" FixedPrice="0" PercentPrice="0" Nights="0" ApplicationTypeNights="Average"/>
</PolicyRules>
</CancellationPolicy>
<Comments>
<Comment Type="ELE">SPECIFIC HOTEL/SUPPLIER COMMENTS</Comment>
<Comment Type="HOT">
<![CDATA[* 13/06/2018 - 31/12/2030: Please note that on this field hotels have the possibility of supplying you with important information like:<br><br>- Additional taxes (like, for example, a city tax).<br>- Additional features (like, for example, a detailed explanation of a promotion)<br>- Additional warnings (like, for example, the pool being closed due to renovations)<br>- Additional information (like, for example, the emergency phone)<br><br>Among other examples.<br>]]>
</Comment>
</Comments>
<HotelInfo Code="JP046300" JPCode="JP046300" JPDCode="JPD000004" DestinationZone="2">
<Name>APARTAMENTOS ALLSUN PIL-LARI PLAYA</Name>
<HotelCategory Type="3est">3 Stars</HotelCategory>
<Address>Calle Marbella 24</Address>
</HotelInfo>
<Board Type="AD">Bed & Breakfast</Board>
<HotelRooms>
<HotelRoom Source="1">
<Name>Single</Name>
<RoomCategory Type="1">Category 1</RoomCategory>
<RelPaxes>
<RelPax IdPax="1"/>
</RelPaxes>
</HotelRoom>
<HotelRoom Source="2">
<Name>Double</Name>
<RoomCategory Type="2">Category 2</RoomCategory>
<RelPaxes>
<RelPax IdPax="2"/>
<RelPax IdPax="3"/>
</RelPaxes>
</HotelRoom>
</HotelRooms>
<AdditionalElements>
<HotelOffers>
<HotelOffer Code="843" Type="M">
<Name>[2019] 5% discount</Name>
<Description>Offer description</Description>
</HotelOffer>
</HotelOffers>
</AdditionalElements>
</HotelItem>
</Items>
</Reservation>
</Reservations>
</BookingRS>
</HotelBookingResponse>
</soap:Body>
</soap:Envelope>
This transaction allows for the retrieval of the booking information of a specific booking through the use of its booking code.
The returned information is the same as in the HotelBooking response. Please refer to the HotelBooking section for further information.
Node / Attribute (@) | Opt | Type | Description |
---|---|---|---|
@Version | N | String | Web Service version |
@Language | N | String | Language in which the response will be returned. Please, contact Juniper for available languages. |
{Login} | N | - | Customer login to access the Web Service |
ReadRequest | N | - | - |
./ReadRequest/@ReservationLocator | N | String | Booking code |
AdvancedOptions | Y | - | Optional parameters |
./AdvancedOptions/ShowBreakdownPrice | Y | Boolean | If the value is true, it will show the full price object with all the information about the prices. If not specified, false is assumed by default. |
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://www.juniper.es/webservice/2007/">
<soapenv:Header/>
<soapenv:Body>
<ReadBooking>
<ReadRQ Version="1.1" Language="en">
<Login Email="user@mydomain.com" Password="pass"/>
<ReadRequest ReservationLocator="TQ1TBG"/>
</ReadRQ>
</ReadBooking>
</soapenv:Body>
</soapenv:Envelope>
It returns the same information as the response of HotelBooking. Kindly refer to the HotelBooking section if you wish to consult the specifications of the nodes and properties of this transaction.
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<ReadBookingResponse xmlns="http://www.juniper.es/webservice/2007/">
<BookingRS Url="http://xml-uat.bookingengine.es" TimeStamp="2019-10-03T09:50:23.1074823+02:00" IntCode="Pczv1ukYfu8i+QIhK1rxvNQL+MNfJiiuIIpHIfPsa0I=">
<Reservations>
<Reservation Locator="TQ1TBG" Status="PAG" Language="en">
<ExternalBookingReference>YOUR_OWN_REFERENCE_123</ExternalBookingReference>
<Holder>
<RelPax IdPax="4"/>
</Holder>
<Paxes>
<Pax IdPax="1">
<Document Type="DNI">43258752A</Document>
<PhoneNumbers>
<PhoneNumber>+34600555999</PhoneNumber>
</PhoneNumbers>
<Name>Holder Name</Name>
<Surname>Holder Surname</Surname>
<Age>50</Age>
<Email>holder@yourdomain.com</Email>
<Address>Address Holder 67</Address>
<City>Palma de Mallorca</City>
<Country>Spain</Country>
<PostalCode>05278</PostalCode>
<Nationality>ES</Nationality>
</Pax>
<Pax IdPax="2">
<Name>Second Passenger Name</Name>
<Surname>Second Passenger Surname</Surname>
<Age>30</Age>
</Pax>
<Pax IdPax="3">
<Name>Child Name</Name>
<Surname>Child Surname</Surname>
<Age>8</Age>
</Pax>
<Pax IdPax="4">
<Document Type="DNI">43258752A</Document>
<PhoneNumbers>
<PhoneNumber Type="TFN">+34600555999</PhoneNumber>
</PhoneNumbers>
<Name>Holder Name</Name>
<Surname>Holder Surname</Surname>
<Age>50</Age>
<Email>holder@yourdomain.com</Email>
<Address>Address Holder 67</Address>
<City>Palma de Mallorca</City>
<Country>Spain</Country>
<PostalCode>05278</PostalCode>
<Nationality>ES</Nationality>
</Pax>
</Paxes>
<Comments>
<Comment Type="RES">GENERAL BOOKING COMMENTS</Comment>
</Comments>
<AgenciesData>
<AgencyData>
<ReferencedAgency>false</ReferencedAgency>
<AgencyCode>974</AgencyCode>
<AgencyName>Test XML Fasar Systems</AgencyName>
<AgencyHandledBy>XML Agent</AgencyHandledBy>
<AgencyEmail>fabio@fasarsystems.com</AgencyEmail>
<AgencyReference>YOUR_OWN_REFERENCE_123</AgencyReference>
</AgencyData>
<AgencyData>
<ReferencedAgency>true</ReferencedAgency>
<AgencyCode>0</AgencyCode>
</AgencyData>
</AgenciesData>
<Items>
<HotelItem ItemId="148012" Status="OK" Start="2019-11-20" End="2019-11-22">
<Prices>
<Price Type="S" Currency="EUR">
<TotalFixAmounts Gross="1003.57" Nett="1003.57">
<Service Amount="912.34"/>
<ServiceTaxes Included="false" Amount="91.23"/>
</TotalFixAmounts>
</Price>
</Prices>
<CancellationPolicy CurrencyCode="EUR">
<FirstDayCostCancellation Hour="00:00">2019-11-13</FirstDayCostCancellation>
<Description>* Cancelling from 17/11/2019 at 00:00:00 to 21/11/2019 at 00:00:00: 100.00 % of expenses * Cancelling from 13/11/2019 at 00:00:00 to 17/11/2019 at 00:00:00: 25.00 % of expenses * Cancelling from 03/10/2019 at 00:00:00 to 13/11/2019 at 00:00:00: 0 &euro;</Description>
<PolicyRules>
<Rule From="0" To="3" DateFrom="2019-11-17" DateFromHour="00:00" DateTo="2019-11-21" DateToHour="00:00" Type="V" FixedPrice="0" PercentPrice="100" Nights="0" ApplicationTypeNights="Average"/>
<Rule From="4" To="7" DateFrom="2019-11-13" DateFromHour="00:00" DateTo="2019-11-17" DateToHour="00:00" Type="V" FixedPrice="0" PercentPrice="25" Nights="0" ApplicationTypeNights="Average"/>
<Rule From="8" DateFrom="2019-10-03" DateFromHour="00:00" DateTo="2019-11-13" DateToHour="00:00" Type="V" FixedPrice="0" PercentPrice="0" Nights="0" ApplicationTypeNights="Average"/>
</PolicyRules>
</CancellationPolicy>
<Comments>
<Comment Type="ELE">SPECIFIC HOTEL/SUPPLIER COMMENTS</Comment>
<Comment Type="HOT">
<![CDATA[* 13/06/2018 - 31/12/2030: Please note that on this field hotels have the possibility of supplying you with important information like:<br><br>- Additional taxes (like, for example, a city tax).<br>- Additional features (like, for example, a detailed explanation of a promotion)<br>- Additional warnings (like, for example, the pool being closed due to renovations)<br>- Additional information (like, for example, the emergency phone)<br><br>Among other examples.<br>]]>
</Comment>
</Comments>
<HotelInfo Code="JP046300" JPCode="JP046300" JPDCode="JPD000004" DestinationZone="2">
<Name>APARTAMENTOS ALLSUN PIL-LARI PLAYA</Name>
<HotelCategory Type="3est">3 Stars</HotelCategory>
<Address>Calle Marbella 24</Address>
</HotelInfo>
<Board Type="AD">Bed & Breakfast</Board>
<HotelRooms>
<HotelRoom Source="1">
<Name>Single</Name>
<RoomCategory Type="1">Category 1</RoomCategory>
<RelPaxes>
<RelPax IdPax="1"/>
</RelPaxes>
</HotelRoom>
<HotelRoom Source="2">
<Name>Double</Name>
<RoomCategory Type="2">Category 2</RoomCategory>
<RelPaxes>
<RelPax IdPax="2"/>
<RelPax IdPax="3"/>
</RelPaxes>
</HotelRoom>
</HotelRooms>
<AdditionalElements>
<HotelOffers>
<HotelOffer Code="843" Type="M">
<Name>[2019] 5% discount</Name>
<Description>Offer description</Description>
</HotelOffer>
</HotelOffers>
</AdditionalElements>
</HotelItem>
</Items>
</Reservation>
</Reservations>
</BookingRS>
</ReadBookingResponse>
</soap:Body>
</soap:Envelope>
This transaction allows for the cancellation of a booking, either to the booking as a whole or to specifically one of its services/items. Through the use of the @OnlyCancellationFees property it will also allow you to retrieve the cancellation costs of such booking without needing to actually cancel the same, whenever available (as it is important to note that this information could be unavailable and, on those cases, you will need to rely on the available cancellation policies).
Node / Attribute (@) | Opt | Type | Description |
---|---|---|---|
@Version | N | String | Web Service version |
@Language | N | String | Language in which the response will be returned. Please, contact Juniper for available languages. |
{Login} | N | - | Customer login to access the Web Service |
CancelRequest | N | - | - |
./CancelRequest/@ReservationLocator | N | String | Booking code. If not used along an @ItemId will allow for the cancellation of the booking as a whole. |
./CancelRequest/@ItemId | Y | Integer | Booking line (service item) identifier. If it is the only/latest available item of a booking, canceling the locator as a whole will be necessary. |
./CancelRequest/@OnlyCancellationFees | Y | Boolean | Allows for the retrieval of the available cancellation costs of the booking. If included, the booking will not be cancelled. |
AdvancedOptions | Y | - | Optional parameters. |
./AdvancedOptions/SendMailTo | Y | String | If included with the ALL value, a booking confirmation email will be sent to your email account. |
./AdvancedOptions/ShowBreakdownPrice | Y | Boolean | If the value is true, it will show the full price object with all the information about the prices. If not specified, false is assumed by default. |
./AdvancedOptions/ShowCancelBreakdown | Y | Boolean | If the value is true and if the information is available, it will include the cancellation cost breakdown. |
Booking locator cancellation
<soapenv:Envelope xmlns:soapenv = "http://schemas.xmlsoap.org/soap/envelope/" xmlns = "http://www.juniper.es/webservice/2007/">
<soapenv:Header/>
<soapenv:Body>
<CancelBooking>
<CancelRQ Version = "1.1" Language = "en">
<Login Email = "user@mydomain.com" Password = "pass"/>
<CancelRequest ReservationLocator = "WZS1N6"/>
</CancelRQ>
</CancelBooking>
</soapenv:Body>
</soapenv:Envelope>
Retrieval of cancellation costs
<soapenv:Envelope xmlns:soapenv = "http://schemas.xmlsoap.org/soap/envelope/" xmlns = "http://www.juniper.es/webservice/2007/">
<soapenv:Header/>
<soapenv:Body>
<CancelBooking>
<CancelRQ Version = "1.1" Language = "en">
<Login Email = "user@mydomain.com" Password = "pass"/>
<CancelRequest ReservationLocator = "WZS1N6" OnlyCancellationFees = "true"/>
</CancelRQ>
</CancelBooking>
</soapenv:Body>
</soapenv:Envelope>
Aside from the CancelInfo object (which we detail below), if the cancellation request is successful, this response will return the same structure that the response of the HotelBooking request has. Kindly refer to the HotelBooking request for the specifications of the nodes and properties from this transaction.
In addition to this, it is very important to focus on the warnings from the response of this transaction, as they will tell you if the cancellation cost could or could not be retrieved and if the reservation was or was not canceled, as in the below list of examples:
Important
In the event of canceling the reservation but getting a response on which the cancellation cost could not be calculated (warnCancelledAndCancellationNotCalculated), it is important to never assume that this reservation will not involve any costs and contacting with your Juniper supplier will be necessary.
Object that details the cancellation costs of a reservations, if any. We may refer to this object as: {CancelInfo}
Node / Attribute (@) | Opt | Type | Description |
---|---|---|---|
BookingCodeState | Y | String | Status on which the booking has been left. Refer to the booking confirmation response, for a list of all of the possible statuses. |
BookingCancelCost | Y | Double | Cancellation cost of the reservation. |
BookingCancelCostCurrency | Y | String | Cancellation cost currency of the reservation. |
BreakDown | Y | - | Cancellation cost breakdown of the reservation. Refer to the breakdown node from the {Prices} object, for further information on its specification. |
Actual booking cancellation
<soap:Envelope xmlns:soap = "http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd = "http://www.w3.org/2001/XMLSchema">
<soap:Body>
<CancelBookingResponse xmlns = "http://www.juniper.es/webservice/2007/">
<BookingRS Url = "http://xml-uat.bookingengine.es" TimeStamp = "2022-11-30T11:45:24.7817582+01:00" IntCode = "JObE7JM8D9DJtKzKcFWsGf8a6DLVaQ+5cwGmNKAYuc0=">
<Warnings>
<Warning Code = "warnCancelledAndCancellationCostRetrieved" Text = "Cancellation cost retrieved. Reservation was cancelled."/>
<CancelInfo>
<BookingCodeState>CaC</BookingCodeState>
<BookingCancelCost>0</BookingCancelCost>
<BookingCancelCostCurrency>EUR</BookingCancelCostCurrency>
</CancelInfo>
</Warnings>
<Reservations>
<Reservation Locator = "WZS1N6" Status = "CAC" Language = "en">
<ExternalBookingReference>YOUR_OWN_REFERENCE</ExternalBookingReference>
<Holder>
<RelPax IdPax = "4"/>
</Holder>
<Paxes>
<Pax IdPax = "2">
<Name>Passenger Name</Name>
<Surname>Passenger Surname</Surname>
<Age>30</Age>
</Pax>
<Pax IdPax = "3">
<Name>Passenger Name 2</Name>
<Surname>Passenger Surname 2</Surname>
<Age>30</Age>
</Pax>
<Pax IdPax = "4">
<Name>Holder Name</Name>
<Surname>Holder Surname</Surname>
<Age>30</Age>
<Nationality>ES</Nationality>
</Pax>
</Paxes>
<Comments>
<Comment Type = "RES">GENERAL BOOKING COMMENTS</Comment>
</Comments>
<AgenciesData>
<AgencyData>
<ReferencedAgency>false</ReferencedAgency>
<AgencyCode>280</AgencyCode>
<AgencyName>Juniper (Integrador)</AgencyName>
<AgencyHandledBy>Agente XML</AgencyHandledBy>
<AgencyEmail>replacement@test.com</AgencyEmail>
<AgencyReference>YOUR_OWN_REFERENCE</AgencyReference>
</AgencyData>
<AgencyData>
<ReferencedAgency>true</ReferencedAgency>
<AgencyCode>0</AgencyCode>
</AgencyData>
</AgenciesData>
<Items>
<HotelItem ItemId = "368017" Status = "CA" Start = "2023-09-03" End = "2023-09-05">...</HotelItem>
</Items>
<Payment Type = "C"/>
</Reservation>
</Reservations>
</BookingRS>
</CancelBookingResponse>
</soap:Body>
</soap:Envelope>
Cancellation cost retrieval
<soap:Envelope xmlns:soap = "http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd = "http://www.w3.org/2001/XMLSchema">
<soap:Body>
<CancelBookingResponse xmlns = "http://www.juniper.es/webservice/2007/">
<BookingRS Url = "http://xml-uat.bookingengine.es" TimeStamp = "2022-11-30T11:36:47.3924763+01:00" IntCode = "dyPTSrKuEYclahby39DdPTgHCqIuVWcSjmp8IrvX2c4=">
<Warnings>
<Warning Code = "warnCancellationCostRetrieved" Text = "Cancellation cost retrieved. Reservation was not cancelled."/>
<CancelInfo>
<BookingCodeState>Pag</BookingCodeState>
<BookingCancelCost>0</BookingCancelCost>
<BookingCancelCostCurrency>EUR</BookingCancelCostCurrency>
<BreakDown>
<Concepts>
<Concept Name = "Apartamentos Allsun Pil-lari Play-a (03/09/2023 - 05/09/2023)">
<Items>
<Item Amount = "0"/>
</Items>
</Concept>
</Concepts>
</BreakDown>
</CancelInfo>
</Warnings>
</BookingRS>
</CancelBookingResponse>
</soap:Body>
</soap:Envelope>
This group of transactions allows you to modify hotel reservations. At most (depending on the capabilities from the end hotel), you will be able to modify the following information:
At a booking level:
At a hotel level (HotelItem):
Important note:
It is very important to keep in mind that it will not be possible to modify all of the elements on all of your reservations, as the capability of modifying each individual element will depend on the product that was bought and, in short, this will end up depending on the products that you will end up working with (for example, direct contracts are prone on allowing most of the modifications, while external products are prone to not allowing any of them).
Some modifications may require a booking line cancellation. On these cases, we will cancel the old booking line and create a new booking line with the modified data. Keep in mind that we will never cancel the whole booking nor create a new one. On this case, bookings that have cancellation charges will be unable to be modified. In order to modify them you will have to cancel them, assume the cancellation charges and create a new one on your end.
The modification process consists of two steps:
HotelModify: This transaction allows you to check if the modifications that you want to perform are possible without the need of actually performing them in the process. In the transaction you will have to indicate the information that you want to modify so that on the response you will get:
If the modification can be made.
If the modification can be made, what will be modified.
You will get all of the available combinations that comply with the modifications that want to be made where you will have to select one of those combinations (@ModifyCode). For example, if you want to add a passenger, you will get all of the available combinations that share the new occupation. In the same way, if you want to change the booking dates, you will get all of the available combinations for that hotel and dates. This way, if there is no combination available for those dates that share the same room and mealplan you will have the option to select another combination with a different room and/or mealplan. The @ModifyCode works in a very similar way to the @BookingCode as you will have to send this code in the HotelConfirmModify transaction in order to confirm the modification. The most significative difference is that you will not always have a @ModifyCode, as for example, it will not be necessary in those cases that you only want to modify the booking information (hotel comments, agency reference or name and surname of the lead passenger)
HotelConfirmModify: After checking that the modifications are possible with the HotelModify transaction, this transaction will allow you to actually confirm such modifications. If the HotelModify transaction gave you one or more @ModifyCode you will have to choose and send one in this transaction.
The response will indicate the booking information and a warning with all the performed modifications.
In this first step you will have to specify the information you wish to modify.
Node / Attribute (@) | Opt | Type | Description |
---|---|---|---|
@Version | N | String | Web Service version |
@Language | N | String | Language in which the response will be returned. Please, contact Juniper for available languages. |
{Login} | N | - | Customer login to access the Web Service |
ReservationLocator | N | String | Reservation locator |
./ReservationLocator/@ItemId | N | String | Hotel item Id |
{Paxes} | Y | - | Allows you to modify the passenger information or the occupancy of the rooms of the booking. |
Holder | N | - | Allows you to modify the lead passenger information. |
./Holder/RelPax | N | - | |
./RelPax/@IdPax | N | Integer | Booking passenger Id. It should match with a Pax@IdPax |
ExternalBookingReference | Y | String | Allows you to modify the external booking reference. |
Comments | Y | - | Allows you to modify the booking comments. |
./Comments/Comment | Y | String | Comment text. |
./Comment/@Type | Y | String | Comment type. Possible values: • RES: General booking comments • ELE: Booking line comments |
SearchSementHotels | Y | - | |
./SearchSementHotels/@Start | Y | Date | Allows you to modify the start date |
./SearchSementHotels/@End | Y | Date | Allows you to modify the end date |
./SearchSementHotels/HotelCode | Y | String | Allows you to modify the hotel |
./SearchSementHotels/Board | Y | - | Allows you to modify the board |
./Board/@Type | N | String | Board type. |
RelPaxesDist | Y | - | Allows you to modify the passenger distribution. |
./RelPaxesDist/RelPaxDist | N | - | Distribution list. Each one them corresponds to a room. |
./RelPaxDist/RelPaxes | N | - | Passengers list of this distribution/room. |
./RelPaxes/RelPax | N | - | Passenger |
./RelPax/@IdPax | N | Integer | Passenger Identifier. It should match with a Pax@IdPax |
./RelPaxDist/Rooms | Y | - | Applicable rooms of the distribution. Use in order to search for specific rooms or to specify a new room distribution (allowing, for example, for rooms to be removed from the reservation). |
./Rooms/Room | N | - | Specific room. |
./Room/@Code | Y | String | Internal room code. |
./Room/@CategoryType | Y | String | Room category code. Use HotelStaticData operation to retrieve all available room categories. |
./Room/@Source | Y | String | Room identifier based on its order. For example: "1" identifies the first room of the reservation while "3" identifies the third room of the reservation. |
AdvancedOptions | Y | - | Optional parameters. |
./AdvancedOptions/ShowBreakdownPrice | Y | Boolean | If the value is true, it will show the full price object with all the information about the prices. If not specified, false is assumed by default. |
Node / Attribute (@) | Opt | Type | Description |
---|---|---|---|
@Url | N | String | URL endpoint |
@TimeStamp | N | DateTime | Response date and time. Format: yyyy-MM-ddThh:mm:ss (UTC) |
@IntCode | N | String | Internal control code |
{Errors} | Y | - | Applicable errors. |
{Warnings} | Y | - | Applicable warnings. |
Results | N | - | List of results |
./Results/HotelModifyResult | N | - | Hotel result |
./HotelModifyResult/@Code | N | String | Hotel code |
./HotelModifyResult/@JPCode | Y | String | Hotel JPCode. Informative value that requires a specific configuration. |
./HotelModifyResult/@DestinationZone | N | String | Destination Code |
./HotelModifyResult/@JPDCode | N | String | Shared zone identificator between all Juniper clients. |
./HotelModifyResult/@Start | N | Date | Start date. |
./HotelModifyResult/@End | N | Date | End date. |
./HotelModifyResult/HotelInfo | Y | - | Hotel basic information. |
./HotelInfo/Name | Y | String | Hotel name |
./HotelInfo/Description | Y | String | Hotel description |
./HotelInfo/Images | Y | - | List of images |
./Images/Image | Y | String | URL image |
./HotelInfo/HotelCategory | Y | String | Hotel category |
./HotelCategory/@Type | Y | String | Hotel category type |
./HotelInfo/PropertyType | Y | String | Property type. This value will only be returned on those hotels that allow PropertyType filtering. |
./PropertyType/@Type | Y | String | Property type code |
./HotelInfo/HotelType | Y | String | Hotel type |
./HotelType/@Type | Y | String | Hotel type type |
./HotelInfo/Address | Y | String | Hotel address |
./HotelInfo/Latitude | Y | String | Hotel latitude |
./HotelInfo/Longitude | Y | String | Hotel lontitude |
./HotelInfo/{ContentProviders} | Y | - | List of hotel media content |
./HotelModifyResult/HotelOptions | N | - | List of combinations |
./HotelOptions/HotelOption | N | - | Room combination |
./HotelOption/@Status | Y | String | Availability status. Posible values: • OK – Available • RQ – On Request |
./HotelOption/@NonRefundable | Y | Boolean | Indicates if the combination is non refundable. If it’s true, the cancellation will have a 100% penalty cost from the date in which the booking is confirmed. |
./HotelOption/ModifyCode | N | String | Code that identifies the combination that will be used on the modification. |
./ModifyCode/@ExpirationDate | Y | DateTime | Expiration Date of the booking Code, will appear just for the option send in the request in case we get a result available Format: yyyy-MM-ddThh:mm:ss (UTC) |
./HotelOption/Board | Y | String | Board plan name/description. |
./Board/@Type | Y | String | Board plan type. It's important to understand that this property is optional, as some results may not have a typified board plan type mapping available. |
./HotelOption/{Prices} | N | - | Prices |
./HotelOption/HotelRooms | N | - | List of rooms |
./HotelRooms/HotelRoom | N | - | Room |
./HotelRoom/@Units | Y | Integer | Number of rooms |
./HotelRoom/@Source | Y | String | Room identifier within the list. Example: “1”, “2”, “1,2” (if Units > 1) |
./HotelRoom/@AvailRooms | Y | Integer | Available rooms |
./HotelRoom/Name | Y | String | Room type name |
./HotelRoom/Description | Y | String | Room description |
./HotelRoom/RoomCategory | Y | String | Room category |
./RoomCategory/@Type | Y | String | Room category type |
./HotelRoom/RoomOccupancy | Y | - | Room occupancy details |
./RoomOccupancy/@Occupancy | Y | Integer | Total room occupancy |
./RoomOccupancy/@MaxOccupancy | Y | Integer | Maximum occupancy per room |
./RoomOccupancy/@MinOccupancy | Y | Integer | Minimum occupancy per room |
./RoomOccupancy/@Adults | Y | Integer | Adult occupancy per room |
./RoomOccupancy/@MaxAdults | Y | Integer | Maximum adult occupancy per room |
./RoomOccupancy/@MinAdults | Y | Integer | Minimum adult occupancy per room |
./RoomOccupancy/@Children | Y | Integer | Children occupancy per room |
./RoomOccupancy/@MaxChildren | Y | Integer | Maximum children occupancy per room |
./HotelOption/{AdditionalElements} | Y | - | Additional elements that contain a combination, such as offers or supplements. The prices are included in the total price of the combination. |
./HotelOption/{CancellationPolicy} | Y | - | Cancellation policies. |
We request to modify the booking comments. The response will simply confirm that the modification will be done changing the comment from “1234” to “Reservation comments”
Request
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://www.juniper.es/webservice/2007/">
<soapenv:Header/>
<soapenv:Body>
<HotelModify>
<HotelModifyRQ Version="1.1" Language="en">
<Login Email="user@mydomain.com" Password="pass"/>
<ReservationLocator ItemId="123456">XXXXXX</ReservationLocator>
<Comments>
<Comment Type="RES">General booking commentss</Comment>
</Comments>
</HotelModifyRQ>
</HotelModify>
</soapenv:Body>
</soapenv:Envelope>
Response
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<HotelModifyResponse xmlns="http://www.juniper.es/webservice/2007/">
<ModifyRS Url="http://xml-uat.bookingengine.es" TimeStamp="2019-10-03T09:55:19.5861168+02:00" IntCode="O5RVrr8NMek65UvsA+dY0M5pwiRypS5qImg0BsPrgzE=">
<Warnings>
<Warning Code="warnModifyBookingComments" Text="The booking comments will be modified. Before: [1234] After: [General booking comments]"/>
</Warnings>
<Results/>
</ModifyRS>
</HotelModifyResponse>
</soap:Body>
</soap:Envelope>
We request to modify the name and surname of the lead passenger.
Request
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://www.juniper.es/webservice/2007/">
<soapenv:Header/>
<soapenv:Body>
<HotelModify>
<HotelModifyRQ Version="1.1" Language="en">
<Login Email="user@mydomain.com" Password="pass"/>
<ReservationLocator ItemId="123456">XXXXXX</ReservationLocator>
<Paxes>
<Pax IdPax="1">
<Name>Holder test name</Name>
<Surname>Holder test surname</Surname>
</Pax>
</Paxes>
<Holder>
<RelPax IdPax="1"/>
</Holder>
</HotelModifyRQ>
</HotelModify>
</soapenv:Body>
</soapenv:Envelope>
Response
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<HotelModifyResponse xmlns="http://www.juniper.es/webservice/2007/">
<ModifyRS Url="http://xml-uat.bookingengine.es" TimeStamp="2019-10-03T09:55:19.5861168+02:00" IntCode="O5RVrr8NMek65UvsA+dY0M5pwiRypS5qImg0BsPrgzE=">
<Warnings>
<Warning Code="warnModifyHolder" Text="The holder will be modified. Before: [John Appleseed] After: [Holder test name Holder test surname]"/>
</Warnings>
<Results/>
</ModifyRS>
</HotelModifyResponse>
</soap:Body>
</soap:Envelope>
We request to add a passenger on a two passenger room.
The response tells us that there exists two combinations (HotelOption) that comply with the new occupation:
We have to select one of them and send its related @ModifyCode in the HotelConfirmModify petition.
Request
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://www.juniper.es/webservice/2007/">
<soapenv:Header/>
<soapenv:Body>
<HotelModify>
<HotelModifyRQ Version="1.1" Language="en">
<Login Email="user@mydomain.com" Password="pass"/>
<ReservationLocator ItemId="123456">XXXXXX</ReservationLocator>
<Paxes>
<Pax IdPax="1"/>
<Pax IdPax="2"/>
<Pax IdPax="3"/>
</Paxes>
<RelPaxesDist>
<RelPaxDist>
<RelPaxes>
<RelPax IdPax="1"/>
<RelPax IdPax="2"/>
<RelPax IdPax="3"/>
</RelPaxes>
</RelPaxDist>
</RelPaxesDist>
</HotelModifyRQ>
</HotelModify>
</soapenv:Body>
</soapenv:Envelope>
Response
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<HotelModifyResponse xmlns="http://www.juniper.es/webservice/2007/">
<ModifyRS Url="http://xml-uat.bookingengine.es" TimeStamp="2019-10-03T09:55:19.5861168+02:00" IntCode="O5RVrr8NMek65UvsA+dY0M5pwiRypS5qImg0BsPrgzE=">
<Warnings>
<Warning Code="warnModifyDistribution" Text="The distribution will be modified. Before: [Room 1 - 2 paxes (3030) ] After: [Room 1 - 3 paxes (303030) ]"/>
</Warnings>
<Results>
<HotelModifyResult>
<HotelResult Code="JP15264" Start="2015-12-19" End="2015-12-21" DestinationZone="1953" JPDCode="JPD036705">
<HotelInfo>
<Name>Hotel Test</Name>
<HotelCategory Type="4est">****</HotelCategory>
<HotelType Type="GEN">General</HotelType>
<PropertyType Type="HTL">hotel</PropertyType>
<Address>Test address</Address>
<Latitude>39.5706313366671</Latitude>
<Longitude>23.64907836914063</Longitude>
</HotelInfo>
<HotelOptions>
<HotelOption Status="OK">
<ModifyCode ExpirationDate="2015-11-16T16:53:02.0784563+01:00">fVxmnhmXxOZQtRm92v3JWPnJwLJ3ySfOD3D0CK1s3XVwZQxgrf49DUyKC3WbugATg39pqLT6SfDndJ4Fw.....</ModifyCode>
<Board Type="BB">Bed & Breakfast</Board>
<HotelRooms>
<HotelRoom Units="1" Source="1" AvailRooms="9999">
<Name>Triple</Name>
<Description>Three x 2 beds</Description>
<RoomCategory Type="517"/>
</HotelRoom>
</HotelRooms>
<Prices>
<Price Type="S" Currency="EUR">
<TotalFixAmounts Gross="955.26" Nett="860.4">
<Service Amount="948.64"/>
<ServiceTaxes Included="true" Amount="6.62"/>
</TotalFixAmounts>
</Price>
</Prices>
<CancellationPolicy CurrencyCode="EUR">
<FirstDayCostCancellation Hour="00:00">2015-12-09</FirstDayCostCancellation>
<Description>CANCELLATION FEES</Description>
<PolicyRules>
<Rule From="0" To="10" DateFrom="2015-12-09" DateFromHour="00:00" DateTo="2015-12-20" DateToHour="00:00" Type="V" FixedPrice="0" PercentPrice="50" Nights="0" ApplicationTypeNights="Average"/>
<Rule From="11" DateFrom="2015-11-16" DateFromHour="00:00" DateTo="2015-12-09" DateToHour="00:00" Type="V" FixedPrice="0" PercentPrice="0" Nights="0" ApplicationTypeNights="Average"/>
</PolicyRules>
</CancellationPolicy>
</HotelOption>
<HotelOption Status="OK">
<ModifyCode ExpirationDate="2015-11-16T16:53:02.0784563+01:00">fVxmnhmXxOZQtRm92v3JWPnJwLJ3ySfOD3D0CK1s3XVpGFsCM+o3MdDvrU8ccRcjhIgZekWW/Fz8JwsrBF2zppBR/9WcZZab+fIdKxNBkVfpvHa4oCm9ozYVeE.....</ModifyCode>
<Board Type="HB">Half board</Board>
<HotelRooms>
<HotelRoom Units="1" Source="1" AvailRooms="9999">
<Name>Triple</Name>
<Description>Three x 2 beds</Description>
<RoomCategory Type="517"/>
</HotelRoom>
</HotelRooms>
<Prices>
<Price Type="S" Currency="EUR">
<TotalFixAmounts Gross="1050.1" Nett="945.75">
<Service Amount="1043.48"/>
<ServiceTaxes Included="true" Amount="6.62"/>
</TotalFixAmounts>
</Price>
</Prices>
<CancellationPolicy CurrencyCode="EUR">
<FirstDayCostCancellation Hour="00:00">2015-12-09</FirstDayCostCancellation>
<Description>CANCELLATION FEES</Description>
<PolicyRules>
<Rule From="0" To="10" DateFrom="2015-12-09" DateFromHour="00:00" DateTo="2015-12-20" DateToHour="00:00" Type="V" FixedPrice="0" PercentPrice="50" Nights="0" ApplicationTypeNights="Average"/>
<Rule From="11" DateFrom="2015-11-16" DateFromHour="00:00" DateTo="2015-12-09" DateToHour="00:00" Type="V" FixedPrice="0" PercentPrice="0" Nights="0" ApplicationTypeNights="Average"/>
</PolicyRules>
</CancellationPolicy>
</HotelOption>
</HotelOptions>
</HotelResult>
</HotelModifyResult>
</Results>
</ModifyRS>
</HotelModifyResponse>
</soap:Body>
</soap:Envelope>
We request to remove one day from the stay dates. The response will return all the available hotel combinations for those dates.
Request
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://www.juniper.es/webservice/2007/">
<soapenv:Header/>
<soapenv:Body>
<HotelModify>
<HotelModifyRQ Version="1.1" Language="en">
<Login Email="user@mydomain.com" Password="pass"/>
<ReservationLocator ItemId="123456">XXXXXX</ReservationLocator>
<SearchSementHotels Start="2015-12-19" End="2015-12-20" />
</HotelModifyRQ>
</HotelModify>
</soapenv:Body>
</soapenv:Envelope>
Response
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<HotelModifyResponse xmlns="http://www.juniper.es/webservice/2007/">
<ModifyRS Url="http://xml-uat.bookingengine.es" TimeStamp="2019-10-03T09:55:19.5861168+02:00" IntCode="O5RVrr8NMek65UvsA+dY0M5pwiRypS5qImg0BsPrgzE=">
<Warnings>
<Warning Code="warnModifyDates" Text="The dates will be modified. Before: [19/12/2015-21/12/2015] After: [19/12/2015-20/12/2015]"/>
</Warnings>
<Results>
<HotelModifyResult>
<HotelResult Code="JP15264" Start="2015-12-19" End="2015-12-20" DestinationZone="1953" JPDCode="JPD036705">
<HotelInfo>
<Name>Hotel Test</Name>
<HotelCategory Type="4est">****</HotelCategory>
<HotelType Type="GEN">General</HotelType>
<PropertyType Type="HTL">hotel</PropertyType>
<Address>Adress test</Address>
<Latitude>39.5706313366671</Latitude>
<Longitude>22.64907836914063</Longitude>
</HotelInfo>
<HotelOptions>
<HotelOption Status="OK">
<ModifyCode ExpirationDate="2015-11-16T17:01:39.9764563+01:00">fVxmnhmXxOZQtRm92v3JWPnJwLJ3ySfOD3D0CK1s3XXwKdm2eqjZQNiqbkXkdRLodr5oljHtVr1T63cf3R1FSn6s6za66DCtfUJm8X7bnP4l8AHTijdXm78cwbGEGu0/s.....</ModifyCode>
<Board Type="BB">Bed & Breakfast</Board>
<HotelRooms>
<HotelRoom Units="1" Source="1" AvailRooms="1">
<Name>Double</Name>
<Description>Double</Description>
<RoomCategory Type="DBL">Double standard</RoomCategory>
</HotelRoom>
</HotelRooms>
<Prices>
<Price Type="S" Currency="EUR">
<TotalFixAmounts Gross="249.76" Nett="225.23">
<Service Amount="245.34"/>
<ServiceTaxes Included="true" Amount="4.42"/>
</TotalFixAmounts>
</Price>
</Prices>
<CancellationPolicy CurrencyCode="EUR">
<FirstDayCostCancellation Hour="00:00">2015-12-09</FirstDayCostCancellation>
<Description>CANCELLATION FEES</Description>
<PolicyRules>
<Rule From="0" To="10" DateFrom="2015-12-09" DateFromHour="00:00" DateTo="2015-12-20" DateToHour="00:00" Type="V" FixedPrice="0" PercentPrice="50" Nights="0" ApplicationTypeNights="Average"/>
<Rule From="11" DateFrom="2015-11-16" DateFromHour="00:00" DateTo="2015-12-09" DateToHour="00:00" Type="V" FixedPrice="0" PercentPrice="0" Nights="0" ApplicationTypeNights="Average"/>
</PolicyRules>
</CancellationPolicy>
</HotelOption>
</HotelOptions>
</HotelResult>
</HotelModifyResult>
</Results>
</ModifyRS>
</HotelModifyResponse>
</soap:Body>
</soap:Envelope>
In this example, the changes are not necessary because the new information matches the one from the booking.
Request
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://www.juniper.es/webservice/2007/">
<soapenv:Header/>
<soapenv:Body>
<HotelModify>
<HotelModifyRQ Version="1.1" Language="en">
<Login Email="user@mydomain.com" Password="pass"/>
<ReservationLocator ItemId="123456">XXXXXX</ReservationLocator>
<Comments>
<Comment Type="RES">1234</Comment>
</Comments>
</HotelModifyRQ>
</HotelModify>
</soapenv:Body>
</soapenv:Envelope>
Response
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<HotelModifyResponse xmlns="http://www.juniper.es/webservice/2007/">
<ModifyRS Url="http://xml-uat.bookingengine.es" TimeStamp="2019-10-03T09:55:19.5861168+02:00" IntCode="dqXxIfOkAgJcN37cBXuX4Hbi7g9+5WGiUBcdwOsWU7E=">
<Warnings>
<Warning Code="warnModifyNotNecessary" Text=" The modification is not necessary."/>
</Warnings>
<Results/>
</ModifyRS>
</HotelModifyResponse>
</soap:Body>
</soap:Envelope>
In this example, the modification will not be possible (because it requires a price recalculation or requires a new combination and there is no one available)
Request
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://www.juniper.es/webservice/2007/">
<soapenv:Header/>
<soapenv:Body>
<HotelModify>
<HotelModifyRQ Version="1.1" Language="en">
<Login Email="user@mydomain.com" Password="pass"/>
<ReservationLocator ItemId="123456">XXXXXX</ReservationLocator>
<Comments>
<Comment Type="RES">General booking comments</Comment>
</Comments>
</HotelModifyRQ>
</HotelModify>
</soapenv:Body>
</soapenv:Envelope>
Response
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<HotelModifyResponse xmlns="http://www.juniper.es/webservice/2007/">
<ModifyRS Url="http://xml-uat.bookingengine.es" TimeStamp="2019-10-03T09:55:19.5861168+02:00" IntCode="dqXxIfOkAgJcN37cBXuX4Hbi7g9+5WGiUBcdwOsWU7E=">
<Errors>
<Error Text=" No availability was found" Code="NO_AVAIL_FOUND"/>
</Errors>
<Results/>
</ModifyRS>
</HotelModifyResponse>
</soap:Body>
</soap:Envelope>
In this example, we remove rooms of a directly contracted reservation by specifying the distribution of rooms that we would like to maintain (this was a previous 3 room reservation, and we're requesting for the 2nd of the rooms to be maintained, in other words, for the 1st and 3rd rooms to be removed):
Request
<soapenv:Envelope xmlns:soapenv = "http://schemas.xmlsoap.org/soap/envelope/" xmlns = "http://www.juniper.es/webservice/2007/">
<soapenv:Header/>
<soapenv:Body>
<HotelModify>
<HotelModifyRQ Version = "1.1" Language = "en">
<Login Email="user@mydomain.com" Password="pass"/>
<ReservationLocator ItemId = "435091">2LRMPV</ReservationLocator>
<RelPaxesDist>
<RelPaxDist>
<Rooms>
<Room Code = "5" Source = "2"/>
</Rooms>
</RelPaxDist>
</RelPaxesDist>
</HotelModifyRQ>
</HotelModify>
</soapenv:Body>
</soapenv:Envelope>
Response
<soap:Envelope xmlns:soap = "http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd = "http://www.w3.org/2001/XMLSchema">
<soap:Body>
<HotelModifyResponse xmlns = "http://www.juniper.es/webservice/2007/">
<ModifyRS Url = "http://xml-uat.bookingengine.es" TimeStamp = "2023-03-06T11:42:59.0350129+01:00" IntCode = "YTCJFqu5gJ/O6jVBcPnniVJgnrGZdgzzmbGHHJs2X5Y=">
<Warnings>
<Warning Code = "warnDeleteRooms" Text = "This rooms will be deleted: [Room: 5, Source: 1,3] .Price before: 3441,39AED, Price after: 1147,13AED"/>
</Warnings>
<Results/>
</ModifyRS>
</HotelModifyResponse>
</soap:Body>
</soap:Envelope>
Once you confirm that the modification can be made through the HotelModify petition you can proceed to make such modifications through this petition. For this end, you will have to specify all the information that you want to modify along with the @ModifyCode if it is necessary.
The response will always return a warning with the changes that have been made along with the booking information.
Node / Attribute (@) | Opt | Type | Description |
---|---|---|---|
@Version | N | String | Web Service version |
@Language | N | String | Language in which the response will be returned. Please, contact Juniper for available languages. |
{Login} | N | - | Customer login to access the Web Service |
ReservationLocator | N | String | Reservation locator |
./ReservationLocator/@ItemId | N | String | Hotel item Id |
{Paxes} | Y | - | Allows you to modify the passenger information or the occupancy of the rooms of the booking. |
Holder | N | - | Allows you to modify the lead passenger information. |
./Holder/RelPax | N | - | |
./RelPax/@IdPax | N | Integer | Booking passenger Id. It should match with a Pax@IdPax |
ExternalBookingReference | Y | String | Allows you to modify the external booking reference. |
Comments | Y | - | Allows you to modify the booking comments. |
./Comments/Comment | Y | String | Comment text. |
./Comment/@Type | Y | String | Comment type. Possible values: • RES: General booking comments • ELE: Booking line comments |
HotelElement | Y | - | |
./HotelElement/ModifyCode | N | String | Code that identifies the combination. Obtained from the HotelModify petition. |
./HotelElement/RelPaxesDist | Y | - | Allows you to modify the passenger distribution. |
./RelPaxesDist/RelPaxDist | N | - | Distribution list. Each one them corresponds to a room. |
./RelPaxDist/RelPaxes | N | - | Passengers list of this distribution/room. |
./RelPaxes/RelPax | N | - | Passenger |
./RelPax/@IdPax | N | Integer | Passenger Identifier. It should match with a Pax@IdPax |
./RelPaxDist/Rooms | Y | - | Applicable rooms of the distribution. Use in order to search for specific rooms or to specify a new room distribution (allowing, for example, for rooms to be removed from the reservation). |
./Rooms/Room | N | - | Specific room. |
./Room/@Code | Y | String | Internal room code. |
./Room/@CategoryType | Y | String | Room category code. Use HotelStaticData operation to retrieve all available room categories. |
./Room/@Source | Y | String | Room identifier based on its order. For example: "1" identifies the first room of the reservation while "3" identifies the third room of the reservation. |
AdvancedOptions | Y | - | Optional parameters. |
./AdvancedOptions/ShowBreakdownPrice | Y | Boolean | If the value is true, it will show the full price object with all the information about the prices. If not specified, false is assumed by default. |
It returns the same information as the HotelBooking response. If you wish to know the specifications of this petition, please review the section related to the HotelBooking transaction response.
Please check the Warnings section (concretely Modification warnings) to see the warning list.
We modify the booking comments.
The reponse returns:
Request
<soapenv:Envelope xmlns:soapenv=”http://schemas.xmlsoap.org/soap/envelope/” xmlns=”http://www.juniper.es/webservice/2007/”>
<soapenv:Header/>
<soapenv:Body>
<HotelConfirmModify>
<HotelConfirmModifyRQ Version="1.1" Language="en">
<Login Email="user@mydomain.com" Password="pass"/>
<ReservationLocator ItemId=”123456”>XXXXXX</ReservationLocator>
<Comments>
<Comment Type=”RES”>General booking comments</Comment>
</Comments>
</HotelConfirmModifyRQ>
</HotelConfirmModify>
</soapenv:Body>
</soapenv:Envelope>
Response
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<HotelConfirmModifyResponse xmlns="http://www.juniper.es/webservice/2007/">
<ConfirmModifyRS Url="http://xml-uat.bookingengine.es" TimeStamp="2019-10-03T09:55:19.5861168+02:00" IntCode="r0KimV3A5lz9jOOzXHcLKRH680TZujMvXlFiwdvASZ0=">
<Warnings>
<Warning Code="warnConfirmModifyBookingComments" Text="The booking comments have been modified. Before: [1234] After: [Reservation comments]"/>
</Warnings>
<Reservations>
<Reservation Locator="XXXXXX" Status="PAG" Language="en">
<Holder>
<RelPax IdPax="3"/>
</Holder>
<Paxes>
<Pax IdPax="1">
<Title>Mrs.</Title>
<Name>test</Name>
<Surname>test</Surname>
<Age>30</Age>
</Pax>
<Pax IdPax="2">
<Title>Mrs.</Title>
<Name>test b</Name>
<Surname>testt b</Surname>
<Age>30</Age>
</Pax>
<Pax IdPax="3">
<Name>fasdf</Name>
<Surname>adfasdf</Surname>
<Country>--</Country>
<Nationality>DE</Nationality>
</Pax>
</Paxes>
<Comments>
<Comment Type="RES">General booking comments</Comment>
</Comments>
<Items>
<HotelItem Status="OK" ItemId="149769" End="2015-12-21" Start="2015-12-19">
<Prices>
<Price Type="S" Currency="EUR">
<TotalFixAmounts Gross="495.1" Nett="446.03">
<Service Amount="490.68"/>
<ServiceTaxes Included="true" Amount="4.42"/>
<Commissions Included="true" Amount="98.14"/>
</TotalFixAmounts>
</Price>
</Prices>
<CancellationPolicy CurrencyCode="EUR">
<FirstDayCostCancellation Hour="00:00">2015-12-09</FirstDayCostCancellation>
<Description>
CANCELLATION FEES
</Description>
<PolicyRules>
<Rule From="0" To="10" DateFrom="2015-12-09" DateFromHour="00:00" DateTo="2015-12-20" DateToHour="00:00" Type="V" FixedPrice="0" PercentPrice="50" Nights="0" ApplicationTypeNights="Average"/>
<Rule From="11" DateFrom="2015-11-17" DateFromHour="00:00" DateTo="2015-12-09" DateToHour="00:00" Type="V" FixedPrice="0" PercentPrice="0" Nights="0" ApplicationTypeNights="Average"/>
</PolicyRules>
</CancellationPolicy>
<HotelInfo Code="JP15264" DestinationZone="1953" JPDCode="JPD036705">
<Name>Hotel Test</Name>
<HotelCategory Type="4est">****</HotelCategory>
<Address>Test address</Address>
</HotelInfo>
<Board Type="BB">Bed & Breakfast</Board>
<HotelRooms>
<HotelRoom Source="1">
<Name>Double</Name>
<RelPaxes>
<RelPax IdPax="1"/>
<RelPax IdPax="2"/>
</RelPaxes>
</HotelRoom>
</HotelRooms>
</HotelItem>
</Items>
</Reservation>
</Reservations>
</ConfirmModifyRS>
</HotelConfirmModifyResponse>
</soap:Body>
</soap:Envelope>
We modify the booking dates. In the previous step we’ve selected a combination (@ModifyCode) that we are now sending through this petition. In this case, there’s no need for more information to be sent as the @ModifyCode contains all of the necessary information.
Request
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://www.juniper.es/webservice/2007/">
<soapenv:Header/>
<soapenv:Body>
<HotelConfirmModify>
<HotelConfirmModifyRQ Version="1.1" Language="en">
<Login Email="user@mydomain.com" Password="pass"/>
<ReservationLocator ItemId="123456">XXXXXX</ReservationLocator>
<HotelElement>
<ModifyCode>fVxmnhmXxOZQtRm92v3JWNwXqUohN/HzaAiVPU5pv5C0O6y2S3e/teADtZeOBKc7PxxwsetucRzuQN7k7dXHskdmiCFUvTb5nK60YgVW8G5YWH6fQq.....</ModifyCode>
</HotelElement>
</HotelConfirmModifyRQ>
</HotelConfirmModify>
</soapenv:Body>
</soapenv:Envelope>
We modify the occupation adding a passenger.
Request
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://www.juniper.es/webservice/2007/">
<soapenv:Header/>
<soapenv:Body>
<HotelConfirmModify>
<HotelConfirmModifyRQ Version="1.1" Language="en">
<Login Email="user@mydomain.com" Password="pass"/>
<ReservationLocator ItemId="123456">XXXXXX</ReservationLocator>
<Paxes>
<Pax IdPax="1">
<Name>test</Name>
<Surname>test</Surname>
</Pax>
<Pax IdPax="2">
<Name>test b</Name>
<Surname>testt b</Surname>
</Pax>
<Pax IdPax="3">
<Name>new pax</Name>
<Surname>new pax</Surname>
</Pax>
</Paxes>
<HotelElement>
<ModifyCode>fVxmnhmXxOZQtRm92v3JWPnJwLJ3ySfOD3D0CK1s3XUwZu0lp0RU+7hFh8LZAAzOSGTQKYuOEMGxqw4my4BrbEnugQRjjuw6sufio4QUFli6P/ChkgL0aXZ2+d.....</ModifyCode>
<RelPaxesDist>
<RelPaxDist>
<RelPaxes>
<RelPax IdPax="1"/>
<RelPax IdPax="2"/>
<RelPax IdPax="3"/>
</RelPaxes>
</RelPaxDist>
</RelPaxesDist>
</HotelElement>
</HotelConfirmModifyRQ>
</HotelConfirmModify>
</soapenv:Body>
</soapenv:Envelope>
We modify the lead passenger name and surname.
Request
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://www.juniper.es/webservice/2007/">
<soapenv:Header/>
<soapenv:Body>
<HotelConfirmModify>
<HotelConfirmModifyRQ Version="1.1" Language="en">
<Login Email="user@mydomain.com" Password="pass"/>
<ReservationLocator ItemId="123456">XXXXXX</ReservationLocator>
<Paxes>
<Pax IdPax="1">
<Name>Holder test name</Name>
<Surname>Holder test surname</Surname>
</Pax>
</Paxes>
<Holder>
<RelPax IdPax="1"/>
</Holder>
</HotelConfirmModifyRQ>
</HotelConfirmModify>
</soapenv:Body>
</soapenv:Envelope>
Following the previous room removal example from the HotelModify specs (refer to such example for more information on this scenario), here we confirm the room removal request that we previously quoted for:
Request
<soapenv:Envelope xmlns:soapenv = "http://schemas.xmlsoap.org/soap/envelope/" xmlns = "http://www.juniper.es/webservice/2007/">
<soapenv:Header/>
<soapenv:Body>
<HotelConfirmModify>
<HotelConfirmModifyRQ Version = "1.1" Language = "en">
<Login Email="user@mydomain.com" Password="pass"/>
<ReservationLocator ItemId = "435091">2LRMPV</ReservationLocator>
<HotelElement>
<RelPaxesDist>
<RelPaxDist>
<Rooms>
<Room Code = "5" Source = "2"/>
</Rooms>
</RelPaxDist>
</RelPaxesDist>
</HotelElement>
</HotelConfirmModifyRQ>
</HotelConfirmModify>
</soapenv:Body>
</soapenv:Envelope>
Response
<soap:Envelope xmlns:soap = "http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd = "http://www.w3.org/2001/XMLSchema">
<soap:Body>
<HotelConfirmModifyResponse xmlns = "http://www.juniper.es/webservice/2007/">
<ConfirmModifyRS Url = "http://xml-uat.bookingengine.es" TimeStamp = "2023-03-06T11:44:57.6966093+01:00" IntCode = "7fYMispf3g2s3HMwFdsVtbptRzevbr+P1Boe5Y0y29o=">
<Warnings>
<Warning Code = "warnConfirmDeleteRooms" Text = "This rooms have been deleted: [Room: 5, Source: 1,3] Price after: 1147,13AED"/>
</Warnings>
<Reservations>
<Reservation Locator = "2LRMPV" Status = "PAG" Language = "en">
<ExternalBookingReference>YOUR_OWN_REFERENCE_1235AFASR"!%</ExternalBookingReference>
<Holder>
<RelPax IdPax = "5"/>
</Holder>
<Paxes>
<Pax IdPax = "3">
<Age>30</Age>
</Pax>
<Pax IdPax = "4">
<Age>30</Age>
</Pax>
<Pax IdPax = "5">
<Name>Holder Name</Name>
<Surname>Holder Surname</Surname>
<Age>30</Age>
<Nationality>ES</Nationality>
</Pax>
</Paxes>
<Comments>
<Comment Type = "RES">GENERAL BOOKING COMMENTS</Comment>
</Comments>
<AgenciesData>
<AgencyData>
<ReferencedAgency>false</ReferencedAgency>
<AgencyCode>280</AgencyCode>
<AgencyName>Test XML</AgencyName>
<AgencyHandledBy>XML Agent</AgencyHandledBy>
<AgencyEmail>noreply@ejuniper.com</AgencyEmail>
<AgencyReference>YOUR_OWN_REFERENCE</AgencyReference>
</AgencyData>
<AgencyData>
<ReferencedAgency>true</ReferencedAgency>
<AgencyCode>0</AgencyCode>
</AgencyData>
</AgenciesData>
<Items>
<HotelItem ItemId = "435091" Status = "OK" Start = "2023-12-03" End = "2023-12-05">
<Prices>
<Price Type = "S" Currency = "AED">
<TotalFixAmounts Gross = "1147.13" Nett = "1147.13">
<Service Amount = "1055.36"/>
<ServiceTaxes Included = "false" Amount = "91.77"/>
</TotalFixAmounts>
</Price>
</Prices>
<CancellationPolicy CurrencyCode = "AED">
<FirstDayCostCancellation Hour = "00:00">2023-11-24</FirstDayCostCancellation>
<Description>* Cancelling from 06/03/2023 at 00:00:00 up to 24/11/2023 at 00:00:00: 0 AED * Cancelling from 24/11/2023 at 00:00:00 up to 28/11/2023 at 00:00:00: 25.00 % of expenses * Cancelling from 28/11/2023 at 00:00:00 up to 03/12/2023 at 00:00:00: 100.00 % of expenses</Description>
<PolicyRules>
<Rule DateFrom = "2023-03-06" DateFromHour = "00:00" DateTo = "2023-11-24" DateToHour = "00:00" Type = "V" FixedPrice = "0" PercentPrice = "0" Nights = "0" ApplicationTypeNights = "Average"/>
<Rule DateFrom = "2023-11-24" DateFromHour = "00:00" DateTo = "2023-11-28" DateToHour = "00:00" Type = "V" FixedPrice = "0" PercentPrice = "25" Nights = "0" ApplicationTypeNights = "Average"/>
<Rule DateFrom = "2023-11-28" DateFromHour = "00:00" DateTo = "2023-12-03" DateToHour = "00:00" Type = "V" FixedPrice = "0" PercentPrice = "100" Nights = "0" ApplicationTypeNights = "Average"/>
</PolicyRules>
</CancellationPolicy>
<Comments>
<Comment Type = "ELE">SPECIFIC HOTEL/SUPPLIER COMMENTS</Comment>
<Comment Type = "HOT"><![CDATA[* 13/06/2018 - 31/12/2030: Please note that on this field hotels have the possibility of supplying you with important information like:<br><br>- Additional taxes (like, for example, a city tax).<br>- Additional features (like, for example, a detailed explanation of a promotion)<br>- Additional warnings (like, for example, the pool being closed due to renovations)<br>- Additional information (like, for example, the emergency phone)<br><br>Among other examples.<br>]]></Comment>
</Comments>
<HotelInfo Code = "JP046300" JPCode = "JP046300" JPDCode = "JPD000004" DestinationZone = "2">
<Name>Apartamentos Allsun Pil-lari Play-a</Name>
<HotelCategory Type = "3est">3 Stars</HotelCategory>
<Address>Calle Marbella 24</Address>
</HotelInfo>
<Board Type = "SA">Room Only</Board>
<HotelRooms>
<HotelRoom Source = "2" JRCode = "JR000007">
<Name>Double</Name>
<RoomCategory Type = "4">Standard</RoomCategory>
<RelPaxes>
<RelPax IdPax = "3"/>
<RelPax IdPax = "4"/>
</RelPaxes>
</HotelRoom>
</HotelRooms>
<AdditionalElements>
<HotelSupplements>
<HotelSupplement Code = "321956" Type = "M" OnlyResidents = "false">
<Name>Test Supplement Optional</Name>
</HotelSupplement>
<HotelSupplement Code = "321957" Type = "M" OnlyResidents = "false">
<Name>Test Supplement Mandatory</Name>
</HotelSupplement>
</HotelSupplements>
</AdditionalElements>
</HotelItem>
</Items>
<Payment Type = "C"/>
</Reservation>
</Reservations>
</ConfirmModifyRS>
</HotelConfirmModifyResponse>
</soap:Body>
</soap:Envelope>
Questions that most of our partners may perform when implementing our API and best practices that we would like for you to keep into account.
Most supplier connections, by default, allow for combinations of up to a maximum 3 rooms to be confirmed, but this is something that entirely depends on the configuration from such supplier meaning that, if you would like to request for more and/or simply confirm the same, kindly contact with your Juniper supplier in this regard.
The main transaction that we have available for this purpose is the HotelPortfolio request, which will let you retrieve the list of JPCodes that are available for your supplier connection and credentials (for your reference, within a specific supplier connection, different credentials may have different portfolios available).
Having already retrieved the list of hotel codes, you might be wondering how to retrieve the detailed information (template) of each of them, and you will be able to do so through the use of the HotelContent request.
Additionally, if you ever needed to have further information on the destinations to which each of these hotels were mapped to (for example, if you worked by performing per-destination availability searches on your system, and you needed to be able to identify the list of hotel codes that you would later need to search availability for), we have the ZoneList request available for this purpose.
Last of all, if you plan on connecting to multiple Juniper suppliers, we recommend you to refer to the following section from our FAQ:
When needing to perform searches of specific destinations on your own system (for example, ask availability of all of the hotels that are available in Miami), you might be wondering on how to perform such availability on our API (given that availabilities required for be performed by hotel codes), and here we will explain on how you will be able to achieve this:
For this purpose, it's imperative to have a hotel mapping process that focuses on the use of the static data transactions and most specifically retrieves and maps the list of hotel codes available (further info on this process on the above entry from the FAQ).
In addition to this, by implementing the transaction meant for the retrieval of the zone tree structure of your supplier connection (the ZoneList request), and by retrieving and mapping all of these destinations along with those your system, you will be able to identify the list of hotel codes that you will need to ask availability for when searching availability for a specific destination on your own system.
When identifying the list of hotel codes to ask availability for, it's very important to take into account the zone tree structure of the destination and not to focus only on the direct destination in question.
Exemplifying this next, let's say that you wished to ask availability for Miami City and that through the mapping process, while using the related zone tree structure (examples of destination codes from the UAT environment, do not use them on any of your production environments):
<Zone JPDCode = "JPD029489" IATA = "US" AreaType = "PAS" Searchable = "true" Code = "43">
<Name>USA</Name>
</Zone>
<Zone JPDCode = "JPD036942" ParentJPDCode = "JPD029489" AreaType = "REG" Searchable = "true" Code = "2109" ParentCode = "43">
<Name>Florida</Name>
</Zone>
You identified for the following destination code to represent the same:
<Zone JPDCode = "JPD081673" ParentJPDCode = "JPD036942" AreaType = "CTY" Searchable = "true" Code = "44515" ParentCode = "2109">
<Name>Miami City</Name>
</Zone>
In this case, you would not only need to focus on those hotels that were mapped to destination code 44515, but also to take into account any of the hotels that were mapped to any of its lower level destinations, recursively (until the entire lower level zone tree structure were taken into account) such as, for example:
<Zone JPDCode = "JPD088282" ParentJPDCode = "JPD081673" AreaType = "BAR" Searchable = "true" Code = "50816" ParentCode = "44515">
<Name>Wynwood</Name>
</Zone>
<Zone JPDCode = "JPD088291" ParentJPDCode = "JPD081673" AreaType = "BAR" Searchable = "true" Code = "50825" ParentCode = "44515">
<Name>Upper East Side</Name>
</Zone>
<Zone JPDCode = "JPD040116" ParentJPDCode = "JPD081673" IATA = "JDM" AreaType = "BAR" Searchable = "true" Code = "5094" ParentCode = "44515">
<Name>Miami Downtown</Name>
</Zone>
<Zone JPDCode = "JPD088279" ParentJPDCode = "JPD040116" AreaType = "BAR" Searchable = "true" Code = "50813" ParentCode = "5094">
<Name>Brickell</Name>
</Zone>
So that, by looking into all of the hotels that match on any of these destination codes (44515, 50816, 50825, 5094, 50813 and any other lower-level destination codes that we might have left out of the example), you will be able to identify the correct and complete list of hotel codes that you will need to include on the availability request (HotelAvail) that corresponds to your own per-destination search.
Please note that our API does not have this possibility and that, instead, if you wish to discard any kind of on request bookings from your booking flow, you should do the same on each of the steps of the booking flow, concretely:
HotelAvail. On this step you should filter any on request combination from the results through the use of the ShowOnlyAvailable AdvancedOption
HotelCheckAvail / HotelBookingRules. On this step you should filter any combination whose allotment changes from available to on request (as if an hotel no longer has allotment available it could return a combination that was originally available as a on request one) through the use of the warnStatusChanged warning and the HotelOption@Status of the same, for example:
<HotelBookingRulesResponse xmlns = "http://www.juniper.es/webservice/2007/">
<BookingRulesRS Url = "http://xml2.bookingengine.es" TimeStamp = "2018-06-
20T10:36:25.483729+02:00" IntCode = "fDJO9Tgya5kMbt8qDPCXPVuGOy3xkQWC70ZjrKPRWFI=">
<Warnings>
<Warning Code = "warnStatusChanged" Text = "Status changed. Use the new RatePlanCode or BookingCode"/>
</Warnings>
<Results>
<HotelResult>
<HotelOptions>
<HotelOption Status = "RQ">
<HotelBookingInfo Start = "2017-08-27" End = "2017-08-31">
<Price>
<PriceRange Minimum = "0" Maximum = "672.04" Currency = "USD"/>
</Price>
<Status>OK</Status>
<HotelCode>JP981225</HotelCode>
</HotelBookingInfo>
Although each Juniper supplier has their own individual hotel portfolio available, there are a few practices that you can implement in order to optimize how you handle our hotel information, especially if you connect to two or more of our suppliers (these will mainly focus on the size and in the integrity of your static data information rather than in the download times), to be more specific:
Important note:
Strictly on those Juniper suppliers that use JPCodes (when we say JPCodes we refer to hotel codes that follow the following format: JP046300, JP51978X, etc...), if they don't then you should treat their hotel inventory in a completely separate manner.
To start with, it's very important to understand that although the list of JPCodes that will be available for your use on a connection will entirely depend on the supplier to which you're connected, a specific JPCode will always refer to the same exact hotel, regardless of the supplier to which you are retrieving or using the code from.
To further clarify this if, for example, Juniper Supplier A offered you with 10000 JPCodes (JP000001, JP000002, JP000003, etc...) and Juniper Supplier B offered you with 1000 JPCodes (JP000001, JP000003, etc...), this would mean that:
Given the above, strictly on those Juniper suppliers that use JPCodes, it would be ok and even recommended for you to save a unique JPCode database (this way you wouldn't have to save the same JPCode repeatedly and you would update your hotels much more often due to the different static data download processes from all of your different Juniper suppliers) while on a different table you would have to save a relationship between Juniper suppliers and list of available JPCodes for the same, ensuring that you wouldn't get any kind of issue related to requesting unavailable JPCodes on such supplier (as doing so would considerably increase the likeliness of getting no results responses on your integration).
In this event, it is very important to understand that the maximum response time that our API allows on the availability step is of 8 seconds meaning that, if you were getting higher response times on your end, these would most likely be casue by either transfer and/or processing times (especially, if these problems tend to get accentuated on bigger responses).
Having clarified the above, we now have a series of recommendations that could potentially help reduce the response size and, in short, improve the response time as a whole:
This option makes for the availability response to only return the cheapest available combination of each available hotel and, in short, results in a considerably smaller response. This is specially useful on those booking flows on which you first retrieve the list of available hotels and later send an additional by-hotel code availability request in order to retrieve all of the available combinations of the selected hotel.
When performing availabilities by hotel codes you have full control of which is the number of hotels requested meaning that, if you have problems related to transfer times, you can improve the same by reducing the number of requested hotel codes (for example, instead of requesting for all of the available hotels of an available destination, which let's say that it were 800, you could instead only search for the top 100 best selling hotels of that destination).
Last of all, there are some other minor but still helpful settings that you may adjust in this regard if the above were either not possible and/or not enough:
On our system, sending HotelBookingRules requests massively for each and every one of the combinations from the availability response is disallowed.
This is because the HotelBookingRules request is a performance-costly transaction that is not prepared/meant to be used at any other step than the valuation one (pre-book) and, if misused, may negatively affect the performance of the entire Juniper supplier system.
Due to this, implementing this practice will involve automatic and unnotified blockages of the related IPs.
You might have noticed that, on some of your supplier connections, when performing multi-hotel and/or by-destination availability requests, you might be getting different results depending on the availability request itself.
To start with, rest assured that this is the correct behavior of the API and that there is nothing wrong with your connection. Next, we will elaborate on the technical reasons that may lead up to this behavior, for your reference:
By availability cutoff time, we refer to the cutoff time that's either specified by yourself on the availability request (the TimeOut AdvancedOption from the HotelAvail request) or, if not specified, from the supplier's configuration (at most, the API allows for a maximum availability timeout of 8 seconds to be applied).
If this ever becomes an issue for your integration, rather than verifying for a previously selected rate to still be available by sending an additional availability request and searching for the aforementioned rate to be there in the results, we would recommend for you to use the HotelCheckAvail request instead, as this request will let you verify the availability of a RatePlanCode in specific (in other words, to verify the availability of that specific rate that you originally selected).
The booking confirmation timeout on Juniper is a fixed value of 180 seconds that cannot be personalized. Nevertheless, working with lower booking confirmation timeouts with your supplier would still be possible, but would require for the following agreements to be achieved first:
By default, if no agreements have been reached, note that you will be responsible for the potential cancellation charges from any bookings confirmed on your supplier system (regardless of which timeout you may end up applying on your end and of if you may have rejected the reservation due to this on you own respective system). In addition, it's important to understand that these agreements are reached at a supplier level (having reached an agreement with Supplier A will not imply having the same agreement with Supplier B).
Although this first condition may not be entirely relevant to you as the customer of the connection, it is important as some Juniper clients are not willing to perform this constant review-process, invalidating the possibility of having lower-level timeouts on their connection.
The JP_BOOK_OCCUPANCY_ERROR error, that you may get on the HotelBooking response, implies a use-case error of the API that occurs whenever on the HotelBooking request you did not comply with the distribution of passengers (number of rooms, order of passengers and ages of passengers) that you initially asked availability for on the HotelAvail request.
For example, lets say that originally you asked availability for 2 rooms; 1 of 2 adults and 1 child of 15 years old + 1 of 3 adults; 6 passengers in total:
<Paxes>
<Pax IdPax = "1"/>
<Pax IdPax = "2"/>
<Pax IdPax = "3">
<Age>15</Age>
</Pax>
<Pax IdPax = "4"/>
<Pax IdPax = "5"/>
<Pax IdPax = "6"/>
</Paxes>
<HotelRequest>
<SearchSegmentsHotels>...</SearchSegmentsHotels>
<RelPaxesDist>
<RelPaxDist>
<RelPaxes>
<RelPax IdPax = "1"/>
<RelPax IdPax = "2"/>
<RelPax IdPax = "3"/>
</RelPaxes>
</RelPaxDist>
<RelPaxDist>
<RelPaxes>
<RelPax IdPax = "4"/>
<RelPax IdPax = "5"/>
<RelPax IdPax = "6"/>
</RelPaxes>
</RelPaxDist>
</RelPaxesDist>
</HotelRequest>
Being this the case, you would then be expected to request the same exact passengers distribution on your booking confirmation request (2 rooms; 1 of 2 adults and 1 child of 15 years old + 1 of 3 adults; 6 passengers in total), as changes on the passenger distribution would require for the booking flow to have been re-estarted through the use of a new HotelAvail request.
On the other hand, if not complied with, such as in the following examples:
This would then lead to having a JP_BOOK_OCCUPANCY_ERROR error response.
Following the most recent update of the California Law:
California Resort Fee Bill (AB 537) and Consumer Legal Remedies Act (SB 478)
You may be wondering on how to properly identify fees and taxes that are to be paid at the destination, and here we would like to provide a brief extract/example on how may this be done within the Juniper API:
You will be able to identify this by looking into any direct payment supplements that may be available within your results, such as in the following example:
<HotelOption RatePlanCode = "2+RZLQZBVM+8lY3E5xVuPuFc5Y..." Status = "OK" NonRefundable = "true" PackageContract = "false">
<Board Type = "SA">Room Only</Board>
<Prices>
<Price Type = "S" Currency = "EUR">
<TotalFixAmounts Gross = "514.11" Nett = "514.11">
<Service Amount = "445.21"/>
<ServiceTaxes Included = "false" Amount = "68.9"/>
</TotalFixAmounts>
</Price>
</Prices>
<HotelRooms>
<HotelRoom Units = "1" Source = "1">
<Name>Room, 1 King Bed, City View (Social)</Name>
</HotelRoom>
</HotelRooms>
<AdditionalElements>
<HotelSupplements>
<HotelSupplement Code = "1" DirectPayment = "true" Amount = "4.73" Currency = "EUR">
<Name>Mandatory Tax</Name>
<Description>Payment at destination</Description>
</HotelSupplement>
<HotelSupplement Code = "2" DirectPayment = "true" Amount = "32.12" Currency = "EUR">
<Name>Mandatory Fee</Name>
<Description>Payment at destination</Description>
</HotelSupplement>
</HotelSupplements>
</AdditionalElements>
</HotelOption>
On which, on the HotelSupplements node (found within the AdditionalElements node of the applicable result (HotelOption)), you will be able to identify HotelSupplement's labeled as DirectPayment = "true" (implying that they will need to be paid at the desintation, and that they are not currently included in the total price), from which you would also be able to identify their respective @Amount and @Currency (as to propertly represent how much would these direct payment supplemnts cost), along with their respective Name and (if available) Description, from which you will also be able to identify and to describe the supplements in question.
For the board type list:
It's important to keep in mind that this is supplier-specific information. For this reason, you should always process it as information that's exclusive to the supplier to which you will be connecting, and you should never use the board types from any specific supplier connection on the connection with a different one.
Having clarified this, you will be able to retrieve all of the board types that your supplier has available for your connection through the use of the HotelCatalogueData request (needing only your credentials and the endpoint of the supplier in question):
<soap:Envelope xmlns:soap = "http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd = "http://www.w3.org/2001/XMLSchema">
<soap:Body>
<HotelCatalogueDataResponse xmlns = "http://www.juniper.es/webservice/2007/">
<CatalogueDataRS Url = "http://xml-uat.bookingengine.es" TimeStamp = "2024-12-24T12:36:12.7157465+01:00" IntCode = "xylWZT6Fg9a2xfjieTDM3L0LX2WKM4UfH4Hc7JLKN3w=">
<HotelStaticData>
...
<BoardList>
<Board Type = "SA">Accommodation only</Board>
<Board Type = "AD">Bed & Breakfast</Board>
...
This information needs to be requested programmatically through the use of this API request, never needing to resort to asking for this information to be manually provided by your supplier (this is because your supplier may not know of the correct codes that the API will be operating with, and/or provide you with the correct/complete list of board plans).
Our API does allow for this information to be retrieved, on the HotelConfirmationNumber node that can be found on the responses from the HotelBooking and ReadBooking requests, such as in the following example:
<Items>
<HotelItem ItemId = "560055" Status = "OK" Start = "2025-01-14" End = "2025-01-17">
<ExternalInfo>
<HotelConfirmationNumber>HEREGOESTHEHCN123</HotelConfirmationNumber>
</ExternalInfo>
<Prices>
<Price Type = "S" Currency = "EUR">
Being very important to understand that the capability of retrieving this information will be entirely dependant on the supplier/s to which you will be connecting.
As of the supplier-dependency, for example:
In conclusion, you will need to coordinate with your supplier/s in order to understand if they will be providing you with HCNs on your reservations and, if so, to understand the ways on which they will be providing you the same.
In this section, you will be able to find a compendium of all of the tests that you will be expected to perform and data that you will be expected to provide us with for the completion of the certification process.
Process that you will be expected to undergo after you have already completed the implementation of your integration, and before connecting to a production environment for the first time.
Keep in mind that, afterwards, you will be expected to recertify your integration when connecting to new production environments at least once a year (this recertification will be much lighter and will focus on you having implemented the key features that would be necessary in order to ensure the well-being of the integration).
Last of all, once you successfully completed this process, you would be granted access to the production environment (connection on which you would need to ensure that you had already registered all of your production IPs on your corresponding buyer account from the buyer platform, as otherwise you will not be able to connect to the same).
After completing the development of your integration and prior to connecting to the live environment, we will require you to comply with our best practices and to perform a series of tests meant for us to validate that the integration has been properly implemented.
In order to achieve this, we will request you to refer to each and everyone of the below sections:
To ensure that you are taking into account each of the requirements and best practices described and to supply us with any of the logs and information that we might require you for on each of them. This will be very important in order to complete the certification process.
Here we will describe a brief booking flow example, outlining the key parameters that you should take into account for a proper implementation and for the certification:
First, the structure of the availability request must be correctly formed and none of the mandatory fields must be missing. Amongst other, we will check the following nodes:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://www.juniper.es/webservice/2007/">
<soapenv:Header/>
<soapenv:Body>
<HotelAvail>
<HotelAvailRQ Version="1.1" Language="en">
<Login Email="user@mydomain.com" Password="pass"/>
<Paxes>
<Pax IdPax="1"/>
<Pax IdPax="2"/>
<Pax IdPax="3">
<Age>8</Age>
</Pax>
</Paxes>
<HotelRequest>
<SearchSegmentsHotels>
<SearchSegmentHotels Start="2019-11-20" End="2019-11-22"/>
<CountryOfResidence>ES</CountryOfResidence>
<HotelCodes>
<HotelCode>JP046300</HotelCode>
<HotelCode>JP150074</HotelCode>
<HotelCode>JP046391</HotelCode>
</HotelCodes>
</SearchSegmentsHotels>
<RelPaxesDist>
<RelPaxDist>
<RelPaxes>
<RelPax IdPax="1"/>
</RelPaxes>
</RelPaxDist>
<RelPaxDist>
<RelPaxes>
<RelPax IdPax="2"/>
<RelPax IdPax="3"/>
</RelPaxes>
</RelPaxDist>
</RelPaxesDist>
</HotelRequest>
<AdvancedOptions>
<ShowHotelInfo>false</ShowHotelInfo>
<ShowOnlyBestPriceCombination>true</ShowOnlyBestPriceCombination>
<TimeOut>8000</TimeOut>
</AdvancedOptions>
</HotelAvailRQ>
</HotelAvail>
</soapenv:Body>
</soapenv:Envelope>
It will also be mandatory for your availability request to accept for compressed responses from the host, so that the amount of transmitted data and transfer times is highly decrased. If you do not allow for the same, the response will contain an error and the booking process won’t go forward.
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<HotelAvailResponse xmlns="http://www.juniper.es/webservice/2007/">
<AvailabilityRS Url="http://xml-uat.bookingengine.es" TimeStamp="2019-10-03T10:00:43.8407201+02:00" IntCode="LwKWhco2gcs7X681Niq8UgsiZKcPepNxqqNCHl46qxo=">
<Errors>
<Error Text=" Please add the 'Accept-Encoding: gzip, deflate' header in your petition. This can reduce the transmission time and response size by about 75-95%. See more here: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html" Code="COMPRESSION_REQUIRED"/>
</Errors>
</AvailabilityRS>
</HotelAvailResponse>
</soap:Body>
</soap:Envelope>
If the request is valid, you will receive a response containing all the possible combinations for the desired distribution. Each combination may be composed by one or more rooms and will be returned under a RatePlanCode. This code should be used in the next transaction of the booking flow: HotelBookingRules. Please be aware that the use of this code is other important point in the certification process.
It is not possible to split the rooms returned under the same RatePlanCode. If you want to book just one room from a combination of some, a new HotelAvail transaction for this only room must be sent and complete the booking process from the new RatePlanCode returned.
Next step is the HotelBookingRules transaction. This is a mandatory step for the booking process as, besides from returning important information for the booking (e.g. cancellation policies), it validates the allotment and rate. Some suppliers use dynamic assignation, so it is not up to this point when allotment and prices are confirmed in live.
This transaction needs only a few parameters: booking dates, hotel code and the described RatePlanCode from the availability response.
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://www.juniper.es/webservice/2007/">
<soapenv:Header/>
<soapenv:Body>
<HotelBookingRules>
<HotelBookingRulesRQ Version="1.1" Language="en">
<Login Email="user@mydomain.com" Password="pass"/>
<HotelBookingRulesRequest>
<HotelOption RatePlanCode="3WCCdKrNDmJB1QQRyLq2X3CEfLuy1bKgHGE61OmWeg12vmo2J0fu7epFHivGIanunBT....."/>
<SearchSegmentsHotels>
<SearchSegmentHotels Start="2014-04-24" End="2014-04-28"/>
<HotelCodes>
<HotelCode>JP003600</HotelCode>
</HotelCodes>
</SearchSegmentsHotels>
</HotelBookingRulesRequest>
</HotelBookingRulesRQ>
</HotelBookingRules>
</soapenv:Body>
</soapenv:Envelope>
The response will contain:
<BookingCode ExpirationDate="2014-03-26T10:31:44.393171+01:00">3WCCdKrNDmJB1QQRyLq2X3CEfLuy1bKgHGE61OmWeg12vmo2J0fu7epFHivGIanunBT/zLZAMsvI+d6VZd8B/L4+YQCuR0WQ.....</BookingCode>
It is very important to note that this code has an expiration time of 10 minutes and that, if expired, you will need to send an additional HotelBookingRules request in order to retrieve an updated one.
*Cancellation policies: List of available cancellation policy rules. If unavailable, it will be recommeded to assume that the booking is non-refundable.
<CancellationPolicy CurrencyCode = "USD">
<FirstDayCostCancellation Hour = "12:00">2014-04-18</FirstDayCostCancellation>
<Description>
CANCELLATION FEES
- 6 or more days before the arrival: NO CHARGES
- 4/5 days before the arrival: 10% of the total amount of the booking
- 2/3 days before the arrival: 20% of the total amount of the booking
- 0/1 days before the arrival: 1 night
- No show: 100% of the total amount of the booking
</Description>
<PolicyRules>
<Rule From = "0" To = "1" DateFrom = "2014-04-22" DateFromHour = "12:00" DateTo = "2014-04-24" DateToHour = "12:00" Type = "V" FixedPrice = "0" PercentPrice = "0" Nights = "1" ApplicationTypeNights = "Average"/>
<Rule From = "2" To = "3" DateFrom = "2014-04-20" DateFromHour = "12:00" DateTo = "2014-04-22" DateToHour = "12:00" Type = "V" FixedPrice = "0" PercentPrice = "20" Nights = "0" ApplicationTypeNights = "Average"/>
<Rule From = "4" To = "5" DateFrom = "2014-04-18" DateFromHour = "12:00" DateTo = "2014-04-20" DateToHour = "12:00" Type = "V" FixedPrice = "0" PercentPrice = "10" Nights = "0" ApplicationTypeNights = "Average"/>
<Rule From = "6" DateFrom = "2014-03-26" DateFromHour = "05:21" DateTo = "2014-04-18" DateToHour = "12:00" Type = "V" FixedPrice = "0" PercentPrice = "0" Nights = "0" ApplicationTypeNights = "Average"/>
<Rule DateFrom = "2014-04-24" DateFromHour = "12:00" Type = "S" FixedPrice = "0" PercentPrice = "100" Nights = "0" ApplicationTypeNights = "Average"/>
</PolicyRules>
</CancellationPolicy>
*Required fields: List of mandatory fields that will need to be included on the booking confirmation request in order to succesfully confirm the booking. It is very important to always fulfill the same (only when required) as otherwise the booking confirmation process will fail.
<HotelRequiredFields>
<HotelBooking>
<Paxes>
<Pax IdPax = "1">
<Name>Holder Name</Name>
<Surname>Holder Surname</Surname>
<Age>50</Age>
<Document Type = "DNI">22222222E</Document>
<PhoneNumbers>
<PhoneNumber>111111111</PhoneNumber>
</PhoneNumbers>
<Email>holder@yourdomain.com</Email>
<Address>Address Holder 67</Address>
<City>Palma de Mallorca</City>
<Country>Spain</Country>
<PostalCode>5555</PostalCode>
<Nationality>ES</Nationality>
</Pax>
<Pax IdPax = "2">
<Name>Pax Name</Name>
<Surname>Pax Surname</Surname>
</Pax>
<Pax IdPax = "3">
<Name>Pax Name</Name>
<Surname>Pax Surname</Surname>
</Pax>
</Paxes>
<Holder>
<RelPax IdPax = "1"/>
</Holder>
<Elements>
<HotelElement>
<BookingCode>BOOKINGCODE...</BookingCode>
<RelPaxesDist>
<RelPaxDist>
<RelPaxes>
<RelPax IdPax = "1"/>
<RelPax IdPax = "2"/>
<RelPax IdPax = "3"/>
</RelPaxes>
</RelPaxDist>
</RelPaxesDist>
<CreditCard CardCode = "AX" CvC = "" CardNumber = "" ExpireDate = "">
<Name/>
<Surname/>
<Address/>
</CreditCard>
<HotelBookingInfo Start = "2014-03-26" End = "2014-03-26">
<Price>
<PriceRange Minimum = "100" Maximum = "150" Currency = "USD"/>
</Price>
<HotelCode>XXXXX</HotelCode>
</HotelBookingInfo>
</HotelElement>
</Elements>
</HotelBooking>
</HotelRequiredFields>
<OptionalElements>
<Comments>
<Comment Type = "HOT">
<![CDATA[* 13/06/2018 - 31/12/2030: Please note that on this field hotels have the possibility of supplying you with important information like:<br><br>- Additional taxes (like, for example, a city tax).<br>- Additional features (like, for example, a detailed explanation of a promotion)<br>- Additional warnings (like, for example, the pool being closed due to renovations)<br>- Additional information (like, for example, the emergency phone)<br><br>Among other examples.<br>]]>
</Comment>
</Comments>
</OptionalElements>
Updated price and allotment: The HotelBookingRules response validates that the price and allotment of the combination is still effective and, if this were not the case, supplies you with an updated one, reason for which it will be required for you to verify that none of these two values have changed on our end and, if they did, act depending on what your system allows for in this regard.
Optional products and supplements: For further information and a detailed description, please review the section HotelBookingRules.
As it is not mandatory to select these products to complete a booking, we would not ask you to validate them. However, if you don’t include them in the certification tests, we consider you will not use them and therefore you are not allowed to include them in the bookings.
Last step in the booking process is the HotelBooking. This transaction validates all the information retrieved from the rest of transactions and confirms the booking. Some important date we will check are:
Same language must also be specified in all of the transactions from the booking flow (if you set a specific language on the availability request, the mentioned must be mantained on any subsequent transactions).
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns="http://www.juniper.es/webservice/2007/">
<soapenv:Body>
<HotelBooking>
<HotelBookingRQ Version="1.1" Language="en">
<Login Email="user@mydomain.com" Password="pass"/>
<Paxes>
<Pax IdPax="1">
<Name>Holder Name</Name>
<Surname>Holder Surname</Surname>
<PhoneNumbers>
<PhoneNumber>+34600555999</PhoneNumber>
</PhoneNumbers>
<Email>holder@yourdomain.com</Email>
<Document Type="DNI">43258752A</Document>
<Address>Address Holder 67</Address>
<City>Palma de Mallorca</City>
<Country>Spain</Country>
<PostalCode>05278</PostalCode>
<Age>50</Age>
<Nationality>ES</Nationality>
</Pax>
<Pax IdPax="2">
<Name>Second Passenger Name</Name>
<Surname>Second Passenger Surname</Surname>
<Age>30</Age>
</Pax>
<Pax IdPax="3">
<Name>Child Name</Name>
<Surname>Child Surname</Surname>
<Age>8</Age>
</Pax>
</Paxes>
<Holder>
<RelPax IdPax="1"/>
</Holder>
<ExternalBookingReference>YOUR_OWN_REFERENCE_123</ExternalBookingReference>
<Comments>
<Comment Type="RES">GENERAL BOOKING COMMENTS</Comment>
</Comments>
<Elements>
<HotelElement>
<BookingCode>ya79dM4dS6R6EywV4XhfEvwItLN5sfa4xcKoRWYtG4b/utM1C8FoU7wtvxeqXKhz2utopk4+5bpJX0EGM8YWSGAwgLA0lkvt/PLN1rsHUrCUH/qL9U3.....</BookingCode>
<RelPaxesDist>
<RelPaxDist>
<RelPaxes>
<RelPax IdPax="1"/>
</RelPaxes>
</RelPaxDist>
<RelPaxDist>
<RelPaxes>
<RelPax IdPax="2"/>
<RelPax IdPax="3"/>
</RelPaxes>
</RelPaxDist>
</RelPaxesDist>
<Comments>
<Comment Type="ELE">SPECIFIC HOTEL/SUPPLIER COMMENTS</Comment>
</Comments>
<HotelBookingInfo Start="2019-11-20" End="2019-11-22">
<Price>
<PriceRange Minimum="0" Maximum="1003.57" Currency="EUR"/>
</Price>
<HotelCode>JP046300</HotelCode>
</HotelBookingInfo>
</HotelElement>
</Elements>
</HotelBookingRQ>
</HotelBooking>
</soapenv:Body>
</soapenv:Envelope>
Here we list and describe each of the topics that you will be requested to comply with for the completion of the certification process (when undergoing this process, kindly provide us with your answer and comments for each of the relevant topics), these will include:
And we elaborate on each of them, on a topic-by-topic basis, below:
We would also like to have a short description of your system flow (which transactions do you use when) and an expectation of how many requests do you plan on doing when live. We want the approximate number of requests per day and per second for times of more work, both availability and reservations as others (total requests). We need an estimation, the number doesn’t have to be exact.
Please also specify which is the lenght of the timeout that you have set for our responses (availability and booking confirmation) or if you don't have implemented any.
On most of the requests you have the possibility of establishing the language, such as in the below example of the HotelAvail requests:
<HotelAvailRQ Language="en" Version="1.1">
This attribute will allow you to specify the language in which you will obtain hotel-related information (room descriptions, hotel names, etc) and it is very important for this attribute to be maintained using the same value during the entirety of a booking flow (it's ok if your system used multiple languages but, if a specific availability is requested asking en, it will then be very important for all of the requests that originate from this availability to also be using en).
Please keep in mind that setting the nationality of the holder on the booking confirmation request with the same value that was originally established on the availability, will be required in order to ensure that the selected rate will remain applicable and available.
To further clarify, we refer to the following nodes from the respective transactions:
The CountryOfResidence
node from the HotelAvail request:
<HotelRequest>
<SearchSegmentsHotels>
<SearchSegmentHotels Start = "2023-12-03" End = "2023-12-05"/>
<HotelCodes>...</HotelCodes>
<CountryOfResidence>ES</CountryOfResidence>
</SearchSegmentsHotels>
The Nationality
node from the HotelBooking request, that of the passenger that has been designated to be the holder of the reservation on the Holder
node:
<Paxes>
<Pax IdPax = "1">
<Name>Holder Name</Name>
<Surname>Holder Surname</Surname>
<Age>30</Age>
<Nationality>ES</Nationality>
</Pax>
<Pax IdPax = "2">
<Age>30</Age>
</Pax>
</Paxes>
<Holder>
<RelPax IdPax = "1"/>
</Holder>
Nationality changes could lead to the original rate no longer being available and even to a confirmation error.
We would appreciate if you could start by describing how do you usually process this and if you have any worries on this topic, while we have two specific subjects we would also like for you to keep in mind:
Will you be reading the cancellation policies on the availability response? If so, Will this be a requirement? On Juniper cancellation policies at avail are optional, reason for which, if you do require them, you will have to manage any reservations whose cancellation policies are unavailable on this step to be non-refundable.
Which will be the TimeZone that you will be using for the cancellation policies? On Juniper the cancellation policies TimeZones are variable (depending on the products that your suppliers will be selling you with).
This is why, if cancellation policy times are important to you, you may add a security margin (of up to 12 hours) in order to safeguard its application.
Through the @Context property that's found on most of the API requests (such as in the below example), you can establish the context of the request itself and, for example, establish if your availability is going to be for an entire destination (FULLAVAIL), or if its going to be for a single, specific, hotel (SINGLEAVAIL).
<HotelAvailRQ Version = "1.1" Context = "FULLAVAIL" Language = "en">
Establishing this information will let our system identify what is the exact purpose of your requests and, in response, adjust its performance to match the exact process that its being requested for (ensuring that you have the best performance possible on your requests).
Even if the property is optional (this is due to backwards compatibility for your reference), note that sending this parameter is a requirement and that you will need to do so in order to be able to complete our certification.
Please note that this feature allows for you to set the maximum time (up to of 8 seconds) that our API will take on supplying a response and that, if you do not set any value on this property, the system will use the default timeout that your supplier will have configured for your account (contact with your supplier if you wish for the default value to be modified).
<AdvancedOptions>
<ShowHotelInfo>false</ShowHotelInfo>
<ShowOnlyBestPriceCombination>true</ShowOnlyBestPriceCombination>
<TimeOut>8000</TimeOut>
</AdvancedOptions>
On the Juniper system, we do not allow the request of destination-based availability due to performance related reasons and, instead, recommend on making hotel code-based ones. In order to perform these availability, it is recommended for you to have a mapping process that will let you identify the list of hotel codes that you will wish to search availability for when asking for a destination and, specifically, our system allows for up to a maximum of 500 hotels to be sent per request (if more hotels are required, multiple parallel requests will need to be sent).
<HotelCodes>
<HotelCode>JP046300</HotelCode>
<HotelCode>JP150074</HotelCode>
<HotelCode>JP046391</HotelCode>
</HotelCodes>
It is important that your integration controls these warnings as they may include important messages during the booking flow. Concretely, it is especially important to be aware of any warning that the HotelBookingRules response could supply you with.
Kindly reference to the Warnings section of our API for further reference.
To exemplify, we would like for you to describe how would your system react in any of the following scenarios:
It is important to fulfil any of the presented required fields from this transaction as the mentioned are required for the booking confirmation on the hotel chain side, consequently, if missing the booking confirmation attempt will fail.
Attached you will be able to find an example with all of the possible holder (first passenger of the booking) required fields:
<Pax IdPax = "1">
<Name>PAXNAME</Name>
<Surname>PAXSURNAME</Surname>
<Age>30</Age>
<Email>noreply@gmail.com</Email>
<Document Type = "PAS">925665416</Document>
<PhoneNumbers>
<PhoneNumber>+34971123456</PhoneNumber>
</PhoneNumbers>
<Address>FULL ADDRESS</Address>
<City>CITY NAME</City>
<Country>COUNTRY NAME</Country>
<PostalCode>07014</PostalCode>
<Nationality>ES</Nationality>
</Pax>
To exemplify, we would like for you to describe how would your system react in any of the following scenarios:
It's very important that you read the state of the booking, because if there is a problem, the booking can be cancelled (or CaC Can status), or may be On request (Pre or PDI status). We recommend this, because you cannot assume that the booking is confirmed (it could cause confusion).
<Reservation Locator="FWQ221" Status="PAG" Language="en">
As to ensure that you will not be having any problems due to this, kindly describe how your system would process the booking when receiving the following status:
In addition, feel free to verify with us that you're properly processing of all of the other possible statuses.
It is recommended to send this information along the booking confirmation request as if there is any problem with the booking confirmation process (and hence, you do not have our locator yet), your own booking reference will help us identify if this booking ended up being created and/or what happened to it.
<ExternalBookingReference>YOUR_OWN_REFERENCE</ExternalBookingReference>
This node allows you the option of setting the minimum and maximum price that you accept in case that there is a price change between the booking rule step and the booking confirmation.
While using this parameter we recommend you to atleast set a PriceRange of a minimum of the 25% of the booking and a maximum of the 100% of the booking (this way you would accept any price modification that is less than the original price of the booking while maintaining a security margin of the 25% just in case there is an error with the price).
For example, following our recommendation (25 to 100% price aceptance), on a 1000 EUR booking, you would need to send us with the below:
<HotelBookingInfo Start = "2023-10-03" End = "2023-10-05">
<Price>
<PriceRange Minimum = "250" Maximum = "1000" Currency = "EUR"/>
</Price>
<HotelCode>JP046300</HotelCode>
</HotelBookingInfo>
Every BookingCode received on the HotelBookingRules response has an expiration time of 10 minutes after it is first received, so you must be aware of this since it may expire before the final client makes the booking. In this case, by calling the webservice method HotelBookingRules you should obtain a new Booking code.
<BookingCode ExpirationDate="2023-07-31T16:17:19.1529365+02:00">ya79dM4dS6R6EywV4Xh...</BookingCode>
In the event on which it expires, if the customer takes 10 minutes or more since the moment they initiated the pre-book step, you will be expected to either:
Here we will need you to confirm, read and cancel the following room/passenger combinations, as these tests will let us verify that most of the functionalities are covered (you may do these on any hotel of your choice):
If your integration does not plan on allowing for multi-room reservations this will not be a problem, notify us so during the certification process and skip the related steps.
For each of these reservations, we will need for you to supply us with all of the XML logs of the requests and responses that were involved and/or called during this process, these may include:
We will also need for you to showcase how will you be showing the following information from the HotelBooking response on your system (screenshots may be appreciated). This way, we will confirm that you will be properly retrieving all of the key fields from within the same:
If you plan on using any of the static data that you may retrieve though this API (through the use of the static data transactions), you will be required to undergo the static data certification prior to going live:
Important note:
Complying with these requirements will eliminate the possibility of having mapping mismatches on your connection with any Juniper suppliers and, in short, facilitate the connection process that you might have with them (current or future ones), as it would allow for you to connect to them without the need of performing any kind of verification and/or agreement in this regard.
Otherwise, if not complied with, connecting to Juniper suppliers will still be possible, but will first require having reached an agreement related to the use of static data information (between both parties, integrator and supplier, and on a supplier-by-supplier basis), as Juniper will not be held responsible on any mismatched bookings.
Having clarified this, for the completion of this certification process, we will need you to comply the following list of requirements:
Which we proceed to elaborate on a topic-by-topic basis below:
To update all of the static data information that you retrieve through our API at least once every 15 days. Being it very important for you to ensure that you will be processing any previously matched records (only checking newly created and/or missing records is not enough to comply with this need).
In addition, kindly break down to us how often do you plan on updating each of the different elements that you will be retrieving through our API (meal plan information, hotel mappings, destinations if applicable, etc...).
From the valuation step and onwards, to check and ensure that the hotel important information (*) that you're showing to your customers is verified and updated, following any of the options that we will propose next:
(*) By hotel important information, we refer to the Name, Address and Category of a hotel.
To comply with this option, you would need to use the hotel important information from the HotelBookingRules response on your own valuation step, and the hotel important information from the HotelBooking response on your own booking and voucher steps.
To further exemplify this, following this HotelBookingRules response you will be able to find next:
<HotelBookingRulesResponse xmlns = "http://www.juniper.es/webservice/2007/">
<BookingRulesRS Url = "http://xml-uat.bookingengine.es" TimeStamp = "2023-08-21T12:12:47.735049+02:00" IntCode = "+HweqLNHI+2OWUz6C5Nz04tYB0Xm4nxTz9QKeoP1HRg=">
<Results>
<HotelResult>
<HotelOptions>
<HotelOption Status = "OK">
...
<PriceInformation>
...
<HotelContent Code = "JP046300">
<HotelName>Apartamentos Allsun Pil-lari Play-a</HotelName>
<Zone JPDCode = "JPD086855" Code = "49435"/>
<HotelCategory Type = "3est">3 Stars</HotelCategory>
<HotelType Type = "GEN">General</HotelType>
<Label SortPriority = "0" Code = "3">
<Description>Recommended</Description>
</Label>
<Address>
<Address>Calle Marbella 24</Address>
<Latitude>39.564713</Latitude>
<Longitude>2.627979</Longitude>
</Address>
You will be expected to take the values from the following nodes:
And to populate the corresponding fields from the valuation screen of your platform with these (refraining from using previously stored information).
Needing then to do the same with the HotelBooking and your respective booking confirmation and voucher screens.
To comply with this option, you will be expected to validate that the hotel important information that is being supplied to you on the HotelBookingRules matches with the hotel that you're showcasing on the valuation screen from your own platform, in order to verify that the hotel that is going to be bought is correct and fits the expectations of your system.
How would you like to perform this validation in specific (using the mapping algorithm to verify, checking that the corresponding values have some degree of coincidence, etc...), and how would your system react to the event on which a discrepancy were to be detected (failing the valuation step, updating the mapping and allowing for the booking to be continued, showcase the discrepancy to the end-customer for them to decide if they would like to continue, etc...) will be entirely up to your choice, but keep in mind that any errors that your system may perform on this validation will be of your own responsibility (in the event of complaint, the focus would be on the hotel data that was provided to you on the HotelBooking response as well as if such data is correct).
Last but not least, aside from the requirements we just described, we also have a set of recommendations that we suggest you to comply with, whenever applicable to your integration:
If at any point of the booking flow you require for further static data information from a hotel to be retrieved (in other words, not as part of a static data retrieval process but to completement the booking flow responses), you may call the HotelContent request but while using the related RatePlanCode or BookingCode (depending on the transaction you're currently, and the first RatePlanCode in specific if you haven't yet selected any combination from the availability response) instead of using the HotelCode as usual:
<soapenv:Envelope xmlns:soapenv = "http://schemas.xmlsoap.org/soap/envelope/" xmlns = "http://www.juniper.es/webservice/2007/">
<soapenv:Header/>
<soapenv:Body>
<HotelContent>
<HotelContentRQ Version = "1.1" Language = "en">
<Login Email = "user@mydomain.com" Password = "pass"/>
<HotelContentList>
<Hotel RatePlanCode = "3WCCdKrNDmJB1QQRyLq2X3CEfL..."/>
</HotelContentList>
</HotelContentRQ>
</HotelContent>
</soapenv:Body>
</soapenv:Envelope>
This will let you retrieve the template of the hotel that you're specifically getting availability from.
If you plan on connecting to multiple Juniper suppliers, we recommend you to refer to the following section of our FAQ:
As it will help you understand how Juniper static data information works and, in short, help you design a proper static data retrieval process that takes these multiple suppliers into account.