Cancel a Ticket (NDC)
When canceling an NDC ticket, you have options to void the ticket within the allowed time window, cancel a ticket with a refund, or cancel but retain the ticket value using the following workflow:
- Create a workbench.
- Request a quote for any refund applicable per below.
- Send a cancel request per below and set the RetainFlag header parameter flag to indicate the type of operation. The options are:
Void or cancel with refund: Set the RetainFlag header parameter to false:
The ticket is voided if within the allowed void period for the airline (generally within the same day it was issued, usually up to midnight local agency time).
If canceled outside the void period and the ticket is eligible for a refund, a refund will be issued to the original form of payment.
Cancel and retain ticket value: Set RetainFlag parameter to true to cancel itinerary but retain ticket value.
Currently supported only for Qantas (QF).
In this topic:
Request Refund Quote
After creating a workbench, the next step is to request a refund quote.
The Request Refund Quote determines what if any refund value may be available.
Query Parameters
None.
POST Request
Send the POST request to the following resource:
POST book/offer/reservationworkbench/{workbenchID}/offers/canceloffer
Send the workbench identifier returned for the workbench when created.
Base path:
Pre-production https://api.pp.travelport.com/9/air/
Production https://api.travelport.com/9/air/
Payload
Send the message payload per the example below. For @value below, send the offer identifier returned in the Create Workbench response in Offer/Identifier @value.
{ "OfferQueryCancelOffer": { "BuildFromOffer": { "@type": "BuildFromOfferAir", "OfferIdentifier": { "Identifier": { "value": "QUEwMDEzRjZCOTJDNHxQb1BDQzQxOTIxMS1CQ0I3LTQ5NEYtOUFBMy 0xLTF8UG9QQ0M0MTkyMTEtQkNCNy00OTRGLTlBQTMtMS0y" } } } } }
The response returns in the PriceDifference object any refund that may be available.

The Product and Price objects have been collapsed for brevity. in this response. The PriceDifference object indicates that this ticket is inside the void period and if cancelled an amount of $2,777.40 Australian will be refunded.
{ "OfferResponse": { "Offer": { "@type": "OfferModify", "scheduleChangeInd": true, "Identifier": { "authority": "AA", "value": "QUEwMDEzRjZCOTJDNHxQb1BDQzQxOTIxMS1CQ0I3LTQ5NEYtOUFBMy 0xLTF8UG9QQ0M0MTkyMTEtQkNCNy00OTRGLTlBQTMtMS0y" }, "Product": {...}, "Price": {...}, "PriceDifference": { "@type": "PriceDifferenceDetail", "currencyCode": "AUD", "exchangeInd": true, "TotalPrice": 2777.4 } } } }
Cancel Ticket
After creating a workbench and requesting a refund quote, cancel the ticket by sending a POST request and setting the RetainFlag header parameter as follows:
-
To either void the ticket or cancel the ticket with a refund, set RetainFlag to false:
-
If the ticket is inside the void period determined by the airline (generally within the same day it was issued, usually up to midnight local agency time), the ticket will be voided and any available refund credited to the original form of payment.
-
If the ticket is outside the void period, the ticket will be cancelled and no refund or only a partial refund issued.
-
-
To cancel the segments but retain the ticket value, set RetainFlag to true. Currently supported only for Qantas (QF).
POST Request
Send the POST request to the following resource:
POST receipt/reservations/{workbenchID}/receipts?OfferIdentifier{OfferID}
For {workbenchID} send the workbench identifier returned in ReservationResponse/Identifer/value in the workbench create response.
For {OfferID} send the offer identifier in Offer/identifier/value returned as part of the PNR details when the workbench was created.
Base path:
Pre-production https://api.pp.travelport.com/9/air/
Production https://api.travelport.com/9/air/
Example request
https://api.pp.travelport.com/9/air/receipt/reservations/reservations/1ace440f-66e9-4898-9802-3fc35b24bfd1/receipts?OfferIdentifier=QUEwMDEzRjZCOTJDNHxQbCQ0I3LT
Q5NEYtOUFBMy0xLTF8UG9QQ0M0MTkyMTEtQkNCNy00OTRGLTlBQTMtMS0y
Payload
None.
Cancel Response Examples
In all cancel scenarios, a successful cancellation is indicated by the return of the Cancellation object with a type of CancellationHold and the carrier Locator code per the example excerpt below.
"Cancellation": { "@type": "CancellationHold", "Locator": { "source": "F1", "value": "AA0013F6B92C4" }
For all cancel requests, the response includes an instance of ReceiptID/Document, in which @type indicates the type of operation. Possible values are:
-
DocumentTicketVoid: Ticket was canceled within the void period and a full refund issued.
-
DocumentTicketRefund: Ticket was canceled after the void period either a partial or no refund issued.
-
DocumentTicketRetained: Segments were canceled but the ticket value retained
Additional information and examples follow.

If the ticket was canceled within the void period and a full refund issued by the carrier, the response returns ReceiptID/Document @type DocumentTicketVoid.
"Document": [
{
"@type": "DocumentTicketVoid",
"Number": "00157496593855",
"TravelerRef": "trav_1",
"VoidInd": "true"
}
]
At the end of the response, the PriceDifference object contains a positive number. This is the amount that was refunded.
"PriceDifference": {
"@type": "PriceDifferenceDetail",
"currencyCode": "AUD",
"id": "priceDifference_1",
"TotalPrice": "2777.40"
}

If the ticket was canceled after the void period and only a partial refund or no refund has been issued by the carrier, the response returns ReceiptID/Document @type DocumentTicketRefund.
"Document": [
{
"@type": "DocumentTicketRefund",
"Number": "08157496524516",
"TravelerRef": "trav_1",
"VoidInd": "true"
}
At the end of the response, the PriceDifference object for a partial or no refund is a negative number. This indicates the amount of the original ticket value that was forfeited.
"PriceDifference": {
"@type": "PriceDifferenceDetail",
"currencyCode": "AUD",
"id": "priceDifference_1",
"TotalPrice": "-2285.39"
}

If the segments were canceled but the ticket value retained, the response returns ReceiptID/Document @type DocumentTicketRetained. This retained value can be used later for a new booking.
In this case the response does not return a PriceDifference object.
"Document": [
{
"@type": "DocumentTicketRetained",
"Number": "08157496603686",
"TravelerRef": "trav_1",
"ValueRetainedInd": "true"
}