AirPrice API Reference

This topic provides tables that list the objects and attributes for AirPrice requests and returned in all responses. For a discussion of AirPrice features and formats, see AirPrice Request and Response.

Formats for requesting fare family pricing are noted as part of the reference and full payload sections below, not separately, as most of the request payload is the same as for non-fare family pricing.

In this topic:

AirPrice Requests

Query Parameters

The following table details the query parameters for the POST request. These query parameters can be used with any of the AirPrice requests.

Parameter Description Required/Optional

recheckInventory

By default, AirPrice checks only for availability and not whether the requested class of service is available. The fare returned is not guaranteed and there is a chance of booking failure if the fare or class of service is not available. Sending recheckInventory set to true performs an inventory check and ensures that segments are sellable when a reservation request is sent later.

Supported values:

  • true: Verifies that the segment or seat is actually available by doing a sell followed by an ignore.
  • false: Default. Checks only for fare availability and does not check inventory to ensure the requested class of service is available.

Optional

Reference Payload Request after AirSearch

POST Request – no fare family pricing

Use the following resource for AirPrice request after an AirSearch. 

POST price/offers/buildfromcatalogofferings

Base path:

Pre-production https://api.pp.travelport.com/9/air/

Production https://api.travelport.com/9/air/

POST Request with fare family pricing

Use the following resource for AirPrice request after an AirSearch when also requesting fare family pricing. Base path is same as above.

POST farefamily/catalogofferings/buildoptionsfromcatalogofferings

Payload

Required payload objects listed in the following table. For modifiers, see Optional Pricing Modifiers below.

Object Description Required Optional

CatalogOfferingsQueryBuildOptions
FromCatalogOfferings

 

OR

Top level object.

 

 

None.

fareRuleType: Returns fare rules in the price response. Values:

  • TextShort: Short format of the rule returned from the carrier.
  • TextLong: Long format of the rule returned from the carrier.
  • None: No rules returned.
  • StructuredReturn Categories 6, 7, and 16 fare rules. GDS only.

lowFareFinderInd: Provides pricing flexibility around class of service. If not sent, returns fares only in the requested class of service. Values:

  • true: Returns lowest fares available in any class of service, which may not be the same as the requested class.
  • false: Provides fares for only the specified class of service. Default.
Can be sent with CabinPreference below to return the lowest fare in the requested cabin.

returnBrandedFaresInd: Return brand attributes for branded fares. See Brand Detail Pricing. Values:

  • true: Returns brand attributes for branded fares.
  • false: Does not return brand attributes. Default.

BuildFromCatalogOfferingsRequest

Top level object for identifiers from AirSearch response. Includes CatalogOfferingsIdentifier, CatalogOfferingIdentifier, and ProductIdentifier.

None

None

CatalogOfferingsIdentifier/Identifier

The CatalogOfferings identifier from the AirSearch response. This identifies the AirSearch transaction as a whole.

value: Send value from CatalogOfferings/Identifier/value

None

CatalogOfferingIdentifier/Identifier

The CatalogOffering identifier from the AirSearch response for the offer to price.

value: Send value from CatalogOfferings/ CatalogOffering/id

None

ProductIdentifier/Identifier

The Product identifier of the product to price from the AirSearch response.

value: Send value from CatalogOfferings/ CatalogOffering/ProductOptions/
Product/id

None

CabinPreference

Optional. 

Can combine with lowFareFinderInd set to true to return lowest fare in the requested cabin or cabins. When using CabinPreference and lowFareFindInd:
If both CabinPreference and a class of service are sent, class of service is ignored.
If CabinPreference is sent without a class of service, the response returns the lowest fare in the cabin requested. If that cabin is not available, the response may upgrade or downgrade to a difference cabin. If a different cabin than requested is returned, the response returns the message "One or more sectors might be in a different Cabin Class from the Cabin Class requested."
If lowFareFinderInd = "false” and CabinPreference are sent in the request, the preferred cabin is ignored and the message "Preferred Cabin is Ignored" is returned.
If CabinPreference is set to All, no cabin preference is applied.
type: The type of cabin preference. Supported values (no default):
  • Permitted: Searches for ONLY the specified class or classes. If that class is not available, no options are returned in the response.
  • Preferred: Searches for the specified class or classes, but will return lower classes if the specified class is not available.

