This guide will help you to understand the workflow of OCN (Order Change Notification) implementation. If the specific airline has changes made involuntarily to the booking PNR, this service will notify you in that PNR itinerary something was changed as the itinerary for that PNR such as delays or rescheduling.
For the OCN changes may either happen after the PNR creation or after ticketing or if the booking has hold status and these changes happen based on the airline.
What do you need to start?
To get started you will receive the notification that if the PNR has any modification (Involuntary Changes) via the airline, you will provide details to which endpoint to push the OCN response.
[Reference: Visit our Ticket user guide, if you haven’t yet learned how to create a booking and getting your ticket]
You only encounter the OCN flow after completing the booking or ticketing process.
[Reference: Visit our OrderChangeNotification user guide, to learn more details about the config the URL with authorization and the response part].
curl --location --request POST 'customer_ocn_listner_url' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic EncryptionKey' \
--data-raw '{
"OrderViewRS": {
"Document": {
"Name": "API GATEWAY",
"ReferenceVersion": "1.2"
},
"Party": {
"Sender": {
"TravelAgencySender": {
"Name": "test Travels",
"IATA_Number": "",
"AgencyID": "test Travels",
"Contacts": {
"Contact": [
{
"EmailContact": "test@gmail.com"
}
]
}
}
}
},
"ShoppingResponseId": "1724064903682591567",
"Success": {},
"Payments": {
"Payment": [
{
"Type": "CARD",
"Amount": "4490.88",
"Method": {
"PaymentCard": {
"CardCode": "VI",
"CardNumber": "card_number_a1d4644e51ed6c506a49cf2c422f8523898588731167e056cebc3f9c",
"SeriesCode": "cvv_a1d4644e51ed6c506a49cf2c422f8523898588731167e056cebc3f9c",
"CardHolderName": "card_holder_name_a1d4644e51ed6c506a49cf2c422f8523898588731167e056cebc3f9c",
"EffectiveExpireDate": {
"Effective": "",
"Expiration": ""
}
}
}
}
]
},
"Order": [
{
"OrderID": "J3IKKZV8",
"GdsBookingReference": "QIBUKI",
"OrderStatus": "BOOKED",
"PaymentStatus": "PAID",
"TicketStatus": "TICKETED",
"PnrStatus": "",
// New keys, possible-values and default values
"ScheduleChangeIndicator": false, // Possible values -true, false, Default-Value: false
"ScheduleChangeStatus": "", // "ScheduleChangeIndicator" as true - Possible Status Key - Initiated, Accepted, Rejected, Partially-Accepted - Default-Value - "" (Empty).
"NeedToTicket": "N",
"OfferID": "117498811724064911641735202",
"Owner": "EY",
"OwnerName": "Etihad Airways",
"IsBrandedFare": "Y",
"BrandedFareOptions": [],
"InstantTicket": "N",
"CabinOptions": [],
"IsAdditionalCabinType": "N",
"Eticket": "",
"TimeLimits": {
"OfferExpirationDateTime": "2024-08-23T13:30:26"
},
"BookingCurrencyCode": "CAD",
"EquivCurrencyCode": "CAD",
"HstPercentage": "",
"RewardSettings": {
"RewardAvailable": "N",
"PointTypes": [],
"PointValues": {}
},
"BookingFeeInfo": {
"FeeType": "",
"BookingCurrencyPrice": 0,
"EquivCurrencyPrice": 0
},
"TotalPrice": {
"BookingCurrencyPrice": 4260.88,
"EquivCurrencyPrice": 4260.88
},
"BasePrice": {
"BookingCurrencyPrice": 2508,
"EquivCurrencyPrice": 2508
},
"TaxPrice": {
"BookingCurrencyPrice": 1752.88,
"EquivCurrencyPrice": 1752.88
},
"Commission": {
"AgencyCommission": {
"BookingCurrencyPrice": 0,
"EquivCurrencyPrice": 0
},
"AgencyYqCommission": {
"BookingCurrencyPrice": 0,
"EquivCurrencyPrice": 0
}
},
"PortalCharges": {
"Markup": {
"BookingCurrencyPrice": 0,
"EquivCurrencyPrice": 0
},
"Surcharge": {
"BookingCurrencyPrice": 0,
"EquivCurrencyPrice": 0
},
"Discount": {
"BookingCurrencyPrice": 0,
"EquivCurrencyPrice": 0
}
},
"AgentMarkupInfo": {
"OnflyMarkup": {
"BookingCurrencyPrice": 230,
"EquivCurrencyPrice": 230
},
"OnflyDiscount": {
"BookingCurrencyPrice": 0,
"EquivCurrencyPrice": 0
},
"OnflyHst": {
"BookingCurrencyPrice": 0,
"EquivCurrencyPrice": 0
},
"PromoDiscount": {
"BookingCurrencyPrice": 0,
"EquivCurrencyPrice": 0,
"PromoCode": ""
}
},
"Penalty": {
"ChangeFee": {
"Before": {
"BookingCurrencyPrice": 814,
"EquivCurrencyPrice": 814
},
"After": {
"BookingCurrencyPrice": 814,
"EquivCurrencyPrice": 814
}
},
"CancelationFee": {
"Before": {
"BookingCurrencyPrice": 949,
"EquivCurrencyPrice": 949
},
"After": {
"BookingCurrencyPrice": 949,
"EquivCurrencyPrice": 949
}
}
},
"PaxSeatInfo": [],
"OfferItem": [
{
"OfferItemID": "OFFERITEMID1",
"Refundable": "true",
"PassengerType": "ADT",
"PassengerQuantity": 2,
"TotalPriceDetail": {
"TotalAmount": {
"BookingCurrencyPrice": 4260.88,
"EquivCurrencyPrice": 4260.88
}
},
"Service": [
{
"ServiceID": "SV1",
"PassengerRefs": "ADT1 ADT2",
"FlightRefs": "Flight1"
},
{
"ServiceID": "SV2",
"PassengerRefs": "ADT1 ADT2",
"FlightRefs": "Flight2"
}
],
"FareDetail": {
"PassengerRefs": "ADT1 ADT2",
"Price": {
"TotalAmount": {
"BookingCurrencyPrice": 4260.88,
"EquivCurrencyPrice": 4260.88
},
"BaseAmount": {
"BookingCurrencyPrice": 2508,
"EquivCurrencyPrice": 2508
},
"TaxAmount": {
"BookingCurrencyPrice": 1752.88,
"EquivCurrencyPrice": 1752.88
},
"Commission": {
"AgencyCommission": {
"BookingCurrencyPrice": 0,
"EquivCurrencyPrice": 0
},
"AgencyYqCommission": {
"BookingCurrencyPrice": 0,
"EquivCurrencyPrice": 0
}
},
"BookingFee": {
"BookingCurrencyPrice": 0,
"EquivCurrencyPrice": 0
},
"PortalCharges": {
"Markup": {
"BookingCurrencyPrice": 0,
"EquivCurrencyPrice": 0
},
"Surcharge": {
"BookingCurrencyPrice": 0,
"EquivCurrencyPrice": 0
},
"Discount": {
"BookingCurrencyPrice": 0,
"EquivCurrencyPrice": 0
}
},
"Taxes": [
{
"TaxCode": "YQ",
"BookingCurrencyPrice": 1152.2,
"EquivCurrencyPrice": 1152.2
},
{
"TaxCode": "K3",
"BookingCurrencyPrice": 183.02,
"EquivCurrencyPrice": 183.02
},
{
"TaxCode": "IN",
"BookingCurrencyPrice": 8.76,
"EquivCurrencyPrice": 8.76
},
{
"TaxCode": "YM",
"BookingCurrencyPrice": 23.14,
"EquivCurrencyPrice": 23.14
},
{
"TaxCode": "ZR",
"BookingCurrencyPrice": 7.48,
"EquivCurrencyPrice": 7.48
},
{
"TaxCode": "F6",
"BookingCurrencyPrice": 59.76,
"EquivCurrencyPrice": 59.76
},
{
"TaxCode": "AU",
"BookingCurrencyPrice": 127.08,
"EquivCurrencyPrice": 127.08
},
{
"TaxCode": "WY",
"BookingCurrencyPrice": 152.6,
"EquivCurrencyPrice": 152.6
},
{
"TaxCode": "P2",
"BookingCurrencyPrice": 38.84,
"EquivCurrencyPrice": 38.84
}
]
}
},
"FareComponent": [
{
"PriceClassRef": "PCR_1",
"SegmentRefs": "Segment1 Segment2",
"FareBasis": {
"FareBasisCode": {
"Refs": "FG_1 FG_1",
"Code": "LLN08V6R LLN08V6R"
},
"RBD": "L L",
"CabinType": "Y Y",
"SeatLeft": "9 9"
}
},
{
"PriceClassRef": "PCR_1",
"SegmentRefs": "Segment3 Segment4",
"FareBasis": {
"FareBasisCode": {
"Refs": "FG_2 FG_2",
"Code": "ULN0DV6R ULN0DV6R"
},
"RBD": "U U",
"CabinType": "Y Y",
"SeatLeft": "4 4"
}
}
]
}
],
"BaggageAllowance": [
{
"SegmentRefs": "Segment1 Segment2 Segment3 Segment4",
"PassengerRefs": "ADT1 ADT2",
"BaggageAllowanceRef": "Bag1"
}
],
"SplitPaymentInfo": [
{
"AirItineraryId": "117498811724064911641735202",
"MultipleFop": "N",
"MaxCardsPerPax": 0,
"MaxCardsPerPaxInMFOP": 0
}
],
// New Array for Schedule change
"ScheduleChange": [
{
"FlightKey": "Flight1",
"SegmentRefs": "Segment1"
},
{
"FlightKey": "Flight2",
"SegmentReferences": "Segment3 Segment4"
},
// Perform only this action with this PNR - If the value is ("Y") "Accept": "Y", then accept the OCN changes; otherwise, do not proceed with that action.
{
"AmendmentsActions": {
"Accept": "Y",
"Cancel": "Y",
"ReSchedule": "Y"
}
}
],
"BookingToEquivExRate": 1,
"FopRef": "FOP_124_0_988_0_ALL_PUB"
}
],
"DataLists": {
"PassengerList": {
"Passengers": [
{
"attributes": {
"PassengerID": "ADT1"
},
"PassengerID": "ADT1",
"PTC": "ADT",
"BirthDate": "1998-10-08",
"NameTitle": "Mr",
"FirstName": "Ram",
"MiddleName": "",
"LastName": "Kumar",
"Gender": "Male",
"TravelDocument": {
"DocumentNumber": "",
"ExpiryDate": "0000-00-00",
"IssuingCountry": "",
"DocumentType": "P"
},
"Preference": {
"WheelChairPreference": {
"Reason": ""
},
"SeatPreference": ""
},
"LoyaltyProgramAccount": [],
"ContactInfoRef": "CTC1"
},
{
"attributes": {
"PassengerID": "ADT2"
},
"PassengerID": "ADT2",
"PTC": "ADT",
"BirthDate": "1998-10-08",
"NameTitle": "Mr",
"FirstName": "Shantha",
"MiddleName": "",
"LastName": "Kumar",
"Gender": "Male",
"TravelDocument": {
"DocumentNumber": "",
"ExpiryDate": "0000-00-00",
"IssuingCountry": "",
"DocumentType": "P"
},
"Preference": {
"WheelChairPreference": {
"Reason": ""
},
"SeatPreference": ""
},
"LoyaltyProgramAccount": [],
"ContactInfoRef": "CTC1"
}
]
},
"DisclosureList": {
"Disclosures": []
},
"contactEmail": ["test@gmail.com"],
"contactNumber": ["9876543213"],
"ContactAddress": ["toronto"],
"FareList": {
"FareGroup": [
{
"FareGroupRef": "FG_1",
"FareCode": "70J",
"FareBasisCode": "LLN08V6R"
},
{
"FareGroupRef": "FG_2",
"FareCode": "70J",
"FareBasisCode": "ULN0DV6R"
}
]
},
"FlightSegmentList": {
"FlightSegment": [
{
"SegmentKey": "Segment1",
"Departure": {
"AirportCode": "BOM",
"Date": "2024-09-12",
"Time": "04:30:00",
"AirportName": "Chhatrapati Shivaji International Airport",
"Terminal": {
"Name": "2"
}
},
"Arrival": {
"AirportCode": "AUH",
"Date": "2024-09-12",
"Time": "06:05:00",
"AirportName": "Abu Dhabi International Airport",
"Terminal": {
"Name": "A"
}
},
"MarketingCarrier": {
"AirlineID": "EY",
"Name": "Etihad Airways",
"FlightNumber": "205"
},
"OperatingCarrier": {
"AirlineID": null,
"Name": null,
"FlightNumber": "205"
},
"Equipment": {
"AircraftCode": "789",
"Name": "789"
},
"Code": {
"MarriageGroup": ""
},
"FlightDetail": {
"FlightDuration": {
"Value": "3 Hrs 5 Min"
},
"Stops": {
"Value": 0
},
"InterMediate": [],
"AirMilesFlown": ""
},
"BrandId": "YVALUE"
},
{
"SegmentKey": "Segment2",
"Departure": {
"AirportCode": "AUH",
"Date": "2024-09-12",
"Time": "10:40:00",
"AirportName": "Abu Dhabi International Airport",
"Terminal": {
"Name": "A"
}
},
"Arrival": {
"AirportCode": "SYD",
"Date": "2024-09-13",
"Time": "06:10:00",
"AirportName": "Sydney Kingsford Smith International Airport",
"Terminal": {
"Name": "1"
}
},
"MarketingCarrier": {
"AirlineID": "EY",
"Name": "Etihad Airways",
"FlightNumber": "450"
},
"OperatingCarrier": {
"AirlineID": null,
"Name": null,
"FlightNumber": "450"
},
"Equipment": {
"AircraftCode": "Boeing 777-300ER",
"Name": "Boeing 777-300ER"
},
"Code": {
"MarriageGroup": ""
},
"FlightDetail": {
"FlightDuration": {
"Value": "13 Hrs 30 Min"
},
"Stops": {
"Value": 0
},
"InterMediate": [],
"AirMilesFlown": ""
},
"BrandId": "YVALUE"
},
{
"SegmentKey": "Segment3",
"Departure": {
"AirportCode": "SYD",
"Date": "2024-10-01",
"Time": "20:35:00",
"AirportName": "Sydney Kingsford Smith International Airport",
"Terminal": {
"Name": "1"
}
},
"Arrival": {
"AirportCode": "AUH",
"Date": "2024-10-02",
"Time": "05:05:00",
"AirportName": "Abu Dhabi International Airport",
"Terminal": {
"Name": "A"
}
},
"MarketingCarrier": {
"AirlineID": "EY",
"Name": "Etihad Airways",
"FlightNumber": "455"
},
"OperatingCarrier": {
"AirlineID": null,
"Name": null,
"FlightNumber": "455"
},
"Equipment": {
"AircraftCode": "Boeing 777-300ER",
"Name": "Boeing 777-300ER"
},
"Code": {
"MarriageGroup": ""
},
"FlightDetail": {
"FlightDuration": {
"Value": "14 Hrs 30 Min"
},
"Stops": {
"Value": 0
},
"InterMediate": [],
"AirMilesFlown": ""
},
"BrandId": "YVALUE"
},
{
"SegmentKey": "Segment4",
"Departure": {
"AirportCode": "AUH",
"Date": "2024-10-02",
"Time": "08:05:00",
"AirportName": "Abu Dhabi International Airport",
"Terminal": {
"Name": "A"
}
},
"Arrival": {
"AirportCode": "BOM",
"Date": "2024-10-02",
"Time": "12:50:00",
"AirportName": "Chhatrapati Shivaji International Airport",
"Terminal": {
"Name": "2"
}
},
"MarketingCarrier": {
"AirlineID": "EY",
"Name": "Etihad Airways",
"FlightNumber": "208"
},
"OperatingCarrier": {
"AirlineID": null,
"Name": null,
"FlightNumber": "208"
},
"Equipment": {
"AircraftCode": "Airbus A320-100/200",
"Name": "Airbus A320-100/200"
},
"Code": {
"MarriageGroup": ""
},
"FlightDetail": {
"FlightDuration": {
"Value": "3 Hrs 15 Min"
},
"Stops": {
"Value": 0
},
"InterMediate": [],
"AirMilesFlown": ""
},
"BrandId": "YVALUE"
}
]
},
"FlightList": {
"Flight": [
{
"FlightKey": "Flight1",
"Journey": {
"Stops": 1
},
"SegmentReferences": "Segment1 Segment2"
},
{
"FlightKey": "Flight2",
"Journey": {
"Stops": 1
},
"SegmentReferences": "Segment3 Segment4"
}
]
},
"OriginDestinationList": {
"OriginDestination": [
{
"OriginDestinationKey": "OD1",
"DepartureCode": "BOM",
"ArrivalCode": "SYD",
"FlightReferences": "Flight1"
},
{
"OriginDestinationKey": "OD2",
"DepartureCode": "SYD",
"ArrivalCode": "BOM",
"FlightReferences": "Flight2"
}
]
},
// New Object for Schedule change
"ScheduleChangeSegmentList": {
"ScheduleChangeSegment": [
{
"SegmentKey": "Segment1",
"SegmentDetails": [
{
"Departure": {
"Date": "2024-09-13",
"Time": "04:30:00",
"Terminal": {
"Name": "4"
}
},
"MarketingCarrier": {
"AirlineID": "WY",
"Name": "Oman Airways",
"FlightNumber": "2091"
}
}
]
},
{
"SegmentKey": "Segment3",
"SegmentDetails": [
{
"Departure": {
"AirportCode": "SYD",
"Date": "2024-10-01",
"Time": "20:45:00",
"AirportName": "Sydney Kingsford Smith International Airport",
"Terminal": {
"Name": "1"
}
},
"Arrival": {
"AirportCode": "DOH",
"Date": "2024-10-02",
"Time": "04:55:00",
"AirportName": "Doha Intl Airport",
"Terminal": {
"Name": "A"
}
},
"MarketingCarrier": {
"AirlineID": "QR",
"Name": "Qatar Airways",
"FlightNumber": "909"
},
"OperatingCarrier": {
"AirlineID": "QR",
"Name": "Qatar Airways",
"FlightNumber": "909"
},
"Equipment": {
"AircraftCode": "Airbus A380-800",
"Name": "Airbus A380-800"
},
"Code": {
"MarriageGroup": ""
},
"FlightDetail": {
"FlightDuration": {
"Value": "15 Hrs 10 Min"
},
"Stops": {
"Value": 0
},
"InterMediate": [],
"AirMilesFlown": ""
},
"BrandId": ""
},
{
"Departure": {
"AirportCode": "DOH",
"Date": "2024-10-02",
"Time": "08:20:00",
"AirportName": "Doha Intl Airport",
"Terminal": {
"Name": "A"
}
},
"Arrival": {
"AirportCode": "AUH",
"Date": "2024-10-02",
"Time": "10:25:00",
"AirportName": "Abu Dhabi International Airport",
"Terminal": {
"Name": "A"
}
},
"MarketingCarrier": {
"AirlineID": "QR",
"Name": "Qatar Airways",
"FlightNumber": "1044"
},
"OperatingCarrier": {
"AirlineID": "QR",
"Name": "Qatar Airways",
"FlightNumber": "1044"
},
"Equipment": {
"AircraftCode": "Boeing 737 MAX 8",
"Name": "Boeing 737 MAX 8"
},
"Code": {
"MarriageGroup": ""
},
"FlightDetail": {
"FlightDuration": {
"Value": "01 Hrs 10 Min"
},
"Stops": {
"Value": 0
},
"InterMediate": [],
"AirMilesFlown": ""
},
"BrandId": ""
}
]
},
{
"SegmentKey": "Segment4",
"SegmentDetails": [
{
"Departure": {
"AirportCode": "AUH",
"Date": "2024-10-02",
"Time": "13:05:00"
},
"FlightDetail": {
"FlightDuration": {
"Value": "3 Hrs 30 Min"
}
}
}
]
}
]
},
"PriceClassList": {
"PriceClass": [
{
"PriceClassID": "PCR_1",
"Name": "Economy value",
"Code": "Economy value",
"Descriptions": {
"Description": []
}
}
]
},
"BaggageAllowanceList": {
"BaggageAllowance": [
{
"BaggageAllowanceID": "Bag1",
"BaggageCategory": "Checked",
"AllowanceDescription": {
"ApplicableParty": "Traveler",
"Description": "CHECKED ALLOWANCE"
},
"PieceAllowance": {
"ApplicableParty": "Traveler",
"TotalQuantity": "25",
"Unit": "Kg"
}
}
]
},
"FopList": [
{
"CC": {
"Allowed": "Y",
"Types": {
"AX": {
"F": {
"BookingCurrencyPrice": 0,
"EquivCurrencyPrice": 0
},
"P": 0,
"Charges": {
"BookingCurrencyPrice": 0,
"EquivCurrencyPrice": 0
}
},
"MC": {
"F": {
"BookingCurrencyPrice": 0,
"EquivCurrencyPrice": 0
},
"P": 0,
"Charges": {
"BookingCurrencyPrice": 0,
"EquivCurrencyPrice": 0
}
},
"VI": {
"F": {
"BookingCurrencyPrice": 0,
"EquivCurrencyPrice": 0
},
"P": 0,
"Charges": {
"BookingCurrencyPrice": 0,
"EquivCurrencyPrice": 0
}
},
"JC": {
"F": {
"BookingCurrencyPrice": 0,
"EquivCurrencyPrice": 0
},
"P": 0,
"Charges": {
"BookingCurrencyPrice": 0,
"EquivCurrencyPrice": 0
}
}
}
},
"DC": {
"Allowed": "Y",
"Types": {
"MC": {
"F": {
"BookingCurrencyPrice": 0,
"EquivCurrencyPrice": 0
},
"P": 0,
"Charges": {
"BookingCurrencyPrice": 0,
"EquivCurrencyPrice": 0
}
},
"VI": {
"F": {
"BookingCurrencyPrice": 0,
"EquivCurrencyPrice": 0
},
"P": 0,
"Charges": {
"BookingCurrencyPrice": 0,
"EquivCurrencyPrice": 0
}
}
}
},
"CASH": {
"Allowed": "Y",
"Types": []
},
"CHEQUE": {
"Allowed": "Y",
"Types": []
},
"ACH": {
"Allowed": "Y",
"Types": []
},
"PG": {
"Allowed": "Y",
"Types": []
},
"FopKey": "FOP_124_0_988_0_ALL_PUB"
}
]
},
"MetaData": {},
"threeDsResponse": ""
}
}'
What will you send in return?
You will send it back to the Acknowledge as a response
After those above stage you will have to choose three options to respond to the OCN:
[Note: All three options are not applicable to all the content, it may vary based on the Airline].
- AirOrderInvoluntaryAccept
- AirOrderInvoluntaryCancel
- Exchange(Reschedule the ticket)
Step 1. Air Order Involuntary Accept
This option allows you to accept the changes made by airlines such as delays, and rescheduling.
You need to provide Order ID
and GDS Booking Reference
for this request.
[Reference: Visit OrderInvoluntaryAccept endpoint to know more about air order involuntary accept and the relevant parameters.]
curl --location --request POST 'https://uat-apigateway.voyzantonline.com/AirOrderInvoluntaryAccept' \
--header 'Content-Type: application/json' \
--header 'Authorization: <$auth_token>' \
--data-raw '{
"OrderInvoluntaryAcceptRQ": {
"Query": {
"OrderID": "57BY7DND",
"GdsBookingReference": [
"ECVC5E"
]
}
}
}'
What will you get in return?
As a result of this request, you will be notified about the status of your booking, which is whether your request has been cancelled or succeeded.
Step 2. Air Order Involuntary Cancel
This option allows you to cancel the changes made by airlines such as delays, and rescheduling.
[Reference: Visit OrderInvoluntaryCancel endpoint to know more about air order involuntary cancel and the relevant parameters.]
You need to provide Order ID
and GDS Booking Reference
for this request.
curl --location --request POST 'https://uat-apigateway.voyzantonline.com/AirOrderInvoluntaryCancel' \
--header 'Content-Type: application/json' \
--header 'Authorization: <$auth_token>' \
--data-raw '{
"OrderInvoluntaryCancelRQ": {
"Query": {
"OrderID": "57BY7DND",
"GdsBookingReference": [
"ECVC5E"
]
}
}
}'
What will you get in return?
As a result of this request, you will be notified about the status of your booking, which is whether your request has been cancelled or succeeded.
Step 3. Exchange the ticket
This option provides you with the opportunity to reschedule your ticket or booking in the event that the changes made by the airline are not to your satisfaction. It allows you the flexibility to adjust your travel plans according to your preferences, ensuring that your reservation aligns with your needs.
[Reference: Visit our Exchange for more details].
Congratulations! You have completed the OCN workflow.