# Exchanging an air booking The steps below explain how to exchange or modify an existing air booking for a traveler. All APIs mentioned below are dependent on each other and the steps described here must be executed in the order specified. > **Notes:** - You can exchange a leg or add a new leg within an existing ticket. To learn more, view the **Leg** section of [basic air concepts](/spotnana/basic_air_concepts#leg). - You can only initiate an exchange for a ticket which has been confirmed. (i.e., `bookingStatus` for the PNR is `CONFIRMED_STATUS`). You can check your PNR status using the [Get PNR](/openapi/tripapi#operation/getpnrv3) API. | Step | Name | Endpoint | Details | | --- | --- | --- | --- | | 1. | [Get PNR exchange details](/openapi/airapi/air/getairpnrexchangedetails) | `/v2/air/pnrs/{pnrId}/exchange-details` | View the exchange-related information for the tickets inside a PNR. This endpoint displays information such as whether exchanges or refunds are allowed. **Request body requires:** `pnrId` from step 10 of the [making an air booking workflow](/spotnana/air_booking_workflow). **Response will contain:** `pnrId` and the details for the ticket that needs to be exchanged. | | 1. | [Modify search](/openapi/airapi/air/airmodifysearchv2) | `v2/air/modify-search` | If your ticket can be exchanged (based on the response from step 1), use this endpoint to search for a different itinerary. **Request body requires:** `pnrId` from step 10 of the [making an air booking workflow](/spotnana/air_booking_workflow), `legs` [(1)](/spotnana/air_exchange_workflow#additional-notes), search filters, sort options, and leg search parameters[(2)](/spotnana/air_exchange_workflow#additional-notes). **Response will contain:** `searchId` for this new search and `itineraryId` for each itinerary returned in the search results. **Other APIs will use:** `searchId` `itineraryId` | | 1. | [Get selected itinerary](/openapi/airapi/air/airselecteditinerary) | `/v2/air/selected-itinerary` | View one selected itinerary and its respective details. **Request body requires:** `searchId` and `itineraryId` from step 2. **Response will contain:** Itinerary details for the `itineraryId` provided in the request. | | 1. | [Get flight checkout details](/openapi/airapi/air/airflightcheckout) | `/v2/air/flight-checkout` | Get checkout related information for a selected itinerary from step 3. **Request body requires:** `searchId` and `itineraryId` from step 2. **Response will contain:** `checkoutResponseId`, baggage information, ancillaries, checkout parameters, and supported payment options. **Other APIs will use:** `checkoutResponseId` | | 1. | [Get flight seat map](/openapi/airapi/air/airseatmap) (Optional) | `/v2/air/seat-map` | View the seat map for the selected itinerary from step 3. **Note:** This step is optional and can only be used if the booking `source` is `SABRE`. **Request body requires:** `airItineraryId` (an object wrapper containing both `searchId` and `itineraryId` from step 2) and traveler information. **Response will contain:** `seatMapResponseId` **Other APIs will use:** `seatMapResponseId` | | 1. | [Validate air itinerary](/openapi/airapi/air/airrevalidateitinerary) | `/v2/air/revalidate-itinerary` | Validate the selected itinerary to finalize your booking. **Request body requires:** `checkoutResponseId` from step 4, `seatMapResponseId` from step 5, `paymentSourceId`[(3)](/spotnana/air_exchange_workflow#additional-notes), `tripId`, traveler details, and booking charges. **Response will contain:** `bookingId`, fare breakdown, leg prices, and policy details. **Other APIs will use:** `bookingId` | | 1. | [Modify booking](/openapi/airapi/air/airmodifybookv2) | `/v2/air/modify-book` | Book new legs or modify legs in an existing PNR. **Request body requires:** `bookingId` from step 6 and `tripId`. **Response will contain:** `pnrNumber`, `pnrId`, and `pnrStatus`. | The PNR status for the exchanged or modified ticket will be returned in step 7. You can also use the [Get PNR](/openapi/tripapi#operation/getpnrv3) API to check the PNR status again. > **Note:** Since an air booking exchange involves making changes to an existing trip, use the same `tripId` created from the [making an air booking](/spotnana/air_booking_workflow) workflow. ### Additional Notes (1) In step 2, the legs will be indexed in the order you want your final itinerary to be. You can modify an existing leg and add a new leg simultaneously. However, you cannot remove an existing leg. (2) In the leg search parameter, you'll need to provide the `searchId` obtained from step 1 of the [making an air booking workflow](/spotnana/air_booking_workflow). (3) Contact your Spotnana representative to obtain the `paymentSourceId`.