# Post-ticketing Ancillaries

{% hint style="info" %}
💬 **Need help?** If you're stuck, ask Eva on ATRIP for instant diagnostics.

<a href="https://www.atriptech.com/" class="button primary" data-icon="comments">Ask Eva</a>
{% endhint %}

## Search Ancillary

> \*\*Dependency:\*\*\
> No preceding function needs to be carried out. The order should be ticketed and the departure date should be in the future.\
> \
> \> Please note the below "Rules & Restrictions" while initiating a post-ticketing transaction.\
> \>   1. \*\*Single Booking Limit\*\*: Check-in baggage and Carry-on baggage can be added to the segment of passenger either in-booking or post-booking phase altogether or separately, but each type of baggage can only be added one time for the given segment throughout the whole flow. This rule aims to simplify the baggage booking flow for customers by sending the query only one time to book multiple baggages.\
> \>   2. \*\*Product Code\*\*: "Product code" contains various baggage offerings in aspects of baggage pieces and weights for each airline.\
> \>   3. \*\*Restrictions for Infants\*\*: Baggage ancillary is not allowed to be booked for infant passenger.\
> \>   4. \*\*Post-Booking Baggage Additions\*\*: It is not allowed to add the same type of post-booking baggage to a ticketed order the second time unless the first purchase fails in payment. Please refer to the below scenarios:\
> \>      a. When the post-booking order is in "ticket-in-process" and "ticketed" status, it's not allowed to order another one. If any query is called, API will respond with an error message.\
> \>      b. When the post-booking order is in "cancelled" status, the customer can create another order.\
> \>      c. When the post-booking order is in "unpaid" status, the customer can create another order. However, if one of the orders completes the payment and moves to "ticketing-in-process" status, the other orders will stop processing the payment.\
> \>   5. \*\*Existing Baggage Policies\*\*: In case the air ticket order already contains free baggage, it’s subject to airline’s ancillary policy whether additional baggage is allowed to be purchase either at the booking flow or the post-booking flow.\
> \>   6. \*\*Consistent Product Codes in Connecting Flights\*\*: Same “product code” for baggage is mandatory to be added to each segment in connecting flights. If the "product code" is different for each of the segment (in the same direction) or not added for all the sectors, the API will respond with an error message.\
> \>   7. \*\*Round-Trip Baggage Rule\*\*: Rule No.6 doesn't work for round trip flights. This means that the outbound and inbound segments can have different product codes. For example, outbound journey may have a product code of 1PC and 10KG while the inbound journey may have a product code of 20KG. This is allowed.\
> \>   8. \*\*API Request Information\*\*: The details of only the passenger for whom the ancillary needs to be added must be sent in the API RQ.\
> \
> \*\*Endpoint:\*\*\
> <https://sandbox.atriptech.com/postBookingAncillarySearch.do>

