Manage Booking API

This API is used for modifying / adding ancillaries to an existing booking, e.g. luggage, insurance, seats, passenger details or travel class.
This document assumes the user is familiar with the Travelfusion Search and Book API.

Applicable to options: LUGGAGE|INSURANCE|SEATS|DETAILS|TRAVEL_CLASS.

The eligible bookings for cancelling must have one of the following statuses: Succeeded, BookingChangeSucceeded, CancelledFailed.


Summary of Functionality (commands)

The Manage Booking API inherits both the same usage flow as in the Search and Book API and its XML structures. This document assumes the user is familiar with the Travelfusion Search and Book API. Also, it follows the same error handling guide as in every API under Travelfusion Direct Connect XML API.

The differences to the Search and Book API are the following. There is an additional API command, ManageBookingAvailabilityPlane, and instead of StartRouting users must use the StartManageBookingPlane command. This documentation emphasises on the new XML structures required by Manage Booking API. Below is a short description of the available API commands.

  • ManageBookingAvailabilityPlane / retrieves (for a given supplier) the supported post-booking and authorisation / login options.
  • StartManageBookingPlane / initiates a post-booking session (equivalent to StartRouting in standard search & book).
  • CheckRouting / polls for StartManageBookingPlane result (equivalent to CheckRouting), the result contains the flight details of the booking.
  • ProcessDetails / retrieves all possible post-booking options per traveller (equivalent to ProcessDetails).
  • ProcessTerms / selects the required options and returns the final price of the post-booking change (equivalent to ProcessTerms).
  • StartBooking / actions the post-booking change (equivalent to StartBooking).
  • CheckBooking / polls for StartBooking result (equivalent to CheckBooking).

General Information and guidelines

Generally, the price elements returned by this API reflect the price of the modification / update / change / addition (i.e. how much it costs to apply the desired booking update). The price represents the cost of the update known to the API so far in the post-booking process; so for example, in CheckRouting the price may be zero, unlike ProcessTerms, where the price will be the full accurate price based on the selection of options.

The result of a booking update / change would be the creation of a new booking record (in the TF system, with new reference). For example, if a user makes a post-booking change on a TF booking with reference TFREFA, there would be a new TF booking record with reference TFREFB. Booking TFREFA becomes the parent of TFREFB (the child booking); in the end of a post-booking process, TFREFA would have the status of BookingChanged (from Succeeded), and TFREFB would be in status BookingChangeSucceeded. More information can be found in the Booking Change Statuses and Administration System sections of the Booking Changes guidelines.

XML Commands

This section contains a more detailed explanation of the API XML commands, including XML examples. For option DETAILS there is additional information with examples in Change Option DETAILS example Manage Booking flow.

ManageBookingAvailabilityPlane

The ManageBookingAvailabilityPlane command should be executed every time the user needs to perform a post-booking modification / update / change. This command must be cached on the user's side with a minimum timeout of 10 minutes. It provides all the necessary information the user needs in order to be able to proceed with a booking update:
  • The change options that are available for the given supplier / airline.
  • The log-in / authorisation information required by the airline.
  • Various airline information, e.g. terms and conditions and so on.

REQUEST example

<CommandList>
  <ManageBookingAvailabilityPlane>
    <XmlLoginId>XMLLOGINID</XmlLoginId>
    <LoginId>LOGINID</LoginId>
    <Supplier>airasiaarms</Supplier>
  </ManageBookingAvailabilityPlane>
</CommandList>


RESPONSE example

<CommandList>
  <ManageBookingAvailabilityPlane>
    <LoginId>LOGINID</LoginId>
    <Supplier>airasiaarms</Supplier>
    <ChangeOptions>LUGGAGE|SEATS|DETAILS</ChangeOptions>
    <AuthOptionList>
      <AuthOption>
        <AuthOptionItemList>
          <AuthOptionItem>
            <Name>TF_BOOKING_REFERENCE</Name>
            <DisplayText>Travelfusion Booking reference</DisplayText>
          </AuthOptionItem>
        </AuthOptionItemList>
      </AuthOption>
      <AuthOption>
        <AuthOptionItemList>
          <AuthOptionItem>
            <Name>BOOKING_REFERENCE</Name>
            <DisplayText>Booking reference</DisplayText>
          </AuthOptionItem>
        </AuthOptionItemList>
      </AuthOption>
    </AuthOptionList>
    <SupplierInfoList>
      <SupplierInfo>
        <DisplayName>LUGGAGE Terms and Conditions</DisplayName>
        <InfoType>text</InfoType>
        <Info>Should you wish to upgrade from a 20kg checked baggage to 25kg or more, this can be done up to 4 hours prior to scheduled departure time or even at the airport check-in counter. * Each guest can purchase up to 40kg per way, per person. Should you have 40kg or more of checked baggage, we recommend that each checked baggage should not exceed 32kg. * Any guest exceeding their personal checked baggage allowance will be charged for excess baggage at the prevailing rate on the day of travel. Excess baggage charges are quoted and billed in the departure country?s currency.</Info>
      </SupplierInfo>
      <SupplierInfo>
        <DisplayName>SEATS Terms and Conditions</DisplayName>
        <InfoType>text</InfoType>
        <Info>Some sample text here.</Info>
      </SupplierInfo>
    </SupplierInfoList>
    <DetailList>
      <Detail Name="TitleAndFirstName" PerPassenger="true"/>
      <Detail Name="Email" PerPassenger="false"/>
      <Detail Name="BookingMobilePhone" PerPassenger="false"/>
    </DetailList>
