Ticket as FOP API Reference
Related Content: Booking Guide, Ticketing Guide


For supporting NDC carriers only, the JSON APIs support using the value on an unused ticket as form of payment (FOP) Details for the payment to be used to pay for an offer, such as credit card information. The subsequent Add Payment step is required to charge the payment. when ticketing a separate, held booking.

Ticket as FOP Details
The following must be in place to use a ticket as FOP:
-
The passenger has a held booking made with the JSON APIs that is separate from the ticketed itinerary
The entire trip on a booking, including all flights on all legs. Also called a journey..
-
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
When applying 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 per below. The response returns the value of the ticket that can be applied to any new booking.
-
Additional steps may be required depending on the price of the held booking compared to the available ticket value. If the total price of the held booking:
-
exceeds the value of the unused ticket, before commit, you must send Form of Payment and Payment for the balance.
-
is less than the value of the unused ticket, at commit, the residual balance on the ticket is issued as a refund in the form of an EMD
Electronic miscellaneous document (EMD); issued for a paid seat, ancillary, or any other paid service after successful payment. See the Ancillary and EMD Guide. coupon. No additional step is necessary.
-
is the exact same as the value of the unused ticket, no EMD is issued and no balance is due. No additional step is necessary.
-
-
Commit the workbench to issue the new ticket. If a balance due was paid for, the commit issues an EMD. If a balance remains, the passive PNR is updated with DI lines
Document instruction (DI) lines in the booking record contain information such as price, flight information, confirmation, ticketing time limits, fees, and form of payment. Not returned as DI lines in the JSON APIs but available through a desktop program. 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 |
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"
}
}