Ticket as FOP API Reference
Get |
book/airoffer/reservationworkbench/{LocatorCode}/offers/buildfromoffer For {LocatorCode} send the locator code of the reservation to retrieve (returned in the workbench commit in Confirmation/Locator/value). Send the locator code of the held booking you want to ticket, not the reservation locator code of the unused ticket.
Base path: Pre-production https://api.pp.travelport.com/11/air/ Production https://api.travelport.com/11/air/ |
Related Content: Booking Guide, Ticketing Guide
For NDC only, on carrier American Airlines (AA) only, the JSON APIs support using the value on an unused ticket as form of payment (FOP) for ticketing a separate, held booking.
Ticket as FOP Support Details
Prerequisites
The following prerequisites must be in place:
-
The passenger has a held booking made with the JSON APIs that is separate from the ticketed itinerary. This held booking is the itinerary to which the unused ticket value is to be applied.
-
The passenger has an existing ticketed itinerary that is either fully unflown or partially flown with no active itineraries and that has not been voided, refunded, or exchanged.
Supported Options
The following applies to using an unused ticket as FOP:
-
Only one ticket per passenger can be exchanged.
-
Tickets are non-transferable and must match the passenger listed on the order.
-
If a held booking has multiple passengers, a ticket must be submitted for each passenger on the held booking.
-
When exchanging multiple tickets, each ticket must have the same itinerary and coupon status.
-
Tickets cannot have segments with an active itinerary.
Workflow
Use the following workflow to apply an unused ticket to a held booking:
-
Create post-commit workbench.
-
Send the OfferQueryBuildFromOffer request detailed in this topic. The response returns the value of the ticket that can be applied to any new booking.
-
Additional steps may be required depending on the cost of the held booking compared to the available ticket value. If the total cost of the held booking:
-
exceeds the value of the unused ticket, you must add a form of payment and add payment for the balance due before commit.
-
is less than the value of the unused ticket, the residual balance on the ticket will be issued as a refund in the form of an EMD coupon at commit. No additional step is necessary.
-
is the exact same as the value of the unused ticket, no EMD is issued, no balance is due, and no additional step is necessary.
-
-
Commit the workbench to issue the new ticket and, if applicable, issue an EMD for any remaining balance per step 3. If a balance remains, the passive PNR is updated with DI lines referencing the EMD and the remaining balance contained on it.
Request
Also see Authorization and Common Headers.
Query Parameters
None.
Request Body
Object |
Description |
Required/Optional |
---|---|---|
OfferQueryBuildFromOffer |
Top level object. Send with @type OfferQueryBuildFromOffer. Includes BuildFromOffer and PaymentCriteria objects. |
Required |
BuildFromOffer |
Top level object. Send with @type BuildFromOffer. Includes OfferIdentifier object. |
Required |
OfferIdentifier |
Top level object for offer identifier details. Includes Identifier object. |
Required |
|
Identifier values for the ticketed offer. These values are returned in the workbench commit response in ReservationResponse/Reservation/Offer/Identifier. Key value pairs:
|
Required |
PaymentCriteria |
Send with @type PaymentCriteria. Includes DocumentNumber object. |
Required |
|
Key value pairs:
|
Required |
Response
Pending.
Example Request
The example request below sends the ticket number for the unused ticket in DocumentNumber.
{
"OfferQueryBuildFromOffer": {
"@type": "OfferQueryBuildFromOffer",
"BuildFromOffer": {
"@type": "BuildFromOfferAir",
"OfferIdentifier": {
"Identifier": {
"authority": "AA",
"value": "QUEwMDFISExaVVRBNHxQb0lQM0ZGMjY5MDYtNEEzQS00RDA5LUIyQkMtMS0x"
}
},
"PaymentCriteria": {
"@type": "PaymentCriteria",
"DocumentNumber": [
{
"value": "00157438083095"
}
]
}
}
}
}
Example Response
"Document": [
{
"@type": "DocumentTicket",
"Number": "00157438169405",
"TravelerIdentifierRef": {
"value": "trav_1"
},
"Amount": {
"@type": "Amount",
"CurrencyCode": {
"decimalPlace": 2,
"value": "AUD"
},
"Total": 19.3
}
},
{
"@type": "DocumentEMD",
"Number": "00118174128612",
"TravelerIdentifierRef": {
"value": "trav_1"
},
"Amount": {
"@type": "Amount",
"CurrencyCode": {
"decimalPlace": 2,
"value": "AUD"
},
"Total": 0.2
},
"EMDDescription": {
"value": "RESIDUAL VALUE"
}
}
In the following example excerpt from the commit response, the value of the unused ticket exceeded the cost of the held booking. In this case, an instance of Document with @type DocumentTicket returns the ticket number and an amount of 0, while the instance of Document with @type DocumentEMD has a positive amount of 118.2, indicating that a residual value of 118.2 remained on the ticket and has been issued as an EMD.
"Document": [
{
"@type": "DocumentTicket",
"Number": "00157438083143",
"TravelerIdentifierRef": {
"value": "trav_1"
},
"Amount": {
"@type": "Amount",
"CurrencyCode": {
"decimalPlace": 2,
"value": "AUD"
},
"Total": 0
}
},
{
"@type": "DocumentEMD",
"Number": "00118174128531",
"TravelerIdentifierRef": {
"value": "trav_1"
},
"Amount": {
"@type": "Amount",
"CurrencyCode": {
"decimalPlace": 2,
"value": "AUD"
},
"Total": 118.2
},
"EMDDescription": {
"value": "RESIDUAL VALUE"
}
}