# Ticket exchange

An exchange occurs when a traveler or an agent changes the flight itinerary after ticketing.
There are two ways the airline can process the exchange:

- [Airline revalidates the same ticket for exchange](/webhooks/booking-lifecycle/air-booking-lifecycle/air-ticket-exchange-lifecycle#airline-revalidates-the-same-ticket-for-exchange)
- [Airline issues a new ticket and refunds the old one](/webhooks/booking-lifecycle/air-booking-lifecycle/air-ticket-exchange-lifecycle#airline-issues-a-new-ticket-and-refunds-the-old-one)


**Webhook used:** [PNR_V3](/openapi/webhookeventapi/webhooks/paths/pnr_v3/post)

## Airline revalidates the same ticket for exchange

Based on the airline's policies they can process an exchange by revalidating the same ticket. In this case there's no refund involved and
the same ticket is used to track the new changes.

The event below is sent in this scenario:

| Operation  | Event trigger | Context |
|  --- | --- | --- |
| `FLIGHT_CHANGED` | When the itinerary is changed and the airline revalidates the original ticket for the new flights. | This event is sent when the airline reuses the existing ticket number for the new routing.
No new ticket is issued and no refund of the old ticket occurs.
You receive a single event reflecting the updated flights.
**Example:** A traveler exchanges their direct JFK to LHR flight for a JFK > BOS > LHR routing.
The airline revalidates the original ticket for the new flights instead of issuing a new one.
You receive a `FLIGHT_CHANGED` event on the same PNR with the updated flight details. |


## Airline issues a new ticket and refunds the old one

The airline may issue a new ticket and refund the old one in the case of an exchange. In this scenario the following events are sent:

| Steps | Operation  | When you receive this event | Context |
|  --- | --- | --- | --- |
| 1 | `TICKET_ REFUNDED` | When the itinerary is changed and the airline issues a new ticket (the old ticket is refunded). | This event is sent when the exchange requires issuing a new ticket. The old ticket moves to refunded status.
You will also receive a `BOOKING_TICKETED` event for the new ticket.
**Example:** A traveler changes their return date from March 20 to March 25.
The airline refunds the old ticket and issues a new one. You receive a `TICKET_REFUNDED` event for the old ticket,
followed by a `BOOKING_TICKETED` event with a new ticket number. |
| 2 | `BOOKING_ TICKETED` | When the new exchange ticket is issued. | The `BOOKING_TICKETED` event is sent with the new ticket number.
The traveler's payment method is charged for any fare difference.
**Example:** Continuing from the previous step, after the old ticket is refunded, the new ticket is issued for the updated return date.
The event is triggered with the new ticket number and updated fare details. |


## Ticket exchange flow diagram

```mermaid
flowchart LR
    subgraph exchange["Exchange"]
        A(["Traveler changes<br>itinerary after ticketing"]) --> B{"How does the airline<br>process the exchange?"}

        B -->|"Revalidation<br>(same ticket)"| C["<b>FLIGHT_CHANGED</b><br>―――――――――――<br>Flights changed,<br>original ticket revalidated<br>for new routing."]

        B -->|"New ticket<br>issued"| D["<b>TICKET_REFUNDED</b><br>―――――――――――<br>Old ticket refunded<br>as part of exchange."]
        D --> E["<b>BOOKING_TICKETED</b><br>―――――――――――<br>New exchange ticket<br>issued. Card charged<br>for any fare difference."]
    end

    style A fill:#f0f0f0,stroke:#999
    style C fill:#FF9800,color:#fff
    style D fill:#F44336,color:#fff
    style E fill:#4CAF50,color:#fff
```