AirTicketing Workflow
The TicketIssue API tickets a booked PNR. It uses a workflow of multiple calls to create a workbench, issue payment, and commit the workbench to ticket the PNR.
This topic details the requests and responses in the AirTicketing workflow, from creating the workbench through issuing the ticket. For a listing of objects in the requests and responses, see the AirTicketing API Reference.
This topic details the requests and responses in the AirTicketing workflow, from creating the workbench through issuing the ticket. For a detailed listing of all objects, see the AirTicketing API Reference.
Additional options:
- To verify itinerary details prior to ticketing, retrieve the PNR.
- Before issuing a ticket, you can direct the ticket to one or more agency queues. See Placing Itineraries on a Queue for details.
- Certain remarks can be added to the PNR before ticketing.
In this topic:
AirTicketing Workflow
The AirTicketing workflow uses the following HTTP requests summarized in the following table and detailed below.
Step | Type of request | Notes |
---|---|---|
POST |
First mandatory step in the workflow. Requires a POST request with the reservation locator from the AirReservation commit response. Returns an identifier for the workbench. This identifier is sent in every subsequent POST request in the workflow. |
|
POST |
Required if not added as part of the reservation workflow. Returns a confirmation identifier. |
|
POST |
Required (except for ticketless carriers) if not added as part of the reservation workflow. Returns a confirmation identifier. |
|
Commit the workbench and issue the ticket |
POST |
Final step in the ticketing workflow. Issues the ticket (and EMD if applicable), discards the workbench, and returns a ticket number. |
Create Workbench with PNR
The first step is to create a reservation workbench, which generates an empty workbench container with a workbench ID.
To establish the workbench, send a POST request with the PNR locator code to the following resource; see Air API Endpoints for the endpoint.
POST /buildfromlocator?Locator={PNR}
The message payload sends a blank ReservationID object per below.
{
"ReservationID": {
}
}
The response returns itinerary details and is the same as for a PNR Retrieve, plus a workbench ID in an additional Identifier object at the end of the response. The following excerpt shows a workbench ID. This workbench ID must be sent in all subsequent requests in the workflow.
...
"Identifier": {
"authority": "Travelport",
"value": "7c67fa06-08ec-4d01-b7f4-c203cf542a3a"
}
Add Form of Payment
The next step is to add form of payment (FOP) details to the workbench, if FOP was not added in the reservation workflow. If FOP was added during the AirReservation Workflow (supported only for GDS), that information is retrieved during ticketing. Skip to the Add Payment step.
Either cash or credit card FOP is supported.

{
"FormOfPaymentPaymentCard" : {
"id" : "formOfPayment_4",
"FormOfPaymentRef" : "formOfPayment_4",
"PaymentCard" : {
"@type" : "PaymentCard",
"id" : "paymentCard_4",
"expireDate" : "0420",
"CardType" : "Credit",
"CardCode" : "VI",
"CardHolderName" : "SMITH JOHN",
"CardNumber" : {
"@type" : "CardNumber",
"PlainText" : "4555555555555550"
}
}
}
}

The request payload with a credit card for an NDC itinerary requires the CVV code in SeriesCode @PlainText, highlighted below.
{
"FormOfPaymentPaymentCard": {
"id": "formOfPayment_5",
"FormOfPaymentRef": "formOfPayment_5",
},
"PaymentCard": {
"@type": "PaymentCardDetail",
"id": "paymentCard_4",
"expireDate": "0521",
"CardType": "Credit",
"CardCode": "VI",
"CardHolderName": "JANE DOE",
"CardNumber": {
"@type": "CardNumber",
"PlainText": "4987654321098769"
},
"SeriesCode": {
"PlainText": "123"
},
}
}
}

{
"FormOfPaymentCash" : {
"id" : "formOfPayment_5",
"FormOfPaymentRef" : "formOfPayment_5",
"agentNonRefundableInd" : true,
"Identifier" : {
"value" : "A0656EFF-FAF4-456F-B061-0161008D7C4E",
"authority" : "Travelport"
}
}
}

GDS only. Not supported for NDC.
{
"FormOfPaymentInvoice": {
"id": "1",
"FormOfPaymentRef": "1",
"Identifier": {
"value": "A0656EFF-FAF4-456F-B061-0161008D6FOP",
"authority": "Travelport"
},
"InvoiceNumber": "34324343"
}
}
The response returns a confirmation identifier. The value returned has no subsequent use in the workflow at this time.

{
"FormOfPaymentResponse": {
"Identifier": {
"authority": "Travelport",
"value": "558f8744-3554-4382-a1ff-3461f02e436f"
}
}
}
Add Payment
The Add Payment step sends the payment. It references both the form of payment and the offer. At this time only one FOP is supported in the payment request.
The message payload includes identifiers for the form of payment and offer.