```json
{"openapi":"3.0.1","info":{"title":"Default module","version":"1.0.0"},"tags":[{"name":"Post Ticketing Service"}],"security":[],"paths":{"/postBookingAncillarySearch.do":{"post":{"summary":"Search Ancillary","deprecated":false,"description":"**Dependency:**\nNo preceding function needs to be carried out. The order should be ticketed and the departure date should be in the future.\n\n> Please note the below \"Rules & Restrictions\" while initiating a post-ticketing transaction.\n>   1. **Single Booking Limit**: Check-in baggage and Carry-on baggage can be added to the segment of passenger either in-booking or post-booking phase altogether or separately, but each type of baggage can only be added one time for the given segment throughout the whole flow. This rule aims to simplify the baggage booking flow for customers by sending the query only one time to book multiple baggages.\n>   2. **Product Code**: \"Product code\" contains various baggage offerings in aspects of baggage pieces and weights for each airline.\n>   3. **Restrictions for Infants**: Baggage ancillary is not allowed to be booked for infant passenger.\n>   4. **Post-Booking Baggage Additions**: It is not allowed to add the same type of post-booking baggage to a ticketed order the second time unless the first purchase fails in payment. Please refer to the below scenarios:\n>      a. When the post-booking order is in \"ticket-in-process\" and \"ticketed\" status, it's not allowed to order another one. If any query is called, API will respond with an error message.\n>      b. When the post-booking order is in \"cancelled\" status, the customer can create another order.\n>      c. When the post-booking order is in \"unpaid\" status, the customer can create another order. However, if one of the orders completes the payment and moves to \"ticketing-in-process\" status, the other orders will stop processing the payment.\n>   5. **Existing Baggage Policies**: In case the air ticket order already contains free baggage, it’s subject to airline’s ancillary policy whether additional baggage is allowed to be purchase either at the booking flow or the post-booking flow.\n>   6. **Consistent Product Codes in Connecting Flights**: Same “product code” for baggage is mandatory to be added to each segment in connecting flights. If the \"product code\" is different for each of the segment (in the same direction) or not added for all the sectors, the API will respond with an error message.\n>   7. **Round-Trip Baggage Rule**: Rule No.6 doesn't work for round trip flights. This means that the outbound and inbound segments can have different product codes. For example, outbound journey may have a product code of 1PC and 10KG while the inbound journey may have a product code of 20KG. This is allowed.\n>   8. **API Request Information**: The details of only the passenger for whom the ancillary needs to be added must be sent in the API RQ.\n\n**Endpoint:**\nhttps://sandbox.atriptech.com/postBookingAncillarySearch.do","tags":["Post Ticketing Service"],"parameters":[{"name":"Accept","in":"header","description":"","required":true,"schema":{"type":"string"}},{"name":"Content-Type","in":"header","description":"","required":true,"schema":{"type":"string"}},{"name":"Accept-Encoding","in":"header","description":"","required":true,"schema":{"type":"string"}},{"name":"x-atlas-client-id","in":"header","description":"","required":true,"schema":{"type":"string"}},{"name":"x-atlas-client-secret","in":"header","description":"","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"ticketOrderNo":{"type":"string","description":"Order number. It is the original order number.","nullable":true},"ancillaryCategory":{"type":"string","description":"Ancillary Category. Different categories of ancillaries need to be separately requested. Currently we only support`BAGGAGE`."},"paymentMethod":{"type":"integer","description":"The payment method you prefer to use. If you specify a payment method (provided that the fare supports it), then you can only use that method for payment.","nullable":true},"fromSegments":{"type":"array","items":{"type":"object","properties":{"carrier":{"type":"string","description":"IATA code of the marketing airline"},"flightNumber":{"type":"string","description":"The value denotes the marketing flight number.\nFormat: CA123 or TR021 or FR1290. The letters denote the carrier and the three/four-digit number that follows is the flight number."},"depAirport":{"type":"string","description":"IATA code of the departure airport."},"arrAirport":{"type":"string","description":"IATA code of the arrival airport."},"depTime":{"type":"string","description":"Departure time of the flight. Format:`yyyyMMddHHmm`"},"arrTime":{"type":"string","description":"Arrival time of the flight. Format:`yyyyMMddHHmm`","nullable":true},"stopCities":{"type":"string","description":"Name of cities from where the passengers will take connecting flights. Include IATA code of cities and use a comma in case of multiple cities to separate if transfer airports count is higher than 1. For example: CGK, SUB. Blank means non-stop flight.","nullable":true},"codeShare":{"type":"integer","description":"- 1: code share\n- 0: Not code share","nullable":true},"operatingCarrier":{"type":"string","description":"Operating carrier. It is blank when codeshare=false","nullable":true},"operatingFlightNumber":{"type":"string","description":"Operating flight number. It is blank when codeshare=false","nullable":true},"depTerminal":{"type":"string","description":"Departure Terminal","nullable":true},"arrTerminal":{"type":"string","description":"Arrival Terminal","nullable":true},"cabinClass":{"$ref":"#/components/schemas/CabinClass","nullable":true,"description":"Service grade of the fare"},"fareFamily":{"type":"string","description":"Fare Family as per the information received from the airline.","nullable":true},"duration":{"type":"integer","description":"The flying duration in minutes.","nullable":true}},"required":["carrier","flightNumber","depAirport","arrAirport","depTime"]},"description":"Outbound segments","nullable":true},"retSegments":{"type":"array","items":{"$ref":"#/components/schemas/PNRClaimFlight"},"description":"Inbound segments","nullable":true}},"required":["ancillaryCategory"]}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/PostBookingAncillarySearchResponseStatus","description":"- 117: Baggage is not allowed for this order as it is not in the ticketed status\n- 118: Atlas currently does not support seat or baggage for this airline\n- 119: Baggage or seat selection is not supported for orders with infants\n- 120: Baggage or seat selection for the flight has been closed\n- 121: It's not allowed to purchase ancillary in 24 hours before departure\n- 125: Post booking ancillary search timeout"},"msg":{"$ref":"#/components/schemas/ResponseMessage","nullable":true},"sessionId":{"type":"string","description":"The unique identifier for this search. It is required when you call order function to make a reservation to identify which ancillary the client is choosing."},"ticketOrderNo":{"type":"string","description":"Order number. It is the original order number."},"supportCreditTransPayment":{"type":"string","description":"This tag is used to identify if the fare needs to be paid using the client's credit card. This field has been deprecated, please use `supportPaymentMethods` instead.","deprecated":true},"currency":{"type":"string","description":"The currency in which Atlas settles transactions with you."},"fromSegments":{"type":"array","items":{"$ref":"#/components/schemas/RoutingSegment"},"description":"Outbound segments"},"retSegments":{"type":"array","items":{"$ref":"#/components/schemas/RoutingSegment"},"description":"Inbound segments","nullable":true},"ancillaryProductElements":{"type":"array","items":{"$ref":"#/components/schemas/AncillaryProduct"},"description":"Ancillary service quotation. If no available services, it will be`null` or`[]`","nullable":true},"supportPaymentMethods":{"type":"array","items":{"$ref":"#/components/schemas/PaymentMethod","description":"- 1: deposit\n- 3: vcc passthrough\n- 4: BYOA(Bring Your Own Account)\n- 5: MoR"},"description":"Support payment methods. If payment is not supported in any way, this will be `null`or`[]`","nullable":true},"cardChargeList":{"type":"array","items":{"$ref":"#/components/schemas/CardCharge"},"description":"Payment handling fee of MoR","nullable":true}},"required":["status","sessionId","ticketOrderNo","supportCreditTransPayment","currency","fromSegments"]}}},"headers":{}}}}}},"components":{"schemas":{"CabinClass":{"type":"integer","enum":[1,2,3,4],"title":""},"PNRClaimFlight":{"type":"object","properties":{"carrier":{"type":"string","description":"IATA code of the marketing airline"},"flightNumber":{"type":"string","description":"The value denotes the marketing flight number.\nFormat: CA123 or TR021 or FR1290. The letters denote the carrier and the three/four-digit number that follows is the flight number."},"depAirport":{"type":"string","description":"IATA code of the departure airport."},"arrAirport":{"type":"string","description":"IATA code of the arrival airport."},"depTime":{"type":"string","description":"Departure time of the flight. Format:`yyyyMMddHHmm`"},"arrTime":{"type":"string","description":"Arrival time of the flight. Format:`yyyyMMddHHmm`","nullable":true},"stopCities":{"type":"string","description":"Name of cities from where the passengers will take connecting flights. Include IATA code of cities and use a comma in case of multiple cities to separate if transfer airports count is higher than 1. For example: CGK, SUB. Blank means non-stop flight.","nullable":true},"codeShare":{"type":"integer","description":"- 1: code share\n- 0: Not code share","nullable":true},"operatingCarrier":{"type":"string","description":"Operating carrier. It is blank when codeshare=false","nullable":true},"operatingFlightNumber":{"type":"string","description":"Operating flight number. It is blank when codeshare=false","nullable":true},"depTerminal":{"type":"string","description":"Departure Terminal","nullable":true},"arrTerminal":{"type":"string","description":"Arrival Terminal","nullable":true},"cabinClass":{"$ref":"#/components/schemas/CabinClass","nullable":true,"description":"Service grade of the fare"},"fareFamily":{"type":"string","description":"Fare Family as per the information received from the airline.","nullable":true},"duration":{"type":"integer","description":"The flying duration in minutes.","nullable":true}},"required":["carrier","flightNumber","depAirport","arrAirport","depTime"]},"PostBookingAncillarySearchResponseStatus":{"type":"integer","enum":[117,118,119,120,121,125]},"ResponseMessage":{"type":"string","description":"It serves as an additional description of the response result. Especially when the interface reports an error (`status` !=`0`), it is usually a human-readable error message. Note: Do not use this field in any programming scenarios. For example, do not judge whether the interface responds successfully based on this field. Instead, you should only determine it by checking whether the status is equal to`0`at any time."},"RoutingSegment":{"type":"object","properties":{"aircraftCode":{"type":"string","description":"IATA Code of aircraft type","nullable":true},"arrAirport":{"type":"string","description":"3-letter iata code for the arrival airport at which the segment is scheduled to arrive."},"arrTerminal":{"type":"string","description":"The terminal at the destination airport where the segment is scheduled to arrive.","nullable":true},"arrTime":{"type":"string","description":"The datetime at which the segment is scheduled to arrive, in the arrival airport timezone. The format is `YYYYMMDD`."},"cabin":{"type":"string","description":"RBD(known as Reservation Booking Designator) displayed by the airline.","nullable":true},"cabinClass":{"$ref":"#/components/schemas/CabinClass","description":"Cabin class of the segment.\n- 1: economy\n- 2: business\n- 3: first\n- 4: premium economy"},"carrier":{"type":"string","description":"IATA code of marketing carrier."},"codeShare":{"type":"boolean","description":"A flag used to identify whether it is a code share flight."},"depAirport":{"type":"string","description":"3-letter iata code for the airport at which the segment is scheduled to depart."},"depTerminal":{"type":"string","description":"The terminal at the departure airport from which the segment is scheduled to depart.","nullable":true},"depTime":{"type":"string","description":"The datetime at which the segment is scheduled to depart, in the departure airport timezone. The format is`YYYYMMSS`."},"duration":{"type":"integer","description":"The duration of the segment in munites."},"fareFamily":{"type":"string","description":"Fare Family as per the information received from the airline"},"flightNumber":{"type":"string","description":"Marketing flight number. The format is: CA123 or TR021 or FR1290, with the first two letters representing the carrier and the following number representing the flight number."},"operatingCarrier":{"type":"string","description":"2-letter iata code for the operating carrier. The airline actually operating this segment. This may differ from the marketing carrier in the case of a \"codeshare\", where one airline sells flights operated by another airline.","nullable":true},"operatingFlightnumber":{"type":"string","description":"Operating flight number.","nullable":true},"seatCount":{"type":"integer","description":"Max booking seats for the fare."},"segmentIndex":{"type":"integer","description":"Segment sequence. Starts from 1. If it is return trip, sequence for outbound trip and inbound trip would be together. The segment index also represents the flight sequence of the segment."},"stopCities":{"type":"string","description":"IATA code/Name of cities from where the passengers will take stopover flights. Include IATA code of cities and use a comma in case of multiple cities to separate transfer airports count is higher than 1. For example: `CGK, SUB`. \n`null` or blank means non-stop flight.","nullable":true}},"required":["arrAirport","arrTime","cabinClass","carrier","codeShare","depAirport","depTime","duration","fareFamily","flightNumber","seatCount","segmentIndex"]},"AncillaryProduct":{"type":"object","properties":{"ancillaryCode":{"type":"string","description":"A code that is relatively readable by humans and contains information about auxiliary business specifications (such as weight and quantity limitations of luggage). \n**Note:** \nThis content is only for display purposes and should not be used for programming purposes. That is to say, do not attempt to parse the information about auxiliary business specifications from this code. If you want to access the auxiliary business specifications, please use structured fields. For example, for luggage, please use`auxBaggageElement`."},"auxBaggageElement":{"type":"object","properties":{"isAllWeight":{"type":"boolean","description":"Mark whether the`weight`field restricts the total weight or the weight of a single piece.\n- `true`: The weight is for all the pieces\n- `false`: The weight is for each piece"},"piece":{"type":"integer","description":"The maximum number of pieces that can be purchased per person.\n- `0`: No Limitation about piece\n- `>0`: Maximum pieces"},"size":{"type":"string","description":"Maximum size for the baggage","nullable":true},"weight":{"type":"integer","description":"The maximum weight that can be purchased per person.\n- `0`: No limitation for weight\n- `>0`: Weight limit (KG)"}},"description":"Baggage specification limitations. This node is valid only when the ancillary type (`categoryCode`) is baggage.","required":["isAllWeight","piece","weight"],"nullable":true},"canPurchasePostTicket":{"type":"integer","description":"A flag used to mark if this ancillary product can be purchased in the post-ticketing flow.\n- `0`: No\n- `1`: Yes"},"canPurchaseWithTicket":{"type":"integer","description":"A flag used to mark if this ancillary product can be purchased during the booking flow.\n- `0`: No\n- `1`: Yes"},"categoryCode":{"description":"Type of the ancillary.\n\n- StandardCheckInBaggage: Standard Check-in Baggage.\n- CabinBaggage: Usually refers to the Cabin Baggage Overhead Locker. Transition value. It will gradually transition to `CabinBaggageOverheadLocker`.\n- CabinBaggageOverheadLocker: Cabin Baggage Overhead Locker.\n- CabinBaggageUnderSeat: Cabin Baggage Under Seat. Usually refers to the personal item.","$ref":"#/components/schemas/AncillaryCategory"},"clientTechnicalServiceFee":{"type":"number","description":"The service fee charged by Atlas for the purchase of the ancillary.","nullable":true},"currency":{"type":"string","description":"The currency in which Atlas settles transactions with you"},"maxQty":{"type":"integer","description":"The maximum number of purchases allowed per person per flight segment"},"minQty":{"type":"integer","description":"The minimum quantity allowed to be purchased per person per flight segment."},"price":{"type":"number","description":"Price for this ancillary."},"productCode":{"type":"string","description":"Unique identifier for the ancillary product. It would be used in the order request."},"segmentIndex":{"type":"integer","description":"The index of segment the ancillary applies to."},"vendorCurrency":{"type":"string","description":"The currency in which the vendor charges for the ancillary. If the fare does not allow for the VCC pass-through or BYOA payment, this information will be`null`."},"vendorPrice":{"type":"integer","description":"The price charged by the vendor for the ancillary. If the fare does not allow for the VCC pass-through or BYOA payment, this information will be`null`."}},"required":["ancillaryCode","canPurchasePostTicket","canPurchaseWithTicket","categoryCode","currency","maxQty","minQty","price","productCode","segmentIndex","vendorCurrency","vendorPrice"]},"AncillaryCategory":{"type":"string","enum":["StandardCheckInBaggage","CabinBaggage","CabinBaggageUnderSeat","CabinBaggageOverheadLocker"]},"PaymentMethod":{"type":"integer","enum":[1,3,4,5],"title":""},"CardCharge":{"type":"object","properties":{"cardType":{"description":"Card types, such as Visa, MasterCard","$ref":"#/components/schemas/CardType"},"percentage":{"type":"number","description":"Percentage of payment handling fee","nullable":true},"charge":{"type":"number","description":"The amount of payment handling fee","nullable":true},"currency":{"type":"string","description":"Currency of `charge`","nullable":true}},"required":["cardType"]},"CardType":{"type":"string","enum":["Amex","Visa","MasterCard","JCB","Discover","DinersClub"]}}}}
```

