Expedia Compatible OTA XML Channel API
Does your Channel Manager product support sending rates and availability to Expedia and retrieving bookings from them? Then adding tobook.com as a channel partner is simple!
Expedia uses a subset of an open XML standard known as OTA XML (Open Travel Alliance), to allow channel partners to update rates and availability and retrieve bookings.
To make adding tobook as a supported channel simple for channel providers, we have deployed an XML channel service that uses a strict subset of the part of OTA used by Expedia, with model and operational semantics based on Expedia's protocol.
Get started on implementing tobook channel support today, re-using your existing Expedia channel code with a minimum of fuss!
If your product does not support all features available under the API, such as occupancy based pricing models, or closing out rate packages that are defined as discounts on a Hotel's tobook extranet, no need to implement the whole API.
Notes on endpoints, schemas, supported fields and model considerations are provided below, don't hesitate to message our backend team for test account credentials, if you need help with the swift resolution of any implementation issues, or have any further questions.
Bookings can be forwarded either via the classic Booking Retrieval pull API, (OTA XML Classic - BookingRetrievalRQ/RS, BookingConfirmRQ/RS), or via the newer push notification API, (OTA XML BN - OTA_HotelResNotifRQ/RS, OTA_HotelResModifyNotifRQ/RS, OTA_CancelRQ/RS). Whichever method you already support, our services are ready to go!
Unicode values are supported in all string values, and all API requests and responses are UTF-8 encoded.
Availability and Rate Update
Endpoint
The endpoint for XML rate and availability update requests expects OTA
AvailRateUpdateRQ (non-SOAP) XML messages, and is located at:
https://www.tobook.com/Delta/RQueryRESTService/xml/Extensions/RateUpdate
Namespace & Schema
Request (AvailRateUpdateRQ)
Supported Namespaces:
http://www.expediaconnect.com/EQC/AR/2011/06
http://www.expediaconnect.com/EQC/AR/2007/02
Schema available at:
https://expediaconnectivity.com/files/AvailRateUpdateRQ.xsd
Response (AvailRateUpdateRS)
Supported Namespaces:
http://www.expediaconnect.com/EQC/AR/2007/02
Schema available at:
https://expediaconnectivity.com/files/AvailRateUpdateRS.xsd
Model & Supported Flags
-
For AvailRateUpdateRQ update request messages, the latest namespace and schema
/ECQ/AR/2011/06
is preferred./ECQ/AR/2007/02
is supported for backwards compatibility. - Note that unlike with Expedia's service, there is no backend model restriction requiring that a RatePlanID apply only to one RoomTypeID. It's perfectly acceptable for a property to create cross-roomtype Rate Plans like on most channel partners, (booking.com etc), if your internal model supports this. This may allow you to skip an extra level of Rate Plan mapping.
- If you prefer to have one RoomTypeID per Rate Plan in your mappings, you are entirely free to do so!
-
Availability is updated via attribute:
@totalInventoryAvailable
. Updating availability by@flexibleAllocation
over base is not supported (as we have no fixed base allocations on tobook). Attempting to use@flexibleAllocation
will result in an error response. - The tobook model has a strict cap on the amount of availability for a Room Type based on (Number Of Rooms - Confirmed Bookings) for a given day. If you attempt to supply more inventory than the tobook model determines is physically available, the inventory update will be successful, but only the maximum consistent amount of availability according to the tobook model will be released.
-
The
@closed
attribute is supported at the RatePlan level, for blanket closing out a rate for a given period ("stop sell"). Unlike with Expedia's gateway, it is NOT supported at the Room Type level, as our model does not support closing out all rates for a Room Type at once. (Room Types can be entirely closed for a period by setting total inventory available to 0, or by closing all Rate Plans active for that Room Type over the period). -
Rates are updated via
PerOccupancy
orPerDay
elements. Stay duration based pricing via the attribute@lengthOfStay
is not supported, as there is no equivalent functionality in the tobook model. Attempting to use@lengthOfStay
based pricing will result in an error response. If your product does not support Hotels sending occpancy based prices ("double for single use" etc) and retrieving bookings made with occupancy based prices, you are not required to implement thePerOccupancy
part of the API. -
@currency
attributes should be set to the 3 letter ISO code of the property's configured base currency. -
If a Rate Plan is configured by a Hotel on their tobook extranet to derive its prices as a
discount of a parent Rate Plan, (in which case its Restrictions are inherited from the
parent), then
Rate
andRestrictions
elements for that Rate Plan will be ignored. The@closed
attribute has the usual effect of opening and closing the Rate Plan for sale. Any Rate Plans configured by a Hotel on their tobook extranet as derived packages will be clearly marked as such on your provider extranet. This is essentially the same setup as for Rate Plans configured as discount packages on a Hotel's Expedia extranet. - If your product does not allow Hotels to open and close OTA extranet-side derived packages Hotels may still open and close them via their tobook extranet, and you are not required to support this use case. If you have agreed with your customers that they will have discount Rate Plans defined on their tobook extranet as part of their channel setup, you must still provide the capability to retrieve bookings made under such Rate Plans.
- In all other respects (restrictions, day of week specifiers, etc), the supported functionality and model semantics are based on the Expedia version of the protocol.
-
In AvailRateUpdateRS response messages, the latest namespace
/ECQ/AR/2007/02
will be returned along with an XML response that conforms to the associated schema, as is currently the case for all Expedia AvailRateUpdateRS messages. -
tobook is more strict about explicitly rejecting updates with errors, and will return an error
response if part of an update cannot be applied, rather than a mixture of
Success
andWarning
elements. - Large Updates - One big request: When handling initialisation of all rate and availability data for a property, or performing a full sync of all data, it's possible to send all the data in one large XML request that will typically comprise a few MB of XML uncompressed. For example, a full two years of cache data for a property with 5 Room Types and 5 Rate Plans all in one big request, will typically comprise around 2 MB of XML and take around 90 seconds to commit and return an HTTP response. This kind of API usage for initialisation and full sync is acceptable. Note that depending on availability of server resources, such requests can take up to as much as 5 minutes to complete during periods of peak activity. If you plan on performing such requests, make sure you have a generous client-side timeout set on your side of the channel. Sync operations are somewhat faster than initialisation operations.
-
Large Updates - Many small requests: When handling initialisation of all rate and
availability data for a property, or performing a full sync of all data, it's possible to
send the data split out over a very large number of small XML requests. For example by
sending one XML request per Room Type, Rate Plan and Day, for each individually of
totalInventoryAvailable
,rate
, andminLOS
etc, (potentially running into many thousands of requests). This kind of API usage for initialisation and full sync is acceptable. Note that this results in somewhat inefficient utilisation of server-side locking resources, and that your requests may be rate-limited in such cases. This will be indicated in the AvailRateUpdateRS response in theError
element via error code 4001 with the message: "Internal timeout error, please try again in a few minutes, (rate-limit exceeded)." This kind of API usage will result in relatively slow initialisation and full sync operations for the properties involved. - Large Updates - Standard scenario: When handling initialisation of all rate and availability data for a property, or performing a full sync of all data, it's most likely that your existing availability and rate push-model does not sit at either of the extreme ends of the spectrum described above. If you are performing initialisation and full sync requests with both at least some degree of batching, and an upper-limit of minimal enforced granularity, then you are highly unlikely to run into either long-running HTTP requests or rate-limiting. For example: when performing initialisation or full sync in per-day whole-property slices, or any combination of per-week, per-month, per-quarter, or per-150-day chunks, at any of whole property level, or whole Room Type level, or Room Type and Rate Plan level, and with availability either seperate from or in conjunction with rates and restrictions etc, you should not encounter either long-running HTTP requests or rate-limiting.
- Numerical Error Codes are supplied in error responses according to the same scheme and interpretation as the ones used in Expedia's AvailRateUpdateRS messages. The precise text of error messages is not guaranteed to be the same.
Sample Messages
Example AvailRateUpdateRQ message demonstrating most functionality. Note that you have the same flexibility to split and batch update operations in accordance with the schema as you do with the Expedia implementation of the protocol:
<?xml version="1.0" encoding="UTF-8"?>
<AvailRateUpdateRQ xmlns="http://www.expediaconnect.com/EQC/AR/2011/06">
<Authentication username="MyTestAccountName" password="MyTestPassword"/>
<Hotel id="204020"/>
<AvailRateUpdate>
<DateRange from="2020-01-01" to="2020-01-15"/>
<DateRange from="2020-01-25" to="2020-01-28"/>
<RoomType id="6">
<Inventory totalInventoryAvailable="14"/>
<RatePlan id="3" closed="false">
<Rate currency="EUR">
<PerOccupancy rate="100.00" occupancy="1"/>
<PerOccupancy rate="150.00" occupancy="2"/>
<PerOccupancy rate="200.00" occupancy="3"/>
</Rate>
<Restrictions closedToArrival="false" closedToDeparture="false" minLOS="2" maxLOS="28"/>
</RatePlan>
</RoomType>
</AvailRateUpdate>
<AvailRateUpdate>
<DateRange from="2020-02-16" to="2020-05-31" sun="true" mon="false" tue="false" wed="false" thu="false" fri="true" sat="true"/>
<RoomType id="4">
<RatePlan id="1" closed="false">
<Rate currency="EUR">
<PerDay rate="210.00"/>
</Rate>
<Restrictions closedToArrival="true" closedToDeparture="false"/>
</RatePlan>
</RoomType>
</AvailRateUpdate>
<AvailRateUpdate>
<DateRange from="2020-03-01" to="2020-03-07"/>
<RoomType id="4">
<RatePlan id="8" closed="true"/>
</RoomType>
</AvailRateUpdate>
</AvailRateUpdateRQ>
Example AvailRateUpdateRS message notifying a successful update:
<?xml version="1.0" encoding="UTF-8"?>
<AvailRateUpdateRS xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.expediaconnect.com/EQC/AR/2007/02">
<Success/>
</AvailRateUpdateRS>
Example AvailRateUpdateRS message notifying that an error occurred:
<?xml version="1.0" encoding="UTF-8"?>
<AvailRateUpdateRS xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.expediaconnect.com/EQC/AR/2007/02">
<Error code="3021">Validation error: end date must not be before start date.</Error>
</AvailRateUpdateRS>
Booking Retrieval
Endpoint
The endpoint for XML booking retrieval requests expects OTA
BookingRetrievalRQ (non-SOAP) XML messages, and is located at:
https://www.tobook.com/Delta/RQueryRESTService/xml/Extensions/RetrieveBookings
Namespace & Schema
Request (BookingRetrievalRQ)
Supported Namespaces:
http://www.expediaconnect.com/EQC/BR/2014/01
http://www.expediaconnect.com/EQC/BR/2007/02
Schema available at:
https://expediaconnectivity.com/filesBookingRetrievalRQ.xsd
Response (BookingRetrievalRS)
Supported Namespaces:
http://www.expediaconnect.com/EQC/BR/2014/01
http://www.expediaconnect.com/EQC/BR/2007/02
Schema available at:
https://expediaconnectivity.com/files/BookingRetrievalRS.xsd
Model & Supported Flags
-
For BookingRetrievalRQ booking request messages, the latest namespace and schema
/EQC/BR/2014/01
is preferred./EQC/BR/2007/02
is supported for backwards compatibility. -
However,
Status
filter elements in the optionalParamSet
section are NOT supported, onlyNbDaysInPast
(as with the older version of the query semantics). Attempting to use extraStatus
params will result in an error response. - In all other respects the supported functionality and query semantics are based on the Expedia version of the protocol.
- In BookingRetrievalRS response messages, whichever of the two allowed namespaces was supplied in the BookingRetrievalRQ message will be returned along with an XML response that conforms to the associated schema.
-
If the more recent namespace
http://www.expediaconnect.com/EQC/BR/2014/01
is supplied, then thePrimaryGuest
element will be returned with the guest's email address in the InnerText of the optional childEmail
element. The earlier version of the schema does not support theEmail
element, so if using the older namespace noEmail
element will be returned. Hotels can still find primary guest email addresses on their extranet. -
The optional attribute
@confirmNumber
on theBooking
element is not returned, as in the tobook model confirmation numbers and booking numbers are identical. -
Unfortunately, Expedia do not support multiple Room Stays per booking, and their supported
subset of OTA XML reflects that in their schema. Group bookings with multiple room stays made
on tobook are therefore delivered with linked booking ids on the
Booking
element according to the standard scheme:id="XXXX-XXXX-XXXX-XXXX-A"
,id="XXXX-XXXX-XXXX-XXXX-B"
,id="XXXX-XXXX-XXXX-XXXX-C"
, etc. Note that booking ids for single Room Stay bookings are of the formid="XXXX-XXXX-XXXX-XXXX-A"
. The presence of the suffix 'A' does not by itself indicate the existence of further linked Room Stays, which are indicated by suffixes 'B' and above. -
The optional
RewardProgram
element does not appear in the tobook reservation model and is never returned. -
The optional
@child
attribute andChild
elements do not appear in the tobook reservation model and are never returned. -
An optional
SpecialRequest
element with@code
attribute in the range 1.91 - 1.94 (Quadruple Occupancy, Triple Occupancy, Double Occupancy, Single Occupancy) will be returned if the booking was made under an equivalent occupancy based price. If your product does not support Hotels sending occupancy based prices ("double for single use" etc) and retrieving bookings made with occupancy based prices, you are not required to implement this part of the API. -
An optional
SpecialRequest
element with@code
attribute set to 4 (Free Text) will be returned including Guest Comments/Questions/Requests if any such were supplied at time of booking. -
The above two
SpecialRequest
elements are the only ones ever returned under the tobook model. -
Credit Card Numbers are transmitted in the
@cardNumer
attribute only once on first retrieval of a booking, in accordance with PCI best practice. Values in@cardNumber
are masked out with "(already retrieved)" on subsequent retrievals. -
The two letter Credit Card Type codes in the
@cardCode
attribute and the two letter Country codes in the@country
attribute are the industry standard ones also used by Expedia. Attributes on theCardHolder
element other than@name
and@country
are present but empty, as we do not collect addresses from customers. - In all other respects the response semantics are based on the Expedia version of the protocol.
- Numerical Error Codes are supplied in error responses according to the same scheme and interpretation as the ones used in Expedia's BookingRetrievalRS messages. The precise text of error messages is not guaranteed to be the same.
Sample Messages
Example BookingRetrievalRQ message requesting unconfirmed active bookings:
<?xml version="1.0" encoding="UTF-8"?>
<BookingRetrievalRQ xmlns="http://www.expediaconnect.com/EQC/BR/2014/01">
<Authentication username="MyTestAccountName" password="MyTestPassword"/>
<Hotel id="204020" />
</BookingRetrievalRQ>
Example BookingRetrievalRQ message requesting all bookings from the last 3 days:
<?xml version="1.0" encoding="UTF-8"?>
<BookingRetrievalRQ xmlns="http://www.expediaconnect.com/EQC/BR/2014/01">
<Authentication username="MyTestAccountName" password="MyTestPassword"/>
<Hotel id="204020" />
<ParamSet>
<NbDaysInPast>3</NbDaysInPast>
</ParamSet>
</BookingRetrievalRQ>
Example BookingRetrievalRS message notifying that an error occurred:
<?xml version="1.0" encoding="UTF-8"?>
<BookingRetrievalRS xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.expediaconnect.com/EQC/BR/2014/01">
<Error code="1001">Authentication error: invalid username or password.</Error>
</BookingRetrievalRS>
Example BookingRetrievalRS message with some typical booking messages representing a new booking, a new group booking with two linked room stays, a modification and a cancellation. The Credit Card Numbers shown here are standard public test numbers:
<?xml version="1.0" encoding="UTF-8"?>
<BookingRetrievalRS xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.expediaconnect.com/EQC/BR/2014/01">
<Bookings>
<Booking createDateTime="2020-04-17T23:33:26.823" id="204020-483-200830-200831-A" source="tobook.com" type="Book" status="pending">
<Hotel id="204020" />
<PrimaryGuest>
<Name givenName="John" surname="Doe" />
<Phone number="+44 123 321 098" />
<Email>j.doe@tobook.com</Email>
</PrimaryGuest>
<RoomStay ratePlanID="2" roomTypeID="18">
<GuestCount adult="2" />
<PaymentCard cardCode="AX" cardNumber="378282246310005" expireDate="0323" seriesCode="394">
<CardHolder address="" city="" country="UK" name="John Doe" postalCode="" stateProv="" />
</PaymentCard>
<PerDayRates currency="EUR">
<PerDayRate baseRate="131.33" stayDate="2020-08-30" />
</PerDayRates>
<StayDate arrival="2020-08-30" departure="2020-08-31" />
<Total amountAfterTaxes="140.00" amountOfTaxes="8.67" />
</RoomStay>
</Booking>
<Booking createDateTime="2020-04-17T23:38:36.15" id="204020-485-200831-200904-A" source="tobook.com" type="Book" status="pending">
<Hotel id="204020" />
<PrimaryGuest>
<Name givenName="San" surname="Chi Yun" />
<Phone number="+31 112 334 556" />
<Email>s.chiyun@tobook.com</Email>
</PrimaryGuest>
<RoomStay ratePlanID="1" roomTypeID="17">
<GuestCount adult="3" />
<PaymentCard cardCode="VI" cardNumber="4012888888881881" expireDate="0326" seriesCode="987">
<CardHolder address="" city="" country="CN" name="San Chi Yun" postalCode="" stateProv="" />
</PaymentCard>
<PerDayRates currency="EUR">
<PerDayRate baseRate="177.29" stayDate="2020-08-31" />
<PerDayRate baseRate="177.29" stayDate="2020-09-01" />
<PerDayRate baseRate="194.18" stayDate="2020-09-02" />
<PerDayRate baseRate="194.18" stayDate="2020-09-03" />
</PerDayRates>
<StayDate arrival="2020-08-31" departure="2020-09-04" />
<Total amountAfterTaxes="792.00" amountOfTaxes="49.06" />
</RoomStay>
<SpecialRequest code="4">Would prefer not to have a street facing room.</SpecialRequest>
</Booking>
<Booking createDateTime="2020-02-17T23:32:36.15" id="204020-485-200831-200904-B" source="tobook.com" type="Book" status="pending">
<Hotel id="204020" />
<PrimaryGuest>
<Name givenName="Ash" surname="Brinda" />
<Phone number="" />
<Email>ash.brinda@tobook.com</Email>
</PrimaryGuest>
<RoomStay ratePlanID="1" roomTypeID="22">
<GuestCount adult="1" />
<PaymentCard cardCode="VI" cardNumber="4012888888881881" expireDate="0326" seriesCode="987">
<CardHolder address="" city="" country="CN" name="San Chi Yun" postalCode="" stateProv="" />
</PaymentCard>
<PerDayRates currency="EUR">
<PerDayRate baseRate="118.19" stayDate="2020-08-31" />
<PerDayRate baseRate="118.19" stayDate="2020-09-01" />
<PerDayRate baseRate="135.08" stayDate="2020-09-02" />
<PerDayRate baseRate="135.08" stayDate="2020-09-03" />
</PerDayRates>
<StayDate arrival="2020-08-31" departure="2020-09-04" />
<Total amountAfterTaxes="540.00" amountOfTaxes="33.46" />
</RoomStay>
<SpecialRequest code="1.94">Single Occupancy</SpecialRequest>
<SpecialRequest code="4">Would prefer not to have a street facing room.</SpecialRequest>
</Booking>
<Booking createDateTime="2020-04-17T23:33:26.823" id="204020-484-200830-200831-A" source="tobook.com" type="Modify" status="pending">
<Hotel id="204020" />
<PrimaryGuest>
<Name givenName="Александр" surname="Садоўскі" />
<Phone number="+38 044 555 1234" />
<Email>alex.sadowski@tobook.com</Email>
</PrimaryGuest>
<RoomStay ratePlanID="2" roomTypeID="16">
<GuestCount adult="1" />
<PaymentCard cardCode="AX" cardNumber="(already retrieved)" expireDate="0323" seriesCode="394">
<CardHolder address="" city="" country="UA" name="А Садоўскі" postalCode="" stateProv="" />
</PaymentCard>
<PerDayRates currency="EUR">
<PerDayRate baseRate="111.33" stayDate="2020-08-30" />
<PerDayRate baseRate="111.33" stayDate="2020-08-31" />
</PerDayRates>
<StayDate arrival="2020-08-30" departure="2020-08-32" />
<Total amountAfterTaxes="240.00" amountOfTaxes="17.34" />
</RoomStay>
</Booking>
<Booking createDateTime="2020-04-19T21:15:17.17" id="204020-392-200831-200902-A" source="tobook.com" type="Cancel" status="pending">
<Hotel id="204020" />
<PrimaryGuest>
<Name givenName="Mike" surname="Ericsson" />
<Phone number="+31 2765 287 61" />
<Email>m.ericsson@tobook.com</Email>
</PrimaryGuest>
<RoomStay ratePlanID="2" roomTypeID="18">
<GuestCount adult="2" />
<PaymentCard cardCode="CB" cardNumber="(already retrieved)" expireDate="0828" seriesCode="901">
<CardHolder address="" city="" country="NL" name="Mike Ericsson" postalCode="" stateProv="" />
</PaymentCard>
<PerDayRates currency="EUR">
<PerDayRate baseRate="112.56" stayDate="2020-09-15" />
<PerDayRate baseRate="112.56" stayDate="2020-09-16" />
<PerDayRate baseRate="112.56" stayDate="2020-09-17" />
<PerDayRate baseRate="112.56" stayDate="2020-09-18" />
<PerDayRate baseRate="112.56" stayDate="2020-09-19" />
</PerDayRates>
<StayDate arrival="2020-09-15" departure="2020-09-20" />
<Total amountAfterTaxes="0.00" amountOfTaxes="0.00" />
</RoomStay>
<SpecialRequest code="4">Quiet room, non-smoking.</SpecialRequest>
</Booking>
</Bookings>
</BookingRetrievalRS>
Booking Confirmation
Endpoint
The endpoint for post-retrieval XML booking confirmation requests expects OTA
BookingConfirmRQ (non-SOAP) XML messages, and is located at:
https://www.tobook.com/Delta/RQueryRESTService/xml/Extensions/ConfirmBookings
Namespace & Schema
Request (BookingConfirmRQ)
Supported Namespaces:
http://www.expediaconnect.com/EQC/BC/2007/09
Schema available at:
https://expediaconnectivity.com/files/BookingConfirmRQ.xsd
Response (BookingConfirmRS)
Supported Namespaces:
http://www.expediaconnect.com/EQC/BC/2007/08
Schema available at:
https://expediaconnectivity.com/files/BookingConfirmRS.xsd
Model & Supported Flags
-
For BookingConfirmRQ confirmation request messages, the namespace and schema
/EQC/BC/2007/09
is required. -
Attributes
@bookingID
and@bookingType
must be supplied and correct. Attributes@confirmNumber
and@confirmTime
must be present, but any values may be supplied. - In all other respects the request semantics are based on the Expedia version of the protocol.
-
In BookingConfirmRQ response messages, the namespace
/EQC/BC/2007/08
will be returned along with an XML response that conforms to the associated schema. -
tobook is more strict about explicitly rejecting confirmation requests with errors, and
will return an error response if any supplied confirmation element cannot be accepted,
rather than a mixture of
Success
andWarning
elements. - In all other respects the response semantics are based on the Expedia version of the protocol.
- Numerical Error Codes are supplied in error responses according to the same scheme and interpretation as the ones used in Expedia's BookingConfirmRS messages. The precise text of error messages is not guaranteed to be the same.
Sample Messages
Example BookingConfirmRQ message containing some typical confirmations:
<?xml version="1.0" encoding="UTF-8"?>
<BookingConfirmRQ xmlns="http://www.expediaconnect.com/EQC/BC/2007/09">
<Authentication username="MyTestAccountName" password="MyTestPassword"/>
<Hotel id="204020" />
<BookingConfirmNumbers>
<BookingConfirmNumber bookingID="204020-486-200831-200902-A" bookingType="Book" confirmNumber="204020-486-200831-200902-A" confirmTime="2020-01-30T23:45:00Z"/>
<BookingConfirmNumber bookingID="204020-487-200612-200618-A" bookingType="Cancel" confirmNumber="204020-487-200612-200618-A" confirmTime="2020-01-30T23:45:00Z"/>
</BookingConfirmNumbers>
</BookingConfirmRQ>
Example BookingConfirmRS message notifying successful receipt of confirmations:
<?xml version="1.0" encoding="UTF-8"?>
<BookingConfirmRS xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.expediaconnect.com/EQC/BC/2007/08">
<Success/>
</BookingConfirmRS>
Example BookingConfirmRS message notifying that an error occurred:
<?xml version="1.0" encoding="UTF-8"?>
<BookingConfirmRS xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.expediaconnect.com/EQC/BC/2007/08">
<Error code="10080">No such booking number for this hotel.</Error>
</BookingConfirmRS>
Booking Notification
Endpoint
The endpoint for OTA XML BN booking push notification requests expects OTA_HotelResNotifRQ, OTA_HotelResModifyNotifRQ, and OTA_CancelRQ SOAP XML messages, and is provided by you along with credentials for authenticating push notification requests.
Namespaces & Schemas
SOAP envelope (including SOAP faults)
Supported Namespace:
http://schemas.xmlsoap.org/soap/envelope/
Schema available at:
https://schemas.xmlsoap.org/soap/envelope/
Protocol specific SOAP header
Supported Namespace:
http://www.newtrade.com/expedia/R14/header
Schema available at:
https://expediaconnectivity.com/files/SOAP_header.xsd
Request (OTA_HotelResNotifRQ, OTA_HotelResModifyNotifRQ, OTA_CancelRQ)
Supported Namespace:
http://www.opentravel.org/OTA/2003/05
Schemas available at:
https://expediaconnectivity.com/files/OTA_HotelResNotifRQ.xsd
https://expediaconnectivity.com/files/OTA_HotelResModifyNotifRQ.xsd
https://expediaconnectivity.com/files/OTA_CancelRQ.xsd
Response (OTA_HotelResNotifRS, OTA_HotelResModifyNotifRS, OTA_CancelRS)
Supported Namespaces:
http://www.opentravel.org/OTA/2003/05
Schemas available at:
https://expediaconnectivity.com/files/OTA_HotelResNotifRS.xsd
https://expediaconnectivity.com/files/OTA_HotelResModifyNotifRQ.xsd
https://expediaconnectivity.com/files/OTA_CancelRS.xsd
Model & Supported Flags
-
In the protocol specific SOAP header messages defined by
http://www.newtrade.com/expedia/R14/header
, the attribute@RequestorId
is set to "tobook" and the attribute@ResponderId
is set to your official partner identifier. For notification requests, the attribute@SourceId
is set to "tobook" and the attribute@DestinationID
is set to your official partner identifier. For confirmation responses, the attribute@SourceId
should be set to your official partner identifier and the attribute@DestinationID
should be set to "tobook". - In all other respects the header semantics are based on the Expedia version of the protocol.
-
In OTA_HotelResNotifRQ, OTA_HotelResModifyNotifRQ, and OTA_CancelRQ push notification
messages the
@ID
attribute on theRequestorID
element, the value of theCompanyName
element when appearing under theBookingChannel
element, the@CreatorID
attribute, the value of theCompanyName
element when appearing under aUniqueID
element with its@Type
attribute set to 14, and the@ResID_Source
attribute when the@ResID_Type
attribute is set to 8, are set to "tobook". -
The value of the
CompanyName
element when appearing under aUniqueID
element with its@Type
attribute set to 10, and the@ResID_Source
attribute when the@ResID_Type
attribute is set to 3, are set to your official partner identifier. -
The optional
AdditionalGuestAmounts
element does not appear in the tobook reservation model and is never returned. -
The optional
Memberships
element does not appear in the tobook reservation model and is never returned. -
The attribute
@PromotionCode
on theRoomRate
element does not appear in the tobook reservation model and is always empty. -
The
Email
element under theCustomer
element is supported and used to deliver customer email addresses in the booking payload. However, although the element is supported and used by Expedia, it appears to be unlinked in their reference XML Schemas. If this causes any problems for you in terms of Schema validation, we can return customer email addresses as a comment in aSpecialRequest
element instead. -
Unfortunately, Expedia do not support multiple Room Stays per booking, and their supported
subset of OTA XML reflects that in their schemas. Group bookings with multiple room stays
made on tobook are therefore delivered with linked booking ids on the
HotelReservationID
element, (when theResID_Type
attribute is set to 8) according to the standard scheme:ResID_Value="XXXX-XXXX-XXXX-XXXX-A"
,ResID_Value="XXXX-XXXX-XXXX-XXXX-B"
,ResID_Value="XXXX-XXXX-XXXX-XXXX-C"
, etc. Note that booking ids for single Room Stay bookings are of the formid="XXXX-XXXX-XXXX-XXXX-A"
. The presence of the suffix 'A' does not by itself indicate the existence of further linked Room Stays, which are indicated by suffixes 'B' and above. -
An optional
SpecialRequest
element with@RequestCode
attribute in the range 1.91 - 1.94 (Quadruple Occupancy, Triple Occupancy, Double Occupancy, Single Occupancy) will be returned if the booking was made under an equivalent occupancy based price. If your product does not support Hotels sending occupancy based prices ("double for single use" etc) and receiving bookings made with occupancy based prices, you are not required to implement this part of the API. -
An optional
SpecialRequest
element with@RequestCode
attribute set to 4 (Free Text) will be returned including Guest Comments/Questions/Requests if any such were supplied at time of booking. -
The above two
SpecialRequest
elements are the only ones ever returned under the tobook model, (unless usingSpecialRequest
as a fallback for email address delivery as mentioned above). -
Credit Card Numbers are transmitted in the
@CardNumer
attribute only once on first receipt of a booking, in accordance with PCI best practice. Values in@CardNumber
are masked out with "(already retrieved)" on subsequent modification notifications, unless the Credit Card details themselves have been updated. -
The two letter Credit Card Type codes in the
@CardCode
attribute and the two letter Country codes in the@Code
attribute on theCountryName
element are the industry standard ones also used by Expedia. Elements other thanCountryName
under theAddress
element are present but empty, as we do not collect addresses from customers. - In all other respects the request semantics are based on the Expedia version of the protocol.
-
In OTA_HotelResNotifRQ, OTA_HotelResModifyNotifRQ, and OTA_CancelRQ confirmation
response messages the value of the
CompanyName
element when appearing under aUniqueID
element with its@Type
attribute set to 14, and the@ResID_Source
attribute when the@ResID_Type
attribute is set to 8, should be set to "tobook". -
The value of the
CompanyName
element when appearing under aUniqueID
element with its@Type
attribute set to 10, and the@ResID_Source
attribute when the@ResID_Type
attribute is set to 3, should be set to your official partner identifier. -
The attributes
@SupplierHotelCode
,@ResID_Value
when the@ResID_Type
attribute is set to 8, and the@ID
attribute on theUniqueID
element when the@Type
attribute is set to 14 must be supplied and correct. -
The attribute
@ResID_Value
when the@ResID_Type
attribute is set to 3, and the@ID
attribute on theUniqueID
element when the@Type
attribute is set to 10 must be present. Any values may be supplied, and will be echoed back in any subsequent modification or cancellation notifications. - In all other respects the response semantics are based on the Expedia version of the protocol.
- Numerical Error Codes and the precise text of error messages may be supplied in accordance with the scheme and interpretaton of your choosing.
Sample Messages
Example OTA_HotelResNotifRQ message containing a typical new booking:
<?xml version="1.0" encoding="UTF-8"?>
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
<soap-env:Header>
<Interface Name="ExpediaDirectConnect" Version="4.0" xmlns="http://www.newtrade.com/expedia/R14/header">
<PayloadInfo RequestId="783401" RequestorId="tobook" ResponderId="PartnerName" ExpirationDateTime="2021-09-02T20:45:02.3395746+02:00">
<CommDescriptor SourceId="tobook" DestinationId="PartnerName" RetryIndicator="false">
<Authentication Username="tobook" Password="password-here" />
</CommDescriptor>
<PayloadDescriptor Name="OTA_HotelResNotifRQ" Version="2003A">
<PayloadReference SupplierHotelCode="204020" DistributorHotelId="204020" />
</PayloadDescriptor>
</PayloadInfo>
</Interface>
</soap-env:Header>
<soap-env:Body>
<OTA_HotelResNotifRQ EchoToken="783401" PrimaryLangID="en-uS" TimeStamp="2020-09-02T20:45:02.3395746+02:00" Version="1.0" ResStatus="Commit" xmlns="http://www.opentravel.org/OTA/2003/05">
<POS>
<Source>
<RequestorID Type="18" ID="tobook" />
<BookingChannel Type="2" Primary="true">
<CompanyName>tobook</CompanyName>
</BookingChannel>
</Source>
</POS>
<HotelReservations>
<HotelReservation RoomStayReservation="true" CreateDateTime="2020-09-02T01:51:51.373" CreatorID="tobook">
<UniqueID Type="14" ID="204020-692-201112-201116-A" />
<RoomStays>
<RoomStay>
<RoomTypes>
<RoomType RoomTypeCode="3" IsRoom="true" />
</RoomTypes>
<RatePlans>
<RatePlan RatePlanCode="4" EffectiveDate="2020-11-12" ExpireDate="2020-11-13" />
<RatePlan RatePlanCode="4" EffectiveDate="2020-11-13" ExpireDate="2020-11-14" />
<RatePlan RatePlanCode="4" EffectiveDate="2020-11-14" ExpireDate="2020-11-15" />
<RatePlan RatePlanCode="4" EffectiveDate="2020-11-15" ExpireDate="2020-11-16" />
</RatePlans>
<RoomRates>
<RoomRate EffectiveDate="2020-11-12" ExpireDate="2020-11-13" RoomTypeCode="3" NumberOfUnits="1" RatePlanCode="4" PromotionCode="">
<Rates>
<Rate EffectiveDate="2020-11-12" ExpireDate="2020-11-13" RateTimeUnit="Day" UnitMultiplier="1">
<Base AmountBeforeTax="118.1900" CurrencyCode="EUR" />
<Fees>
<Fee TaxInclusive="false" Type="Exclusive" Code="1" Amount="0" CurrencyCode="EUR" />
</Fees>
</Rate>
</Rates>
</RoomRate>
<RoomRate EffectiveDate="2020-11-13" ExpireDate="2020-11-14" RoomTypeCode="3" NumberOfUnits="1" RatePlanCode="4" PromotionCode="">
<Rates>
<Rate EffectiveDate="2020-11-13" ExpireDate="2020-11-14" RateTimeUnit="Day" UnitMultiplier="1">
<Base AmountBeforeTax="135.0800" CurrencyCode="EUR" />
<Fees>
<Fee TaxInclusive="false" Type="Exclusive" Code="1" Amount="0" CurrencyCode="EUR" />
</Fees>
</Rate>
</Rates>
</RoomRate>
<RoomRate EffectiveDate="2020-11-14" ExpireDate="2020-11-15" RoomTypeCode="3" NumberOfUnits="1" RatePlanCode="4" PromotionCode="">
<Rates>
<Rate EffectiveDate="2020-11-14" ExpireDate="2020-11-15" RateTimeUnit="Day" UnitMultiplier="1">
<Base AmountBeforeTax="135.0800" CurrencyCode="EUR" />
<Fees>
<Fee TaxInclusive="false" Type="Exclusive" Code="1" Amount="0" CurrencyCode="EUR" />
</Fees>
</Rate>
</Rates>
</RoomRate>
<RoomRate EffectiveDate="2020-11-15" ExpireDate="2020-11-16" RoomTypeCode="3" NumberOfUnits="1" RatePlanCode="4" PromotionCode="">
<Rates>
<Rate EffectiveDate="2020-11-15" ExpireDate="2020-11-16" RateTimeUnit="Day" UnitMultiplier="1">
<Base AmountBeforeTax="118.2000" CurrencyCode="EUR" />
<Fees>
<Fee TaxInclusive="false" Type="Exclusive" Code="1" Amount="0" CurrencyCode="EUR" />
</Fees>
</Rate>
</Rates>
</RoomRate>
</RoomRates>
<GuestCounts IsPerRoom="true">
<GuestCount AgeQualifyingCode="10" Count="1" />
</GuestCounts>
<TimeSpan Start="2020-11-12" End="2020-11-16" />
<Guarantee>
<GuaranteesAccepted>
<GuaranteeAccepted>
<PaymentCard CardType="1" CardCode="UP" CardNumber="6212345678901232" SeriesCode="456" ExpireDate="0923">
<CardHolderName>femke v. d. leeuw</CardHolderName>
<Address>
<AddressLine />
<CityName />
<PostalCode />
<StateProv StateCode=""></StateProv>
<CountryName Code="NL"></CountryName>
</Address>
</PaymentCard>
</GuaranteeAccepted>
</GuaranteesAccepted>
</Guarantee>
<Total AmountAfterTax="546.0800" CurrencyCode="EUR">
<Taxes Amount="39.5300" CurrencyCode="EUR">
<Tax Type="Exclusive" Code="27" Amount="39.5300" CurrencyCode="EUR" />
</Taxes>
</Total>
<BasicPropertyInfo HotelCode="204020" />
<ResGuestRPHs>
<ResGuestRPH RPH="1" />
</ResGuestRPHs>
<SpecialRequests>
<SpecialRequest Language="en-us" RequestCode="1.94">
<Text Formatted="false" Language="en-us">Single Occupancy</Text>
</SpecialRequest>
<SpecialRequest Language="en-us" RequestCode="4">
<Text Formatted="true" Language="en-us">Both triples non-smoking rooms please!</Text>
</SpecialRequest>
</SpecialRequests>
</RoomStay>
</RoomStays>
<ResGuests>
<ResGuest ResGuestRPH="1" AgeQualifyingCode="10">
<Profiles>
<ProfileInfo>
<Profile ProfileType="1">
<Customer>
<PersonName>
<GivenName>Femke</GivenName>
<Surname>Van der Leeuw</Surname>
</PersonName>
<Telephone CountryAccessCode="" AreaCityCode="" PhoneNumber="+31 655 5992 85" Extension="" />
<Email>f.vanderleeuw@tobook.com</Email>
</Customer>
</Profile>
</ProfileInfo>
</Profiles>
</ResGuest>
</ResGuests>
<ResGlobalInfo>
<HotelReservationIDs>
<HotelReservationID ResID_Type="8" ResID_Value="204020-692-201112-201116-A" ResID_Source="tobook" ResID_Date="2020-09-02T01:51:51.373" />
</HotelReservationIDs>
</ResGlobalInfo>
</HotelReservation>
</HotelReservations>
</OTA_HotelResNotifRQ>
</soap-env:Body>
</soap-env:Envelope>
Example OTA_HotelResNotifRS message containing a typical new booking confirmation:
<?xml version="1.0" encoding="UTF-8"?>
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
<soap-env:Header>
<Interface xmlns="http://www.newtrade.com/expedia/R14/header" Name="ExpediaDirectConnect" Version="4.0">
<PayloadInfo RequestId="783401" RequestorId="tobook" ResponderId="PartnerName" Location="Body">
<CommDescriptor SourceId="PartnerName" DestinationId="tobook" RetryIndicator="false"/>
<PayloadDescriptor Name="OTA_HotelResNotifRS" Version="2003A">
<PayloadReference SupplierHotelCode="204020"/>
</PayloadDescriptor>
</PayloadInfo>
</Interface>
</soap-env:Header>
<soap-env:Body>
<OTA_HotelResNotifRS xmlns="http://www.opentravel.org/OTA/2003/05" Version="1" ResResponseType="Committed" TimeStamp="2020-09-02T20:45:02.8015823+02:00" Target="Production" PrimaryLangID="en-us">
<Success/>
<HotelReservations>
<HotelReservation>
<ResGlobalInfo>
<HotelReservationIDs>
<HotelReservationID ResID_Type="3" ResID_Value="BookConf123" ResID_Date="2020-09-02T01:51:51.373" ResID_Source="PartnerName"/>
<HotelReservationID ResID_Type="8" ResID_Value="204020-692-201112-201116-A" ResID_Source="tobook" ResID_Date="2020-09-02T01:51:51.373"/>
</HotelReservationIDs>
</ResGlobalInfo>
</HotelReservation>
</HotelReservations>
</OTA_HotelResNotifRS>
</soap-env:Body>
</soap-env:Envelope>
Example OTA_HotelResModifyNotifRQ message containing a typical booking modification:
<?xml version="1.0" encoding="UTF-8"?>
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
<soap-env:Header>
<Interface Name="ExpediaDirectConnect" Version="4.0" xmlns="http://www.newtrade.com/expedia/R14/header">
<PayloadInfo RequestId="783402" RequestorId="tobook" ResponderId="PartnerName" ExpirationDateTime="2021-09-02T21:46:53.4740759+02:00">
<CommDescriptor SourceId="tobook" DestinationId="PartnerName" RetryIndicator="false">
<Authentication Username="tobook" Password="password-here" />
</CommDescriptor>
<PayloadDescriptor Name="OTA_HotelResModifyNotifRQ" Version="2003A">
<PayloadReference SupplierHotelCode="204020" DistributorHotelId="204020" />
</PayloadDescriptor>
</PayloadInfo>
</Interface>
</soap-env:Header>
<soap-env:Body>
<OTA_HotelResModifyNotifRQ EchoToken="783402" PrimaryLangID="en-uS" TimeStamp="2020-09-02T21:46:53.4740759+02:00" Version="1.0" ResStatus="Commit" xmlns="http://www.opentravel.org/OTA/2003/05">
<POS>
<Source>
<RequestorID Type="18" ID="tobook" />
<BookingChannel Type="2" Primary="true">
<CompanyName>tobook</CompanyName>
</BookingChannel>
</Source>
</POS>
<HotelResModifies>
<HotelResModify RoomStayReservation="true" CreateDateTime="2020-09-02T01:50:57.19" CreatorID="tobook">
<UniqueID Type="14" ID="204020-693-201113-201116-A" />
<RoomStays>
<RoomStay>
<RoomTypes>
<RoomType RoomTypeCode="2" IsRoom="true" />
</RoomTypes>
<RatePlans>
<RatePlan RatePlanCode="1" EffectiveDate="2020-11-13" ExpireDate="2020-11-14" />
<RatePlan RatePlanCode="1" EffectiveDate="2020-11-14" ExpireDate="2020-11-15" />
</RatePlans>
<RoomRates>
<RoomRate EffectiveDate="2020-11-13" ExpireDate="2020-11-14" RoomTypeCode="2" NumberOfUnits="1" RatePlanCode="1" PromotionCode="">
<Rates>
<Rate EffectiveDate="2020-11-13" ExpireDate="2020-11-14" RateTimeUnit="Day" UnitMultiplier="1">
<Base AmountBeforeTax="131.3200" CurrencyCode="EUR" />
<Fees>
<Fee TaxInclusive="false" Type="Exclusive" Code="1" Amount="0" CurrencyCode="EUR" />
</Fees>
</Rate>
</Rates>
</RoomRate>
<RoomRate EffectiveDate="2020-11-14" ExpireDate="2020-11-15" RoomTypeCode="2" NumberOfUnits="1" RatePlanCode="1" PromotionCode="">
<Rates>
<Rate EffectiveDate="2020-11-14" ExpireDate="2020-11-15" RateTimeUnit="Day" UnitMultiplier="1">
<Base AmountBeforeTax="131.3300" CurrencyCode="EUR" />
<Fees>
<Fee TaxInclusive="false" Type="Exclusive" Code="1" Amount="0" CurrencyCode="EUR" />
</Fees>
</Rate>
</Rates>
</RoomRate>
</RoomRates>
<GuestCounts IsPerRoom="true">
<GuestCount AgeQualifyingCode="10" Count="2" />
</GuestCounts>
<TimeSpan Start="2020-11-13" End="2020-11-15" />
<Guarantee>
<GuaranteesAccepted>
<GuaranteeAccepted>
<PaymentCard CardType="1" CardCode="AX" CardNumber="378282246310005" SeriesCode="123" ExpireDate="1023">
<CardHolderName>Arthur Mathers</CardHolderName>
<Address>
<AddressLine />
<CityName />
<PostalCode />
<StateProv StateCode=""></StateProv>
<CountryName Code="CA"></CountryName>
</Address>
</PaymentCard>
</GuaranteeAccepted>
</GuaranteesAccepted>
</Guarantee>
<Total AmountAfterTax="280.0000" CurrencyCode="EUR">
<Taxes Amount="17.3500" CurrencyCode="EUR">
<Tax Type="Exclusive" Code="27" Amount="17.3500" CurrencyCode="EUR" />
</Taxes>
</Total>
<BasicPropertyInfo HotelCode="204020" />
<ResGuestRPHs>
<ResGuestRPH RPH="1" />
</ResGuestRPHs>
</RoomStay>
</RoomStays>
<ResGuests>
<ResGuest ResGuestRPH="1" AgeQualifyingCode="10">
<Profiles>
<ProfileInfo>
<Profile ProfileType="1">
<Customer>
<PersonName>
<GivenName>Arthur</GivenName>
<Surname>Mathers</Surname>
</PersonName>
<Telephone CountryAccessCode="" AreaCityCode="" PhoneNumber="+1 604 541 5678" Extension="" />
<Email>a.mathers@tobook.com</Email>
</Customer>
</Profile>
</ProfileInfo>
</Profiles>
</ResGuest>
</ResGuests>
<ResGlobalInfo>
<HotelReservationIDs>
<HotelReservationID ResID_Type="8" ResID_Value="204020-693-201113-201116-A" ResID_Source="tobook" ResID_Date="2020-09-02T01:50:57.19" />
<HotelReservationID ResID_Type="3" ResID_Value="BookConf234" ResID_Source="PartnerName" ResID_Date="2020-09-02T01:50:57.19" />
</HotelReservationIDs>
</ResGlobalInfo>
</HotelResModify>
</HotelResModifies>
</OTA_HotelResModifyNotifRQ>
</soap-env:Body>
</soap-env:Envelope>
Example OTA_HotelResModifyNotifRS message containing a typical booking modification confirmation:
<?xml version="1.0" encoding="UTF-8"?>
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
<soap-env:Header>
<Interface xmlns="http://www.newtrade.com/expedia/R14/header" Name="ExpediaDirectConnect" Version="4.0">
<PayloadInfo Location="Body" RequestId="783402" RequestorId="tobook" ResponderId="PartnerName">
<CommDescriptor DestinationId="tobook" SourceId="PartnerName" RetryIndicator="false"/>
<PayloadDescriptor Name="OTA_HotelResModifyNotifRS" Version="2003A"/>
</PayloadInfo>
</Interface>
</soap-env:Header>
<soap-env:Body>
<OTA_HotelResModifyNotifRS xmlns="http://www.opentravel.org/OTA/2003/05" PrimaryLangID="en-us" ResResponseType="Modified" Target="Production" TimeStamp="2021-09-02T21:46:53.8341273+02:00" Version="1.000">
<Success/>
<HotelResModifies>
<HotelResModify>
<ResGlobalInfo>
<HotelReservationIDs>
<HotelReservationID ResID_Date="2020-09-02T01:50:57.19" ResID_Source="tobook" ResID_Type="8" ResID_Value="204020-693-201113-201116-A"/>
<HotelReservationID ResID_Date="2020-09-02T01:50:57.19" ResID_Source="PartnerName" ResID_Type="3" ResID_Value="ModifyConf234"/>
</HotelReservationIDs>
</ResGlobalInfo>
</HotelResModify>
</HotelResModifies>
</OTA_HotelResModifyNotifRS>
</soap-env:Body>
</soap-env:Envelope>
Example OTA_CancelRQ message containing a typical booking cancellation:
<?xml version="1.0" encoding="UTF-8"?>
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
<soap-env:Header>
<Interface Name="ExpediaDirectConnect" Version="4.0" xmlns="http://www.newtrade.com/expedia/R14/header">
<PayloadInfo RequestId="783403" RequestorId="tobook" ResponderId="PartnerName" ExpirationDateTime="2021-09-02T22:38:33.9513804+02:00">
<CommDescriptor SourceId="tobook" DestinationId="PartnerName" RetryIndicator="false">
<Authentication Username="tobook" Password="password-here" />
</CommDescriptor>
<PayloadDescriptor Name="OTA_CancelRQ" Version="2003A">
<PayloadReference SupplierHotelCode="204020" DistributorHotelId="204020" />
</PayloadDescriptor>
</PayloadInfo>
</Interface>
</soap-env:Header>
<soap-env:Body>
<OTA_CancelRQ EchoToken="783403" PrimaryLangID="en-uS" TimeStamp="2020-09-02T22:38:33.9513804+02:00" Version="1.0" CancelType="Commit" xmlns="http://www.opentravel.org/OTA/2003/05">
<POS>
<Source>
<RequestorID Type="18" ID="tobook" />
<BookingChannel Type="2" Primary="true">
<CompanyName>tobook</CompanyName>
</BookingChannel>
</Source>
</POS>
<UniqueID Type="14" ID="204020-694-201119-201120-A">
<CompanyName>tobook</CompanyName>
</UniqueID>
<UniqueID Type="10" ID="BookConf345">
<CompanyName>PartnerName</CompanyName>
</UniqueID>
<Verification>
<PersonName>
<GivenName>Александр</GivenName>
<Surname>Садоўскі</Surname>
</PersonName>
<Vendor Code="1" CodeContext="ChainCode"></Vendor>
<Vendor Code="2" CodeContext="BrandCode"></Vendor>
<Vendor Code="3" CodeContext="HotelCode">204020</Vendor>
<ReservationTimeSpan Start="2020-11-19" End="2020-11-19" />
<AssociatedQuantity Code="1" CodeContext="Number of rooms" Quantity="1" />
<AssociatedQuantity Code="2" CodeContext="Number of guests" Quantity="1" />
</Verification>
</OTA_CancelRQ>
</soap-env:Body>
</soap-env:Envelope>
Example OTA_CancelRS message containing a typical booking cancellation confirmation:
<?xml version="1.0" encoding="UTF-8"?>
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
<soap-env:Header>
<Interface xmlns="http://www.newtrade.com/expedia/R14/header" Name="ExpediaDirectConnect" Version="4.0">
<PayloadInfo Location="Body" RequestId="783403" RequestorId="tobook" ResponderId="PartnerName" ExpirationDateTime="2021-09-02T22:38:34.1704396+02:00">
<CommDescriptor DestinationId="tobook" SourceId="PartnerName" RetryIndicator="false"/>
<PayloadDescriptor Name="OTA_CancelRS" Version="2003A">
<PayloadReference SupplierHotelCode="204020"/>
</PayloadDescriptor>
</PayloadInfo>
</Interface>
</soap-env:Header>
<soap-env:Body>
<OTA_CancelRS xmlns="http://www.opentravel.org/OTA/2003/05" Target="Production" TimeStamp="2020-09-02T22:38:34.1704396+02:00" Version="1.000" PrimaryLangID="en-us" Status="Cancelled">
<Success/>
<UniqueID ID="204020-694-201119-201120-A" Type="14">
<CompanyName>tobook</CompanyName>
</UniqueID>
<UniqueID ID="BookConf345" Type="10">
<CompanyName>PartnerName</CompanyName>
</UniqueID>
<CancelInfoRS>
<UniqueID ID="CancelConf345" Type="10">
<CompanyName>PartnerName</CompanyName>
</UniqueID>
</CancelInfoRS>
</OTA_CancelRS>
</soap-env:Body>
</soap-env:Envelope>
Example OTA_HotelResNotifRS message containing an error status:
<?xml version="1.0" encoding="UTF-8"?>
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
<soap-env:Header>
<Interface xmlns="http://www.newtrade.com/expedia/R14/header" Name="ExpediaDirectConnect" Version="4.0">
<PayloadInfo RequestId="783404" RequestorId="tobook" ResponderId="PartnerName" Location="Body">
<CommDescriptor DestinationId="tobook" SourceId="PartnerName" RetryIndicator="false"/>
<PayloadDescriptor Name="OTA_HotelResNotifRS" >
<PayloadReference SupplierHotelCode="204020"/>
</PayloadDescriptor>
</PayloadInfo>
</Interface>
</soap-env:Header>
<soap-env:Body>
<OTA_HotelResNotifRS TimeStamp="2020-09-03T08:32:01.8598106+02:00" Target="Production" Version="1.000" PrimaryLangID="en-us" ResResponseType="Ignored" xmlns="http://www.opentravel.org/OTA/2003/05">
<Errors>
<Error Language="en-us" Type="3" ShortText="3203" Code="450">The Room Type Code is missing or invalid</Error>
</Errors>
</OTA_HotelResNotifRS>
</soap-env:Body>
</soap-env:Envelope>
Example SOAP fault message:
<?xml version="1.0" encoding="UTF-8"?>
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
<soap-env:Header/>
<soap-env:Body>
<soap-env:Fault>
<faultcode>2002</faultcode>
<faultstring>SOAP envelope was not found.</faultstring>
<faultactor>SchemaValidation</faultactor>
</soap-env:Fault>
</soap-env:Body>
</soap-env:Envelope>
Roomtypes Retrieval
Endpoint
The endpoint for XML Roomtypes retrieval requests expects standard
RoomTypesRQ (non-SOAP) XML messages, and is located at:
https://www.tobook.com/Delta/RQueryRESTService/xml/Extensions/RetrieveRoomTypes
Namespace & Schema
Request (RoomTypesRQ)
Supported Namespaces:
http://www.w3.org/2001/XMLSchema
Schema available at:
http://www.tobook.com/static/files/RoomTypesRQ.xsd
Response (RoomTypesRS)
Supported Namespaces:
http://www.w3.org/2001/XMLSchema
Schema available at:
http://www.tobook.com/static/files/RoomTypesRS.xsd
Model
- For RoomTypesRQ for listing room-types request messages.
- In RoomTypesRS response messages will be returned along with an XML response that conforms to the associated schema.
- Numerical Error Codes are supplied in error responses according to the same scheme and interpretation messages. The precise text of error messages is not guaranteed to be the same.
Sample Messages
Example RoomTypesRQ message requesting list of Room-Types:
<?xml version="1.0" encoding="UTF-8"?>
<RoomTypesRQ>
<Authentication username="MyTestAccountName" password="MyTestPassword"/>
<Hotel id="204020"/>
</RoomTypesRQ>
Example RoomTypesRS message notifying that an error occurred:
<?xml version="1.0" encoding="UTF-8"?>
<RoomTypesRQ xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />
<Error code="1001">Authentication error: invalid username or password.</Error>
</RoomTypesRQ>
Example RoomTypesRS message with some typical list of Room-Types messages:
<?xml version="1.0" encoding="UTF-8"?>
<RoomTypesRS xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Hotel id="200093"/>
<RoomTypes>
<RoomType RoomTypeName="Basic single" id="1" PersonsNormal="1" />
<RoomType RoomTypeName="Basic double" id="2" PersonsNormal="2" />
<RoomType RoomTypeName="Superior double" id="4" PersonsNormal="2" />
</RoomTypes>
</RoomTypesRS>
Offer Types Retrieval
Endpoint
The endpoint for XML OfferTypes retrieval requests expects standard
OfferTypesRQ (non-SOAP) XML messages, and is located at:
https://www.tobook.com/Delta/RQueryRESTService/xml/Extensions/RetrieveOfferTypes
Namespace & Schema
Request (OfferTypesRQ)
Supported Namespaces:
http://www.w3.org/2001/XMLSchema
Schema available at:
http://www.tobook.com/static/files/OfferTypesRQ.xsd
Response (OfferTypesRS)
Supported Namespaces:
http://www.w3.org/2001/XMLSchema
Schema available at:
http://www.tobook.com/static/files/OfferTypesRS.xsd
Model
- For OfferTypesRQ request messages is the latest namespace.
- In OfferTypesRS response messages will be returned along with an XML response that conforms to the associated schema.
- Numerical Error Codes are supplied in error responses according to the same scheme and interpretation messages. The precise text of error messages is not guaranteed to be the same.
Sample Messages
Example OfferTypeRQ message requesting all base-rate-plans:
<?xml version="1.0" encoding="UTF-8"?>
<OfferTypesRQ>
<Authentication username="MyTestAccountName" password="MyTestPassword"/>
<Hotel id="204020" />
</OfferTypesRQ>
Example OfferTypRS message notifying that an error occurred:
<?xml version="1.0" encoding="UTF-8"?>
<OfferTypesRS xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
<Error code="1001">Authentication error: invalid username or password.</Error>
</OfferTypesRS>
Example OfferTypRS message with some typical rate-plans.
<?xml version="1.0" encoding="UTF-8"?>
<OfferTypesRS xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Hotel id="204020" />
<OfferTypes>
<OfferType OfferTypeName="Standard Rate" id="1" ReleaseDays="0" PaymentSchemeName="Payment on Arrival" />
<OfferType OfferTypeName="Standard Rate with Breakfast" id="3" ReleaseDays="0" PaymentSchemeName="Payment on Arrival" />
</OfferTypes>
</OfferTypesRS>