> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://bcdtravel.ferndocs.com/air/guides/endpoint-guides/book-flight/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://bcdtravel.ferndocs.com/_mcp/server. # Book flight ## Overview The `book` endpoint creates a flight reservation in the GDS. It supports regular GDS content (Amadeus, Sabre) as well as low-cost carriers and NDC content from Travelfusion. ## Use case This endpoint can be used on a reservation check-out page to allow users to book a fare. The booking process initiates the reservation with the airline, which may take some time to fully process. > **Note** > > View the `complete_verification` endpoint for more information on the booking process for Travelfusion fares that require 3D security for credit card payments. ## What's next? The `booking_uid` in the response must be used to get reservation details via the `get_reservation_details` endpoint until the status becomes something other than `in-progress`. ## Key parameters | Parameter | Type | Required | Description | | ------------------------------------- | ------ | ----------- | ------------------------------------------------------------------------------------------------------------------------- | | `fare_group_key` | string | yes | Fare group key from the `pricing` response | | `flight_option_keys` | array | yes | Flight option keys from the `pricing` response | | `optional_service_keys` | array | no | Optional service keys if add-ons were selected | | `travelers` | array | yes | Traveler details (name, DOB, passport, contact) | | `payment` | object | yes | Payment information (credit card or corporate billing) | | `credit_card_verification_return_url` | string | conditional | Required for Travelfusion fares that need 3D Secure verification. URL where the bank redirects after payment verification | | `custom_trip_data` | object | no | Custom trip metadata for reporting purposes | | `client_reportable_data` | object | no | Client-specific reporting data | ## Response structure The response contains: * `booking_uid` — unique booking identifier for tracking the reservation * `status` — initial reservation status (typically `in-progress`) * `pnr_id` — passenger name record identifier in the GDS ## Booking flow #### Validate fare via pricing Always call the `pricing` endpoint first to confirm the fare is still available. #### Collect traveler and payment details Gather traveler information and payment method from your checkout page. #### Submit booking request Call the `book` endpoint with all required parameters. #### Poll for completion Use `get_reservation_details` with the `booking_uid` to check status until it resolves to `active` or returns an error. #### Handle 3D Secure (if applicable) For Travelfusion fares requiring 3D Secure: redirect the user to the `verification_url`, then call `complete_verification` with the returned `verification_id`. ## Error handling If the booking fails, common scenarios include: * **Fare no longer available** — the fare expired between pricing and booking * **Payment declined** — credit card validation failed * **Duplicate booking** — same `booktrack_id` was already used (create a new one for retries) > **Warning** > > Always create a new `booktrack_id` when re-attempting a booking that failed. Reusing the same identifier will result in a duplicate booking error. > Books a flight/fare for one or more travelers.