</ManageBookingAvailabilityPlane></CommandList>

- <ChangeOptions> a pipe-separated list of supported post-booking options. Potential values are OUT_DATE|RET_DATE|ORIGIN|DESTINATION|LUGGAGE|INSURANCE|SEATS|DETAILS|TRAVEL_CLASS|CANCEL. Manage Booking API is only concerned with LUGGAGE|INSURANCE|SEATS|DETAILS|TRAVEL_CLASS; the rest of the options concern Booking Changes and Cancellations APIs.

- <AuthOptionList> a list of possible options / ways required to log in to the supplier / airline system. It contains one or more options. The user must select one of the options in this list to submit with values in the next step, StartManageBookingPlane.

-- <AuthOption> contains one or more parameters required to log in to the supplier / airline system.

- <SupplierInfoList> see in standard search & book CheckRouting response.

- <DetailList> this element appears every time the DETAILS option is in <ChangeOptions>. It specifies all possible flight, passenger or generally booking related details that may be modified.

- <Detail> specifies the booking detail that can be changed. It contains the Name attribute having a self-documenting text value of what the detail is about and the PerPassenger attribute having a boolean value denoting if this detail change applies per passenger or on the entire booking. Below is a list of all possible Name values.
    FullName
    FirstNameAndLastName
    FirstName
    TitleAndFirstName
    LastName
    Title
    DateOfBirth
    Nationality
    Email
    HomePhone
    BookingMobilePhone
    WorkPhone
    PassportNumber
    PassportExpiryDate
    PassportCountryOfIssue
    FixedDetailsChangeCharge

For more information please refer to Change Option DETAILS example Manage Booking flow.

StartManageBookingPlane

The StartManageBookingPlane command initiates a post-booking session; it produces a <RoutingId> that uniquely identifies this post-booking change session. It is the equivalent to StartRouting in standard search & book, with the difference being, only the elements shown in the following example are required.

REQUEST example

<CommandList>
  <StartManageBookingPlane>
    <XmlLoginId>XMLLOGINID</XmlLoginId>
    <LoginId>LOGINID</LoginId>
    <Mode>Plane</Mode>
    <Supplier>airasiaarms</Supplier>
    <TFBookingReference>Z19O21U3G</TFBookingReference>
    <AuthOption>
      <AuthOptionItemList>
        <AuthOptionItem>
          <Name>BOOKING_REFERENCE</Name>
          <Value>K932VW</Value>
        </AuthOptionItem>
      </AuthOptionItemList>
    </AuthOption>
    <Timeout>300</Timeout>
    <BookingProfile>
      <CustomSupplierParameterList>
        <CustomSupplierParameter>
          <Supplier>airasiaarms</Supplier>
          <Name>UserLogin</Name>
          <Value>USERVALUE</Value>
        </CustomSupplierParameter>
        <CustomSupplierParameter>
          <Supplier>airasiaarms</Supplier>
          <Name>UserPassword</Name>
          <Value>PASSVALUE</Value>
        </CustomSupplierParameter>
      </CustomSupplierParameterList>
    </BookingProfile>
  </StartManageBookingPlane>
</CommandList>

- <TFBookingReference> is optional. If provided, it is the equivalent of using <AuthOptionItem> TF_BOOKING_REFERENCE which is deprecated, therefore users are advised to use <TFBookingReference> element.

- <AuthOption> contains the input values for the parameters required to log in to the supplier / airline system. The user must input here an option selected from those listed in the previous step, in ManageBookingAvailabilityPlane response.

All other XML elements are described as in StartRouting Request specification.

RESPONSE example

<CommandList>
  <StartManageBookingPlane>
    <LoginId>LOGINID</LoginId>
    <RoutingId>Z1RL63H6CNXONXL2</RoutingId>
    <RouterList>
      <Router>
        <Supplier>airasiaarms</Supplier>
        <Vendor>
          <Name>Air Asia</Name>
          <Url>http://www.airasia.com/</Url>
        </Vendor>
        <Complete>false</Complete>
        <RequestedLocations>
          <Origin>
            <Type>airport</Type>
            <Code>SIN</Code>
          </Origin>
          <Destination>
            <Type>airport</Type>
            <Code>KUL</Code>
          </Destination>
        </RequestedLocations>
      </Router>
    </RouterList>
    <Summary>
      <Origin>
        <Location>
          <Id>10007176</Id>
          <Name>Changi International Airport</Name>
          <Country>
            <Name>Singapore</Name>
            <Code>SG</Code>
          </Country>
          <Type>Airport</Type>
          <City>
            <Name>Singapore</Name>
            <Code>SIN</Code>
          </City>
          <Airport>
            <Name>Changi International Airport</Name>
            <Code>SIN</Code>
          </Airport>
        </Location>
      </Origin>
      <Destination>
        <Location>
          <Id>10004360</Id>
          <Name>Kuala Lumpur International Airport</Name>
          <Country>
            <Name>Malaysia</Name>
            <Code>MY</Code>
          </Country>
          <Type>Airport</Type>
          <City>
            <Name>Kuala Lumpur</Name>
            <Code>KUL</Code>
          </City>
          <Airport>
            <Name>Kuala Lumpur International Airport</Name>
            <Code>KUL</Code>
          </Airport>
        </Location>
      </Destination>
      <Distance>321821</Distance>
      <OutwardDate>06/11/2019-07:35</OutwardDate>
      <ReturnDate>14/11/2019-06:05</ReturnDate>
    </Summary>
  </StartManageBookingPlane>
