Precise Pricing
Before proceeding to the booking creation step, you must verify the availability status, taxes, and final prices. This transaction checks if seats are still available and provides an exact price quote.
Since availability and fares from a Shopping (Search) transaction may be cached depending on the fare source, the initial prices and taxes might be inaccurate. By contrast, the Precise Pricing transaction retrieves real-time, uncached prices, taxes, and availability directly from the provider.
Endpoint
Method: POST
URL: /json/precisePricing
Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| └ authentication | Object | Yes | Authentication details |
| └ partnerId | String | Yes | Partner Id |
| └ sign | String | Yes | Signature for the request |
| └ pricing | Object | Yes | Pricing request details |
| └ searchKey | String | Yes | Unique search identification from Shopping API |
| └ solutionId | String | Yes | Unique identification from Shopping API |
| └ adults | Integer | Yes | Number of adult passengers |
| └ children | Integer | Yes | Number of children (age 2-12) |
| └ infants | Integer | Yes | Number of infants (age 0-2, no seat) |
Request Example
{
"authentication": {
"partnerId": "{{PARTNER_ID}}",
"sign": "{{SIGN}}"
},
"pricing": {
"searchKey": "ISTLON20260814YLONIST20260822Y1100",
"solutionId": "rmm6MrVT9sqQd6BrNDONH2MLhoKdwGcddhXh9+Wwl8soDBwvLz7qDNm0hFcAay5m8Y5MXjGhKMbeM8hbDKZVZrjalM3U3ixzSpgiWMhbc0l54Wodx2d1VRrzJw3i39+IchK14mM4usIbL83NjLAsXqKS95fnSKUwlOA4V7tOTE6RALKScJ3jiJ4/quVebRmw1Smum12qAkec11m82wghahMq9NTfh0tXP1ZBnuCK/Yot3k/qX69k/gMOyQRG6KQT/KRnH1eB3yynOaiRtpWM7hh2AvrBwwZ9I0bDHzySwhJhGJtYc4SYrmIrH22lmw9XGjQ0ego+9NM0Z3RuRFxLVpB8FHLwKQ4PPJFEO+DpXWGKnjQI0keZrRRm6kg3B6oDcBToRtVU35VBDLAm+hp39w==",
"adults": 1,
"children": 1,
"infants": 0
}
}Response Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| └ errorCode | String | Yes | Error code, refer to Error Code List |
| └ errorMsg | String | Yes | Error message |
| └ data | Object | Yes | Returned data (not empty when errorCode is "0") |
| └ searchKey | String | Yes | Unique search identification from Shopping API |
| └ solution | Object | Yes | Solution details |
| └ solutionId | String | Yes | Unique solution identification from Shopping API |
| └ fareSource | String | No | Fare source type, e.g. Regular, Charter, NDC, B2B |
| └ category | String | No | Product type, e.g. VI (virtual interlining) |
| └ fareType | String | Yes | Fare type: Public or Private |
| └ validatingCarrier | String | Yes | Ticketing airline |
| └ currency | String | Yes | Currency code |
| └ adtFare | Number | Yes | Adult fare |
| └ adtTax | Number | Yes | Adult tax |
| └ chdFare | Number | Yes | Children (age 2-12) fare |
| └ chdTax | Number | Yes | Children (age 2-12) tax |
| └ infFare | Number | No | Infant (age 0-2, no seat) fare |
| └ infTax | Number | No | Infant (age 0-2, no seat) tax |
| └ tktFee | Number | Yes | Ticketing service fee |
| └ journeys | Object | Yes | Journey legs (journey_0, journey_1, ...) |
| └ journey_0 | [String] | Yes | Array of flightIds for outbound (flights -> flightId) |
| └ journey_1 | [String] | No | Array of flightIds for inbound (flights -> flightId) |
| └ journey_2 | [String] | No | Array of flightIds for multi-leg flight (flights -> flightId) |
| └ baggageMap | Object | No | Baggage rules Map by passenger type (ADT, CHD, INF) |
| └ ADT | [Object] | No | Baggage rules for ADT |
| └ segmentIdList | [String] | No | Array of segment IDs (segments -> segmentId) |
| └ baggageAmount | String | No | Free baggage amount: (e.g., "1PC") |
| └ baggageWeight | String | No | Free baggage weight: Unity: KG - kilogram, LB - pounds (e.g., "23KG") |
| └ baggageSize | [String] | No | Baggage dimensions [L, W, H]: Unity: CM - centimeter, IN - inches (e.g., ["76CM", "50CM", "30CM"] or ["158CM"]) |
| └ carryOnAmount | String | No | Free carry-on amount: (e.g., "1PC") |
| └ carryOnWeight | String | No | Free carry-on weight: Unity: KG - kilogram, LB - pounds (e.g., "10KG") |
| └ carryOnSize | [String] | No | Carry-on dimensions [L, W, H]: Unity: CM - centimeter, IN - inches (e.g., ["55CM", "40CM", "20CM"] or ["115CM"]) |
| └ CHD | [Object] | No | Baggage rules for CHD (fields are the same as ADT) |
| └ INF | [Object] | No | Baggage rules for INF (fields are the same as ADT) |
| └ flights | [Object] | Yes | Flight information |
| └ flightId | String | Yes | Flight ID, unique identification |
| └ segmentIds | [String] | Yes | Array of segment IDs (segments -> segmentId) |
| └ selfTransferSegmentIds | [String] | No | Self-transfer segment IDs |
| └ segments | [Object] | Yes | Segment details |
| └ segmentId | String | Yes | Segment ID, unique identification |
| └ marketingCarrier | String | Yes | Marketing carrier [IATA airline code] |
| └ flightNum | Integer | Yes | Flight number |
| └ operatingCarrier | String | No | Operating carrier [IATA airline code] |
| └ equipment | String | No | Aircraft equipment IATA-code |
| └ cabinClass | String | Yes | Cabin class, refer to Сabin Class List |
| └ bookingCode | String | No | Cabin code |
| └ departure | String | Yes | Departure [IATA airport code] |
| └ arrival | String | Yes | Arrival [IATA airport code] |
| └ departureTerminal | String | No | Departure terminal |
| └ arrivalTerminal | String | No | Arrival terminal |
| └ flightTime | Integer | No | Flight time in minutes |
| └ departureDate | String | Yes | Departure date (yyyy-MM-dd) |
| └ departureTime | String | Yes | Departure time (HH:mm) |
| └ arrivalDate | String | Yes | Arrival date (yyyy-MM-dd) |
| └ arrivalTime | String | Yes | Arrival time (HH:mm) |
| └ fareBasis | String | No | Fare basis code |
| └ stops | [Object] | No | Details about technical stops |
| └ location | String | No | Airport IATA code of the stop location |
| └ arrivalDate | String | No | Technical stop arrival date (yyyy-MM-dd) |
| └ arrivalTime | String | No | Technical stop arrival time (HH:mm) |
| └ departureDate | String | No | Technical stop departure date (yyyy-MM-dd) |
| └ departureTime | String | No | Technical stop departure time (HH:mm) |
Success Response Example
{
"errorCode": "0",
"errorMsg": "ok",
"data": {
"searchKey": "2349152586311b2374d979779ab9ea28",
"solution": {
"solutionId": "rmm6MrVT9sqQd6BrNDONH2MLhoKdwGcddhXh9+Wwl8soDBwvLz7qDNm0hFcAay5m8Y5MXjGhKMbeM8hbDKZVZrjalM3U3ixzSpgiWMhbc0l54Wodx2d1VRrzJw3i39+IchK14mM4usIbL83NjLAsXqKS95fnSKUwlOA4V7tOTE6RALKScJ3jiJ4/quVebRmw1Smum12qAkec11m82wghahMq9NTfh0tXP1ZBnuCK/Yot3k/qX69k/gMOyQRG6KQT/KRnH1eB3yynOaiRtpWM7hh2AvrBwwZ9I0bDHzySwhJhGJtYc4SYrmIrH22lmw9XGjQ0ego+9NM0Z3RuRFxLVpB8FHLwKQ4PPJFEO+DpXWGKnjQI0keZrRRm6kg3B6oDcBToRtVU35VBDLAm+hp39w==",
"fareSource": "Regular",
"category": "VI",
"fareType": "Private",
"validatingCarrier": "W9",
"currency": "EUR",
"adtFare": 146.89,
"adtTax": 0.86,
"chdFare": 146.89,
"chdTax": 0.86,
"infFare": null,
"infTax": null,
"tktFee": 0,
"journeys": {
"journey_0": [
"04dad589ff10fa52706e770317d613be"
],
"journey_1": [
"d4c1e191828488325470bbf8e074fc98"
]
},
"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"]
}
]
}
},
"flights": [
{
"flightId": "d4c1e191828488325470bbf8e074fc98",
"segmentIds": [
"0"
],
"selfTransferSegmentIds": null
},
{
"flightId": "04dad589ff10fa52706e770317d613be",
"segmentIds": [
"1"
],
"selfTransferSegmentIds": null
}
],
"segments": [
{
"segmentId": "0",
"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"
}
]
},
{
"segmentId": "1",
"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
}
]
}
}Success Response Example with price change
{
"errorCode": "0",
"errorMsg": "ok",
"data": {
"searchKey": "2349152586311b2374d979779ab9ea28",
...
}TIP
In case of a price change in the recommendation, the Partner should return a regular successful response with all current values, including the new price in the corresponding parameters. The TTN side will automatically detect the price change - there is no need to return any additional errors.
Failed Response Example
{
"errorCode": "B007",
"errorMsg": "The search result has expired"
}TIP
It's important to note that in the case of a regular response, the Partner should return only 2 parameters in the response - errorCode and errorMsg. There is no need to return any additionally created locators or any other data.
Error Code List
| errorCode | errorMsg | Description |
|---|---|---|
| 0 | ok | Request has been processed successfully |
| S001 | System error | System error |
| B306 | Request failed. Seats have been sold out | Request failed. Seats have been sold out |
| B002 | Partner is not exists | PartnerID does not exist |
| B003 | Illegal sign | Illegal sign. Please check your signature |
| B007 | The search result has expired | The search result has expired |
| 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 |