---
title: "Precharge extra charges on a booking"
method: POST
path: "/flights/bookings/{bookingId}/extra-charges/precharges"
tags: ["Flight Bookings"]
---

# Precharge extra charges on a booking

`POST /flights/bookings/{bookingId}/extra-charges/precharges`

## Request

- Base URL: `https://api.liteapi.travel/v3.0`
- URL: `https://api.liteapi.travel/v3.0/flights/bookings/{bookingId}/extra-charges/precharges`
- Auth: API key in header `X-API-Key`

## Overview

Creates a pending post-booking extra-charge batch for an existing flight booking and returns an opaque `chargesId`. When the batch is paid with `TRANSACTION_ID`, also creates a PaymentIntent (`transactionId` + `secretKey`) when `usePaymentSdk` is true.

## Payment methods

- **Credit-line booking** — `CREDIT` (default) bills the credit line; `TRANSACTION_ID` creates a Stripe PaymentIntent so the passenger pays (requires `usePaymentSdk: true`)
- **Stripe booking** — `TRANSACTION_ID` (requires `usePaymentSdk: true`)
- **WL / CMI booking** — `MANUAL` (system admin / operations only): nothing is captured; support collects the payment outside LiteAPI and marks it paid with `PUT /extra-charges/charges`

The chosen method is returned in `paymentTypes` and recorded in `chargesId`.

## Access

Requires Flights API access. Post-booking extra charges are not enabled by default — contact the LiteAPI support team to request access.

## When to Use

- Attach fees after confirmation (seat change, baggage, admin adjustment)
- Obtain a Stripe client secret so the customer can confirm payment before `POST .../extra-charges/charges`

## What You Get

- **`chargesId`** — Opaque token required by `/extra-charges/charges` (do not re-send charge lines)
- **`paymentTypes`** — The method chosen for this batch (`CREDIT`, `TRANSACTION_ID` or `MANUAL`)
- **`transactionId` / `secretKey`** — Present when the batch is paid with `TRANSACTION_ID` and `usePaymentSdk` is true
- Existing extras totals plus pending batch totals

## Constraints

- Booking status must be `CONFIRMED` or `PENDING_CONFIRMATION`
- All lines in one request must share the same currency
- Payment method on `/charges` must match the method chosen here

## Path parameters

- `bookingId` string, uuid, required

## Request body

- FlightExtraChargesPrechargeRequest: Request body for preparing a pending post-booking extra-charge batch
  - `charges` FlightExtraChargeInput[], required: Charge lines to attach. All lines must use the booking sellingCurrency.
    - `description` string, required: Human-readable fee label
    - `currency` string, required: ISO 4217 currency code
    - `amount` number, float, required: Positive charge amount
  - `usePaymentSdk` boolean: Required true when the batch is paid with TRANSACTION_ID so a PaymentIntent is created. Ignored for CREDIT and MANUAL.
  - `paymentMethod` 'CREDIT' | 'TRANSACTION_ID' | 'MANUAL': How this batch is paid, among the methods the booking allows. Credit-line bookings: CREDIT (default) or TRANSACTION_ID (charge the passenger through Stripe). Stripe bookings: TRANSACTION_ID. WL/CMI bookings: MANUAL (system admin / operations only). Omit to use the booking default.

## Response `200`

Pending extra charges prepared

- object
  - `data` FlightExtraChargesPrechargeData, required: Pending extra-charge batch prepared for confirmation via POST .../extra-charges/charges
    - `bookingId` string, uuid, required: Flight booking identifier
    - `sellingPrice` number, float, required: Original booking selling price
    - `sellingCurrency` string, required: ISO 4217 currency of the original booking selling price
    - `extraChargesTotal` number, float: Already-confirmed extras total
    - `extraChargesCurrency` string: ISO 4217 currency of already-confirmed extras. Omitted when no extras exist yet.
    - `extraChargesDetails` FlightExtraChargeDetail[]: Already-confirmed extra charge lines on the booking. Omitted when none exist.
      - `description` string: Human-readable fee label
      - `currency` string: ISO 4217 currency code of the charge line
      - `amount` number, float: Confirmed charge amount
      - `timestamp` string, date-time: When the charge was confirmed
      - `transactionId` string: Stripe transaction id when paid with TRANSACTION_ID
      - `chargesId` string: Opaque batch id from precharges; stored when the batch is confirmed
      - `paymentMethod` 'CREDIT' | 'TRANSACTION_ID' | 'MANUAL': Payment method used for this line. Absent on lines persisted before methods were recorded.
      - `status` 'awaiting_payment' | 'paid': `awaiting_payment` for MANUAL lines not yet marked paid; `paid` otherwise. Absent on older lines, which are paid.
      - `paymentReference` string: Reference of a MANUAL payment recorded by support (e.g. CMI transaction id)
      - `paidAt` string, date-time: When the line was paid (confirm time for CREDIT / TRANSACTION_ID, time it was marked paid via PUT /extra-charges/charges for MANUAL)
    - `pendingTotal` number, float, required: Sum of the pending charge lines in pendingCurrency
    - `pendingCurrency` string, required: ISO 4217 currency of the pending batch. Must match sellingCurrency.
    - `pendingCharges` FlightExtraChargeInput[]: Echo of the charge lines encoded in chargesId
      - `description` string, required: Human-readable fee label
      - `currency` string, required: ISO 4217 currency code
      - `amount` number, float, required: Positive charge amount
    - `chargesId` string, required: Opaque token required by POST .../extra-charges/charges. Do not re-send charge lines on confirm.
    - `transactionId` string: Stripe PaymentIntent transaction id when a PaymentIntent was created
    - `secretKey` string: Stripe PaymentIntent client secret for customer confirmation
    - `paymentTypes` string[], required: Single-element list with the payment method chosen for this batch (CREDIT, TRANSACTION_ID or MANUAL); confirm must use it
    - `creditLine` object: Credit-line snapshot when CREDIT is the allowed payment method
      - `remainingCredit` number, float: Remaining credit available to the booking owner at precharge time
      - `currency` string: ISO 4217 currency of remainingCredit (always USD for credit line)

## Other responses

- `400`: Validation error
- `402`: Credit line over limit (CREDIT bookings only)
- `403`: Extra charges not enabled for this account, or credit line not allowed
- `404`: Booking not found (or not owned by the caller)
- `409`: Booking status does not allow extra charges
- `500`: Internal server error

---

[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)