</CommandList>

The XML elements are described as in StartRouting Response specification.

CheckRouting

The CheckRouting command polls for StartManageBookingPlane result. The CheckRouting may need to be called more than once for the same session (RoutingId). Please check with CheckRouting that describes how to use it and when to stop polling. The CheckRouting response contains the flight details of the booking.

REQUEST example

<CommandList>
  <CheckRouting>
    <XmlLoginId>XMLLOGINID</XmlLoginId>
    <LoginId>LOGINID</LoginId>
    <RoutingId>Z1RL63H6CNXONXL2</RoutingId>
  </CheckRouting>
</CommandList>

The XML elements are described as in CheckRouting Request specification.

RESPONSE example

<CommandList>
  <CheckRouting>
    <LoginId>LOGINID</LoginId>
    <RoutingId>Z1RL63H6CNXONXL2</RoutingId>
    <Mode>plane</Mode>
    <RouterList>
      <Router>
        <Supplier>airasiaarms</Supplier>
        <Vendor>
          <Name>Air Asia</Name>
          <Url>http://www.airasia.com/</Url>
        </Vendor>
        <Complete>true</Complete>
        <RequestedLocations>
          <Origin>
            <Type>airport</Type>
            <Code>SIN</Code>
          </Origin>
          <Destination>
            <Type>airport</Type>
            <Code>KUL</Code>
          </Destination>
        </RequestedLocations>
        <GroupList>
          <Group>
            <Id>IMIS4UJEW7V8WXOA</Id>
            <OutwardList>
              <Outward>
                <Id>ELBHDRMXTDRX27OH</Id>
                <CacheInfo>
                  <CacheDataAgeSeconds>0</CacheDataAgeSeconds>
                </CacheInfo>
                <Duration>60</Duration>
                <SegmentList>
                  <Segment>
                    <Origin>
                      <Type>airport</Type>
                      <Code>SIN</Code>
                    </Origin>
                    <Destination>
                      <Type>airport</Type>
                      <Code>KUL</Code>
                    </Destination>
                    <DepartDate>06/11/2019-07:35</DepartDate>
                    <ArriveDate>06/11/2019-08:35</ArriveDate>
                    <Duration>60</Duration>
                    <TfOperator>...</TfOperator>
                    ...
                    <FlightId>
                      <Code>AK700</Code>
                      <Number>700</Number>
                    </FlightId>
                    <TravelClass>
                      <TfClass>Economy With Restrictions</TfClass>
                      <SupplierClass>Regular</SupplierClass>
                    </TravelClass>
                    <SegmentMayEndWithAStop>false</SegmentMayEndWithAStop>
                  </Segment>
                </SegmentList>
              </Outward>
            </OutwardList>
            <ReturnList>
              <Return>
                <Id>EWY74ZJWCF2VOQ9I</Id>
                <CacheInfo>
                  <CacheDataAgeSeconds>0</CacheDataAgeSeconds>
                </CacheInfo>
                <Duration>65</Duration>
                <SegmentList>
                  <Segment>
                    <Origin>
                      <Type>airport</Type>
                      <Code>KUL</Code>
                    </Origin>
                    <Destination>
                      <Type>airport</Type>
                      <Code>SIN</Code>
                    </Destination>
                    <DepartDate>14/11/2019-06:05</DepartDate>
                    <ArriveDate>14/11/2019-07:10</ArriveDate>
                    <Duration>65</Duration>
                    <TfOperator>...</TfOperator>
                    ...
                    <FlightId>
                      <Code>AK701</Code>
                      <Number>701</Number>
                    </FlightId>
                    <TravelClass>
                      <TfClass>Economy With Restrictions</TfClass>
                      <SupplierClass>Low Fare</SupplierClass>
                    </TravelClass>
                    <SegmentMayEndWithAStop>false</SegmentMayEndWithAStop>
                  </Segment>
                </SegmentList>
              </Return>
            </ReturnList>
            <Price>
              <Amount>10.00</Amount>
              <Currency>SGD</Currency>
              <TaxItemList>
                <TaxItem>
                  <Name>Manage Booking Charge</Name>
                  <Amount>10.00</Amount>
                  <Currency>SGD</Currency>
                </TaxItem>
              </TaxItemList>
            </Price>
          </Group>
        </GroupList>
      </Router>
    </RouterList>
    <Summary>
      ...
    </Summary>
  </CheckRouting>
