Booking Ancillary

This guide will help you understand the NDC API workflow for booking with ancillaries.

A passenger can add ancillaries as an additional service to their booking like extra baggage, a hot meal, or additional seats.

The booking with ancillaries workflow uses the following endpoints to create a booking:

  1. AirShopping
  2. AirOfferPrice
  3. AirFareRules (Optional)
  4. AirSeatMap/ AirOfferServiceList
  5. CardManagement/Storecard
  6. AirOrderCreate

What do you need to start?

To get started with booking ancillaries, you will require various payload data to process other requests. We suggest you to collect relevant information from the responses for completing the booking workflow.

Step 1. Air Shopping

You can use the AirShopping endpoint to get itinerary list from a variety of sources, including GDS, NDC, and direct airlines before creating an order. Execute AirShopping endpoint to get the shopping response ID and other details required to complete the booking.

Note: To understand the process of booking, refer to:

What will you get in return?

Based on the preferences applied during the flight search, multiple offers will be provided in the return. Each offer is unique in terms of itinerary and pricing. For each request mode you will receive a/an:

  • Shopping response ID for the request mode
  • Offer ID for each offer of the request mode
  • Passenger ID for each passenger

Step 2. Availing Offers

There will be specific price offers associated with the corresponding flight search results. These offers can be applied on the selected air-shopping itinerary to avail some additional discounts or services. Execute AirOfferPrice endpoint to get offer response ID, fare, and other details.

Note: To understand the process of booking, refer to:

What will you get in return?

As a result of this request, you will get:

  • Offer response ID
  • Fare details
  • Penalty details
  • Flight details
  • Payment modes available

You will need these details while creating your order.

Step 3. Air Fare Rules

After selecting the offer, you can use this optional service if you want to retrieve the fare rules for your offer.

You must provide the ResponseID and the OfferID of the selected offer as a query to retrieve the fare rules. Visit AirFareRules endpoint to know more about air fare rules and the relevant parameters.

Core Query
"Query": {
            "Offer": [
                {
                    "attributes": {
                        "ShoppingResponseId": "1626284443070704179",
                        "OfferID": "1626284448323283089"
                    }
                }
            ]
        }
What will you get in return?

You will receive a list of fare guidelines divided into categories as a consequence of this request.

Parameters: While passing the request payload, you must provide values for the parameters like ShoppingResponseID and OfferID.

Step 4. Air Seat Maps

If you wish to acquire the seat maps for your selected seats and adjust the arrangement after picking the offer, you must use this service. To obtain the seat map for your chosen seat, you need to submit a query with the ShoppingResponseID, OfferID, and Passenger information of the selected deal. Visit AirSeatMap endpoint to know more about air seat map and the relevant parameters.

curl --location --request POST 'http://newapi.tltid.com/AirSeatMap' \
--header 'Content-Type: application/json' \
--header 'Authorization: <$auth_token>' \
--data-raw '{
    "AirSeatMapRQ": {
        "ShoppingResponseId": "1626269130577353533",
        "Query": {
            "Offer": [
                {
                    "OfferID": "78064811626269132294950543"
                }
            ]
        },
        "DataLists": {
            "PassengerList": {
                "Passenger": [
                    {
                        "PassengerID": "T1",
                        "PTC": "ADT"
                        
                    }
                ]
            }
        }
    }
}'

What will you get in return?

As a result of this request, you will get ShoppingResponseID and a list of SeatID.

Parameters: While passing the request payload, you must provide values for the parameters like ShoppingresponseID, OfferID, and the Passenger details.

OR

Step 5. Air Offer Service list

The air offer service list option is available in addition to the air seat map. You can use this service to check the availability of services such as extra baggage or meals. Just like air seat map, for air offer service list also you need to provide ShoppingResponseID, OfferID, and Passenger information of the selected deal.

Visit AirOfferServiceList endpoint to know more about Air offer service list and the relevant parameters.

curl --location --request POST 'http://newapi.tltid.com/AirOfferServiceList' \
--header 'Content-Type: application/json' \
--header 'Authorization: <$auth_token>' \
--data-raw '{
    "AirServiceListRQ": {
        "ShoppingResponseId": "1626269130577353533",
        "Query": {
            "Offer": [
                {
                    "OfferID": "78064811626269132294950543"
                }
            ]
        },
        "DataLists": {
            "PassengerList": {
                "Passenger": [
                    {
                        "PassengerID": "T1",
                        "PTC": "ADT"
                    }
                
                ]
            }
        }
    }
}'

