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
Section titled “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) with optional paxId, synthesized as PX1..PXn when omitted. |
POST /json/v0/offers/priceAuthorization: <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
Section titled “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
Section titled “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, or a metro round trip’s return leg uses different airports than the outbound. |
ERR-3004 | 400 | Offer came from OrderReshop and must be priced with quote order. |
ERR-3008 | 409 | The seller’s contracted fare for the selected journey has not completed pricing verification. |
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. |