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

# Confirm extra charges on a booking

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

## Request

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

## Overview

Confirms a pending extra-charge batch created by `/extra-charges/precharges`. Captures the Stripe PaymentIntent, bills the credit line, or (MANUAL) records the lines as `awaiting_payment`, then appends the lines to the booking.

## Access

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

## Idempotency

Idempotent on `chargesId`, mirroring `POST /flights/bookings` prebookId replay:

- **Already confirmed** — HTTP 200 with `data.message` and the persisted extras (no re-capture / no duplicate credit-line billing)
- **Concurrent confirm** — HTTP 409 / `45035` while another confirm for the same `chargesId` holds the Redis lock; retry after the first completes

## When to Use

- After the customer confirmed the Stripe PaymentIntent (status `requires_capture` / `succeeded`), or immediately for `CREDIT` bookings

## Constraints

- Body only needs `chargesId` + `payment` (charge lines are encoded in `chargesId`)
- `payment.method` must match the method chosen at precharges (`TRANSACTION_ID`, `CREDIT` or `MANUAL`); ids minted before methods were recorded must use the booking's original payment
- For Stripe, `payment.transactionId` must be the id returned by precharges

## Path parameters

- `bookingId` string, uuid, required

## Request body

- FlightExtraChargesChargeRequest: Request body for confirming a pending extra-charge batch created by precharges
  - `chargesId` string, required: Opaque token from precharges
  - `payment` object, required: Payment details for capturing the extra charge. method must match the booking original payment.
    - `method` 'TRANSACTION_ID' | 'CREDIT', required: Must match the booking's original payment method
    - `transactionId` string: Required when method is TRANSACTION_ID; use the value from precharges

## Response `200`

Extra charges confirmed and persisted

- object
  - `data` FlightExtraChargesChargeData, required: Booking totals after extra charges are confirmed and persisted
    - `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: Running total of all confirmed extra charges on the booking
    - `extraChargesCurrency` string: ISO 4217 currency of extraChargesTotal
    - `extraChargesDetails` FlightExtraChargeDetail[]: All confirmed extra charge lines on the booking
      - `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)
    - `message` string: Present on idempotent replay when this chargesId was already confirmed

## Other responses

- `400`: Validation error or payment method mismatch
- `402`: Credit line over limit
- `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 not eligible, or concurrent confirm in progress
- `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)
