---
title: "1. Create a checkout session (PREBOOK)"
method: POST
path: "/flights/prebooks"
tags: ["Flight Bookings"]
---

# 1. Create a checkout session (PREBOOK)

`POST /flights/prebooks`

## Request

- Base URL: `https://api.liteapi.travel/v3.0`
- URL: `https://api.liteapi.travel/v3.0/flights/prebooks`
- Auth: API key in header `X-API-Key`

## Overview

Initiate a flight booking session by reserving the offer with the provider, creating a payment intent when you use the Stripe SDK, and discovering available ancillary services — all in a single request.

## When to Use

- **Start the booking flow** once a user has confirmed their flight selection
- **Collect passenger details** and initiate payment processing
- **Discover add-ons** like seat selection and extra baggage before final confirmation

## What You Get

- **Prebook ID** required to complete the booking at `/flights/bookings`
- **Payment intent** (`transactionId`, `secretKey`) when `usePaymentSdk` is true — for Stripe SDK integration
- **Credit line snapshot** (`creditLine` in the response) when you set `includeCreditBalance: true` and your account has an enabled credit line with payment bypass
- **Available services** (`servicesAttachable`) including seats and baggage options
- **Booking confirmation** from the provider with reservation details

## Key Features

- **End-to-end prebook flow**: Verifies offer → payment setup (Stripe payment intent or credit line) → books with provider → fetches services
- **Payment options**: `usePaymentSdk: true` uses the Stripe SDK. `usePaymentSdk: false` is allowed when your user has **payment bypass** (sandbox or whitelabel) and either an **enabled credit line** or a **whitelabel/CMI** checkout (no Stripe intent; complete payment via WL and call `/flights/bookings` with `payment.method: THIRD_PARTY` and `payment.token`)
- **Ancillary services**: Returns attachable services (seats, baggage) that can be added before final booking
- **Same shape as /book**: Uses `offerId` instead of `prebookId`

## Quick Start

**Required fields**: `offerId` (from search/verify), `contact` (name, email, `phoneCountryCode`, phone), `passengers` (with `passengerType`, birthday, gender, nationality, document, and name details).

**Payment**: Send `usePaymentSdk: true` for Stripe (typical). Send `usePaymentSdk: false` when paying on credit line or via whitelabel/CMI (requires payment bypass); otherwise you receive a validation error.

**Tip**: Use the `servicesAttachable` in the response to offer seat selection or extra baggage before calling `/flights/bookings`.

## Request body