cabins: Space-delimited list of cabins. Supported values (no default):

  • Economy
  • PremiumEconomy
  • Business
  • First
  • PremiumFirst
Many carriers use Business and First as the same cabin. If the request is for Business and only First is available, the response returns only First and the warning message "One or more sectors might be in a different Cabin Class from the Cabin Class requested."
Some carriers do not support lowFareFinderInd with Premium First cabin class.

None

FareRuleCategory

Optional enumeration. When requesting Structured fare rules (see fareRuleType above), optional to use FareRuleCategory to restrict the fares returned to one or more categories. Multiple categories can be requested.

Valid values are:

  • Advance Reservations/Ticketing
  • MinimumStay
  • MaximumStay
  • Stopovers
  • Penalties

None

PaymentCriteria

Optional object to send the BIN of the credit card to be used for payment, which returns any credit card fees that may be charged based on the POS region. The response returns any credit card fees based on POS region in Price/PriceBreakdown/Fees.

Includes IssuerIdentificationNumber.

Supported only for NDC. Not supported for GDS.

Optional

 

IssuerIdentificationNumber

String. Send the BIN of the credit card to be used.

Required if PaymentCriteria sent

 

Full Payload Request

Supported only for GDS. Not supported for NDC.

If you do not price an itinerary from a Travelport JSON search response, or if you choose not to send a reference payload request, the AirPrice request must include passenger data and the itinerary details. Required payload objects are detailed here. For modifiers see Optional Pricing Modifiers below.

POST Request – no fare family pricing

Use the following resource for a full payload AirPrice request: 

POST price/offers/buildfromproducts

Base path:

Pre-production https://api.pp.travelport.com/9/air/

Production https://api.travelport.com/9/air/

POST Request with fare family pricing

Use the following resource for a full payload request when also requesting fare family pricing. Base path is same as above.

POST farefamily/catalogofferings/buildoptionsfromcatalogproducts

Payload

Object Description Required Optional

OfferQueryBuildFromProducts

OR

Top level object when fare family pricing is not requested.

None

See key value pairs listed above for reference payload from AirSearch.

CatalogOfferingsQuery
BuildOptionsFromProducts

Top level object when requesting fare family pricing. See Fare Family Pricing for details. Key value pairs and remainder of request is the same.

ProductSelections

Top level object for CatalogOfferingModifier.

None

 

None

 

CatalogOfferingModifier

Includes PricingModifiersAir, PassengerCriteria, and ProductCriteriaAir.

None

 

None

 

PassengerCriteria

Defines the type of passenger to search for. Send one PassengerCriteria object for each passenger type code (PTC).

For a full list of PTCs, see the Tools page for the Universal API Reference Data file.

AirPrice supports up to 9 total passengers across all PTCs.

Notes on PTC and age
  • Travelport recommends that age be sent only with PTCs that require age for pricing.
  • Travelport recommends sending the PTC CNN for a child instead of CHD, in which NN is the child's age; e.g., C08, C10. Many fares cannot be quoted for code CHD.
  • The age for CNN is generally between 2 and 11 inclusive, with ADT fares returned for ages 12 and up; however, this can vary by airline and country.
  • The age for INF must be either 0 or 1.
  • In the Search and Price requests, when sending specifiedPassengerTypeCodeOnlyInd as true for a child, also send the PTC CNN along with the age of the child. (This indicator is used to return offers for only the specified PTC.)
  • During booking, date of birth is required for all child and infant PTCs (Add Traveler payload in Traveler/birthDate).

When running a multiple passenger request for NDC on Qantas, Qantas supports only these PTCs: ADT, CHD, CNN, INF. Sending any other PTC may result in an error at ticketing.

None

 

passengerTypeCode: The PTC of the passenger type. Default is ADT. Common PTCs are as follows:

  • ADT: adult
  • CHD: child
  • INF: infant without a seat
  • INS: infant with a seat
  • UNN: unaccompanied child

number: The number of passengers in that PTC for this request. Default is 1.

age: The age of the passenger. See Notes on PTC and age to left.

specifiedPassengerType
CodeOnlyInd
: Boolean. AirPrice returns pricing only for the specified PTC. This indicator sets behavior if no offers for that PTC are available:

  • true: If no fares are available for the specified PTC, returns the error "NO VALID FARE FOR INPUT CRITERIA".
  • false: If no fares are available for the specified PTC, returns fares for the default ADT (adult) PTC.

