Skip to content

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 ​

ParameterTypeRequiredDescription
└ authenticationObjectYesAuthentication details
  └ partnerIdStringYesPartner Id
  └ signStringYesSignature for the request
└ pricingObjectYesPricing request details
  └ searchKeyStringYesUnique search identification from Shopping API
  └ solutionIdStringYesUnique identification from Shopping API
  └ adultsIntegerYesNumber of adult passengers
  └ childrenIntegerYesNumber of children (age 2-12)
  └ infantsIntegerYesNumber of infants (age 0-2, no seat)

Request Example ​

json
{
  "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 ​

ParameterTypeRequiredDescription
└ errorCodeStringYesError code, refer to Error Code List
└ errorMsgStringYesError message
└ dataObjectYesReturned data (not empty when errorCode is "0")
  └ searchKeyStringYesUnique search identification from Shopping API
  └ solutionObjectYesSolution details
   └ solutionIdStringYesUnique solution identification from Shopping API
   └ fareSourceStringNoFare source type, e.g. Regular, Charter, NDC, B2B
   └ categoryStringNoProduct type, e.g. VI (virtual interlining)
   └ fareTypeStringYesFare type: Public or Private
   └ validatingCarrierStringYesTicketing airline
   └ currencyStringYesCurrency code
   └ adtFareNumberYesAdult fare
   └ adtTaxNumberYesAdult tax
   └ chdFareNumberYesChildren (age 2-12) fare
   └ chdTaxNumberYesChildren (age 2-12) tax
   └ infFareNumberNoInfant (age 0-2, no seat) fare
   └ infTaxNumberNoInfant (age 0-2, no seat) tax
   └ tktFeeNumberYesTicketing service fee
   └ journeysObjectYesJourney legs (journey_0, journey_1, ...)
    └ journey_0[String]YesArray of flightIds for outbound (flights -> flightId)
    └ journey_1[String]NoArray of flightIds for inbound (flights -> flightId)
    └ journey_2[String]NoArray of flightIds for multi-leg flight (flights -> flightId)
   └ baggageMapObjectNoBaggage rules Map by passenger type (ADT, CHD, INF)
    └ ADT[Object]NoBaggage rules for ADT
     └ segmentIdList[String]NoArray of segment IDs (segments -> segmentId)
     └ baggageAmountStringNoFree baggage amount: (e.g., "1PC")
     └ baggageWeightStringNoFree baggage weight:
Unity: KG - kilogram, LB - pounds
(e.g., "23KG")
     └ baggageSize[String]NoBaggage dimensions [L, W, H]:
Unity: CM - centimeter, IN - inches
(e.g., ["76CM", "50CM", "30CM"] or ["158CM"])
     └ carryOnAmountStringNoFree carry-on amount: (e.g., "1PC")
     └ carryOnWeightStringNoFree carry-on weight:
Unity: KG - kilogram, LB - pounds
(e.g., "10KG")
     └ carryOnSize[String]NoCarry-on dimensions [L, W, H]:
Unity: CM - centimeter, IN - inches
(e.g., ["55CM", "40CM", "20CM"] or ["115CM"])
    └ CHD[Object]NoBaggage rules for CHD (fields are the same as ADT)
    └ INF[Object]NoBaggage rules for INF (fields are the same as ADT)
  └ flights[Object]YesFlight information
   └ flightIdStringYesFlight ID, unique identification
   └ segmentIds[String]YesArray of segment IDs (segments -> segmentId)
   └ selfTransferSegmentIds[String]NoSelf-transfer segment IDs
  └ segments[Object]YesSegment details
   └ segmentIdStringYesSegment ID, unique identification
   └ marketingCarrierStringYesMarketing carrier [IATA airline code]
   └ flightNumIntegerYesFlight number
   └ operatingCarrierStringNoOperating carrier [IATA airline code]
   └ equipmentStringNoAircraft equipment IATA-code
   └ cabinClassStringYesCabin class, refer to Сabin Class List
   └ bookingCodeStringNoCabin code
   └ departureStringYesDeparture [IATA airport code]
   └ arrivalStringYesArrival [IATA airport code]
   └ departureTerminalStringNoDeparture terminal
   └ arrivalTerminalStringNoArrival terminal
   └ flightTimeIntegerNoFlight time in minutes
   └ departureDateStringYesDeparture date (yyyy-MM-dd)
   └ departureTimeStringYesDeparture time (HH:mm)
   └ arrivalDateStringYesArrival date (yyyy-MM-dd)
   └ arrivalTimeStringYesArrival time (HH:mm)
   └ fareBasisStringNoFare basis code
   └ stops[Object]NoDetails about technical stops
    └ locationStringNoAirport IATA code of the stop location
    └ arrivalDateStringNoTechnical stop arrival date (yyyy-MM-dd)
    └ arrivalTimeStringNoTechnical stop arrival time (HH:mm)
    └ departureDateStringNoTechnical stop departure date (yyyy-MM-dd)
    └ departureTimeStringNoTechnical stop departure time (HH:mm)

Success Response Example ​

json
{
  "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 ​

json
{
  "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 ​

json
{
  "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 ​

errorCodeerrorMsgDescription
0okRequest has been processed successfully
S001System errorSystem error
B306Request failed. Seats have been sold outRequest failed. Seats have been sold out
B002Partner is not existsPartnerID does not exist
B003Illegal signIllegal sign. Please check your signature
B007The search result has expiredThe search result has expired
P001XXX is illegalThe field of XXX is illegal
P002XXX is missingThe field of XXX is missing
P006Invalid parameterValue of request cannot pass the validation, please check on the request

TTN Octo API documentation