Price offer
POST /json/{version}/offers/price prices offers selected from create offers and returns a single quoted offer under a new offerId. It is the JSON counterpart of the NDC IATA_OfferPriceRQ.
The selected cached offers (one per journey) are quoted together, and the merged result is stored under a new offerId for use with create order. Returns 201 Created on success.
Offers returned by reshop order cannot be priced here — use quote order instead.
Request
| Field | Description |
|---|---|
selections | One entry per journey: the offerId from offer search and the offerItemIds to price. Offers must reference distinct journeys and share one currency. IDs must be unique within the request. |
passengers | Same rules as offer search: type (ADT, CHD, INF, UNN) with optional paxId, synthesized as PX1..PXn when omitted. |
POST /json/v0/offers/price
Authorization: <bearer token from /auth/token>
Content-Type: application/json
{
"selections": [
{
"offerId": "OF-25a8bea9-89f5-11ea-98be-25340131a18b",
"offerItemIds": [
"OFI-25a8bea9-89f5-11ea-98be-25340131a18b-0"
]
}
],
"passengers": [
{
"paxId": "PX1",
"type": "ADT"
}
]
}
Response
data.offer is the quoted offer: offer-level totalPrice is the quoted booking total, and per-item totalPrice rows are updated from the quote breakdown. Unlike offer search, items do not embed a flight object — each item references top-level data.journeys through journeyRefIds.
{
"data": {
"pax": [
{
"paxId": "PX1",
"ptc": "ADT"
}
],
"offer": {
"offerId": "OF-8c1e2f04-9d21-4b7a-b3c2-77c101f1a001",
"ownerCode": "MX",
"expiresAt": "2026-09-15T12:00:00.000Z",
"totalPrice": {
"total": {
"amount": 99,
"currency": "USD"
},
"base": {
"amount": 91.5,
"currency": "USD"
},
"taxes": [
{
"code": "US",
"amount": {
"amount": 7.5,
"currency": "USD"
}
}
],
"fees": []
},
"items": [
{
"offerItemId": "OFI-8c1e2f04-9d21-4b7a-b3c2-77c101f1a001-0",
"journeyRefIds": [
"JK1"
],
"totalPrice": {
"total": {
"amount": 99,
"currency": "USD"
},
"base": {
"amount": 91.5,
"currency": "USD"
},
"taxes": [
{
"code": "US",
"amount": {
"amount": 7.5,
"currency": "USD"
}
}
],
"fees": []
},
"fare": {
"fareBasisCode": "Y",
"cabinTypeCode": "Y",
"rbd": "Y",
"priceClassRefId": "EZU",
"paxRefIds": [
"PX1"
],
"bundleName": "Nice"
}
}
]
},
"journeys": [
{
"journeyId": "JK1",
"origin": "SLC",
"destination": "CHS",
"departureDateTime": "2026-09-15T08:00:00",
"arrivalDateTime": "2026-09-15T12:00:00",
"duration": "PT4H",
"stops": 0,
"segments": [
{
"marketingCarrier": "MX",
"marketingFlightNumber": "101",
"origin": "SLC",
"destination": "CHS",
"departureDateTime": "2026-09-15T08:00:00",
"arrivalDateTime": "2026-09-15T12:00:00",
"cabinTypeCode": "Y",
"rbd": "Y"
}
]
}
]
},
"error": null
}
Price offer errors
| Code | HTTP status | Cause |
|---|---|---|
ERR-1002 | 404 | Unsupported version segment in the path. |
ERR-1005 | 422 | Request validation failed: duplicate IDs, infants exceeding adults. |
ERR-3000 | 404 | Referenced offer could not be found. |
ERR-3001 | 404 | Referenced offer has expired. |
ERR-3002 | 400 | One or more offer items not found on the offer. |
ERR-3003 | 400 | Selected offer items do not form a valid selection. |
ERR-3004 | 400 | Offer came from OrderReshop and must be priced with quote order. |
ERR-8000 | 401 | Missing or invalid API key or bearer token. |
ERR-8001 | 403 | API key not authorized for this request. |
ERR-8002 | 503 | Authentication store unavailable. |
ERR-9001 | 500 | Unexpected upstream response. |
ERR-9002 | 503 | Offer cache unavailable. |