customerLoyalty: Any loyalty or frequent flyer number. Send with supplier with the supplier code for the loyalty program. e.g, QF. NDC only, not supported for GDS.

ProductCriteriaAir

Top level object for itinerary details.

Includes one or more SpecificFlightCriteria objects.

None

None

SpecificFlightCriteria

Provides details for one leg of travel on the itinerary to price. Each SpecificFlightCriteria details one origin and destination (O&D) pair.

carrier: Airline carrier code

flightNumber: Flight number

departureDate: Date of departure in YYYY-MM-DD format (e.g., departureDate="2019-12-06")

departureTime: Time of departure in HH:mm:ss (24-hour) format (e.g., departureTime="18:00").

arrivalDate: Date of arrival in YYYY-MM-DD format.

arrivalTime: Time of departure in HH:mm:ss (24-hour) format.

from: Departure city/airport code.

to: Arrival city/airport code.

cabin: Cabin class to price.

classOfService: Class of service to price.

segmentSequence: Place of this flight in the sequence, starting with 1 for the first flight in the sequence.

brandTier: When requesting branded fares (returnBrandedFaresInd=true), send the brand tier to return pricing for.

CabinPreference

Optional. See CabinPreference in reference payload from AirSearch.

 

 

FareRuleCategory

Optional. See FareRuleCategory in reference payload from AirSearch.

 

 

Optional Pricing Modifiers

Any of the above price request payloads can include optional pricing modifier objects in the CatalogOfferingModifier object.

If any search modifiers were included in the search request, those modifiers are cached and sent with the AirPrice reference payload request. If you send any price modifiers in the AirPrice request, all cached modifiers are discarded and only the modifiers sent in the AirPrice request are used.

Object Description Required Optional

PricingModifiersAir

 

Any optional pricing modifiers. Includes FareSelection and OrganizationIdentifier.

None

currencyCode: String. Send the currency type to return if you want to override the default currency specified with your PCC.

OrganizationIdentifier

Any account code or codes.

Array of account codes to return negotiated fares. If sent, the following key value pairs are required:

  • supplier: If the identifier applies to a specific suppler, that supplier code.
  • type: Type of code; supported values are:
    • Account for all GDS content.
    • Organization: Only for NDC on Qantas, use the value Organization to send an organization code instead of an account code.
  • value: The account code.

 

FareSelection

Request fares with or without specific restrictions.

Not supported for NDC. No NDC content is returned if any values are set to true.

None

fareType: Supported values:

  • PublicFaresOnly: Only public fares for specified itinerary.
  • PrivateFaresOnly: Only private fares for the itinerary.
  • Private&PublicFares: Lowest of all public and private fares.
  • NetFaresOnly: Only net fares. If no net fares are available, the response returns the error NO VALID FARE FOR INPUT CRITERIA and does not return any fares. If net fares were requested in AirSearch, AirPrice by default also returns net fares.

prohibitAdvancePurchaseFaresInd: Boolean. true prevents the return of fares that require advance purchase. Default is false.

prohibitMaxStayFaresInd: Boolean. true prevents the return of fares that require a maximum stay. Default is false.

prohibitMinStayFaresInd: Boolean. true prevents the return of fares that require a minimum stay. Default is false.

refundableOnlyInd: Boolean. true prevents the return of fares that are not fully refundable. Default is false.

AirPrice Responses

The response format is the same for reference and full payload requests. The following table lists all objects in the AirPrice response and the information in each.

Some objects in the response vary if fare family pricing and/or brand attributes were requested. For a matrix of possible response formats, see AirPrice Response Formats in the Air Pricing topic.
Object Description

OfferListResponse

or

Top level object for the response when fare family pricing is not requested.

Key value pairs:

transactionId: System-generated unique ID for this response. Can be used for internal tracking and troubleshooting.

traceId: Returned if a custom trace ID was sent in the request header. See Transaction and Trace IDs for details.

See Identifier Values, IDs, and Transaction IDs in the Air Shopping Guide for more about identifiers in the JSON APIs.

CatalogOfferingsResponse

Top level object for the response when fare family pricing is requested.

Returns trace and transaction IDs per above.

Offer

or

When fare family pricing is not requested, a single Offer object is returned.