What will you get in return?

As a result of this request, you will get ShoppingResponseID and a list of ServiceID.

Parameters: While passing the request payload, you must provide values for the parameters like ShoppingresponseID, OfferID, and the Passenger details.

Step 6. Adding Payment Details

Once you have finalized your offer, you can book your order. Before booking the order, you will have to provide your payment details, which will be stored in our database and a token will be generated. You can use that token for your future transactions. Visit storeCard endpoint to know more about the Store card and the relevant parameters.

Step 7. Placing the Order

The booking process has reached to the last step. With the AirOrderCreate endpoint, the order is processed and OrderID and GdsBookingReference is generated. You can use the OrderID or the GdsBookingReference number for future references. Visit AirOrderCreate to know more about placing the order and the relevant parameters.

You will need three things at this stage:

  • The Offer ID of the offer you want to book
  • Basic information about the passengers
  • The Seat Response ID, Service List Response ID, Option Service ID to make the booking

Note: The values for the parameters like CardNumber, SeriesCode, CardHolderName, ExpirationMonth, and ExpirationYear are passed by using the token that is obtained by passing the payment details in store card endpoint. The convention to pass these values followed is as mentioned in the below example:

“CardNumber”: “card_number_<token_obtained>” “SeriesCode”: “cvv_<token_obtained>” “CardHolderName”: “card_holder_name_<token_obtained>” “ExpirationYear”: “Expiration_Year_<token_obtained>” “ExpirationMonth”: “Expiration_Month_<token_obtained>”

       curl --location --request POST 'http://newapi.tltid.com/AirOrderCreate' \
--header 'Content-Type: application/json' \
--header 'Authorization: <$auth_token>' \
--data-raw '{
    "OrderCreateRQ": {
        "ShoppingResponseId": "1626269130577353533",
        "OfferResponseId": "1626269155103419906",
        "SeatResponseId": "1626269240547547192",
        "ServiceListResponseId": "1626269209223747489",
        "Query": {
            "Order": {
                "Offer": [
                    {
                        "OfferID": "78064811626269132294950543"
                    }
                ],
                "ServiceList": [
                    {
                        "OptinalServiceId": "1626269216268552450",
                        "PassengerID": "ADT1"
                    }
                ],
                "Seat": [
                    {
                        "SeatId": "1626269242221538072",
                        "PassengerID": "ADT1"
                    }
                ]
            }
        },
        "BookingType": "BOOK",
       "Payments": {
            "Payment": [
                {
                    "Type": "CARD",
                    "PassengerID": "ALL",
                    "Amount": 152.03,
                    "Method": {
                        "PaymentCard": {
                            "CardType": "CC",
                            "CardCode": "VI",
                            "CardNumber": "card_number_a2ea684e51fd6c526a67cf29410191688abb88771259ec56ce922fd94b159f7e",
                            "SeriesCode": "cvv_a2ea684e51fd6c526a67cf29410191688abb88771259ec56ce922fd94b159f7e",
                            "CardHolderName": "card_holder_name_a2ea684e51fd6c526a67cf29410191688abb88771259ec56ce922fd94b159f7e",
                            "EffectiveExpireDate": {
                                "Effective": "",
                                "Expiration": "exp_year_a2ea684e51fd6c526a67cf29410191688abb88771259ec56ce922fd94b159f7e-exp_month_a2ea684e51fd6c526a67cf29410191688abb88771259ec56ce922fd94b159f7e"
                            }
                        }
                    },
                    "Payer": {
                        "ContactInfoRefs": "CTC1"
                    }
                }
            ]
        },
        "DataLists": {
            "PassengerList": {
                "Passenger": [
                    {
                        "PassengerID": "ADT1",
                        "PTC": "ADT",
                        "BirthDate": "2000-07-21",
                        "NameTitle": "Mr",
                        "FirstName": "downey",
                        "MiddleName": "",
                        "LastName": "Robert",
                        "Gender": "Male",
                        "ContactInfoRef": "CTC1"
                    }
                ]
            },
            "ContactList": {
                "ContactInformation": [
                    {
                        "ContactID": "CTC1",
                        "AgencyName": "kathir",
                        "EmailAddress": "kathir@gmail.com",
                        "Phone": {
                            "ContryCode": "+91",
                            "AreaCode": "",
                            "PhoneNumber": "9854785465"
                        },
                        "Mobile": {
                            "ContryCode": "+91",
                            "MobileNumber": "9854785465"
                        },
                        "Address": {
                            "Street": [
                                "testing address1",
                                null
                            ],
                            "CityName": "chennai",
                            "StateProv": "AX",
                            "PostalCode": "123465",
                            "CountryCode": "AX"
                        },
                        "PassengerContact": {
                            "EmailAddress": "mosris@gmail.com",
                            "Phone": {
                                "ContryCode": "",
                                "AreaCode": "",
                                "PhoneNumber": "9856325698"
                            }
                        }
                    }
                ]
            }
        }
    }
}'

