Ancillary and EMD Guide
Ancillaries are any paid optional services filed by airlines and travel providers as available for selected air segments. Available ancillaries vary by airline and segment, but can include baggage, paid seats, pet/animal transportation, unaccompanied minors, and so on.
Related Content: JSON APIs Guide, Booking Guide, Ancillary Shop API Reference, Ancillary Price API Reference, Ancillary Book API Reference
In this topic:
- Basic Concepts
- Ancillary Support
- Ancillary Payment/EMDs
- Ancillary Workflow
- Canceling Ancillaries
- Request and Response Layout Diagrams
Basic Concepts
An ancillary is any paid optional service filed for a flight. Industry examples include paid baggage, carbon offsets, pet transport fees, and unaccompanied minor charges.
Ancillaries can be shopped and added to the reservation in a workbench session for either the initial booking workflow, or for an existing reservation.
Key points:
-
Ancillaries are airline specific.
-
Ancillary offers returned are specific to a traveler and to a segment.
-
An ancillary is paid for separately from the fare, and an electronic miscellaneous document (EMD) is issued for that payment.
Paid seats are a type of ancillary but are detailed in the Seats Guide because they use the seat map and book requests instead of the ancillary shop and book requests detailed here.
Bundled Fares
If an ancillary 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 an ancillary in a bundled fare. An ancillary bundle can be a combination of ancillaries, or an ancillary and a seat assignment. At this time bundled fares are supported only for NDC in Search and AirPrice (i.e., they cannot yet be booked), and only for UA dynamic bundled fares.Ancillary Support
The JSON APIs currently support the following ancillaries in the booking and post-booking workflows as noted below for NDC and GDS.
For seats support, see the Seats Guide.
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.
Ancillary type |
Ancillary Shop after AirPrice (without a workbench) | Shop and book ancilaries in the initial booking workflow: | Shop and book ancilaries for an existing reservation | Cancel ancillary | ||||
---|---|---|---|---|---|---|---|---|
GDS |
NDC* |
GDS |
NDC |
GDS |
NDC |
GDS |
NDC* |
|
Paid baggage |
No |
Yes |
No |
No |
Yes |
Yes |
Yes |
Yes |
Carbon offset |
No |
No |
No |
No |
Yes |
No |
No |
n/a |
Non-baggage paid ancillaries (e.g., pets, meals, lounge access, wifi) |
No |
No |
No |
No |
Yes |
Yes |
No |
Yes |
Ancillary Payment/EMDs
Payment for any ancillary, including paid seats, is issued through an EMD (electronic miscellaneous document) and is separate from the payment for the fare. EMDs can be either EMD-A (EMD is associated to a ticket) or EMD-S (standalone EMD). At this time the JSON APIs support only EMD-A.
EMDs for NDC ancillaries are issued directly from the carrier, so there are some differences from GDS:
-
For GDS, use the EMD display and void requests to retrieve or void an EMD.
-
For NDC, EMD details are returned in a Reservation Retrieve. To void an EMD, void the associated NDC itinerary; see the NDC Modify, Cancel, and Exchange Guide.
For GDS ancillaries, you can pay for the ancillary either during booking or when you ticket the booking. In either case, to issue an EMD for the ancillary on the workbench commit, include the offer ID for the ancillary in the Add Payment request. See the Ticketing Guide for details.
NDC carriers vary as to when they require ancillary payment.
For detailed NDC support by carrier, see the Knowledge Base article NDC capabilities by airline through JSON API (see Knowledge Base NDC Resources if you need login assistance).
Workflow Summary
The ancillary workflow is supported only for an existing reservation, not during the initial booking session.
Ancillary Workflow for Existing Reservation
As noted above in Ancillary Support, you can add most ancillaries to an existing reservation.
Follow these steps to add an ancillary to an existing booking. For all seats, see the Seats Guide.
Step # |
Ancillary Booking Workflow Step |
Description and Notes |
API Reference |
---|---|---|---|
1 |
Create workbench for existing reservation |
Returns a system-generated identifier for the workbench that must be sent in subsequent requests for that workbench. |
|
2 |
Ancillary shop request |
Shop for available ancillaries. |
|
3 |
Ancillary price request |
Price selected ancillary. Required for NDC. Not supported for GDS.
|
|
4 |
Ancillary book request |
Add selected ancillary to workbench. |
|
5 |
Add form of payment (optional) |
Optional. Ancillary payment requirements vary, see Ancillary Payment and EMDs above. Add form of payment (FOP) information to be used for the paid ancillary, if issuing the EMD at end of session. The response returns a system-generated identifier for the FOP that is part of the reservation record and sent in the Add Payment request next. (Note FOP is not stored in the reservation for NDC.) |
|
6 |
Add payment (optional) |
Optional. Send to issue EMD for the ancillary on commit. Include IDs for offer/s to pay for and FOP to use. |
|
7 |
Commit the workbench |
Final step in the workflow. Depending on payment, one of the following occurs:
|
Commit Workbench API Reference
|
Workflow Diagrams
Each box in the diagram represents one API call in the workflow.
*Ancillary price is required for NDC; not supported for GDS.
**FOP and Payment requirements for NDC vary by carrier per Ancillary Support above.
Add FOP and Payment (optional)
As part of the workflow, you can send form of payment (if not already in the reservation) and payment for the ancillary offer. If you are also ready to ticket the booking, send payment for both the ancillary offer and the air offer. Reference both the offer and the FOP in the request. See the Add Payment API Reference for endpoint and payload details.
The following example adds payment for both an offer ("id": "offer_1",) and an ancillary ("id": "an_o1").
{
"Payment": {
"id": "payment_1",
"Identifier": {
"authority": "Travelport",
"value": "A0656EFF-FAF4-456F-B061-0161008D6A5E"
},
"Amount": {
"code": "AUD",
"minorUnit": 2,
"currencySource": "Charged",
"approximateInd": true,
"value": 63.1
},
"FormOfPaymentIdentifier": {
"id": "formOfPayment_5",
"FormOfPaymentRef": "formOfPayment_5",
"Identifier": {
"authority": "Travelport",
"value": "A0656EFF-FAF4-456F-B061-0161008D6FOP"
}
},
"OfferIdentifier": [
{
"id": "offer_1",
"offerRef": "offer_1",
"Identifier": {
"authority": "Travelport",
"value": "07664bb3-37a0-4c63-a2ef-ed71b5f48d49"
}
},
{
"id": "an_o1",
"Identifier": {
"authority": "Travelport",
"value": "3427d42c-a72d-49ff-b29e-7bb8faa28a47"
}
}
]
}
}
Commit
As the last step in the flow, commit the workbench.
For an initial booking, the commit creates a reservation with the ancillary details. If FOP and payment for the ancillary were also sent, an EMD for the ancillary is issued.
For an existing reservation, the commit causes one of the following:
-
If no payment was sent, the commit updates the held booking with the ancillary.
-
If FOP and payment for the ancillary were sent, the commit updates the held booking with the ancillary and issues an EMD for the ancillary.
-
If FOP and payment for the ancillary and the air offer were sent, the commit issues the ticket and an EMD for the ancillary.
The commit response returns the following ancillary-specific details in these objects:
- Product: Product and ancillary identifiers, and the seat assignment if the ancillary is a paid seat.
- Document: The Document object includes both the ticket number and the EMD number, if issued.
The following excerpts from the commit response show the ancillary details in Product, and the ticket and EMD numbers and charged amounts in Document.
...
"Product": [
{
"@type": "ProductAncillary",
"id": "product_seat_2",
"Identifier": {
"authority": "Travelport",
"value": "b20e57ff-855a-403d-b746-aae16b1e26f4"
},
"Ancillary": {
"@type": "AncillaryAirSeat",
"FlightRef": [
"Flight_01"
],
"SeatAssignment": {
"Seat": "018A"
}
}
}
]
}
],
...
"Document": [
{
"@type": "DocumentTicket",
"Number": "2203768856641",
"TravelerIdentifierRef": {
"id": "travelerRefId_1",
"value": "877fed2a-0704-42ee-b98b-145fbaff9ed8"
},
"Amount": {
"Total": 1016.8
}
},
{
"@type": "DocumentEMD",
"Number": "2202901087112",
"TravelerIdentifierRef": {
"id": "travelerRefId_1",
"value": "877fed2a-0704-42ee-b98b-145fbaff9ed8"
},
"Amount": {
"Total": 49.3
},
"EMDDescription": {
"value": "SEAT ASSIGNMENT"
}
}
]
Canceling Ancillaries
With Ancillaries 24.11.27 and later, you can use the Ancillary Cancel request to cancel paid baggage from an existing reservation. Baggage cannot be canceled in the initial booking workflow. GDS only, not supported for NDC. This is the same request used to cancel seats.
Request and Response Layout Diagrams
The following overview diagrams illustrates the basic structure of the requests and responses for ancillary shop and price. These diagrams don't include every object that might be returned, and diagrams may not reflect minor updates.
Ancillary Shop
The following diagram illustrates the general structure of the Ancillary Shop request and response, including most high-level objects.
Ancillary Price
The following diagram illustrates the general structure of the Ancillary Price request and response, including most high-level objects.