Kay value pair:

id: Internal identifier for the offer.

Includes ProductOptions, Product, Price, and TermsAndConditions.

CatalogOfferings/CatalogOffering

When fare family pricing is requested, the response returns CatalogOfferings instead of Offer. CatalogOfferings includes CatalogOffering, which returns one instance for each fare in the fare family.

Kay value pair:

id: Internal identifier for the offer.

Each instance of CatalogOffering includes ProductOptions, Product, Price, and TermsAndConditions.

ProductOptions

Top level object for Product.

Product

Lists the flight or flights for one leg of the requested itinerary at the same price. Multiple instances returned if multiple legs on the itinerary (round-trip or multi-city).

Key value pairs:

  • id: Product identifier starting with p as in p0, p1, p2, etc.
  • totalDuration: Value providing duration of the segment in hours (H) and minutes (M).

Includes FlightSegment and PassengerFlight.

FlightSegment

Details about a discrete flight or connecting flights making up one option for that leg of the itinerary. Key value pairs:

  • id: Segment identifier starting with s as in s1, s2, etc.
  • sequence: The place of that segment within the itinerary, e.g., 1 for the first segment and 2 for the second.
  • connectionDuration: Length of any connection, if applicable, in hours (H) and minutes (M).
  • boundFlightsInd: The bound flights indicator boundFlightsInd is a Boolean variable indicating segments are married/bound. When returned with a value of true, the flight segments are polled together and usually share the same fare basis code and class of service. The indicator is returned as true for all leading segments on one leg of the flight, and not returned for the last segment of the bound flight leg journey, indicating where the bound flights end. For example, if an O&D pair has 3 flight segments, boundFlightsInd is returned for the first two segments on that leg. If the segments are not bound, boundFlightsInd is false and not returned. Not returned for NDC. With AirSearch 21.9.11 and later, and Fare Family Search 21.9.10 and later, the definition of boundFlightsInd was updated to specify which flights in a single or double connection must be sold together, which results in fewer booking failures. Previously, boundFlightsInd specified which flights in a single or double connection are polled together, which in some instances can cause booking failures.

boundFlightsInd not returned for NDC.

Includes Flight.

Flight

Array. One instance for each flight in the FlightSegment. Multiple instances are returned when there are multiple flights. A direct flight option has one Flight object while connecting flights have a Flight object for each flight on the leg.

Key value pairs:

  • duration: Time of the flight in hours (H) and minutes (M).
  • carrier: Airline carrier.
  • number: Flight number.
  • operatingCarrier: IATA code for the supplier operating the flight, e.g., DL.
  • operatingCarrierName: Name of the carrier, e.g., Delta Air Lines.
  • id: Flight identifier.
  • Includes the Departure and Arrival objects
When fare family pricing is returned, Flight does not include details above but instead returns a reference identifier (FlightRef) matching to detailed flight information in ReferenceListFlight.

PassengerFlight

For each instance of ProductAir, one PassengerFlight object for each PTC requested provides PTC details and class and brand information. Key value pairs:

  • passengerQuantity: Number of passengers in that PTC
  • passengerTypeCode: The PTC code
When PassengerFlight is the same across the entire connection, one PassengerFlight is returned. When there are differences across the connection, a PassengerFlight object is returned for each flight.

Includes the FlightProduct object.

FlightProduct

Key value pairs:

  • segmentSequence: Order of the flight/s in the sequence.
  • classOfService: Class of service code.
  • cabin: Cabin class
  • fareBasisCode: Fare basis code for the flight.
  • fareType: Possible values returned are PublicFare, AgencyPrivate Fare, AirlinePrivateFare, or NetFare.

carCode Commercial Airline Agreement number.

valueCode Value code for the fare.

