Seats Guide
The Seats APIs support the optional selection and booking of free and paid seats for both GDS and NDC content.
Related Content:JSON APIs Guide, Booking Guide, Seat Map API Reference, Seat Book API Reference
In this guide:
Basic Concepts
An assigned seat included in the price of the fare is a free seat. The customer must still select the seat but no separate payment is required. When a seat assignment must be purchased in addition to the fare, if desired, that's a paid seat.
Key points about paid seats:
-
Paid seats are a type of ancillary, which is any paid optional service filed for a flight. Other industry examples are paid baggage, carbon offsets, pet transport fees, and unaccompanied minor charges. Paid seats are detailed here instead of with other ancillaries such as paid baggage because they use the seat map and book requests that are also used for free seats instead of the ancillary shop and book requests.
-
Paid seats are paid for separately from the fare. For paid seats you must add a separate payment either before or during ticketing, and an electronic miscellaneous document (EMD) is issued for that payment. See Ancillary Payment & EMDs in the Ancillary Guide for more about EMDs, including payment requirements for specific NDC carriers.
Both free and paid seats follow the same workflow: You first send a seat map request to return a list of available seats and prices as applicable, followed by a seat book request to select the chosen seat and add it to the workbench.
You can send a seat map request to check availability at various points in the workflow, per the support table below.
The seat map response returns seat offers for each traveler segment, along with the status and characteristics of each seat. These seat offers are similar to offers in a Search response. In the JSON Search APIs, an offer is a product available at a specific price under a set of terms and conditions. A product is the flight or connecting flights for one leg of the itinerary, plus a service level that includes the cabin class and any fare codes that may apply. At booking, the selected offer from the Search response - including the flight/s, service level, price, terms and conditions, and brand if applicable - is converted into a single Offer object that is subsequently returned for that booking.Free seats are returned in an offer with a price point of zero. Paid seats are returned in one or more offers, with seats in each offer available at the same price.
The following seat status codes are commonly returned by airlines:
-
A: Available
-
O: Occupied
-
R: Restricted
-
N: No Seat
The seat book request is sent in a workbench session to add the selected seat to the workbench. Commit the workbench to book the seat.
Bundled Fares
If a seat is combined with an air offer, that offer is called a bundled fare and is returned in the Search API response. No additional price is charged for a seat in a bundled fare. For any traveler who has selected an ancillary bundle with a seat, a paid seat offer with price 0 00 is returned in the seat map response. At this time bundled fares are supported only for NDC in Search and AirPrice, and only for UA dynamic bundled fares.
Seats Support
The JSON APIs support requesting seat maps and booking seats at various points in the workflows per below. Also see Canceling Seats later in this topic.
The NDC Instant Pay workflow (book and issue ticket in the same session) and the Add Product workflow do not support ancillaries or seats. These can be added after the reservation is created.
Seat Type |
Standalone Seat Map (full payload) |
Request seat map after Search* |
Request seat map after AirPrice**
|
Seat map and book in the initial booking workflow | Seat map and book for an existing reservation | Seat map and book in NDC Instant Pay flow |
Change seat (cancel & rebook seat) |
Cancel seat |
|||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
GDS |
NDC |
GDS |
NDC |
GDS |
NDC |
GDS |
NDC |
GDS |
NDC |
NDC only |
GDS |
NDC |
GDS |
NDC |
|
Paid seats |
Yes |
No |
Yes |
Temporarily unavailable |
Yes |
Yes |
No |
Yes |
Yes |
Yes |
Yes |
Yes Supported only for existing reservation, not during initial booking |
Yes |
Yes Supported only for existing reservation, not during initial booking |
Yes |
Free seats |
Yes |
No |
Yes |
No |
Yes |
Yes |
Yes |
Yes |
Yes |
Yes |
Yes |
Yes |
Yes |
Yes |
Yes |
Seats Workflows
Seat Availability before Booking
You can send the Seat Map request, which sends identifiers from a previous search or price request, to check availability at various points in the JSON APIs workflow, per the support table above.
The Standalone Seat Map request is a full payload request that sends flight details including a booking code without needing a previous request. It returns a view-only seat map and can be sent on its own, either within or outside of a workbench session. (GDS only; not supported for NDC.)
The seat booking workflow, however, must take place in a reservation workbench session per the following sections.
Seat Map and Selection Workflow during Booking
When selecting seats as part of the initial booking workflow, send the seat map and book requests during the workflow as follows. This creates a held booking with assigned seats.
- Create a reservation workbench.
- Add offer.
- Add traveler.
- Send a seat map request if not already requested prior to the workbench session (cached only for GDS and only after a Search request).
- Send one seat book request for each segment. You can include multiple travelers in each request.
- Commit the workbench.
Seat Map and Selection Workflow for Existing Reservation
Take the following steps to add seats to an existing reservation. This flow updates the held booking by adding assigned seats.
- Create a post-commit workbench.
- Send a seat map request if not already requested prior to the workbench session.
- Send one seat book request for each segment. You can include multiple travelers in each request.
- Commit the workbench.
Seats Workflow Diagrams
Seats APIs Diagrams
Seat Map Layout Diagram
You can request seat availability by any of the following:
-
offer (all flights on the itinerary)
-
product (all flights on one leg of an itinerary)
-
segment sequence number/s (one or more individual flights).
The following diagram illustrates the general structure of the Seat Map request and response, including most high-level objects. This diagram shows the payload format sent during a workbench session. Seat map requests sent outside a workbench session use the same endpoint and a slightly different message payload. See the Seat Map API Reference for endpoint and reference details and examples.
The Seat Map response is the same regardless of where in the workflow the request is sent. The response returns one offer for each price level of seats. Each instance of CatalogOffering includes a Price object with a value of zero for free seats and a positive value for paid seats.
For example, a response might return one instance of CatalogOffering for seats costing 10 USD, another for seats costing 25 USD, and another for free seats at 0 USD. Information across those seats is consolidated in the ReferenceList object, which lists for each row in the cabin each seat number and the characteristics for that seat.
Seat Book Layout Diagram
After retrieving a list of available seats, you can send a seat book request for any available seat to add it to the workbench. For endpoints and references see the Seat Book API Reference.
The seat book response returns an identifier for the transaction.
The following diagram illustrates the general structure of the Seat Book request and response, including most high-level objects.
Canceling Seats
You can use the Ancillary Cancel request to cancel a seat that was booked in the same or a previous workbench session. If desired, you can then select new seats in the same or a subsequent workbench session.
Seat Cancel Support
Free and paid seat cancellation is supported in the booking and post-booking workflows as follows:
Seat Type |
Can be canceled out of the initial booking workflow for
|
Can be canceled for an existing reservation (cancels seats booked in the same or a previous workbench session): |
||
---|---|---|---|---|
GDS |
NDC |
GDS |
NDC |
|
Paid seats |
No |
Yes |
Yes |
Yes |
Free seats |
Yes |
Yes |
Yes |
Yes |
Seat Cancel during Initial Booking
The following full workflow includes canceling the seats selected in that workflow.
- Create a reservation workbench.
- Add offer.
- Add traveler.
- Send a seat map request.
- Send a seat book request for each segment. You can include a seat assignment for multiple travelers on the same segment in the same request.
- Send a seat cancel request.
- Optional: Repeat steps 4 and 5 above to select new seats if desired.
- Complete the reservation workflow as necessary, and then commit the workbench.
Seat Cancel for Existing Reservation
The following full workflow includes canceling the seats selected in a previous workflow.
You can also send a seat cancel request for seats added in the same post-booking workflow session.
- Create a post-commit workbench.
- Send a seat cancel request.
- Optional: Send seat map and seat book requests per above to select new seats, if desired.
- Complete the reservation workflow as necessary, and then commit the workbench.
Modifying Seats
You can send Seat Map and Seat Book to replace a seat on an existing booking and hold the existing seat assignment until the new seat book request is successful at commit. Per Seat Cancel above, you can cancel, commit, and rebook a seat assignment, but the seat assignment is lost if the subsequent seat book request is not successful at commit.
When seat map and book are requested for a flight that already has a seat assignment, the responses change as follows:
-
The Seat Map response includes the HeldAncillary object to return the current seat assignment on that flight.
-
The Seat Book response returns OfferID with @type OfferAncillaryModify, and includes the ModifyPrice object, which notes any price difference for the new seat.
Supported in the initial booking workflow only for free seats; supported for existing reservations for both free and paid seats. Not supported for changing a paid seat to a free seat, or modifying a seat when the current workbench contains any other seat book request. You must add payment and issue tickets at commit; you cannot hold the booking with the modified seats.