Offer ancillaries
Seat availability and the ancillary service list for a cached offer, before an order exists:
POST /json/{version}/offers/{offerId}/seats: seat maps with per-seat pricing. JSON counterpart of the NDCIATA_SeatAvailabilityRQ.POST /json/{version}/offers/{offerId}/services: purchasable services with per-passenger pricing. JSON counterpart of the NDCIATA_ServiceListRQ.
For the same lookups against an existing booking, see order ancillaries.
Request
Section titled “Request”offerId in the path is an offer returned by create offers or price offer. The body is required:
| Field | Description |
|---|---|
offerItemIds | Offer items to price ancillaries against. Must exist on the offer. |
passengers | Optional; same rules as offer search (type + optional paxId). Defaults to the passengers stored with the cached offer when omitted. Lap infants (INF) are excluded from seat and service scoping and may be omitted; sending only infant passengers returns ERR-1004. |
POST /json/v0/offers/OF-25a8bea9-89f5-11ea-98be-25340131a18b/seatsAuthorization: <bearer token from /auth/token>Content-Type: application/json
{ "offerItemIds": [ "OFI-25a8bea9-89f5-11ea-98be-25340131a18b-0" ], "passengers": [ { "paxId": "PX1", "type": "ADT" } ]}For the service list, replace /seats with /services; the body is identical.
Seats response
Section titled “Seats response”data.legSeatMaps holds one seat map per flight leg: decks[] → compartments[] → units[]. Each unit reports designator, assignable, an availability state (Open, Reserved, Blocked, Restricted, …), optional cabin properties (for example WINDOW, MIDDLE), and passengerPricing rows per passenger and offer item.
{ "data": { "legSeatMaps": [ { "departureStation": "SLC", "arrivalStation": "CHS", "equipmentType": "220", "segmentRefId": "SEG1", "decks": [ { "number": 1, "compartments": [ { "designator": "Y", "units": [ { "designator": "10A", "assignable": true, "availability": "Open", "group": "3", "properties": [ "WINDOW" ], "passengerPricing": [ { "offerItemId": "OFI-25a8bea9-89f5-11ea-98be-25340131a18b-0", "paxRefId": "PX1", "passengerType": "ADT", "amount": 25, "currency": "USD", "taxAmount": 0 } ] }, { "designator": "10B", "assignable": false, "availability": "Reserved", "group": "3", "properties": [ "MIDDLE" ] } ] } ] } ] } ] }, "error": null}Services response
Section titled “Services response”data.services lists each purchasable service with its ssrCode, display name, type, and segmentAvailability rows. Each availability row is scoped to a segment, journey, or leg (via segmentRefId / journeyRefId) and carries passengerPricing.
{ "data": { "services": [ { "ssrCode": "BAG1", "name": "First checked bag", "type": "Baggage", "feeCode": "BAG", "segmentAvailability": [ { "scope": "journey", "journeyRefId": "JK1", "passengerPricing": [ { "offerItemId": "OFI-25a8bea9-89f5-11ea-98be-25340131a18b-0", "paxRefId": "PX1", "passengerType": "ADT", "amount": 35, "currency": "USD", "taxAmount": 0 } ] } ] } ] }, "error": null}Offer ancillaries errors
Section titled “Offer ancillaries errors”| Code | HTTP status | Cause |
|---|---|---|
ERR-1002 | 404 | Unsupported version segment in the path. |
ERR-1004 | 400 | Invalid field value: all named passengers are lap infants. |
ERR-1005 | 422 | Request validation failed. |
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-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-9003 | 500 | Ancillary lookup failed upstream. |