- object
  - `offerId` string, required: The offerId from the search results (msgpack-encoded; unpacks to provider offerId)
  - `usePaymentSdk` boolean: If true, a Stripe payment intent is created (`transactionId`, `secretKey`). If false, payment bypass must apply and the account must use credit line or whitelabel/CMI checkout (no Stripe intent); otherwise the request is rejected.
  - `includeCreditBalance` boolean: Optional flag to include credit line information in the response. When set to true, credit line details will be returned if the user has a credit line available.
  - `payment` object: Payment configuration options
    - `descriptorSuffix` string: Suffix appended to the Stripe payment descriptor (visible on customer's bank statement)
    - `paymentMethodConfiguration` string: Stripe Payment Method Configuration ID (pmc_...) controlling which payment methods Payment Element presents for this PaymentIntent.
  - `voucherCode` string: An optional voucher code to apply discounts to the booking. The vouchers API allows creation of these discounts
  - `travelPurpose` 'LEISURE' | 'BUSINESS': Optional purpose of the trip.
  - `metadata` object: Optional. Traveler metadata (IP, device, language, marketing parameters), same shape as `POST /flights/bookings` `metadata`. It is stored with the prebook and attached to the Stripe payment intent so the traveler's IP / device (rather than your backend's) is visible for fraud review. When omitted, the request IP and User-Agent are used.
    - `ip` string: IPv4/IPv6 address of the traveler (or derived).
    - `country` string: The country inferred from the traveler's IP, aiding in regional compliance.
    - `language` string: The preferred language from the user's browser settings.
    - `platform` string: The operating system or device platform from which the request originates.
    - `device_id` string: A unique identifier for the user's device, useful for tracking and security.
    - `user_agent` string: The browser/OS user agent string for verifying request authenticity.
    - `utm_medium` string: The marketing medium (e.g., email, ad) through which the service was accessed.
    - `utm_source` string: The source of the traffic, such as a search engine or social network.
    - `utm_campaign` string: An identifier for the specific marketing campaign that led to the request.
  - `contact` object, required: Primary contact person for the booking (receives confirmation emails)
    - `email` string, required: Contact email address for booking confirmation
    - `firstName` string, required: Contact first name
    - `lastName` string, required: Contact last name
    - `middleName` string: Contact middle name (optional)
    - `phoneCountryCode` string, required: Phone country calling code without + (e.g. 1 for US, 33 for France). Required by the flights provider.
    - `phoneNumber` string, required: Phone number without country code
  - `passengers` object[], required: List of passengers travelling. Length must match the adults+children+infants counts from the search.
    - `birthday` string, required: Date of birth (YYYY-MM-DD)
    - `documentExpiry` string, date: Travel document expiry date (YYYY-MM-DD) (optional)
    - `documentIssueCountry` string: ISO 3166-1 alpha-2 code of the document issuing country (optional)
    - `documentNumber` string: Travel document number (optional)
    - `documentType` 'passport' | 'id': Type of travel document (optional)
    - `firstName` string, required: Passenger first name (as on travel document)
    - `gender` string, required: Passenger gender: M, F, or X
    - `lastName` string, required: Passenger last name (as on travel document)
    - `middleName` string: Passenger middle name (optional)
    - `nationality` string, required: Passenger nationality as ISO country code
    - `passengerType` 0 | 1 | 2, required: Passenger type: 0 = adult (12+), 1 = child (2–11), 2 = infant (under 2). Required by the flights provider.
    - `title` 'MR' | 'MS' | 'MRS' | 'MISS': Optional passenger title/salutation
    - `loyaltyPrograms` object[]: Frequent flyer / loyalty programs for this passenger. Forwarded to the airline only when the selected offer has `loyaltyProgramsSupported: true`; otherwise ignored without failing the booking. The airline or fare can still decline to credit the number, and the booking response does not confirm that it was applied.
      - `airlineCode` string, required: IATA airline code of the loyalty program (e.g. AA, BA, LH)
      - `programNumber` string, required: Frequent flyer number / membership ID

## Response `200`

Prebook created successfully

