---
title: "Mark manual extra charges as paid"
method: PUT
path: "/flights/bookings/{bookingId}/extra-charges/charges"
tags: ["Flight Bookings"]
---

# Mark manual extra charges as paid

`PUT /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

Records that a `MANUAL` extra-charge batch (WL / CMI booking) was paid outside LiteAPI. Sets `status: paid`, `paymentReference` and `paidAt` on every `awaiting_payment` line of the batch. `extraChargesTotal` does not change.

## Access

System admins and users with the `operations` role only.

## Idempotency

A batch that is already paid returns HTTP 200 with `data.message` and the existing lines (the stored reference is kept).

## Path parameters

- `bookingId` string, uuid, required

## Request body

- FlightExtraChargesMarkPaidRequest: Request body for marking a MANUAL extra-charge batch as paid
  - `chargesId` string, required: Opaque batch id persisted on `extraChargesDetails[].chargesId`
  - `reference` string, required: Manual payment reference (e.g. CMI transaction id or payment link id)

## Response `200`

Batch marked paid (or already paid)

- 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`: Invalid body or chargesId
- `403`: Caller is not a system admin or operations
- `404`: Booking not found, or no extra charges with this chargesId
- `409`: Another confirm or mark-paid for the same chargesId is 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)