{
"Payment": {
"id": "payment_1",
"Identifier": {
"authority": "Travelport",
"value": "A0656EFF-FAF4-456F-B061-0161008D6A5E"
},
"Amount": {
"code": "GBP",
"minorUnit": 2,
"currencySource": "Charged",
"approximateInd": true,
"value": 80.7
},
"FormOfPaymentIdentifier": {
"id": "formOfPayment_4",
"FormOfPaymentRef": "formOfPayment_4",
"Identifier": {
"authority": "Travelport",
"value": "a26164ec-02b8-41ef-af61-a837a76d5adb" }
},
"OfferIdentifier": [
{
"id": "offer_1",
"offerRef":"offer_1",
"Identifier": {
"authority": "Travelport",
"value": "58100d86-b984-432b-82eb-c7286c061193"
}
}
]
}
}

The response returns a payment confirmation. The value returned has no subsequent use in the workflow at this time.
{
"PaymentResponse": {
"Payment": {
"@type": "PaymentIdentifier",
"Identifier": {
"authority": "Travelport",
"value": "af076693-cfc3-49f3-b7d6-554aa9d8bfce"
}
}
}
}
Commit (Issue Ticket)
After submitting payment, commit the workbench and issue the ticket. There is no message payload.

{
"ReservationResponse": {
"Reservation": {
"@type": "Reservation",
"Offer": [
{
"@type": "Offer",
"id": "offer_1",
"Identifier": {
"authority": "Travelport",
"value": "db263b97-0477-49ff-9064-4cbbda2ad621"
},
"Product": [
{
"@type": "ProductAir",
"id": "product_1",
"FlightSegment": [
{
"id": "FlightSegment_01",
"sequence": 1,
"Flight": {
"@type": "Flight",
"duration": "PT4H49M",
"carrier": "DL",
"number": "0853",
"id": "Flight_01",
"Departure": {
"@type": "Departure",
"location": "DEN",
"date": "2021-05-02",
"time": "09:35:00"
},
"Arrival": {
"@type": "Arrival",
"location": "ATL",
"date": "2021-05-02",
"time": "14:24:00"
}
}
}
],
"PassengerFlight": [
{
"passengerQuantity": 1,
"passengerTypeCode": "ADT",
"FlightProduct": [
{
"segmentSequence": [
1
],
"classOfService": "Y",
"cabin": "Economy"
}
]
},
{
"passengerQuantity": 1,
"passengerTypeCode": "CHD",
"FlightProduct": [
{
"segmentSequence": [
1
],
"classOfService": "Y",
"cabin": "Economy"
}
]
}
]
}
],
"Price": {
"@type": "PriceDetail",
"id": "PriceDetail_1",
"Base": 2506,
"TotalTaxes": 228.8,
"TotalFees": 0,
"TotalPrice": 2734.8,
"PriceBreakdown": [
{
"@type": "PriceBreakdownAir",
"quantity": 1,
"requestedPassengerType": "ADT",
"Amount": {
"CurrencyCode": {
"value": "USD"
},
"Base": 888
}
},
{
"@type": "PriceBreakdownAir",
"quantity": 1,
"requestedPassengerType": "ADT",
"Amount": {
"currencySource": "Charged",
"approximateInd": true,
"CurrencyCode": {
"value": "AUD"
},
"Base": 1253,
"Taxes": {
"@type": "TaxesDetail",
"TotalTaxes": 114.4,
"Tax": [
{
"currencyCode": "AUD",
"taxCode": "AY",
"value": 7.9
},
{
"currencyCode": "AUD",
"taxCode": "US",
"value": 94
},
{
"currencyCode": "AUD",
"taxCode": "XF",
"value": 6.4
},
{
"currencyCode": "AUD",
"taxCode": "ZP",
"value": 6.1
}
]
},
"Total": 1367.4
}
},
{
"@type": "PriceBreakdownAir",
"quantity": 1,
"requestedPassengerType": "CHD",
"Amount": {
"CurrencyCode": {
"value": "USD"
},
"Base": 888
}
},
{
"@type": "PriceBreakdownAir",
"quantity": 1,
"requestedPassengerType": "CHD",
"Amount": {
"currencySource": "Charged",
"approximateInd": true,
"CurrencyCode": {
"value": "AUD"
},
"Base": 1253,
"Taxes": {
"@type": "TaxesDetail",
"TotalTaxes": 114.4,
"Tax": [
{
"currencyCode": "AUD",
"taxCode": "AY",
"value": 7.9
},
{
"currencyCode": "AUD",
"taxCode": "US",
"value": 94
},
{
"currencyCode": "AUD",
"taxCode": "XF",
"value": 6.4
},
{
"currencyCode": "AUD",
"taxCode": "ZP",
"value": 6.1
}
]
},
"Total": 1367.4
}
}
]
}
}
],
"Traveler": [
{
"@type": "Traveler",
"gender": "Male",
"passengerTypeCode": "ADT",
"id": "travelerRefId_1",
"Identifier": {
"authority": "Travelport",
"value": "38c6d251-0e48-4cda-9d46-fc7a2450b372"
},
"PersonName": {
"@type": "PersonName",
"Given": "JOSIAHLUKE",
"Surname": "RANDAZZO"
},
"Address": [
{
"@type": "AddressDetail",
"id": "1",
"Street": "Travers Street",
"City": "Claremont",
"StateProv": {
"value": "CA"
},
"Country": {
"value": "US"
},
"PostalCode": "917113323"
}
],
"Telephone": [
{
"@type": "TelephoneDetail",
"countryAccessCode": "1",
"areaCityCode": "719",
"phoneNumber": "6401108",
"extension": "123",
"id": "telephone_1",
"cityCode": "DEN",
"role": "Mobile"
}
],
"Email": [
{
"value": "jl_randazzo@none.com"
},
{
"comment": "Primary Email Id",
"value": "TravelerTwo@none.com"
}
],
"TravelDocument": [
{
"@type": "TravelDocumentDetail",
"docNumber": "00009889",
"docType": "Passport",
"expireDate": "2021-12-05",
"issueCountry": "USA",
"Gender": "Male",
"PersonName": {
"@type": "PersonName",
"Given": "JOSIAH",
"Middle": "LUKE",
"Surname": "RANDAZZO"
}
}
]
},
{
"@type": "Traveler",
"gender": "Male",
"passengerTypeCode": "CHD",
"id": "travelerRefId_2",
"Identifier": {
"authority": "Travelport",
"value": "cc9f0845-0f2d-40ca-ae49-c4da6b31f5b3"
},
"PersonName": {
"@type": "PersonName",
"Given": "ALEXFKHEIAMNSAMMR",
"Surname": "TRAVELERCHD"
},
"Telephone": [
{
"@type": "TelephoneDetail",
"countryAccessCode": "1",
"areaCityCode": "909",
"phoneNumber": "212456121",
"extension": "1243",
"id": "telephone_1",
"cityCode": "ORD",
"role": "Office"
}
],
"TravelDocument": [
{
"@type": "TravelDocumentDetail",
"docNumber": "0094F4",
"docType": "Passport",
"expireDate": "2035-02-22",
"issueCountry": "IND",
"Gender": "Male",
"PersonName": {
"@type": "PersonName",
"Given": "ALEX",
"Middle": "SAM",
"Surname": "TRAVELER"
}
}
]
}
],
"FormOfPayment": [
{
"@type": "FormOfPaymentCash",
"agentNonRefundableInd": true,
"id": "formOfPayment_5",
"FormOfPaymentRef": "formOfPayment_5",
"Identifier": {
"authority": "Travelport",
"value": "2c6a1661-cf52-4a91-ae0a-75bc2fee7c74"
}
}
],
"Payment": [
{
"@type": "Payment",
"id": "payment_2",
"Identifier": {
"authority": "Travelport",
"value": "A0656EFF-FAF4-456F-B061-0161008D6A5E"
},
"Amount": {
"code": "AUD",
"value": 863.4
},
"FormOfPaymentIdentifier": {
"FormOfPaymentRef": "formOfPayment_5",
"Identifier": {
"authority": "Travelport",
"value": "a26164ec-02b8-41ef-af61-a837a76d5adb"
}
},
"OfferIdentifier": [
{
"offerRef": "offer_1",
"Identifier": {
"authority": "Travelport",
"value": "58100d86-b984-432b-82eb-c7286c061193"
}
}
]
}
],
"Receipt": [
{
"@type": "ReceiptConfirmation",
"Identifier": {
"authority": "Travelport",
"value": "261cbc6d-bf8c-4a99-8898-88102c1db5bc"
},
"Confirmation": {
"@type": "ConfirmationHold",
"Locator": {
"source": "1G",
"value": "0058XL"
},
"OfferStatus": {
"@type": "OfferStatusAir",
"StatusAir": [
{
"flightRefs": [
"Flight_01"
],
"code": "HK",
"value": "Confirmed"
}
]
}
}
},
{
"@type": "ReceiptConfirmation",
"Identifier": {
"authority": "Travelport",
"value": "869be5dc-5653-48ad-9bc4-61caa9e34915"
},
"Confirmation": {
"@type": "ConfirmationHold",
"Locator": {
"source": "DL",
"value": "JIJFRD"
}
}
},
{
"@type": "ReceiptPayment",
"Document": [
{
"@type": "DocumentTicket",
"Number": "0063767464803",
"TravelerIdentifierRef": {
"id": "travelerRefId_1",
"value": "38c6d251-0e48-4cda-9d46-fc7a2450b372"
},
"Amount": {
"Total": 1367.4
}
},
{
"@type": "DocumentTicket",
"Number": "0063767464804",
"TravelerIdentifierRef": {
"id": "travelerRefId_2",
"value": "cc9f0845-0f2d-40ca-ae49-c4da6b31f5b3"
},
"Amount": {
"Total": 1367.4
}
}
]
}
],
"ReservationComment": [
{
"@type": "ReservationComment",
"commentSource": "Agency"
}
]
}
}
}
Back Office Accounting
To update any back office accounting systems with ticket information at the time of ticketing, send the Issuance query parameter with a value of BACKOFFICE when you commit the workbench in the ticketing workflow.
The ticket can have already been issued, or not issued yet. If payment has been added to the workbench, a ticket will be issued. The Issuance parameter can be sent without payment information to send a message to update the back office system and discard the workbench but not yet issue the ticket.
The response returns an interface control number.