AirPrice 21.11.7 and later return the net ticket data (NTD) objects carCode and valueCode if a fare returned has a private fare component and private fares were requested (fareType of AgencyPrivateFare. GDS only; not supported for NDC.

If branded fares were requested, includes Brand object.

Brand

Returned only if branded fares were requested. Contains the BrandRef attribute, which provides an internal identifier (e.g., b1) to the brand information in ReferenceListBrand per below.

Price

Price details for the offer. Key value pairs:

  • id : Price object id, e.g., price0, price1.
  • currencyCode: The code for the currency the price is returned in. Unless changed in the request, the currency is the default associated with your provisioned PCC from Travelport. To change the default currency for an individual response, see Override Currency in AirPrice Modifiers.
  • Base: The base fare across all passengers and PTCs.
  • TotalTaxes: All taxes in the fare across all passengers and PTCs.
  • TotalFees: All fees in the fare across all passengers and PTCs.
  • TotalPrice: The total fare price across all passengers and PTCs including base fare, taxes, and fees.

Includes PriceBreakdown.

PriceBreakdown

Provides a price breakdown for each PTC. Key value pairs:

  • quantity: Number of passengers in that PTC.
  • requestedPTC: The PTC.

Includes the Amount object.

Each PriceBreakdownAir object returns pricing for one passenger of a single PTC. On multi-passenger itineraries, note the total price returned in Price/TotalPrice for the price for the itinerary.

Commission

AirPrice 21.11.9 and later. Any commission filed by an airline in a CAT35 fare is returned in PriceBreakdown/Commission. The amount is either a percent of the fare component (type CommissionPercent and the Percent object) or an amount (type CommissionAmount with Amount/value). Commission for any fare with a private fare component is returned here. GDS only.

Amount

Includes the Base, Taxes, Fees, and Total objects.

Base

Base fare for one passenger of that PTC type.

Taxes

Includes the following objects:

  • TotalTaxes: Sum total of all taxes for that PTC.
  • An instance of Tax for each separate tax in the fare. Key value pairs are taxCode (code for that tax) and value (amount of that tax).

Fees or FeesDetail

Provides breakdown of fees, if applicable. Includes TotalFees object to return sum of any fees for that PTC. May include one or more Fees objects to break down individual fees.

Fee

Provides additional information on fees, if applicable. Includes the attributes:

  • feeCode: The code for the fee, such as OB for OB fees.
  • description: Any description for that fee code.
  • text: The amount of the fee.

If OB-T fees are part of the price, those are detailed here. OB-T fees are ticketing fees independent of the form of payment. They are defined by the carrier and can be based on any of multiple criteria.

Total

Total of base fare and all taxes and surcharges for that PTC type.

NetBaseAmount

In Price 21.11.7 and later only, for any fare that has a private fare component (fareType is AgencyPrivateFare), PriceBreakdown includes the NetBaseAmount object to return the base amount of the fare before fees, taxes, and surcharges. See above.

TermsAndConditions

or

TermsAndConditionsFull

Any terms and conditions returned by the carrier, such as baggage restrictions and costs.

Includes the attribute:

  • validatingCarrier: Validating carrier.
  • ExpiryDate: The last date and time to ticket this offer.

Depending on information returned by the carrier, may include the BaggageAllowance object.

Includes FareRuleInfo if fare rules were requested.

BaggageAllowance

If returned by the carrier, provides details about a specific type of baggage, or if a baggage embargo is in effect. Multiple instances of BaggageAllowance may be returned.

The baggage allowance is displayed by baggage type with associated conditions (max pieces, weight, and unit of weight) and charges (fee with currency code), if applicable.

Key value pairs:

  • url: Link to additional baggage policy information.
  • passengerTypeCodes: PTCs to which this baggage allowance applies.
  • baggageType: Type of baggage to which this information applies. Possible values:
    • FirstCheckedBag: First checked bag.
    • SecondCheckedBag: Second checked bag.
    • CarryOn: Carry on bag.
    • BaggageEmbargo: Baggage service is restricted by embargo.

Includes the ProductRef, BaggageItem, and SegmentSequenceList objects.

ProductRef

The identifier for the Product to which the baggage information applies. Matches to the value in Product/id.

BaggageItem

Details about fees and dimensions for specific types of baggage. Key value pairs:

  • quantity: Number of pieces of baggage allowed in this category.

Includes BaggageFee and Text objects.

BaggageFee

Provides baggage fee charges in the following attributes:

  • code: Currency code that applies to the charge.
  • approximateInd: true indicates the charge is approximate, false indicates the charge is an exact price.
  • value: The amount of the charge, in the currency noted in the code attribute.

Text

Text string providing measurements for the allowed baggage dimension; for example, UPTO50LB/23KG AND UPTO62LI/158LCM.

SegmentSequenceList

Order of the corresponding flight segments in the sequence.

OrganizationIdentifier

If account codes were sent in the air search request those codes are returned here.

FareGuaranteePolicy

In Price 21.11.7 and later only, for any fare that has a private fare component (fareType is AgencyPrivateFare), TermsAndConditions includes the FareGuaranteePolicy object to return the value code for the net fare. See NTD above.

FareRuleInfo

Returned when fare rules are requested with fareRuleType.

Includes array of FareRuleInfo. Each instance returns one rule. Key value pairs:

  • ruleNumber: An identifier for the type of rule.
  • tariffNumber: The ATPCO tariff number applying to the geographic area.

Includes flightSegmentIDList and FareRuleText objects.

flightSegmentIDList

Returned only when fare rules are requested. Identifies the segment or segments to which the rule applies. Matches to Offer/Product/id.

FareRuleText

Returned only when fare rules are requested. An array of FareRuleText objects may be returned, each providing the name and text of the rule itself:

  • name: The name of the rule.
  • value: The actual text of the rule.

ReferenceList

Returned only when fare family and/or brand pricing was requested. Consolidates common fare family and/or brand information for all flights. Includes instances of these types:

  • ReferenceListFlight: Returned when fare family pricing is requested. Consolidates flight details such as departure and arrival per below.
  • ReferenceListBrand: Returned when brand pricing is requested. Consolidates brand information for a flight per below.

ReferenceList

AirPrice returns ReferenceList only when brand details and/or when fare family pricing was requested.

ReferenceListBrand
Object Description

ReferenceListBrand

ReferenceList returns ReferenceListBrand when brand details were requested.

Brand

Array. Each instance provides details for one BrandRef id.

Key value pairs:

name: Brand name provided by the carrier.

id: Internal brand reference identifier used throughout the response.

tier: Brand tier (not returned for NDC).

shelfNumbers: If the carrier has provided it for this brand, the shelf number is the number for a grouping of comparable brands that share similar ticket and flight attributes.

Includes Identifier and BrandAttribute objects.

Identifier (ReferenceListBrand/Brand/Identifier)

Brand identifier information.

Key value pairs:

authority: Name of the carrier. Returned for NDC only.

value: Brand identifier used by the carrier.

BrandAttribute

Array of features that are included, chargeable, or not offered for this brand.

Contains one or more instances of the following two paired attributes:

classification: The brand attribute classification. Possible values are:

  • CarryOn
  • CheckedBag
  • Meals
  • SeatAssignment
  • Rebooking
  • Refund
  • WiFi

inclusion: Possible values are:

  • Included: Attribute is included in the brand at no additional charge.
  • Chargeable: Attribute is available for the brand at a cost.
  • Not Offered: Attribute is not available for this brand.
ReferenceListFlight
Object Description

ReferenceListFlight

ReferenceList returns ReferenceListFlight when fare family pricing is requested.

Consolidates common journey information for each flight.

The value in Product/FlightSegment/Flight/FlightRef matches to the value here in ReferenceListFlight/Flight/id.

Key value pairs:

  • duration: Time of the flight in hours (H) and minutes (M).
  • carrier: Airline carrier.
  • number: Flight number.

Includes the Departure and Arrival objects.

Flight

One instance for one flight.

Key value pairs:

duration: Time of the flight in hours (H) and minutes (M).

carrier: Airline carrier.

number: Flight number.

operatingCarrier: IATA code for the supplier operating the flight, e.g., DL.

operatingCarrierName: Name of the carrier, e.g., Delta Air Lines.

id: id for internal flight reference number.

For GDS, the Flight id is formatted as the letter ‘s’+ unique numeric value, as in s1.

For NDC, the Flight id is formatted as the two letter NDC carrier code + s+ unique numeric value, as in QFs1.

Includes Departure, Arrival, AvailabilitySourceCode, and IntermediateStop objects.

Departure

Provides the following arrival information for the flight in ReferenceListFlight:

  • location: IATA code for the arrival airport.
  • date: Date of the flight arrival in YYYY-MM-DD format.
  • time: Arrival time of the flight in HH:MM:SS format.

Arrival

Provides the following departure information for the flight in ReferenceListFlight:

  • location: IATA code for the arrival airport.
  • date: Date of the flight arrival in YYYY-MM-DD format.
  • time: Arrival time of the flight in HH:MM:SS format.