</CommandList>

The XML elements are described as in CheckRouting Response specification.

ProcessDetails

The purpose of ProcessDetails is to retrieve all possible post-booking update options per traveller and show them to the user. It is equivalent to ProcessDetails, however, the response includes an additional element, <ManagedTravellerList>.

REQUEST example

<CommandList>
  <ProcessDetails>
    <XmlLoginId>XMLLOGINID</XmlLoginId>
    <LoginId>LOGINID</LoginId>
    <RoutingId>Z1RL63H6CNXONXL2</RoutingId>
    <OutwardId>ELBHDRMXTDRX27OH</OutwardId>
    <ReturnId>EWY74ZJWCF2VOQ9I</ReturnId>
  </ProcessDetails>
</CommandList>

The XML elements are described as in ProcessDetails Request specification.

RESPONSE example

<CommandList>
  <ProcessDetails>
    <LoginId>LOGINID</LoginId>
    <RoutingId>Z1RL63H6CNXONXL2</RoutingId>
    <Router>
      <RequiredParameterList>
        <RequiredParameter>
          <Name>CardSecurityNumber</Name>
          <Type>notice</Type>
          <DisplayText></DisplayText>
          <PerPassenger>false</PerPassenger>
          <IsOptional>false</IsOptional>
        </RequiredParameter>
        <RequiredParameter>
          <Name>ChildrenAndInfantsSearch</Name>
          <Type>notice</Type>
          <DisplayText></DisplayText>
          <PerPassenger>false</PerPassenger>
          <IsOptional>true</IsOptional>
        </RequiredParameter>
        <RequiredParameter>
          <Name>ChildrenAndInfantsBooking</Name>
          <Type>notice</Type>
          <DisplayText></DisplayText>
          <PerPassenger>false</PerPassenger>
          <IsOptional>true</IsOptional>
        </RequiredParameter>
        <RequiredParameter>
          <Name>BookingSourceRef</Name>
          <Type>custom</Type>
          <DisplayText></DisplayText>
          <PerPassenger>false</PerPassenger>
          <IsOptional>true</IsOptional>
        </RequiredParameter>
      </RequiredParameterList>
      <Supplier>airasiaarms</Supplier>
      <Vendor>
        <Name>Air Asia</Name>
        <Url>http://www.airasia.com/</Url>
      </Vendor>
      <Complete>true</Complete>
      <RequestedLocations>
        <Origin>
          <Type>airport</Type>
          <Code>SIN</Code>
        </Origin>
        <Destination>
          <Type>airport</Type>
          <Code>KUL</Code>
        </Destination>
      </RequestedLocations>
      <GroupList>
        <Group>
          <Id>394E77UD6EJOEEOM</Id>
          <OutwardList>
            <Outward>
              <Id>ELBHDRMXTDRX27OH</Id>
              <CacheInfo>
                <CacheDataAgeSeconds>0</CacheDataAgeSeconds>
              </CacheInfo>
              <Duration>60</Duration>
              <SegmentList>
                <Segment>
                  <Origin>
                    <Type>airport</Type>
                    <Code>SIN</Code>
                  </Origin>
                  <Destination>
                    <Type>airport</Type>
                    <Code>KUL</Code>
                  </Destination>
                  <DepartDate>06/11/2019-07:35</DepartDate>
                  <ArriveDate>06/11/2019-08:35</ArriveDate>
                  <Duration>60</Duration>
                  <TfOperator>...</TfOperator>
                  ...
                  <FlightId>
                    <Code>AK700</Code>
                    <Number>700</Number>
                  </FlightId>
                  <TravelClass>
                    <TfClass>Economy With Restrictions</TfClass>
                    <SupplierClass>Regular</SupplierClass>
                  </TravelClass>
                  <SegmentMayEndWithAStop>false</SegmentMayEndWithAStop>
                </Segment>
              </SegmentList>
            </Outward>
          </OutwardList>
          <ReturnList>
            <Return>
              <Id>EWY74ZJWCF2VOQ9I</Id>
              <CacheInfo>
                <CacheDataAgeSeconds>0</CacheDataAgeSeconds>
              </CacheInfo>
              <Duration>65</Duration>
              <SegmentList>
                <Segment>
                  <Origin>
                    <Type>airport</Type>
                    <Code>KUL</Code>
                  </Origin>
                  <Destination>
                    <Type>airport</Type>
                    <Code>SIN</Code>
                  </Destination>
                  <DepartDate>14/11/2019-06:05</DepartDate>
                  <ArriveDate>14/11/2019-07:10</ArriveDate>
                  <Duration>65</Duration>
                  <TfOperator>...</TfOperator>
                  ...
                  <FlightId>
                    <Code>AK701</Code>
                    <Number>701</Number>
                  </FlightId>
                  <TravelClass>
                    <TfClass>Economy With Restrictions</TfClass>
                    <SupplierClass>Low Fare</SupplierClass>
                  </TravelClass>
                  <SegmentMayEndWithAStop>false</SegmentMayEndWithAStop>
                </Segment>
              </SegmentList>
            </Return>
          </ReturnList>
          <Price>
            <Amount>10.00</Amount>
            <Currency>SGD</Currency>
            <TaxItemList>
              <TaxItem>
                <Name>Manage Booking Charge</Name>
                <Amount>10.00</Amount>
                <Currency>SGD</Currency>
              </TaxItem>
            </TaxItemList>
          </Price>
        </Group>
      </GroupList>
    </Router>
    <SupplierHandoffData>
      <Method>POST</Method>
      <Url></Url>
    </SupplierHandoffData>
    <ManagedTravellerList>
      <ManagedTraveller>
        <Name>
          <Title>Mr</Title>
          <NamePartList>
            <NamePart>John</NamePart>
            <NamePart>Doe</NamePart>
          </NamePartList>
        </Name>
        <TravellerType>Adult</TravellerType>
        <Age>39</Age>
        <SupplierTravellerInfoList>
          <SupplierTravellerInfo>
            <DisplayName>DOB</DisplayName>
            <InfoType>text</InfoType>
            <Info>1980-04-16</Info>
          </SupplierTravellerInfo>
          <SupplierTravellerInfo>
            <DisplayName>Gender</DisplayName>
            <InfoType>text</InfoType>
            <Info>Male</Info>
          </SupplierTravellerInfo>
        </SupplierTravellerInfoList>
        <RequiredParameterList>
          <RequiredParameter>
            <Name>MealType</Name>
            <Type>value_select</Type>
            <DisplayText>Please Select a Meal Type:  700-RCCB(Roast Chicken with BBQ Sauce@4.00SGD), 700-NLCB(Pak Nasser nasi lemak@4.00SGD), 700-CRCB(Chicken Rice of Uncle Chin@4.00SGD); 701-RCCB(Roast Chicken with BBQ Sauce@4.00SGD), 701-NLCB(Pak Nasser nasi lemak@4.00SGD), 701-CRCB(Chicken Rice of Uncle Chin@4.00SGD);</DisplayText>
            <PerPassenger>true</PerPassenger>
            <IsOptional>true</IsOptional>
          </RequiredParameter>
          <RequiredParameter>
            <Name>SeatOptions</Name>
            <Type>custom</Type>
            <DisplayText>Please Select Seat Options:  700-1C(A|K|LA|EL|@18.90SGD@), 700-1D(A|K|LA|EL|@18.90SGD@), 700-1E(K|LA|EL|N|@18.90SGD@), 700-1F(K|LA|EL|W|@18.90SGD@), 700-2A(W|@15.90SGD@), 700-2B(N|@15.90SGD@), 700-2C(A|@15.90SGD@), 700-2D(A|@15.90SGD@), 700-2E(N|@15.90SGD@), 700-2F(W|@15.90SGD@), ...</DisplayText>
            <PerPassenger>true</PerPassenger>
            <IsOptional>true</IsOptional>
          </RequiredParameter>
          <RequiredParameter>
            <Name>OutwardLuggageOptions</Name>
            <Type>value_select</Type>
            <DisplayText>Please Select Outward Luggage Option: 1 (1 bags - 25Kg total - 0.00 SGD), 2 (1 bags - 30Kg total - 23.00 SGD), 3 (2 bags - 40Kg total - 45.00 SGD)</DisplayText>
            <PerPassenger>true</PerPassenger>
            <IsOptional>true</IsOptional>
          </RequiredParameter>
          <RequiredParameter>
            <Name>ReturnLuggageOptions</Name>
            <Type>value_select</Type>
            <DisplayText>Please Select Return Luggage Option: 1 (1 bags - 30Kg total - 0.00 SGD), 2 (2 bags - 40Kg total - 22.00 SGD)</DisplayText>
            <PerPassenger>true</PerPassenger>
            <IsOptional>true</IsOptional>
          </RequiredParameter>
        </RequiredParameterList>
      </ManagedTraveller>
      <ManagedTraveller>
        <Name>
          <NamePartList>
            <NamePart>Bob</NamePart>
            <NamePart>Doe</NamePart>
          </NamePartList>
        </Name>
        <TravellerType>Child</TravellerType>
        <Age>8</Age>
        <SupplierTravellerInfoList>
          <SupplierTravellerInfo>
            <DisplayName>DOB</DisplayName>
            <InfoType>text</InfoType>
            <Info>2011-04-16</Info>
          </SupplierTravellerInfo>
          <SupplierTravellerInfo>
            <DisplayName>Gender</DisplayName>
            <InfoType>text</InfoType>
            <Info>Male</Info>
          </SupplierTravellerInfo>
        </SupplierTravellerInfoList>
        <RequiredParameterList>
          <RequiredParameter>
            <Name>MealType</Name>
            <Type>value_select</Type>
            <DisplayText>Please Select a Meal Type:  700-RCCB(Roast Chicken with BBQ Sauce@4.00SGD), 700-NLCB(Pak Nasser nasi lemak@4.00SGD), 700-CRCB(Chicken Rice of Uncle Chin@4.00SGD); 701-RCCB(Roast Chicken with BBQ Sauce@4.00SGD), 701-NLCB(Pak Nasser nasi lemak@4.00SGD), 701-CRCB(Chicken Rice of Uncle Chin@4.00SGD);</DisplayText>
            <PerPassenger>true</PerPassenger>
            <IsOptional>true</IsOptional>
          </RequiredParameter>
          <RequiredParameter>
            <Name>SeatOptions</Name>
            <Type>custom</Type>
            <DisplayText>Please Select Seat Options:  700-1C(A|K|LA|EL|@18.90SGD@), 700-1D(A|K|LA|EL|@18.90SGD@), 700-1E(K|LA|EL|N|@18.90SGD@), 700-1F(K|LA|EL|W|@18.90SGD@), 700-2A(W|@15.90SGD@), 700-2B(N|@15.90SGD@), 700-2C(A|@15.90SGD@), 700-2D(A|@15.90SGD@), 700-2E(N|@15.90SGD@), 700-2F(W|@15.90SGD@), ...</DisplayText>
            <PerPassenger>true</PerPassenger>
            <IsOptional>true</IsOptional>
          </RequiredParameter>
          <RequiredParameter>
            <Name>OutwardLuggageOptions</Name>
            <Type>value_select</Type>
            <DisplayText>Please Select Outward Luggage Option: 1 (1 bags - 25Kg total - 0.00 SGD), 2 (1 bags - 30Kg total - 23.00 SGD), 3 (2 bags - 40Kg total - 45.00 SGD)</DisplayText>
            <PerPassenger>true</PerPassenger>
            <IsOptional>true</IsOptional>
          </RequiredParameter>
          <RequiredParameter>
            <Name>ReturnLuggageOptions</Name>
            <Type>value_select</Type>
            <DisplayText>Please Select Return Luggage Option: 1 (1 bags - 20Kg total - 22.00 SGD), 2 (1 bags - 25Kg total - 25.00 SGD), 3 (1 bags - 30Kg total - 48.00 SGD), 4 (2 bags - 40Kg total - 70.00 SGD)</DisplayText>
            <PerPassenger>true</PerPassenger>
            <IsOptional>true</IsOptional>
          </RequiredParameter>
        </RequiredParameterList>
      </ManagedTraveller>
    </ManagedTravellerList>
    <SupportedCardList>
      <SupportedCard>
        <CardType>Visa Credit</CardType>
        <CardCharge>
          <Charge>
            <Amount>0.00</Amount>
            <Currency>SGD</Currency>
          </Charge>
          <ChargeIsPerPassengerLeg>false</ChargeIsPerPassengerLeg>
        </CardCharge>
        <CardChargePercentage>0.000000</CardChargePercentage>
        <RoundingPolicy>
          <Scale>2</Scale>
          <Mode>HALF_UP</Mode>
        </RoundingPolicy>
      </SupportedCard>
      ...
    </SupportedCardList>
  </ProcessDetails>