## Order Ancillary

> \*\*Dependency:\*\*\
> The \`postBookingAncillarySearch.do\` function should be called prior to this one.\
> \
> \> \*\*Procedure:\*\* \
> \>   1.  Copy the Session ID into the request body.\
> \>   2.  Type the passenger information and "product code" selected from the response in "postBookingAncillarySearch.do".\
> \
> \*\*Endpoint:\*\*\
> <https://sandbox.atriptech.com/postBookingAncillaryOrder.do>

```json
{"openapi":"3.0.1","info":{"title":"Default module","version":"1.0.0"},"tags":[{"name":"Post Ticketing Service"}],"security":[],"paths":{"/postBookingAncillaryOrder.do":{"post":{"summary":"Order Ancillary","deprecated":false,"description":"**Dependency:**\nThe `postBookingAncillarySearch.do` function should be called prior to this one.\n\n> **Procedure:** \n>   1.  Copy the Session ID into the request body.\n>   2.  Type the passenger information and \"product code\" selected from the response in \"postBookingAncillarySearch.do\".\n\n**Endpoint:**\nhttps://sandbox.atriptech.com/postBookingAncillaryOrder.do","tags":["Post Ticketing Service"],"parameters":[{"name":"Accept","in":"header","description":"","required":true,"schema":{"type":"string"}},{"name":"Content-Type","in":"header","description":"","required":true,"schema":{"type":"string"}},{"name":"Accept-Encoding","in":"header","description":"","required":true,"schema":{"type":"string"}},{"name":"x-atlas-client-id","in":"header","description":"","required":true,"schema":{"type":"string"}},{"name":"x-atlas-client-secret","in":"header","description":"","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"sessionId":{"type":"string","description":"Identifier of the searched ancillary, received from the ancillary search response."},"ancillaryCategory":{"type":"string","description":"Ancillary Category. Different categories of ancillaries need to be separately requested. Currently we only support`BAGGAGE`."},"ticketOrderNo":{"type":"string","description":"Order number. It is the original order number."},"passengers":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The passenger's name. Please send it in the following format: Family Name/Given Name"},"passengerType":{"description":"Type of passenger.\n- 0: Adult\n- 1: Child\n- 2: Infant","$ref":"#/components/schemas/PassengerType"},"ancillaries":{"type":"array","items":{"type":"object","properties":{"productCode":{"type":"string","description":"Ancillary product code(`productCode`). Got from routing element in the search/revalidation response."},"segmentIndex":{"type":"integer","description":"Segment sequence"}},"required":["productCode","segmentIndex"]},"description":"Ancillaries selection for the specific passenger","nullable":true},"residentInfo":{"type":"object","properties":{"docType":{"type":"string","description":"Certificate types supported by resident' prices"},"docNum":{"type":"string","description":"ID number, if the ID type is D, E","nullable":true},"municipality":{"type":"string","description":"Municipal district code","nullable":true},"largeFamilyCert":{"type":"string","description":"Large Family Cert","nullable":true},"community":{"type":"string","description":"Community Region Code","nullable":true}},"description":"Resident Info","required":["docType"],"nullable":true}},"required":["name","passengerType"]},"description":"Passengers who need to purchase ancillary services and the ancillary services they choose"},"payment":{"type":"object","properties":{"cardType":{"$ref":"#/components/schemas/CardType","description":"The card type you wish to use for payment. Send this information when generating an order can be used to calculate the payment handling fee. This parameter is only effective and required in the MoR payment scenario."}},"required":["cardType"],"nullable":true}},"required":["ancillaryCategory","passengers","sessionId","ticketOrderNo"]}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/OrderAncillaryResponseStatus","description":"- 501: Add purchase not allowed. Description: Ancillary addition is not allowed for this order. Check with the airline or open a Service Request with Atlas for the same.\n- 502: The price has increased, and the order creation has failed. Please perform a new search.. Description: There is a price change from the time the ancillary order search was conducted.\n- 503: Incorrect baggage selection\n- 504: Additional baggage not allowed. Ancillary baggage already exists in the original order. Description: Atlas only allows the attachment of ancillary baggage only once\n- 505: Additional baggage not allowed. Baggage already booked as post-ticket ancillary.. Description: Atlas only allows the attachment of ancillary baggage only once\n- 506: Ancillary addition is not supported for infants\n- 507: It's not allowed to purchase ancillary in 24 hours before departure\n- 508: No payment method is available. Please check whether the quotation currency or account configuration is correct.\n- 509: Illegal request param"},"msg":{"$ref":"#/components/schemas/ResponseMessage"},"sessionId":{"type":"string","description":"Echo the`sessionId`in the request parameters."},"orderNo":{"type":"string","description":"Order number of the created order."},"totalPrice":{"type":"number","description":"Total price(not including service fee) of this order in the currency TheAtlas settled with you"},"totalTransactionFee":{"type":"number","description":"Total technical fees for this order in the currency TheAtlas settled with you."},"currency":{"type":"string","description":"The currency TheAtlas settled with you."},"vendorTotalPrice":{"type":"number","description":"Total price of this order in the vendor's currency, reference for you to generate the specific credit card. ","nullable":true},"vendorCurrency":{"type":"string","description":"Vendor's currency.","nullable":true},"tktLimitTime":{"type":"string","description":"Payment deadline for this order. This time will be displayed in SGT (GMT +8). The fromat is:`yyyy-MM-dd HH:mm:ss`."},"paxTicketInfos":{"type":"array","items":{"properties":{"name":{"type":"string","description":"Echo the passenger's name, in the format of last name/first name"},"passengerType":{"description":"Echo the passenger's type.\n- 0: Adult\n- 1: Child\n- 2: Infant","$ref":"#/components/schemas/PassengerType"},"birthday":{"type":"string","description":"Echo the passenger's birthday"},"gender":{"type":"string","description":"Echo the passenger's gender"},"cardNum":{"type":"string","description":"Echo the passenger's  identity document number","nullable":true},"cardType":{"type":"string","description":"Echo the passenger's  identity document type","nullable":true},"cardIssuePlace":{"type":"string","description":"Echo the country where the passenger's identification document was issued.","nullable":true},"cardExpired":{"type":"string","description":"Echo the expiration date of the passenger's identification document.","nullable":true},"nationality":{"type":"string","description":"Echo the passenger's nationality","nullable":true},"ticketNos":{"type":"array","items":{"type":"string"},"description":"Ticket numbers"},"airlinePNRs":{"type":"array","items":{"type":"string"},"description":"Airline PNRs. The array count would be the same as ticketnos count"},"ancillaries":{"type":"array","items":{"type":"object","properties":{"productCode":{"type":"string","description":"Unique identifier for the ancillary product."},"segmentIndex":{"type":"integer","description":"The index of segment the ancillary applies to."},"currency":{"type":"string","description":"The currency in which Atlas settles transactions with you"},"ancillaryPrice":{"type":"number","description":"Price for this ancillary."},"auxBaggageElement":{"type":"object","properties":{"isAllWeight":{"type":"boolean","description":"Mark whether the`weight`field restricts the total weight or the weight of a single piece.\n- `true`: The weight is for all the pieces\n- `false`: The weight is for each piece"},"piece":{"type":"integer","description":"The maximum number of pieces that can be purchased per person.\n- `0`: No Limitation about piece\n- `>0`: Maximum pieces"},"size":{"type":"string","description":"Maximum size for the baggage","nullable":true},"weight":{"type":"integer","description":"The maximum weight that can be purchased per person.\n- `0`: No limitation for weight\n- `>0`: Weight limit (KG)"}},"description":"Baggage specification limitations. This node is valid only when the ancillary type (`categoryCode`) is baggage.","required":["isAllWeight","piece","weight"],"nullable":true},"auxSeatElement":{"type":"object","properties":{"row":{"type":"string","description":"Seat row"},"column":{"type":"string","description":"Seat column"}},"required":["row","column"],"description":"Seat selection for the specific passenger","nullable":true},"vendorCurrency":{"type":"string","description":"The currency in which the vendor charges for the ancillary. If the fare does not allow for the VCC pass-through or BYOA payment, this information will be`null`."},"vendorPrice":{"type":"integer","description":"The price charged by the vendor for the ancillary. If the fare does not allow for the VCC pass-through or BYOA payment, this information will be`null`."},"displayCurrency":{"type":"string","description":"Display currency","nullable":true},"displayPrice":{"type":"number","description":"Display price","nullable":true}},"required":["currency","ancillaryPrice","productCode","segmentIndex"]},"description":"Ancillaries selection for the specific passenger","nullable":true},"contactEmails":{"type":"array","items":{"type":"string"},"description":"Passenger contact email address.","nullable":true},"contactPhones":{"type":"array","items":{"type":"string"},"description":"Passenger contact phone number.","nullable":true}},"type":"object","required":["name","passengerType","birthday","gender","ticketNos","airlinePNRs"]},"description":"Ticket and ancillary information for passengers who purchased ancillary services."},"paymentOptions":{"type":"array","items":{"type":"object","properties":{"paymentMethod":{"type":"integer"},"serviceFee":{"$ref":"#/components/schemas/PaymentOption"},"ticketFare":{"$ref":"#/components/schemas/PaymentOption"},"paymentFee":{"$ref":"#/components/schemas/PaymentOption"},"cardType":{"type":"string","nullable":true}},"required":["paymentMethod","serviceFee","ticketFare","paymentFee","cardType"]},"description":"Available paymebt options for this order"},"ticketOrderNo":{"type":"string","description":"Order number. It is the original order number.","nullable":true}},"required":["status","msg","sessionId","orderNo","totalPrice","totalTransactionFee","currency","tktLimitTime","paxTicketInfos","paymentOptions"]}}},"headers":{}}}}}},"components":{"schemas":{"PassengerType":{"type":"integer","enum":[0,1,2]},"CardType":{"type":"string","enum":["Amex","Visa","MasterCard","JCB","Discover","DinersClub"]},"OrderAncillaryResponseStatus":{"type":"integer","enum":[501,502,503,504,505,506,507,508,509]},"ResponseMessage":{"type":"string","description":"It serves as an additional description of the response result. Especially when the interface reports an error (`status` !=`0`), it is usually a human-readable error message. Note: Do not use this field in any programming scenarios. For example, do not judge whether the interface responds successfully based on this field. Instead, you should only determine it by checking whether the status is equal to`0`at any time."},"PaymentOption":{"type":"object","properties":{"paymentMethod":{"$ref":"#/components/schemas/PaymentMethod","description":"Payment method.\n- 1: balance\n- 3: vcc passthrough\n- 4: BYOA\n- 5: MoR"},"ticketFare":{"$ref":"#/components/schemas/PaymentOptionDetail","description":"It is used to describe the total ticket price and how the deduction will be made."},"serviceFee":{"$ref":"#/components/schemas/PaymentOptionDetail","nullable":true,"description":"It is used to describe the total service and how the deduction will be made."},"paymentFee":{"$ref":"#/components/schemas/PaymentOptionDetail","nullable":true,"description":"It is used to describe the payment fee and how the deduction will be made."},"cardType":{"type":"string","description":"Only for MoR. Echo the card type you sent in order request.","nullable":true}},"required":["paymentMethod","ticketFare"]},"PaymentMethod":{"type":"integer","enum":[1,3,4,5],"title":""},"PaymentOptionDetail":{"type":"object","properties":{"amount":{"type":"number","description":"Total amount will be deducted."},"currency":{"type":"string","description":"Currency of the`amount`"},"deductFrom":{"type":"string","enum":["DEPOSIT","CARD"],"description":"Deduction method"}},"required":["amount","currency","deductFrom"]}}}}
```
