Confirm Booking

## Content - [API Description](#api-description) - [API Parameters](#api-parameters) - [Input Parameters](#input-parameters) - [Output Parameters](#output-parameters) - [Error Codes](#error-codes) - [JSON Samples](#json-samples) - [Request](#request) - [Response](#response) Request for API key ## API Description | | | | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | API Name | confirmbooking | | API Type | Update | API Source | Eretail | | Description | Third call in the aggregated booking flow. Completes the payment procedures, and confirms the booking. The summary of the ticket(s) that were generated is also provided. | ## API Parameters ### HTTP Headers | Headers | Value | Description | | ------------------ | --------- | ---------------------------------------------------------------------------- | |Content-Type|application/json|| |apikey|*|An active SQ API Key for the FlightBooking Package| ### Input Parameters | Input Parameters | Data Type | Optional | Description | | ----------------------------------------------------------------------- | ------------ | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | clientUUID | String | No | Any unique transaction identifier from the consumer’s end | | sessionID | String | No | Value returned by the last call to the booking flow | | pageTicket | String | No | Value returned by the last call to the booking flow | | recordLocator | String | No | 6 alphanumeric PNR value returned in the response of `createbooking` call | | orderInfo | String | No | Unique Payment identifier returned in the response of `createbooking` call | | validate3dsDetails | JSONObject | No | | |   acsResponse | String | No | Base64 encoded string received from the card Issuer's ACS after the cardholder completes the authentication process. The payment authentication response (PaRes) value is posted from the ACS in the PaRes field. The value of the PaRes field must be used in the operation request unaltered. | | authorizationDetails | JSONObject | No | | |   country | String | No | 2-char country code | |   passengerEmail | String | No | | |   passengerPhoneNumber | String | No | Format: +(countrycode)-(areacode)-(number)
The “+”s and “-”s are mandatory. Area code can be skipped, in which case 2 consecutive “-” should be sent | |   clientIPMACAddress | String | No | | |   departureAirportCode | String | No | 3-char airport code | |   arrivalAirportCode | String | No | 3-char airport code | |   cabinClassIndicator | String | No | | |   fareFamilyIndicator | String | No | | |   hoursToFirstDep | Number | No | | |   adultCount | Number | No | Number of adults in the booking | |   adultFareAmount | Number | No | Adult Fare (from the pricing call) | |   childrenCount | Number | No | Number of children in the booking | |   childFareAmount | Number | No | Child Fare (from the pricing call) | |   infantsCount | Number | No | Number of infants in the booking | |   infantFareAmount | Number | No | Infant Fare (from the pricing call) | |   deviceFingerPrint | String | No | | |   billingAddressInfo | JSONObject | No | | |     billingAddress1 | String | No | | |     billingAddress2 | String | Yes | | |     billingAddressCity | String | No | | |     billingAddressState | String | Yes | | |     billingAddressPostalCode | String | Yes | | |     billingAddressCountry | String | No | | | bookingDetails | JSONObject | No | | |   segmentIdList | String Array | | | |   insuranceDetails | JSONObject | \_ | Mandatory is `insurancePresent` is true in `paymentDetails` below. Can be taken from `createBooking` response | |     providerCode | String | No | | |     productCode | String | No | | |     totalAmount | Number | No | | |     currencyCode | String | No | | |     isMerchant | Boolean | No | | |   travellerDetails | JSON Array | No | | |     isLeadPassenger | Boolean | No | Boolean value, eg:true or false | |     title | String | No | firstName of the passenger | |     lastName | String | No | lastName of the passenger as in PNR | |     firstName | String | No | Type of passenger. e.g. ADT, B15. | |     gender | String | No | “M”, “F” | |     dateOfBirth | Date | \_ | Mandatory for Children and Infants | |     travellerID | String | No | Taken from `createbooking` response | |     type | String | No | “ADT”, “CHD”, “B15” | |     contactDetails | JSON Array | No | | |       type | String | No | | |       value | String | No | | |     identityDocumentList | JSON Array | \_ | Mandatory for US Itinerary | |       dateOfBirth | Date | \_ | Date of Birth of passenger in yyyy-MM-dd format | |       documentNumber | String | No | Document number, e.g.:P1234567G | |       documentType | String | No | Document type, e.g.:P | |       expiryDate | Date | \_ | Expiry date of document in YYMM format | |       firstName | String | \_ | First name of passenger as in Document | |       lastName | String | \_ | Last name of passenger as in Document | |       gender | String | \_ | Gender of passenger as in Document | |       nationality | String | \_ | Nationality of passenger as in Document | |       title | String | \_ | Title of passenger as in Document | |       issuingCountry | String | \_ | Issuing country of Document | |       applicableCountry | String | \_ | Applicable Country of Document | |       addressDetails | JSONObject | \_ | Only for US Visitors (pax travelling to US) | |         address | String | No | Address of US Visitor | |         city | String | No | City of US Visitor | |         state | String | No | State of US Visitor | |         zipCode | String | No | Zip code of US Visitor | |         countryCode | String | No | Country Code of US Visitor | |     gstDetails | JSONObject | Yes | To be provided when GST details are available | |       gstRegNumber | String | Yes | 15 Digit GST Register Number, e.g.:894wer324 | |       companyName | String | Yes | GST company Name, e.g.: TCS | |       emailAddress | String | Yes | | |       addressDetails | JSON Object | Yes | | |         additionalAddressLine | String | Yes | Additional Address Line of the GST | |         countryCode | String | Yes | | |         zipCode | String | Yes | | |         city | String | Yes | | |         address | String | Yes | | |         state | String | Yes | | |       gstContactDetails | JSON Object | Yes | | |         countryCode | String | Yes | Country Code of the Contact Number, e.g.:91 | |         areaCode | String | Yes | Area code of the Contact Number | |         contactNumber | String | Yes | | |     infantDetails | | | Same structure as `travellerDetails` | |       title | String | No | | |       lastName | String | No | | |       firstName | String | No | | |       gender | String | No | | |       dateOfBirth | Date | No | | |       travellerID | String | No | | |       type | String | No | | |       identityDocumentList | JSON Array | \_ | Mandatory for US Itinerary | |         dateOfBirth | Date | \_ | Date of Birth of passenger in yyyy-MM-dd format | |         documentNumber | String | No | Document number, e.g.:P1234567G | |         documentType | String | No | Document type, e.g.:P | |         expiryDate | Date | \_ | Expiry date of document in YYMM format | |         firstName | String | \_ | First name of passenger as in Document | |         lastName | String | \_ | Last name of passenger as in Document | |         title | String | \_ | Gender of passenger as in Document | |         gender | String | \_ | Nationality of passenger as in Document | |         nationality | String | \_ | Title of passenger as in Document | |         issuingCountry | String | \_ | Issuing country of Document | |         applicableCountry | String | \_ | Applicable Country of Document | |         addressDetails | JSONObject | \_ | Only for US Visitors (pax travelling to US) | |           address | String | No | Address of US Visitor | |           city | String | No | City of US Visitor | |           state | String | No | State of US Visitor | |           zipCode | String | No | Zip code of US Visitor | |           countryCode | String | No | Country Code of US Visitor | | paymentDetails | JSONObject | No | | |   payeeName | String | No | | |   accountNumber | String | No | | |   paymentType | String | No | | |   cardType | String | No | | |   expiryDate | String | No | | |   cvvNumber | String | No | | |   amount | String | No | | |   currencyCode | String | No | | |   isInsurancePresent | String | No | | |   ccSurchargeAmount | String | Yes | | |   pointOfSales | String | No | First Board Point value. | | resumeDetails | JSONObject | Yes | Used when we jumpstart to an intermediate call within the aggregator.
Is usually copied over from a partially failed response | ### Output Parameters | Output Parameters | Data Type | Description | | -------------------------------------------------------------------------- | ------------ | -------------------------------------------------------------------------- | | status | String | “SUCCESS” / “FAILED” | | code | Number | 200 if status is “SUCCESS”. Refer to Section 5 for possible error codes | | message | String | Populated and displayed only if status is “FAILED” | | clientUUID | String | Same value as in request | | validationResult | JSONObject | Result of the CreditCard validation | |   details | JSONObject | | |     authenticationStatus | String | | |     orderInfo | String | | | authorizationResult | JSONObject | | |   details | JSONObject | | |     responseStatusCode | String | | |     approvalCode | String | | |     fraudStatusCode | String | | |     orderInfo | String | | | bookingConfirmationDetails | | | |   bookingReference | String | | |   ticketList | JSON Array | | |     ticketNumber | String | | |     infant | Boolean | True for infants | |     travellerId | String | | |   insuranceDetails | JSONObject | | |     confirmationNumber | String | | |     issuanceSuccess | String | | |   failureDetails | JSONObject | | |     errorCode | String | | |     errorDesc | String | | |     errorType | String | | |   errorDetails | JSONObject | | |     code | String | | |     message | String | | | ticketSummary | JSONObject | | |   tickets | JSON Array | | |     issueDate | Date | | |     isCCVRequired | Boolean | | |     iataNumber | String | | |     issuingStation | String | | |     membershipNo | String | | |     pnrNo | String | | |     endorsementRestriction | String | | |     boardingPoint | String | | |     ticketList | JSON Array | | |       firstName | String | | |       lastName | String | | |       paxType | String | | |       ticketNumber | String | | |       ticketKfNumber | String | | |       totalMilesUsed | String | | |       approvalCode | String | | |       isPWMBooking | Boolean | | |       isRedemptionBooking | Boolean | | |       pwMMilesEqvCashUsed | String | | |       cashPwMAmount | String | | |       currency | String | | |       fare | JSONObject | | |         fareAmount | Number | | |         totalAmount | Number | | |         taxCount | Number | | |         taxList | JSONArray | | |           taxAmount | Number | | |           taxCode | String | | |           taxDescription | String | | |       flightList | JSON Array | | |         carrier | String | | |         marketingCarrier | String | | |         operatingCarrier | String | | |         sellingClassType | String | | |         isCodeShare | Boolean | | |         isOAL | Boolean | | |         baggageAllowance | String | | |         flightNumber | String | | |         notValidAfter | String | | |         notValidBefore | String | | |         status | String | | |         couponNumber | String | | |         departureCityCode | String | | |         departureCityName | String | | |         arrivalAirportCode | String | | |         arrivalAirportName | String | | |         departDate | String | | |         departTime | String | | |         cabinClass | String | | |         departureAirportCode | String | | |         departureAirportName | String | | |       fopList | JSON Array | | |         cardNumber | String | | |         cardType | String | | |         paymentMode | String | | |         cardName | String | | |         expiryDate | String | | |       isConjunctiveTktFlg | String | | |   insurance | JSON Array | | |     issueDate | String | | |     freeText | String | | |     insuranceEmailId | String | | |     receiptNo | String | | |     associatedTicketNumbers | String | | |     fop | JSON Array | | |       currencyType | String | | |       amount | String | | |       mode | String | | |       cardNumber | String | | |       cardType | String | | |       approvalCode | String | | |     receiptDetails | String | | |     receiptInfo | JSONObject | | |       agencyCode | String | | |       travellerName | String Array | | |       flightDetails | JSON Array | | |         origin | String | | |         destination | String | | |         marketingCompany | String | | |         flightNumber | String | | |         departureDate | String | | |         departureTime | String | | |         arrivalTime | String | | |   errorDetails | JSONObject | Present if the ticket details could not be retrieved after booking | |     code | String | | |     message | String | | | paymentRetryRequest | JSONObject | Present when authorization fails or when FDS response is CHALLENGE or DENY | |   request | JSONObject | Similar structure as appropriate request | |   uri | String | The operation to be called | |   isBookingDetailsRequired | Boolean | Whether booking details are to be filled in the request | |   isPaymentDetailsRequired | Boolean | Whether payment details are to be filled in the request | | retryRequest | JSONObject | Present when a recoverable error occurs in any of the aggregated calls | |   request | JSONObject | Same structure as the appropriate request objet | |   uri | String | The operation to be called | ## Error Codes | ErrorCodes | Message | Description | | ---------- | ------------------------------------------------------------------------------------------ | -------------------------------- | | BKAGCO0002 | Missing or Invalid expected field: adultCount. Must be an integer more than 0 | | | BKAGCO0003 | Missing or Invalid expected field: childCount. Must be an integer more than or equal to 0 | | | BKAGCO0004 | Missing or Invalid expected field: infantCount. Must be an integer more than or equal to 0 | | | BKAGCO0016 | Missing or Invalid expected field: bookingDetails | | | BKAGCO0020 | Missing or Invalid expected field: sessionID | | | BKAGCO0021 | Missing or Invalid expected field: pageTicket | | | BKAGCO0039 | Missing or Invalid expected field: orderInfo | | | BKAGCO0040 | Missing or Invalid expected field: acsResponse | | | BKAGCO0041 | Missing or Invalid expected field: authorizeDetails | | | BKAGCO0042 | Missing or Invalid expected field: country. Expected 2-char input | | | BKAGCO0043 | Missing or Invalid expected field: passengerEmail | | | BKAGCO0044 | Missing or Invalid expected field: passengerPhoneNumber | | | BKAGCO0045 | Missing or Invalid expected field: adultFare | | | BKAGCO0046 | Missing or Invalid expected field: childFare | | | BKAGCO0047 | Missing or Invalid expected field: infantFare | | | BKAGCO0048 | Missing or Invalid expected field: cabinClassIndicator. Must be one of: F,J,S,Y | | | BKAGCO0050 | Missing or Invalid expected field: clientIPMACAddress | | | BKAGCO0051 | Missing or Invalid expected field: deviceFingerPrint | | | BKAGCO0052 | Missing or Invalid expected field: fareFamilyIndicator | | | BKAGCO0053 | Missing or Invalid expected field: departureAirportCode | | | BKAGCO0054 | Missing or Invalid expected field: arrivalAirportCode | | | BKAGCO0055 | Missing or Invalid expected field: hoursToFirstDep | | | BKAGCO0056 | Missing expected field: billingAddressInfo | | | BKAGCO0057 | Missing expected field: billingAddressCity | | | BKAGCO0058 | Missing expected field: billingAddressCountry | | | BKAGCO0060 | Missing expected field: billingAddress1 | | | BKAGCO0150 | The sessionID that you have provided has already expired. Please restart the booking flow. | | | BKAGCO0200 | The operation could not be completed at the current moment please try again | | | 9999/9998 | Unknown error occurs. Please contact CSL team for details. | For all errors of unknown origin | | ErrorCodes | Message | Description | | ---------- | ------------------------------------------------------------------------ | ----------- | | BKAGCN0000 | Exception occurred while conducting 3ds authentication on the creditcard | | | BKAGCN0050 | Exception occurred while authorizing the payment | | | BKAGCN0051 | Authorization has been challenged. | | | BKAGCN0100 | Exception occurred while confirming the booking | | | BKAGCN0250 | Exception occurred while retrieving ticket information | ## JSON Samples ### Request ```json Request #1 { "clientUUID":"SQ-API-Booking-Aggregator", "bookingDetails":{ "travellerDetails":[ { "type":"ADT", "gender":"M", "dateOfBirth":"1989-02-03", "isLeadPassenger":"true", "contactDetails":[ { "type":"mobile", "value":"65-123456789" }, { "type":"email", "value":"asdfgh@sdfgh.com" } ], "lastName":"Test", "title":"Mr", "travellerID":"1", "firstName":"One", "frequentFlyerDetails":[ { "ffpCode":"SQ", "ffpNumber":"8987011927" } ], "identityDocumentList":[ { "dateOfBirth":"1989-02-03", "documentNumber":"J12345678", "documentType":"P", "firstName":"One", "lastName":"Test", "gender":"M", "nationality":"IN", "issuingCountry":"SG", "addressDetails":{ "address":"1, Upper Changi Road", "city":"Singapore", "state":"", "zipCode":"123456" } }, { "documentType":"USVisitor", "addressDetails":{ "address":"12, SomeLane", "city":"San Francisco", "state":"CA", "zipCode":"12345", "countryCode":"US" } } ], "infantDetails":{ "firstName":"Three", "lastName":"Test", "title":"Mstr", "travellerID":"1", "type":"INF", "dateOfBirth":"2017-02-01", "gender":"M", "identityDocumentList":[ { "dateOfBirth":"2017-02-01", "documentNumber":"E1234567", "documentType":"P", "firstName":"Three", "lastName":"Test", "gender":"M", "nationality":"IN", "issuingCountry":"SG" }, { "documentNumber":"1234523", "documentType":"R", "applicableCountry":"US" } ] } }, { "isLeadPassenger":"false", "contactDetails":[ { "type":"mobile", "value":"65-98766543" }, { "type":"email", "value":"kjhgfds@dfghjk.com" } ], "lastName":"TEST", "title":"Miss", "travellerID":"2", "firstName":"TWO", "identityDocumentList":[ { "dateOfBirth":"2013-01-01", "documentNumber":"T12345678", "documentType":"P", "expiryDate":"2023-01-01", "firstName":"TWO", "lastName":"TEST", "gender":"F", "nationality":"IN", "issuingCountry":"SG" }, { "dateOfBirth":"2013-01-01", "documentNumber":"US2345678", "documentType":"C", "expiryDate":"2023-01-01", "firstName":"TWO", "lastName":"TEST", "gender":"F", "nationality":"IN", "issuingCountry":"US" } ], "type":"CHD", "gender":"F", "dateOfBirth":"2013-01-01" } ], "paymentDetails":{ "payeeName":"{{passengerLastName}}", "accountNumber":"5215643492114167", "paymentType":"CC", "cardType":"MC", "expiryDate":"2022-01", "cvvNumber":"123", "amount":"{{totalBookingFare}}", "currencyCode":"{{paymentCurrency}}", "isInsurancePresent":"false", "pointOfSales":"KUL" }, "segmentIdList":[ "1", "2", "3", "4" ] }, "validate3dsDetails":{ "acsResponse":"" }, "authorizationDetails":{ "country":"MY", "passengerEmail":"asdfgh@sdfgh.com", "passengerPhoneNumber":"+65--123456789", "clientIPMACAddress":"103.6.106.251", "departureAirportCode":"KUL", "arrivalAirportCode":"SFO", "cabinClassIndicator":"Y", "fareFamilyIndicator":"{{fareFamilyIndicator}}", "hoursToFirstDep":"1666", "adultCount":"1", "adultFareAmount":"{{adultFare}}", "childrenCount":"1", "childFareAmount":"4300.00", "infantsCount":"1", "infantFareAmount":"837.00", "deviceFingerPrint":"0400R9HVeoYv1gsNf94lis1ztpOyIsTDqFChJAHInd4sUERyOzZNURJ+BXt80/lB3fnapM+cDQcZrLvBrqj59ySG++vh69vH9gMkzNoc05O2+mgIzzvOlBUh9qRTaDjmUTl26LEtcYEgIDXyxDKJBqBicdce1XPQj9MKuLyMF4+8TBhgO962GbSLFcqAPNKVwml2phH0W2k+wt/QtVCYANQUGUOCbnRzpX9SwTbkqlmBR5N+Yk9XXjom4y0AH2WgO40osBx6w1tx0mMZz7HtmSQrKuHt39bvxE86eVaYJEF00M2dmwpFJMf4g5eZXoMyDfiAGZGrC6XyI9GzOADrSTduJlSAFu7g0I1z9QmIvkwaq95fBcrrvhqNv+nKNB1rRJdRbvF8nEikqb77Y7flCLnn8u/0ZYV5FBk6y+u/4durVCfHQogNtRqiiDzmHvOZVxQkI/2Isqiv7wmiLZVX2oRcAKs3UW2SgyjiogaK3VDujNmjYmLrUKTmt2IexFSsDpBLi6gqYs3uxZzI/9TX4RjmZzBnxg3zCYy9/pt9/xAKnNzGu1QN2Vs2tHFzH0tbTz30uZmcL034xXuFkR2vuwB6rcOLz5kPAKKL6jRu2+eu9aMNfyJw5Y9lzLhejolH6jy42HYF5oyZHJeMPQTnQx9GfTy1SJwLx4eMT6CAXmDNHmS4VtR0CKRrQAHzj486sjgy8ZDpe9BkHe7/FfHPmIcnYaLjAvlkC6ix5GwMchIozX0JdmNWP4mnL4wLnI+NSt+EyAfUMZ5LKFpm2SGEcGZ2IpvXHhwykQoiuMSNUUyGAvKLg+9aginJmamvnOVDH3SzV6i8/tb5alAK/XRNo3H5dMIK6EAX6criZrqoo5aKG0x1FEP+Qb24UVU8NguKENqer1nNtP8OECkk/64lKoqM3wDorceNFA82i2sTVjDNkvFE42ys2aVDQcSm+xRvn4mvnxQhLzE/XHOl2pKAmu1wlufgpbZuv5tFTzEBdNLiXsNC09gR/Q8fGeshaHYP8Oq6k+cVXJiV2yKAmeNHH6+w6qLb27V/Fg1i8WCEuW5wSzqdQwB1MEkt29RIELUmV6dYrYTD++EBLCFH0kCN8+s9twhk+Ej2YhaUJHCB4WNptRg1iuYGH8pJL1q44NyGTZasJo3YvoUmgadh5Nwu1x6PIG8zShCZ7IJKgRgN+Z8HAFhGFzd/m6snVqi2XJwwQEvUjPJV6TCEjn+0+9d9ASD4otFWwM1TOcz7giVFA7zpIPQ4hLssfn3WSDtD3YUYq567Dzomaz9kojls8my31ramZbWfhFCZo5RnBDL+bbK9Z4Oz7oLC4OTu6Cv6ghQzpr8MpyCmhA22GAcOdUcmwWLglUmIujRbbhRbgcpn4SItJNK1rwcGJaBDWvB5poj31wU5SHoLPR1uVQ6vXzOXMVPMnGtGMuSZx2KTtTyKvZXK2crZnnifCwAuDXPo+XcQyZ+61kkze2ARqlFx4CziBfxb+zkx9udGZGK5ZOY6osDdKdGAcTHS1YG7QIlYePinmlZ4rxn1JCGkbcGZ1Tq4deCV9DchDoUQBmVOVZENjYAgoiMxxq0IURUjoXA+k9XRlIy/uRttl95u4BtfOeJHxOJA+bb1yEXhrW0HoaIpaR7PJ+NiFJzXFoJ5wJ+ku3tVf7ae", "billingAddressInfo":{ "billingAddress1":"1, BuildingName", "billingAddress2":"Street 1", "billingAddressCity":"Singapore", "billingAddressState":"", "billingAddressPostalCode":"123456", "billingAddressCountry":"SG" } }, "recordLocator":"{{bookingRecordLocator}}", "orderInfo":"{{orderNo}}", "sessionID":"{{eretailSessionID}}", "pageTicket":"{{eretailPageTicket}}" } ``` ### Response ```json { "status": "SUCCESS", "code": "200", "message": "Authorization has been challenged.", "clientUUID": "KAYAK-SQ-API-Booking-Aggregator", "validationResult": { "details": { "authenticationStatus": "AUTHENTICATION_SUCCESSFUL", "orderInfo": "C1900107139" } }, "authorizationResult": { "details": { "fraudStatusCode": "CHALLENGE", "orderInfo": "C1900107139" } }, "paymentRetryRequest": { "request": { "clientUUID": "KAYAK-SQ-API-Booking-Aggregator", "paymentDetails": { "currencyCode": "MYR", "amount": "13788.00" }, "sessionID": "JSESSIONID=c-HBnfgEPANUjR1kQj4872OC1XK9D1r9p_zdZZLk6ZmL5V6aExvK!1486754568!-1892816259", "pageTicket": "3", "resumeDetails": { "resumeIdentifier": "CHECK3DS", "recordLocator": "KKS8QT" } }, "uri": "/create", "isBookingDetailsRequired": false, "isPaymentDetailsRequired": true } } ```