</CommandList>

The XML elements are described as in ProcessDetails Response specification.

- <ManagedTravellerList> contains the list of managed travellers for this booking.

-- <ManagedTraveller> contains information about a managed traveller.

--- <Name> the traveller’s name. It may follow the General Name Format specification.

--- <TravellerType> contains one of the following values: Senior, Adult, Youth, Student, Child, Infant.

--- <Age> the age of the traveller. If the age / DOB is not available from the airline, then the API sets it with a predefined value depending on the type, e.g. 30 for Adult, 8 for Child, and so on...

--- <SupplierTravellerInfoList> contains a list of items of information about the traveller. It usually is additional free text information (with no particular structure or syntax rules) provided by the supplier. The API user may (or not) decide to use this in their implementation.

--- <RequiredParameterList> a list of parameters (with available options) that need to be submitted (within the booking profile) in the following step, ProcessTerms. The specification of <RequiredParameterList> can be found in the CheckRouting Response specification. Please refer to the Custom Supplier Parameters Guide to understand how to handle these parameters.

ProcessTerms

The ProcessTerms command is used to submit and select the traveller details and required booking update / change options respectively (equivalent to ProcessTerms, also see the XML Bookings and Handling Guide); it returns the final price of the post-booking change.

REQUEST example

<CommandList>
  <ProcessTerms>
    <XmlLoginId>XMLLOGINID</XmlLoginId>
    <LoginId>LOGINID</LoginId>
    <Mode>plane</Mode>
    <RoutingId>Z1RL63H6CNXONXL2</RoutingId>
    <BookingProfile>
      <TravellerList>
        <Traveller>
          <Age>39</Age>
          <Name>
            <Title>Mr</Title>
            <NamePartList>
              <NamePart>John</NamePart>
              <NamePart>Doe</NamePart>
            </NamePartList>
          </Name>
          <CustomSupplierParameterList>
            <CustomSupplierParameter>
              <Name>OutwardLuggageOptions</Name>
              <Value>2</Value>
            </CustomSupplierParameter>
          </CustomSupplierParameterList>
        </Traveller>
        <Traveller>
          <Age>8</Age>
          <Name>
            <Title>Mr</Title>
            <NamePartList>
              <NamePart>Bob</NamePart>
              <NamePart>Doe</NamePart>
            </NamePartList>
          </Name>
          <CustomSupplierParameterList>
            <CustomSupplierParameter>
              <Name>OutwardLuggageOptions</Name>
              <Value>2</Value>
            </CustomSupplierParameter>
          </CustomSupplierParameterList>
        </Traveller>
      </TravellerList>
      <ContactDetails>
        <Name>
          <Title>Mr</Title>
          <NamePartList>
            <NamePart>John</NamePart>
            <NamePart>Doe</NamePart>
          </NamePartList>
        </Name>
        <Address>
          <Company></Company>
          <Flat>22A</Flat>
          <BuildingName>Dean's Court</BuildingName>
          <BuildingNumber>3</BuildingNumber>
          <Street>St. Georges Road</Street>
          <Locality>Clifton</Locality>
          <City>Bristol</City>
          <Province>Avon</Province>
          <Postcode>BS1 5UL</Postcode>
          <CountryCode>GB</CountryCode>
        </Address>
        <MobilePhone>
          <InternationalCode>0044</InternationalCode>
          <AreaCode>132</AreaCode>
          <Number>2323</Number>
          <Extension>22</Extension>
        </MobilePhone>
        <Email>john.doe.1234@gmail.com</Email>
      </ContactDetails>
      <BillingDetails>
        <Name>
          <Title>Mr</Title>
          <NamePartList>
            <NamePart>John</NamePart>
            <NamePart>Doe</NamePart>
          </NamePartList>
        </Name>
        <Address>
          <Company></Company>
          <Flat>22A</Flat>
          <BuildingName>Dean's Court</BuildingName>
          <BuildingNumber>3</BuildingNumber>
          <Street>St. Georges Road</Street>
          <Locality>Clifton</Locality>
          <City>Bristol</City>
          <Province>Avon</Province>
          <Postcode>BS1 5UL</Postcode>
          <CountryCode>GB</CountryCode>
        </Address>
        <CreditCard>
          <Company>qq</Company>
          <NameOnCard>
            <NamePartList>
              <NamePart>Mr John Doe</NamePart>
            </NamePartList>
          </NameOnCard>
          <Number>CARDNUMBER</Number>
          <SecurityCode>CRC</SecurityCode>
          <ExpiryDate>08/30</ExpiryDate>
          <CardType>MasterCard</CardType>
          <IssueNumber>0</IssueNumber>
        </CreditCard>
      </BillingDetails>
    </BookingProfile>
  </ProcessTerms>
