Precise Booking
This method is used to directly create a flight booking. It is called after the search (/json/shopping) and price validation (/json/precisePricing) steps. The method takes an offer identifier and detailed passenger data, and returns a booking locator (PNR) in the response.
Endpoint
Method: POST
URL: /json/preciseBooking
Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| └ authentication | Object | Yes | Authentication details |
| └ partnerId | String | Yes | Partner Id |
| └ sign | String | Yes | Signature for the request |
| └ booking | Object | Yes | |
| └ solution | Object | Yes | Journey information |
| └ searchKey | String | Yes | Unique search identification from Shopping API |
| └ solutionId | String | Yes | Unique solution identification from Shopping API |
| └ passengers | [Object] | Yes | Passenger information |
| └ passengerId | String | Yes | Passenger sequence ID |
| └ firstName | String | Yes | First name |
| └ lastName | String | Yes | Last name |
| └ nationality | String | Yes | Nationality [country code] |
| └ psgType | String | Yes | Passenger type including ADT - Adult, CHD - Child, INF - Infant (no seat) |
| └ gender | String | Yes | Gender, including M for male, F for female |
| └ birthday | String | Yes | Date of birth [yyyy-mm-dd] |
| └ cardType | String | Yes | Type of travel document |
| └ cardNum | String | Yes | Travel document number |
| └ cardExpiredDate | String | Yes | Travel document expired date [yyyy-mm-dd] |
| └ contact | Object | Yes | |
| String | Yes | Email address | |
| └ phone | String | Yes | Phone number |
| └ notifyUrl | String | No | If the Partner implements callback functionality, the URL should be provided here (e.g., https://example.com/order_notification_callback?provider=xxxxx&key=yyyyy) |
Request Example
json
{
"authentication": {
"partnerId": "{{PARTNER_ID}}",
"sign": "{{SIGN}}"
},
"booking": {
"solution": {
"searchKey": "ISTLON20260814YLONIST20260822Y1100",
"solutionId": "rmm6MrVT9sqQd6BrNDONH2MLhoKdwGcddhXh9+Wwl8soDBwvLz7qDNm0hFcAay5m8Y5MXjGhKMbeM8hbDKZVZrjalM3U3ixzSpgiWMhbc0l54Wodx2d1VRrzJw3i39+IchK14mM4usIbL83NjLAsXqKS95fnSKUwlOA4V7tOTE6RALKScJ3jiJ4/quVebRmw1Smum12qAkec11m82wghahMq9NTfh0tXP1ZBnuCK/Yot3k/qX69k/gMOyQRG6KQT/KRnH1eB3yynOaiRtpWM7hh2AvrBwwZ9I0bDHzySwhJhGJtYc4SYrmIrH22lmw9XGjQ0ego+9NM0Z3RuRFxLVpB8FHLwKQ4PPJFEO+DpXWGKnjQI0keZrRRm6kg3B6oDcBToRtVU35VBDLAm+hp39w=="
},
"passengers": [
{
"passengerId": "1",
"firstName": "GEORGE",
"lastName": "TAYLOR",
"nationality": "GB",
"psgType": "ADT",
"gender": "M",
"birthday": "1998-04-26",
"cardType": "P",
"cardNum": "6970406",
"cardExpiredDate": "2030-04-26"
},
{
"passengerId": "2",
"firstName": "SOPHIA",
"lastName": "TAYLOR",
"nationality": "GB",
"psgType": "CHD",
"gender": "F",
"birthday": "2023-06-14",
"cardType": "P",
"cardNum": "54645854",
"cardExpiredDate": "2028-07-25"
}
],
"contact": {
"email": "george.taylor@example.com",
"phone": "447911123456"
},
"notifyUrl": "https://example.com/order_notification_callback?provider=xxxxx&key=yyyyy"
}
}Response Parameters
The response parameters are identical to those in the orderDetail response.
Please refer to the Order Detail - Response Parameters section for a complete description.
TIP
In case of failed response, Partner should return only two parameters in the response: errorCode and errorMsg, with the corrsponding error code from Error Code List and explonation in the error message.
Success Response Example
json
{
"errorCode": "0",
"errorMsg": "ok",
"data": {
"orderStatus": "TO_BE_PAID",
"orderNum": "917685547687690201",
"createdTime": "2026-03-20T19:10:15+05:00",
"ticketTimeLimit": "2026-03-20T19:12:15+05:00",
"pnr": "WCREDC",
"passengers": [
{
"passengerId": "1",
"firstName": "GEORGE",
"lastName": "TAYLOR",
"nationality": "GB",
"psgType": "ADT",
"gender": "M",
"birthday": "1998-04-26",
"cardType": "P",
"cardNum": "6970406",
"cardExpiredDate": "2030-04-26",
"ticketNum": null
},
{
"passengerId": "2",
"firstName": "SOPHIA",
"lastName": "TAYLOR",
"nationality": "GB",
"psgType": "CHD",
"gender": "F",
"birthday": "2023-06-14",
"cardType": "P",
"cardNum": "54645854",
"cardExpiredDate": "2028-07-25",
"ticketNum": null
}
],
"solutions": [
{
"fareSource": "Regular",
"category": "VI",
"fareType": "Private",
"validatingCarrier": "W9",
"currency": "EUR",
"adtFare": 146.93,
"adtTax": 0.86,
"chdFare": 146.93,
"chdTax": 0.86,
"infFare": null,
"infTax": null,
"tktFee": 0,
"baggageMap": {
"ADT": [
{
"segmentIdList": [
"1"
],
"baggageAmount": "1PC",
"baggageWeight": "23KG",
"baggageSize": ["76CM", "50CM", "30CM"],
"carryOnAmount": "1PC",
"carryOnWeight": "10KG",
"carryOnSize": ["55CM", "40CM", "20CM"]
},
{
"segmentIdList": [
"2"
],
"baggageAmount": "1PC",
"baggageWeight": "23KG",
"baggageSize": ["76CM", "50CM", "30CM"],
"carryOnAmount": "1PC",
"carryOnWeight": "10KG",
"carryOnSize": ["55CM", "40CM", "20CM"]
}
],
"CHD": [
{
"segmentIdList": [
"1"
],
"baggageAmount": "1PC",
"baggageWeight": "23KG",
"baggageSize": ["76CM", "50CM", "30CM"],
"carryOnAmount": "1PC",
"carryOnWeight": "10KG",
"carryOnSize": ["55CM", "40CM", "20CM"]
},
{
"segmentIdList": [
"2"
],
"baggageAmount": "1PC",
"baggageWeight": "23KG",
"baggageSize": ["76CM", "50CM", "30CM"],
"carryOnAmount": "1PC",
"carryOnWeight": "10KG",
"carryOnSize": ["55CM", "40CM", "20CM"]
}
]
}
}
],
"journeys": [
{
"segments": [
{
"segmentId": "1",
"marketingCarrier": "W9",
"flightNum": "5772",
"operatingCarrier": null,
"equipment": "JET",
"cabinClass": "Economy",
"bookingCode": "X",
"departure": "IST",
"arrival": "LGW",
"departureTerminal": "",
"arrivalTerminal": "0",
"flightTime": 245,
"departureDate": "2026-08-14",
"departureTime": "16:50",
"arrivalDate": "2026-08-15",
"arrivalTime": "18:55",
"fareBasis": "YRT",
"stops": [
{
"location": "IST",
"arrivalDate": "2026-08-15",
"arrivalTime": "10:00",
"departureDate": "2026-08-15",
"departureTime": "12:30"
}
]
}
]
},
{
"segments": [
{
"segmentId": "2",
"marketingCarrier": "W9",
"flightNum": "5729",
"operatingCarrier": null,
"equipment": "JET",
"cabinClass": "Economy",
"bookingCode": "X",
"departure": "LGW",
"arrival": "IST",
"departureTerminal": "S",
"arrivalTerminal": "",
"flightTime": 240,
"departureDate": "2026-08-22",
"departureTime": "13:35",
"arrivalDate": "2026-08-22",
"arrivalTime": "19:35",
"fareBasis": "YRT",
"stops": null
}
]
}
],
"pnrList": [
{
"segmentId": "1",
"ticketNums": [
{
"airPnr": null,
"ticketNum": null,
"passengerId": "1"
},
{
"airPnr": null,
"ticketNum": null,
"passengerId": "2"
}
]
},
{
"segmentId": "2",
"ticketNums": [
{
"airPnr": null,
"ticketNum": null,
"passengerId": "1"
},
{
"airPnr": null,
"ticketNum": null,
"passengerId": "2"
}
]
}
]
}
}Failed Response Example
json
{
"errorCode": "0307",
"errorMsg": "No free seats"
}Error Code List
| errorCode | errorMsg | Description |
|---|---|---|
| 0 | ok | Request has been processed successfully |
| S001 | System error | System error |
| B002 | Partner is not exists | PartnerID does not exist |
| B003 | Illegal sign | Illegal sign. Please check your signature |
| B035 | Concurrency limited | Concurrency exceeded system limits |
| P001 | XXX is illegal | The field of XXX is illegal |
| P002 | XXX is missing | The field of XXX is missing |
| P006 | Invalid parameter | Value of request cannot pass the validation, please check on the request |
| 0307 | Reservation failed - Booking class is sold out | Reservation failed. Seats have been sold out |
| B004 | There are errors in the passenger type of Adults | Adult passenger's age does not meet the requirements |
| B005 | Can not find any matching precisePricing result before the price expires | Can not find the corresponding precisePricing record. Please check the itinerary and passenger numbers. PreciseBooking has to be invoked before the price expires |
| B006 | Reservation failed - Other. OrderNum is XXX | Booking fail for other reason. The order has been created which is indicated in Other. OrderNum field |
| B006 | Reservation failed | Booking fail for other reason |
| B007 | Reservation failed - Segment status is not HK | Segment status is invalid from GDS. Please select other flight options |
| B008 | Itinerary is different between PNR and order | Itinerary in reservation is different from precisePricing. There might be a flight re-schedule. Please select other flight options |
| B011 | Reservation failed - Fare is unavailable | Fare is unavailable form GDS. Please select other flight options |
| B012 | Reservation failed - Create PNR time out | Create PNR time out from GDS. Please wait some minutes or select other flight options |
| B017 | Price is changed | Price is changed |
| B023 | Reservation failed - Save price fail | Fail to save price from GDS |
| B022 | There are errors in the passenger type of Children | Child passenger's age does not meet the requirements |
| B025 | Reservation failed - RT PNR fail | Fail to retrieve PNR from GDS |
| B027 | Airline PNR is missing | Airline PNR is missing from GDS |
| B028 | Reservation failed - Time out | Booking time out from GDS |
| B029 | Duplicate reservations have been found for passenger XXX/XXX in order XXX, in pnr XXX | Duplicated reservation is not allowed. If there is an order with same segment and passenger, system will block the second reservation and return error. Please cancel the last duplicated order or pay the last order directly |
| B030 | Illegal passenger name | Wrong passenger name |
| B031 | Illegal passenger name | Wrong passenger name. Name length is over the limitation |
| B032 | Illegal document | Illegal document |
| B043 | Reservation failed: Create PNR failed | Booking failed from GDS |
| B044 | Reservation failed - Create PNR failed, end transaction failed | Booking failed from GDS |
| B062 | The passenger name must not exceed 40 characters | Passenger's name shouldbe within 40 English alphabet, including "/" between last name and first name |
| B064 | The lastName of passenger should be within 2-30 characters | Passenger's last name should be within 2-30 English alphabet |
| B065 | Passenger's document information must be filled in for this trip | Passenger's document information must be filled in for this trip. Passenger's document information contains cardType, cardNum, cardExpiredDate and nationality |
| B069 | Reservation failed, this fare has passenger age limitation | Reservation failed, because this fare has a passenger age limitation |
| B077 | There are errors in the passenger type of infants | Infant passenger's age does not meet the requirements |
| B078 | Lack of passengerId | For bookings contain infant(s), passengerId is required for each passenger |
| B079 | Each infant must be associated to one adult | Each infant must be associated to one adult and each adult can only be associated to one infant maximum |
| B080 | Invalid or duplicated or discontinuous passengerId | PassengerId must be positive and continuous integers starting from 1 |
| B081 | Error in ancillary passenger info | Error in ancillary passenger info |
| B087 | Booking Failed. System has recognized possible churning | Churning booking behaviour were detected and booking request with the same passenger will be restricted |
| B192 | Duplicate baggages are not allowed in the same journey | Only one baggage purchase is allowed for the same journey, all subsequent attempts will be granted with this response |
| B193 | Multiple seat selection is not allowed in the same flight | Only one seat selection is allowed for the same journey, all subsequent attempts will be granted with this response |