- object
  - `data` object[]: Prebook result array (always one item)
    - `prebookId` string: Unique prebook identifier — use this in /bookings to complete the booking
    - `booking` FlightPrebookBooking: Flight checkout booking snapshot returned on prebook create/get/attach-services. Omits booking-only fields (status, paymentStatus, distributor*, ticketLimitTime, cancellation).
      - `bookingId` string: Omitted on prebook responses (set after POST /flights/bookings)
      - `bookingRef` string: FlightHub booking reference (FH-YYM-XXXXXXXX)
      - `status` string: Omitted on prebook responses. Booking lifecycle status is only returned after POST /flights/bookings.
      - `timestamp` string: Booking creation time (UTC)
      - `offerId` string: Offer ID from verify stage
      - `journey` object: Journey details as confirmed by the provider at booking time
        - `journeyKey` string: Unique journey identifier
        - `segments` FlightSegment[]: Flight segments in this booking
          - `arrivalTime` string: Arrival time (ISO 8601)
          - `carrier` object: Marketing and operating carrier details for this segment
            - `marketingCode` string: Marketing carrier IATA code
            - `marketingLogo` string: Marketing carrier logo path/URL
            - `marketingName` string: Marketing carrier name
            - `operatingCode` string: Operating carrier IATA code
            - `operatingLogo` string: Operating carrier logo path/URL
            - `operatingName` string: Operating carrier name
          - `departureTime` string: Departure time (ISO 8601)
          - `destinationCode` string: Destination IATA code
          - `direction` string: OUTBOUND or INBOUND
          - `duration` object: Flight duration in ISO 8601 and minutes
            - `iso8601` string: Duration in ISO 8601 format (e.g. PT7H45M)
            - `minutes` integer: Duration in minutes
          - `flight` object: Marketing and operating flight numbers
            - `marketingNumber` string: Flight number as marketed to passengers
            - `operatingNumber` string: Flight number as operated by the carrier
          - `originCode` string: Origin IATA code
          - `originName` string: Full name of the origin airport
          - `destinationName` string: Full name of the destination airport
          - `segmentKey` string: Unique identifier for this segment, used to link with offers, fares, and amenities
          - `stopCount` integer: Number of en-route (technical) stops inside this segment. 0 means the segment is genuinely non-stop. A technical stop keeps the same flight number and aircraft (no plane change, no bag re-check) but adds ground time, so a one-segment journey can still have stops.
          - `stops` FlightSegmentStop[]: En-route (technical) stops inside this segment, in travel order. Omitted when stopCount is 0.
            - `airportCode` string: IATA code of the airport where the aircraft lands for the technical stop
            - `airportName` string: Full name of the stop airport
            - `arrivalTime` string: Local arrival time at the stop airport (ISO 8601)
            - `departureTime` string: Local departure time from the stop airport (ISO 8601)
            - `duration` object: Time spent on the ground at the stop airport
              - …
        - `price` FlightPrice: Full price breakdown including supplier base fare, taxes and fees, and per-passenger amounts. base, taxes and fees are always the supplier values and never include the partner markup; only total carries it, so total may exceed base + taxes + fees. The markup amount itself is not exposed.
          - `base` number: Base fare amount as returned by the supplier (before taxes and fees). Never includes the partner markup.
          - `currency` string: ISO 4217 currency code
          - `fees` number: Supplier service fees and surcharges plus, when the account passes them to the customer, the LiteAPI platform fees itemised in platformFees. Never includes the partner markup.
          - `taxes` number: Total airline / government taxes applied to the fare, as returned by the supplier. Never includes the partner markup.
          - `total` number: Total selling price, including the partner markup and, when present, platformFees.total. Because base and taxes are supplier values, total may exceed base + taxes + fees when a markup is configured.
          - `platformFees` object: LiteAPI platform fees included in total and fees. Present only when the account passes the fees to the customer. Booking-level amounts (not distributed over perPassenger).
            - `merchantOfRecord` number: Merchant-of-record fee: percentage of the full transaction value, charged when LiteAPI collects the payment (Payment SDK / third-party). Removed at book time for credit-line and CREDIT_CARD settlements.
            - `ticketing` number: Ticketing fee: percentage of the net fare with a floor and ceiling, per booking or per passenger depending on the account configuration. The rate may depend on the operating airlines. Applies to every payment method.
            - `ancillary` number: Ancillary fee on attached seats and bags: percentage of each item's net price with a per-item floor and ceiling. Present on prebooks / bookings once services are attached. Applies to every payment method.
            - `total` number: merchantOfRecord + ticketing + ancillary
          - `perPassenger` object: Price breakdown per passenger type
            - `adult` object: Price breakdown for each adult passenger
              - …
            - `child` object: Price breakdown for each child passenger
              - …
            - `infant` object: Price breakdown for each infant passenger
              - …
        - `pricing` FlightOfferPricing: Full offer pricing with per-passenger breakdown
          - `display` FlightPrice: Full price breakdown including supplier base fare, taxes and fees, and per-passenger amounts. base, taxes and fees are always the supplier values and never include the partner markup; only total carries it, so total may exceed base + taxes + fees. The markup amount itself is not exposed.
            - `base` number: Base fare amount as returned by the supplier (before taxes and fees). Never includes the partner markup.
            - `currency` string: ISO 4217 currency code
            - `fees` number: Supplier service fees and surcharges plus, when the account passes them to the customer, the LiteAPI platform fees itemised in platformFees. Never includes the partner markup.
            - `taxes` number: Total airline / government taxes applied to the fare, as returned by the supplier. Never includes the partner markup.
            - `total` number: Total selling price, including the partner markup and, when present, platformFees.total. Because base and taxes are supplier values, total may exceed base + taxes + fees when a markup is configured.
            - `platformFees` object: LiteAPI platform fees included in total and fees. Present only when the account passes the fees to the customer. Booking-level amounts (not distributed over perPassenger).
              - …
            - `perPassenger` object: Price breakdown per passenger type
              - …
          - `converted` boolean: True if FX currency conversion was applied
        - `baggage` object: Fare baggage allowance on the booked journey (included and paid options; aligns with provider FlattenedJourney.baggage)
          - `hasCarryOnBag` boolean: Whether carry-on bag is included
          - `hasCheckedBag` boolean: Whether checked bag is included. Equipment (bagType equipment) does not count as a checked bag
          - `included` object[]: Baggage included in the fare
            - `bagType` 'cabin' | 'checked' | 'personal' | 'equipment': Type of bag: cabin (carry-on), checked, personal (under-seat / personal item), or equipment (sports equipment or musical instrument)
            - `description` string: Human-readable baggage allowance description from the carrier
            - `passengerType` 'ADT' | 'CHD' | 'INF' | 'ALL': Passenger type this allowance applies to: ADT (adult), CHD (child), INF (infant), or ALL
            - `pieces` integer, nullable: Number of bag pieces for this option. Null when the provider states no piece limit (weight-only allowance); never means zero bags
            - `pricing` FlightItemPricing: Pricing for an ancillary item (e.g. baggage)
              - …
            - `size` string: Bag size / dimensions when published by the carrier (e.g. 55x40x20)
            - `unit` string: Weight unit for the allowance (e.g. kg)
            - `weightKg` number, nullable: Maximum weight per bag in kilograms. Null when the provider states no weight limit
          - `paid` object[]: Available paid baggage options
            - `bagType` 'cabin' | 'checked' | 'personal' | 'equipment': Type of bag: cabin (carry-on), checked, personal (under-seat / personal item), or equipment (sports equipment or musical instrument)
            - `description` string: Human-readable baggage allowance description from the carrier
            - `passengerType` 'ADT' | 'CHD' | 'INF' | 'ALL': Passenger type this allowance applies to: ADT (adult), CHD (child), INF (infant), or ALL
            - `pieces` integer, nullable: Number of bag pieces for this option. Null when the provider states no piece limit (weight-only allowance); never means zero bags
            - `pricing` FlightItemPricing: Pricing for an ancillary item (e.g. baggage)
              - …
            - `size` string: Bag size / dimensions when published by the carrier (e.g. 55x40x20)
            - `unit` string: Weight unit for the allowance (e.g. kg)
            - `weightKg` number, nullable: Maximum weight per bag in kilograms. Null when the provider states no weight limit
        - `terms` object, nullable: Booking terms from the provider (change/refund rules and published fees)
          - `changeable` boolean: True if the fare allows changes (rebooking)
          - `refundable` boolean: True if the fare is refundable
          - `summary` object[]: Human-readable policy messages with severity levels
            - `level` string: Severity of the remark: info, warning, or danger
            - `message` string: Policy message text (e.g. Non-refundable, Changes allowed with fee)
          - `changeFee` object, nullable: Change fee details; null when the provider does not publish a fee
            - `pricing` object, nullable: Fee pricing; null when only a percentage is available
              - …
            - `percent` number, nullable: Fee as a percentage of the base fare (e.g. 100 = full penalty). May appear without pricing.
            - `applicability` 'anytime' | 'noShow' | 'beforeDeparture' | 'afterDeparture': When the fee applies
            - `label` string: Human-readable fee description (e.g. 'Change fee (before departure)')
          - `refundFee` object, nullable: Refund/cancellation fee details; null when the provider does not publish a fee
            - `pricing` object, nullable: Fee pricing; null when only a percentage is available
              - …
            - `percent` number, nullable: Fee as a percentage of the base fare (e.g. 100 = full penalty). May appear without pricing.
            - `applicability` 'anytime' | 'noShow' | 'beforeDeparture' | 'afterDeparture': When the fee applies
            - `label` string: Human-readable fee description (e.g. 'Change fee (before departure)')
          - `hasChangeFee` boolean: True when the provider signalled that a change fee applies to the fare, even when the actual amount is not published in `changeFee`. Lets clients render a "change fee applies — amount on request" remark for fares where the rule is known but the monetary amount is not exposed (common for LCC content distributed via GDS, e.g. U2 / easyJet via Sabre). When `false` or absent, no change fee is known to apply.
          - `hasRefundFee` boolean: True when the provider signalled that a refund/cancellation fee applies to the fare, even when the actual amount is not published in `refundFee`. Lets clients render a "cancellation fee applies — amount on request" remark for fares where the rule is known but the monetary amount is not exposed. When `false` or absent, no refund fee is known to apply.
        - `cabinClass` 'ECONOMY' | 'PREMIUM_ECONOMY' | 'BUSINESS' | 'FIRST' | 'MIXED': Normalized cabin class for the whole journey, derived from segmentFares[].cabin (falls back to fare.family). MIXED when segments are booked in different cabins. Omitted when the cabin is unknown.
        - `fare` object: Fare class information
          - `family` string: Fare family name (e.g. Economy, Business, First)
          - `mixedCabin` boolean: True if outbound and inbound legs are in different cabin classes
          - `mixedFareFamily` boolean: True when legs are sold under different fare families/brands (e.g. Plus outbound + Basic inbound) combined into one fare. `family` reflects the first leg only; baggage and terms reflect the most restrictive leg.
          - `seatsRemaining` integer: Number of seats remaining at this fare
        - `segmentFares` object[]: Per-segment fare details
          - `bookingCode` string: Booking/RBD class code (e.g. W, Y, J)
          - `cabin` string: Cabin class (e.g. Economy, Business, First)
          - `fareBasisCode` string: Fare basis code used for pricing and rules
          - `fareFamily` string: Commercial fare family name
          - `seatsRemaining` integer: Number of seats remaining at this fare
          - `segmentKey` string: Links this fare to the corresponding segment
      - `passengers` object[]: Passenger details as submitted and confirmed by the provider
        - `type` string: Passenger type code (ADT, CHD, INF)
        - `title` string: Passenger title (Mr, Mrs, Ms, etc.)
        - `firstName` string: Passenger first name as on travel document
        - `lastName` string: Passenger last name as on travel document
        - `middleName` string: Passenger middle name
        - `dateOfBirth` string: Date of birth (YYYY-MM-DD)
        - `birthday` string, date: Date of birth (YYYY-MM-DD)
        - `gender` string: Passenger gender: M or F
        - `nationality` string: Passenger nationality as ISO country code
        - `passengerType` integer: 0=Adult, 1=Child, 2=Infant
        - `documentType` string: Type of travel document (e.g. passport, id_card)
        - `documentNumber` string: Travel document number
        - `documentIssueCountry` string: ISO country code of the document issuing country
        - `documentExpiry` string: Travel document expiry date (YYYY-MM-DD)
      - `contact` object: Primary contact person for the booking
        - `firstName` string: Contact first name
        - `lastName` string: Contact last name
        - `middleName` string: Contact middle name
        - `email` string: Contact email address for booking confirmation
        - `phoneCountryCode` string: Phone country code without + (e.g. 1 for US, 33 for France)
        - `phoneNumber` string: Phone number without country code
      - `order` object: Order and provider confirmation details
        - `reference` object: Provider and airline reference identifiers
          - `orderId` string: Booking order / PNR reference ID
          - `airlineBookings` object[]: Per-airline booking references and PNR codes
            - `airlineCode` string: Airline IATA code
            - `airlineName` string: Airline name
            - `airlinePnr` string: Airline-specific PNR/locator code
            - `pnr` string: PNR locator code for this airline
        - `currency` string: ISO 4217 currency code for this order
        - `status` string: Order status from the provider (e.g. ticketed, created)
        - `price` object: Order price as confirmed by the provider
          - `currency` string: ISO 4217 currency code
          - `total` number: Total order price
        - `ticketLimitTime` string: Deadline for ticket issuance (UTC)
        - `timestamp` string: UTC timestamp when the order was created
      - `airlineLocators` object[]: Airline-specific PNR/locator codes
        - `airlineCode` string: Airline IATA code
        - `airlinePnr` string: Airline-specific PNR/locator code
      - `pricing` object: Billing breakdown for this booking including base fare, any ancillary services and, when passed to the customer, the LiteAPI platform fees
        - `subtotal` number: Subtotal before ancillary services
        - `servicesAmount` number: Total cost of attached ancillary services (seats, baggage, etc.)
        - `seatsAmount` number: Total cost of seat selections
        - `baggageAmount` number: Total cost of additional baggage
        - `totalAmount` number: Grand total charged to the customer: subtotal + services, plus the LiteAPI platform fees when feesIncludedInTotal is true
        - `merchantOfRecordFee` number: LiteAPI merchant-of-record fee included in totalAmount. Only present when feesIncludedInTotal is true and LiteAPI collects the payment (Payment SDK / third-party); dropped at book time when paying with a credit line or your own card (CREDIT / CREDIT_CARD).
        - `ticketingFee` number: LiteAPI ticketing fee included in totalAmount (percentage of the net fare with a floor and ceiling). Only present when feesIncludedInTotal is true. Applies to every payment method.
        - `ancillaryFee` number: LiteAPI ancillary fee included in totalAmount (percentage of each attached seat / bag net price with a per-item floor and ceiling). Only present when feesIncludedInTotal is true and services are attached. Applies to every payment method.
        - `feesIncludedInTotal` boolean: True when the LiteAPI platform fees are added on top of the price and included in totalAmount. Omitted when the account absorbs the fees (they are then deducted from the account commission and not shown).
        - `currency` string: ISO 4217 currency code
      - `payment` object: Payment amounts captured for this booking
        - `amount` number: Amount captured for payment
        - `currency` string: ISO 4217 currency code of the payment
      - `selectedServices` SelectedService[]: Ancillary services attached to this booking (seats, baggage, etc.)
        - `passengerIndex` integer, required: Zero-based index of the passenger this service is for (matches position in passengers array)
        - `serviceId` string, required: Service identifier from servicesAttachable.groups[].services[].serviceId
        - `quantity` integer: Number of units of this service to attach
      - `bookedServices` FlightBookedService[]: Detailed view of the ancillary services confirmed by the provider for this booking, including pricing and per-passenger / per-segment metadata. Present once /services has been called.
        - `serviceId` string, required: Encoded service identifier (carries provider serviceId, post-margin price, currency, category)
        - `name` string: Human-readable service name (e.g. 'Seat 1A')
        - `category` string: Service category (e.g. 'seat', 'baggage')
        - `passengerType` string: Applicable passenger type (ALL, ADT, CHD, INF)
        - `passengerIndex` integer: Index of the passenger this service applies to (0-based; matches the passengers[] array)
        - `segmentKey` string: The flight segment this service applies to (matches journey.segments[].segmentKey)
        - `quantity` integer: Number of units booked
        - `createdAt` string, date-time: UTC timestamp when the provider attached the service
        - `phase` string: When the service joined the booking: 'pre_booking', 'post_booking', or 'post_ticketing' (sold on the ticketed booking with POST /flights/bookings/{bookingId}/services/confirm)
        - `status` string: Provider status of this service: 'pending', 'requested', 'confirmed', 'failed', 'dropped', 'replaced' or 'cancelled'
        - `pricing` FlightItemPricing, required: Pricing for an ancillary item (e.g. baggage)
          - `display` FlightMoneyAmount: A monetary amount with currency
            - `amount` number: Monetary amount
            - `currency` string: ISO 4217 currency code
          - `converted` boolean: True if FX currency conversion was applied
        - `metadata` object: Category-specific metadata. Contains exactly one of `seat` (when category is 'seat') or `baggage` (when category is 'baggage').
          - `seat` object: Seat details — present only when category is 'seat'
            - `available` boolean: Whether this seat is currently available
            - `position` string: Physical position (window, middle, aisle)
            - `seatColumn` string: Column letter (e.g. A, B, C)
            - `seatNumber` string: Full seat label (e.g. 1A)
            - `seatRow` integer: Row number
            - `seatType` string: Seat class/type (standard, extra_legroom, exit_row, ...)
          - `baggage` object: Baggage details — present only when category is 'baggage'
            - `bagType` string: Type of bag (e.g. checked, cabin, equipment). equipment is sports equipment or a musical instrument (skis, bike, golf bag...), with its own maxQuantity / maxBagsAllowed
            - `pieces` integer, nullable: Number of bag pieces. Null for an included allowance with no piece limit (weight-only); never means zero bags
            - `weightKg` number, nullable: Weight allowance in kilograms. Null when the provider states no weight limit
            - `maxQuantity` integer: Maximum quantity of this bag option per passenger per segment. Omitted when unknown.
            - `maxBagsAllowed` integer: Highest bag position covered by the bag options of this bagType (e.g. 5 for "4th to 5th bag"). A position, not a count of bags to buy: position 1 may be the fare's free bag. Omitted when unknown.
        - `emdNumber` string, nullable: Airline document (EMD) number issued for a service sold after ticketing. Null until the provider reports it on a later read of the reservation.
      - `settings` object: Booking settings
      - `paymentInput` object: Echo of payment submitted when creating the booking; may include additional provider-specific fields
        - `method` 'TRANSACTION_ID' | 'CREDIT': How the booking was paid: Stripe (`TRANSACTION_ID`) or credit line (`CREDIT`)
        - `transactionId` string: Stripe transaction id when `method` is `TRANSACTION_ID`
    - `servicesAttachable` object: Ancillary services available to attach before booking (seats, baggage, etc.)
      - `metadata` FlightServicesMetadata: Catalog-level rules returned next to the service groups
        - `ancillaryExclusions` object[]: Provider selection rules over services (today the Travelfusion bag options). A selection breaking a rule is refused with 400 44019 and details.conflicts.
          - `type` string, required: selectOne: pick at most one of serviceIds; mutuallyExclusive: the services cannot be combined
          - `scope` string: What the rule applies to
          - `reason` string
          - `serviceIds` string[], required: Encoded serviceIds from groups[].services[] covered by the rule
      - `expiresAt` string: Expiry time for attaching services (ISO 8601)
      - `groups` object[]: Groups of available ancillary services
        - `available` boolean: Whether any services in this group are currently available
        - `category` string: Service category: seat, baggage or, when enabled for the provider, meal, lounge, pet, wifi_entertainment, priority, assistance (sold at the provider price, item code in metadata.<category>.subCode)
        - `label` string: Human-readable group label
        - `services` object[]: Available services in this group
          - `serviceId` string: Unique service identifier (use in attachService)
          - `name` string: Service name (e.g. Seat 7A)
          - `category` string: Service category: seat, baggage or, when enabled for the provider, meal, lounge, pet, wifi_entertainment, priority, assistance (sold at the provider price, item code in metadata.<category>.subCode)
          - `passengerType` string: Applicable passenger type (ALL, ADT, CHD, INF)
          - `segmentKey` string: Links to the segment this service applies to
          - `pricing` FlightItemPricing: Pricing for an ancillary item (e.g. baggage)
            - `display` FlightMoneyAmount: A monetary amount with currency
              - …
            - `converted` boolean: True if FX currency conversion was applied
          - `metadata` object: Category-specific metadata. Contains exactly one of `seat` (when category is `seat`) or `baggage` (when category is `baggage`).
            - `seat` object: Seat details — present only when the service category is `seat`
              - …
            - `baggage` object: Baggage details — present only when the service category is `baggage`
              - …
    - `price` number: Total price to charge (in the currency field)
    - `currency` string: ISO 4217 currency code for price and secretKey
    - `transactionId` string: When `usePaymentSdk` was true: Stripe transaction ID — use as `payment.transactionId` with `payment.method: TRANSACTION_ID` when calling `/flights/bookings`. Empty or omitted when prebooking on a credit line only.
    - `secretKey` string: When `usePaymentSdk` was true: Stripe payment intent client secret — use with the Stripe SDK before calling `/flights/bookings`
    - `publishableKey` string, nullable: When `usePaymentSdk` was true: Stripe publishable key (null if not applicable)
    - `offerId` string: The offerId used to create this prebook
    - `voucherCode` string: Represents the unique code used to redeem a voucher during the transaction.
    - `voucherTotalAmount` string: Specifies the total monetary value or discount amount provided by the voucher.
    - `paymentTypes` string[]: Available payment methods for completing this prebook at `/flights/bookings`. Possible values: `TRANSACTION_ID` (use the returned Stripe `transactionId`), `CREDIT` (charge the account credit line), `CREDIT_CARD` (direct card payment via the secure endpoint `https://pci-book.liteapi.travel` with `billingInfo`; enabled per API key), `ACC_CREDIT_CARD` (charge the card stored on your account; listed when a payment method is saved on the account).

## Other responses

- `400`: Bad request — missing or invalid prebook parameters
- `401`: Unauthorized
- `404`: Offer expired, not found, or session expired
- `500`: Server error
- `502`: Provider error during prebook
- `503`: Service unavailable

---

[API](https://skmtc.dev/liteapi/apis/api-flights.md) - [All operations](https://skmtc.dev/liteapi/apis/api-flights/llms.txt) - [OpenAPI document](https://skmtc.dev/liteapi/apis/api-flights/revisions/7ccb4b3a8bde?raw)
