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.

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

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

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

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>