</CommandList>

The XML elements are described as in ProcessTerms Request specification.

- <TravellerList> the order of the travellers in this list must be exactly as found in the <ManagedTravellerList> in ProcessDetails response in the previous step.

- <ContactDetails> is optional. For TF bookings, the API will use the contact details from the existing TF booking record or the supplier / airline if exist.

- <BillingDetails> can be omitted if the user of this API is set up with TF Pay.

RESPONSE example

<CommandList>
  <ProcessTerms>
    <LoginId>LOGINID</LoginId>
    <RoutingId>Z1RL63H6CNXONXL2</RoutingId>
    <TFBookingReference>Z999DHBMW</TFBookingReference>
    <Router>
      <RequiredParameterList>
        <RequiredParameter>
          <Name>CardSecurityNumber</Name>
          <Type>notice</Type>
          <DisplayText></DisplayText>
          <PerPassenger>false</PerPassenger>
          <IsOptional>false</IsOptional>
        </RequiredParameter>
        <RequiredParameter>
          <Name>ChildrenAndInfantsSearch</Name>
          <Type>notice</Type>
          <DisplayText></DisplayText>
          <PerPassenger>false</PerPassenger>
          <IsOptional>true</IsOptional>
        </RequiredParameter>
        <RequiredParameter>
          <Name>ChildrenAndInfantsBooking</Name>
          <Type>notice</Type>
          <DisplayText></DisplayText>
          <PerPassenger>false</PerPassenger>
          <IsOptional>true</IsOptional>
        </RequiredParameter>
        <RequiredParameter>
          <Name>BookingSourceRef</Name>
          <Type>custom</Type>
          <DisplayText></DisplayText>
          <PerPassenger>false</PerPassenger>
          <IsOptional>true</IsOptional>
        </RequiredParameter>
      </RequiredParameterList>
      <Supplier>airasiaarms</Supplier>
      <Vendor>
        <Name>Air Asia</Name>
        <Url>http://www.airasia.com/</Url>
      </Vendor>
      <Complete>true</Complete>
      <RequestedLocations>
        <Origin>
          <Type>airport</Type>
          <Code>SIN</Code>
        </Origin>
        <Destination>
          <Type>airport</Type>
          <Code>KUL</Code>
        </Destination>
      </RequestedLocations>
      <GroupList>
        <Group>
          <Id>394E77UD6EJOEEOM</Id>
          <OutwardList>
            <Outward>
              <Id>ELBHDRMXTDRX27OH</Id>
              <CacheInfo>
                <CacheDataAgeSeconds>0</CacheDataAgeSeconds>
              </CacheInfo>
              <Duration>60</Duration>
              <SegmentList>
                <Segment>
                  <Origin>
                    <Type>airport</Type>
                    <Code>SIN</Code>
                  </Origin>
                  <Destination>
                    <Type>airport</Type>
                    <Code>KUL</Code>
                  </Destination>
                  <DepartDate>06/11/2019-07:35</DepartDate>
                  <ArriveDate>06/11/2019-08:35</ArriveDate>
                  <Duration>60</Duration>
                  <TfOperator>...</TfOperator>
                  ...
                  <FlightId>
                    <Code>AK700</Code>
                    <Number>700</Number>
                  </FlightId>
                  <TravelClass>
                    <TfClass>Economy With Restrictions</TfClass>
                    <SupplierClass>Regular</SupplierClass>
                  </TravelClass>
                  <SegmentMayEndWithAStop>false</SegmentMayEndWithAStop>
                </Segment>
              </SegmentList>
            </Outward>
          </OutwardList>
          <ReturnList>
            <Return>
              <Id>EWY74ZJWCF2VOQ9I</Id>
              <CacheInfo>
                <CacheDataAgeSeconds>0</CacheDataAgeSeconds>
              </CacheInfo>
              <Duration>65</Duration>
              <SegmentList>
                <Segment>
                  <Origin>
                    <Type>airport</Type>
                    <Code>KUL</Code>
                  </Origin>
                  <Destination>
                    <Type>airport</Type>
                    <Code>SIN</Code>
                  </Destination>
                  <DepartDate>14/11/2019-06:05</DepartDate>
                  <ArriveDate>14/11/2019-07:10</ArriveDate>
                  <Duration>65</Duration>
                  <TfOperator>...</TfOperator>
                  ...
                  <FlightId>
                    <Code>AK701</Code>
                    <Number>701</Number>
                  </FlightId>
                  <TravelClass>
                    <TfClass>Economy With Restrictions</TfClass>
                    <SupplierClass>Low Fare</SupplierClass>
                  </TravelClass>
                  <SegmentMayEndWithAStop>false</SegmentMayEndWithAStop>
                </Segment>
              </SegmentList>
            </Return>
          </ReturnList>
          <Price>
            <Amount>56.00</Amount>
            <Currency>SGD</Currency>
            <TaxItemList>
              <TaxItem>
                <Name>Manage Booking Charge</Name>
                <Amount>10.00</Amount>
                <Currency>SGD</Currency>
              </TaxItem>
              <TaxItem>
                <Name>Luggage surcharge</Name>
                <Amount>46.00</Amount>
                <Currency>SGD</Currency>
              </TaxItem>
            </TaxItemList>
          </Price>
        </Group>
      </GroupList>
    </Router>
  </ProcessTerms>