What will you get in return?

Once the order is placed, the following response data is available for Payments, Order and Passengers based on which the air ticket is issued and relevant documents are created. Below given are the examples of the code snippets from the same response:

Payments

This is an array for payment information. You must give your payment information based on your payment method. There are two methods of payment which are Card and Cheque. You can select your payment type and proceed further accordingly.

{
"Payments": {
            "Payment": [
                {
                    "Type": "CARD",
                    "PassengerID": "ADT1",
                    "Amount": 613.24,
                    "Method": {
                        "PaymentCard": {
                            "CardType": "CC",
                            "CardCode": "VI",
                            "CardNumber": "card_number_a2c4644e51fd6c526a59f129413fbb6989bb8c701149de1dce921993",
                            "SeriesCode": "cvv_a2c4644e51fd6c526a59f129413fbb6989bb8c701149de1dce921993",
                            "CardHolderName": "card_holder_name_a2c4644e51fd6c526a59f129413fbb6989bb8c701149de1dce921993",
                            "EffectiveExpireDate": {
                                "Effective": "",
                                "Expiration": "exp_year_a2c4644e51fd6c526a59f129413fbb6989bb8c701149de1dce921993-exp_month_a2c4644e51fd6c526a59f129413fbb6989bb8c701149de1dce921993"
                            }
                        }
                    },
                    "Payer": {
                        "ContactInfoRefs": "CTC1"
                    }
                }
            ]
        }

"Order": [
            {
                "OrderID": "2LDHL3Q4",
                "GdsBookingReference": "STTPYC",
                "OrderStatus": "SUCCESS",
                "NeedToTicket": "N",
                "OptionalServiceStatus": "SUCCESS",
                "SeatSelectionStatus": "SUCCESS",
                "OfferID": "78064811626269132294950543",
                "Owner": "EY",
                "OwnerName": "Etihad Airways",
                "IsBrandedFare": "N",
                "BrandedFareOptions": [],
                "CabinOptions": [],
                "IsAdditionalCabinType": "N",
                "Eticket": "true",
                "TimeLimits": {
                    "OfferExpirationDateTime": "2021-07-14T15:29:12",
                    "PaymentExpirationDateTime": "2021-07-15 03:00:00"
                },
                "BookingCurrencyCode": "CAD",
                "EquivCurrencyCode": "CAD",
                "HstPercentage": "",
                "RewardSettings": {
                    "RewardAvailable": "N",
                    "PointTypes": [],
                    "PointValues": {}
                },
                "BookingFeeInfo": {
                    "FeeType": "",
                    "BookingCurrencyPrice": 0,
                    "EquivCurrencyPrice": 0
                },
                "TotalPrice": {
                    "BookingCurrencyPrice": 126.14,
                    "EquivCurrencyPrice": 126.14
                },
                "BasePrice": {
                    "BookingCurrencyPrice": 59,
                    "EquivCurrencyPrice": 59
                },
                "TaxPrice": {
                    "BookingCurrencyPrice": 67.14,
                    "EquivCurrencyPrice": 67.14
                },
                "Commission": {
                    "AgencyCommission": {
                        "BookingCurrencyPrice": 0,
                        "EquivCurrencyPrice": 0
                    },
                    "AgencyYqCommission": {
                        "BookingCurrencyPrice": 0,
                        "EquivCurrencyPrice": 0
                    }
                },
                "PortalCharges": {
                    "Markup": {
                        "BookingCurrencyPrice": 0,
                        "EquivCurrencyPrice": 0
                    },
                    "Surcharge": {
                        "BookingCurrencyPrice": 0,
                        "EquivCurrencyPrice": 0
                    },
                    "Discount": {
                        "BookingCurrencyPrice": 0,
                        "EquivCurrencyPrice": 0
                    }
                },
                "AgentMarkupInfo": {
                    "OnflyMarkup": {
                        "BookingCurrencyPrice": 0,
                        "EquivCurrencyPrice": 0
                    },
                    "OnflyDiscount": {
                        "BookingCurrencyPrice": 0,
                        "EquivCurrencyPrice": 0
                    },
                    "OnflyHst": {
                        "BookingCurrencyPrice": 0,
                        "EquivCurrencyPrice": 0
                    },
                    "PromoDiscount": {
                        "BookingCurrencyPrice": 0,
                        "EquivCurrencyPrice": 0,
                        "PromoCode": ""
                    }
                },
                "Penalty": {
                    "ChangeFee": {
                        "Before": {
                            "BookingCurrencyPrice": 219,
                            "EquivCurrencyPrice": 219
                        },
                        "After": {
                            "BookingCurrencyPrice": 219,
                            "EquivCurrencyPrice": 219
                        }
                    },
                    "CancelationFee": {
                        "Before": {
                            "BookingCurrencyPrice": 166,
                            "EquivCurrencyPrice": 166
                        },
                        "After": {
                            "BookingCurrencyPrice": 166,
                            "EquivCurrencyPrice": 166
                        }
                    }
                },
                "PaxSeatInfo": [
                    {
                        "SeatNumber": "10A",
                        "SegmentNumber": 1,
                        "Origin": "MAA",
                        "Destination": "AUH",
                        "PaxRef": "ADT1"
                    }
                ],
                "OfferItem": [
                    {
                        "OfferItemID": "OFFERITEMID1",
                        "Refundable": "true",
                        "PassengerType": "ADT",
                        "PassengerQuantity": 1,
                        "TotalPriceDetail": {
                            "TotalAmount": {
                                "BookingCurrencyPrice": 126.14,
                                "EquivCurrencyPrice": 126.14
                            }
                        },
                        "Service": [
                            {
                                "ServiceID": "SV1",
                                "PassengerRefs": "ADT1",
                                "FlightRefs": "Flight1"
                            }
                        ],
                        "FareDetail": {
                            "PassengerRefs": "ADT1",
                            "Price": {
                                "TotalAmount": {
                                    "BookingCurrencyPrice": 126.14,
                                    "EquivCurrencyPrice": 126.14
                                },
                                "BaseAmount": {
                                    "BookingCurrencyPrice": 59,
                                    "EquivCurrencyPrice": 59
                                },
                                "TaxAmount": {
                                    "BookingCurrencyPrice": 67.14,
                                    "EquivCurrencyPrice": 67.14
                                },
                                "Commission": {
                                    "AgencyCommission": {
                                        "BookingCurrencyPrice": 0,
                                        "EquivCurrencyPrice": 0
                                    },
                                    "AgencyYqCommission": {
                                        "BookingCurrencyPrice": 0,
                                        "EquivCurrencyPrice": 0
                                    }
                                },
                                "BookingFee": {
                                    "BookingCurrencyPrice": 0,
                                    "EquivCurrencyPrice": 0
                                },
                                "PortalCharges": {
                                    "Markup": {
                                        "BookingCurrencyPrice": 0,
                                        "EquivCurrencyPrice": 0
                                    },
                                    "Surcharge": {
                                        "BookingCurrencyPrice": 0,
                                        "EquivCurrencyPrice": 0
                                    },
                                    "Discount": {
                                        "BookingCurrencyPrice": 0,
                                        "EquivCurrencyPrice": 0
                                    }
                                },
                                "Taxes": [
                                    {
                                        "TaxCode": "YQ",
                                        "BookingCurrencyPrice": 37.41,
                                        "EquivCurrencyPrice": 37.41
                                    },
                                    {
                                        "TaxCode": "YR",
                                        "BookingCurrencyPrice": 3.74,
                                        "EquivCurrencyPrice": 3.74
                                    },
                                    {
                                        "TaxCode": "K3",
                                        "BookingCurrencyPrice": 5.26,
                                        "EquivCurrencyPrice": 5.26
                                    },
                                    {
                                        "TaxCode": "IN",
                                        "BookingCurrencyPrice": 1.37,
                                        "EquivCurrencyPrice": 1.37
                                    },
                                    {
                                        "TaxCode": "ZR",
                                        "BookingCurrencyPrice": 1.7,
                                        "EquivCurrencyPrice": 1.7
                                    },
                                    {
                                        "TaxCode": "P2",
                                        "BookingCurrencyPrice": 17.66,
                                        "EquivCurrencyPrice": 17.66
                                    }
                                ]
                            }
                        },
                        "FareComponent": [
                            {
                                "PriceClassRef": "PCR_1",
                                "SegmentRefs": "Segment1 Segment2",
                                "FareBasis": {
                                    "FareBasisCode": {
                                        "Refs": "FG_1 FG_1",
                                        "Code": "ERH1EY ERH1EY"
                                    },
                                    "RBD": "E E",
                                    "CabinType": "Y Y",
                                    "SeatLeft": "9 9"
                                }
                            }
                        ]
                    },
                    {
                        "OfferItemID": "SRV-OfferItem-1",
                        "Service": {
                            "PassengerRefs": "ADT1",
                            "SegmentRefs": "Segment1"
                        },
                        "Price": {
                            "Base": {
                                "BookingCurrencyPrice": 6.24,
                                "EquivCurrencyPrice": 6.24
                            },
                            "Tax": {
                                "BookingCurrencyPrice": 0,
                                "EquivCurrencyPrice": 0
                            },
                            "Total": {
                                "BookingCurrencyPrice": 6.24,
                                "EquivCurrencyPrice": 6.24
                            }
                        },
                        "ServiceDefinitionRef": "SRV-1"
                    },
                    {
                        "OfferItemID": "Seat-OfferItem-1",
                        "Service": {
                            "PassengerRefs": "ADT1",
                            "SegmentRefs": "Segment1",
                            "SelectedSeat": {
                                "Seat": {
                                    "Row": 10,
                                    "Column": "A"
                                }
                            }
                        },
                        "Price": {
                            "Base": {
                                "BookingCurrencyPrice": 18.709999999999997,
                                "EquivCurrencyPrice": 18.709999999999997
                            },
                            "Tax": {
                                "BookingCurrencyPrice": 0.94,
                                "EquivCurrencyPrice": 0.94
                            },
                            "Total": {
                                "BookingCurrencyPrice": 19.65,
                                "EquivCurrencyPrice": 19.65
                            }
                        }
                    }
                ],
                "BaggageAllowance": [
                    {
                        "SegmentRefs": "Segment1 Segment2",
                        "PassengerRefs": "ADT1",
                        "BaggageAllowanceRef": "Bag1"
                    }
                ],
                "SplitPaymentInfo": [
                    {
                        "AirItineraryId": "78064811626269132294950543",
                        "MultipleFop": "Y",
                        "MaxCardsPerPax": 2,
                        "MaxCardsPerPaxInMFOP": 1
                    }
                ],
                "BookingToEquivExRate": 1,
                "FopRef": "FOP_264_264_648_0_ALL_PUB"
            }
        ],

"PassengerList": {
                "Passengers": [
                    {
                        "PassengerID": "ADT1",
                        "PTC": "ADT",
                        "OnflyMarkup": "0.00",
                        "OnflyDiscount": "0.00",
                        "BirthDate": "2000-07-21",
                        "NameTitle": "Mr",
                        "FirstName": "downey",
                        "MiddleName": "",
                        "LastName": "Robert",
                        "Gender": "Male",
                        "TravelDocument": [
                            {
                                "DocumentNumber": "9658745",
                                "DocumentType": "P",
                                "ExpiryDate": "1970-01-01",
                                "IssuingCountry": ""
                            }
                        ],
                        "ContactInfoRef": "CTC1",
                        "PassengerRefID": "ADT1"
                    }
                ]
            }
}'            

Parameters: While passing the request you must provide values for the parameters like ShoppingResponseID, OfferID, and the Passenger details.

Congratulations! You have completed booking with ancillaries.