</CommandList>

The XML elements are described as in ProcessTerms Response specification.

StartBooking

The StartBooking executes the post-booking update / change on the supplier / airline (equivalent to StartBooking; also see the XML Bookings and Handling Guide, however, 'Fake' Bookings functionality is not supported at the moment).

REQUEST example

<CommandList>
  <StartBooking>
    <XmlLoginId>XMLLOGINID</XmlLoginId>
    <LoginId>LOGINID</LoginId>
    <TFBookingReference>Z99DOHBMW</TFBookingReference>
    <ExpectedPrice>
      <Amount>56.00</Amount>
      <Currency>SGD</Currency>
    </ExpectedPrice>
  </StartBooking>
</CommandList>

The XML elements are described as in StartBooking Request specification.

RESPONSE example

<CommandList>
  <StartBooking>
    <LoginId>LOGINID</LoginId>
    <TFBookingReference>Z99DOHBMW</TFBookingReference>
  </StartBooking>
</CommandList>

The XML elements are described as in StartBooking Response specification.

CheckBooking

The CheckBooking command polls for StartBooking result (equivalent to CheckBooking). The change / post-booking process follows the same process as in the Booking Process shown in the XML Bookings and Handling Guide.

The post-booking change status changes follow the same rules as in Booking Change Statuses, as shown in the Booking Changes Guidelines; the same applies for the Administration System.

REQUEST example

<CommandList>
  <CheckBooking>
  <XmlLoginId>XMLLOGINID</XmlLoginId>
  <LoginId>LOGINID</LoginId>
  <TFBookingReference>Z99DOHBMW</TFBookingReference>
  </CheckBooking>
</CommandList>

The XML elements are described as in CheckBooking Request specification.

RESPONSE example

<CommandList>
  <CheckBooking>
    <LoginId>LOGINID</LoginId>
    <TFBookingReference>Z99DOHBMW</TFBookingReference>
    <Status>BookingChangeSucceeded</Status>
    <SupplierReference>K133TE</SupplierReference>
  </CheckBooking>
</CommandList>

The XML elements are described as in CheckBooking Response specification.