> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.kitionz.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.kitionz.com/_mcp/server.

# 6 · Book

POST https://sandbox-api.kitionz.com/v1/flights/book
Content-Type: application/json

**Place a booking.**

**What:** places the booking. Requires the `quoteToken` from `/fare-quote`; the supplier-quoted price is taken from the signed token, so a tenant can’t book a different price than was quoted.

**When:** after a successful `/fare-quote`, within the token’s validity.

**Before / After:** `/fare-quote` → here → read the booking’s `status` (and `/bookings/{id}/ticket` if it is `HELD`).

**Gotchas**

* **Send the offer’s trip back** — `tripType`, `departureDate` and (round trip) `returnDate` — exactly as on `/fare-quote` (the token binds them).
* **Idempotency is the `Idempotency-Key` HEADER** (required). Persist it and reuse the **same** value on retries — the booking is reserved before the supplier call, so a retry returns the same booking instead of charging twice. There is **no** body idempotency field.
* `passengers[].travelerType` is `ADULT` / `CHILD` / `INFANT`, and the array **must match** `adults`/`children`/`infants`. A `CHILD` or `INFANT` needs `dateOfBirth`; every `INFANT` needs a `guardian` (the travelling adult’s name).
* **If `/book` is slow or your request times out, never book again with a new key.** If you got a booking back, read its `status` (`PENDING_CONFIRMATION` means wait: read `GET /bookings/{id}` every 30 seconds). If you got no answer, send the identical request again with the SAME `Idempotency-Key`: you get the first booking back, or `409 BOOKING_IN_PROGRESS` / `IDEMPOTENT_REQUEST_IN_PROGRESS` while it is still running (wait, then send it again).
* An answer with no Kitionz `error.code` (for example a `504` from the network) or any `500` counts as no answer: send the same request again with the same key. Set your HTTP timeout for `/book` to at least 90 seconds; a slow supplier can take more than a minute.
* Just before booking, Kitionz asks the supplier for the fare again and checks it the same way as `/fare-quote`. A broken answer → `422 FARE_QUOTE_UNUSABLE`. An infant price that changed since your quote → `409 FARE_RECHECK_FAILED`: `failureClass` `INFANT_PRICE_WITHDRAWN` (you were quoted one, the supplier gives none now; quote again: it shows `NOT_GIVEN`) or `INFANT_PRICE_APPEARED` (you were quoted `NOT_GIVEN`, the supplier gives one now; quote again: it shows `PRICED`). All are definite: nothing was booked or charged.
* You never send an amount. When the quote said `infantFare.status: NOT_GIVEN`, the booking is made at the supplier’s total (adults and children) and your own infant charge stays with you. The booking’s `fareBreakdown.infantFare` is the supplier’s statement when the booking was made; since `/book` refuses any change from the quote, it is always the status you were quoted.

**Example — request** (with the `Idempotency-Key: <your-uuid>` header):

```json
{
  "supplierOfferRef": "floffer_9x2k7q",
  "quoteToken": "eyJhbGci…",
  "adults": 1, "tripType": "ONE_WAY", "departureDate": "2027-01-15",
  "originCode": "DEL", "destCode": "BOM",
  "booker": { "name": "Asha Rao", "email": "asha@example.com", "phone": "+919800000000" },
  "passengers": [ { "title": "Ms", "firstName": "Asha", "lastName": "Rao", "travelerType": "ADULT" } ]
}
```

**Response (trimmed)** — the HTTP status is `201`; decide by `data.status`:

```json
{ "data": { "id": "bkg_7f3a92", "status": "CONFIRMED", "pnr": "AB12CD", "supplier": { "name": "Airnatt Holidays", "website": "https://airnatt.com", "supportPhone": "+91 99999 00000", "supportEmail": "help@airnatt.com" }, "returnSupplier": null } }
```

`supplier` names who sold the flight (the real seller behind a marketplace), with the support contacts Kitionz holds — on every booking from the moment it exists. `returnSupplier` is always null (one seller per booking); it will be removed in a later version.

Reference: https://docs.kitionz.com/flight-api/6-book

## Authentication

- `Authorization` header (bearer token, required) — Your Kitionz API key, sent as `Authorization: Bearer keyId:secret`. Create it in your Kitionz console under **API → API keys**.

## Servers

- `https://sandbox-api.kitionz.com` (Test, default)
- `https://api.kitionz.com` (Live)

## Request

### Headers

- `Idempotency-Key` (string, required) — Unique key per logical write; reuse the SAME value on retries to get the original result instead of a duplicate side effect (ADR-0022).

### Body (application/json)

This endpoint expects a bookBody.

- `supplierOfferRef` (string, required)
- `adults` (integer, required)
- `departureDate` (string, required) — The offer's `departureDate` from /search — send it back unchanged (a different date → 400 OFFER_TRIP_MISMATCH).
- `originCode` (string, required)
- `destCode` (string, required)
- `passengers` (list of BookBodyPassengersItems, required)
- `quoteToken` (string, required)
- `sourceCode` (string, optional) — Leave it out: supplierOfferRef already names the supplier. Only an organisation shown suppliers before booking may send it, and it must then match the offer; for everyone else it is refused with SOURCE_CODE_NOT_ACCEPTED.
- `children` (integer, optional, default: 0)
- `infants` (integer, optional, default: 0)
- `tripType` (enum, optional) — The offer's `tripType` from /search. May be left out: the offer's own trip type is used. When sent it must be the offer's (another → 400 OFFER_TRIP_MISMATCH).
  - Allowed values: `ONE_WAY`, `ROUND_TRIP`
- `returnDate` (string, optional) — Round trip only: the offer's `returnDate` from /search, sent only with tripType ROUND_TRIP. May be left out (the offer fixes it); when sent, send it on /fare-quote and /book alike.
- `booker` (BookBodyBooker, optional, default: {})
- `selectedSeats` (list of BookBodySelectedSeatsItems, optional)
- `selectedSSRs` (list of BookBodySelectedSsRsItems, optional)
- `bookingMode` (enum, optional, default: LIVE)
  - Allowed values: `LIVE`, `HOLD`
- `formOfPayment` (BookBodyFormOfPayment, optional)
- `privateFareCodes` (BookBodyPrivateFareCodes, optional)
- `externalReference` (string, optional)

## Response

### 201

Success

- `success` (boolean, required)
- `statusCode` (double, required)
- `data` (FlightBookingEnvelope, required) — A full persisted booking (passengers, segments, events, amounts, status).
- `meta` (V1FlightsBookPostResponsesContentApplicationJsonSchemaMeta, required)

## Errors

### 502 Bad Gateway Error

Sold out at book

- `success` (boolean, required)
- `statusCode` (integer, required)
- `error` (ErrorError, required)

## Types

### BookBodyPassengersItems

- `title` (string, required)
- `firstName` (string, required)
- `travelerType` (enum, required)
  - Allowed values: `ADULT`, `CHILD`, `INFANT`
- `lastName` (string, optional)
- `dateOfBirth` (string, optional)
- `passportNumber` (string, optional)
- `passportIssueDate` (string, optional)
- `passportExpiryDate` (string, optional)
- `nationality` (string, optional)
- `passportIssuingCountry` (string, optional)
- `gender` (enum, optional)
  - Allowed values: `MALE`, `FEMALE`, `UNKNOWN`
- `frequentFlyer` (list of BookBodyPassengersItemsFrequentFlyerItems, optional)
- `guardian` (string, optional)
- `wheelChair` (boolean, optional)

### BookBodyBooker

- `name` (string, optional)
- `email` (string, optional)
- `phone` (string, optional)

### BookBodySelectedSeatsItems

- `paxIndex` (integer, required)
- `supplierSeatRef` (string, required)
- `segmentRef` (string, optional)

### BookBodySelectedSsRsItems

- `paxIndex` (integer, required)
- `supplierSsrRef` (string, required)
- `type` (enum, required)
  - Allowed values: `BAGGAGE`, `MEAL`, `OTHER`
- `segmentRef` (string, optional)

### BookBodyFormOfPayment

- `type` (enum, required)
  - Allowed values: `WALLET`, `CREDIT`, `CARD`, `CASH`, `PAY_LATER`
- `card` (BookBodyFormOfPaymentCard, optional)

### BookBodyPrivateFareCodes

- `corporateCode` (string, optional)
- `tourCode` (string, optional)

### FlightBookingEnvelope

A full persisted booking (passengers, segments, events, amounts, status).

- `id` (string, required)
- `sourceCode` (string, required)
- `supplier` (FlightBookingEnvelopeSupplier, required, nullable) — Who sold this booking: the real seller (for a marketplace, the agency behind it), with the support contacts Kitionz holds for it. Null when the seller could not be resolved.
- `returnSupplier` (FlightBookingEnvelopeReturnSupplier, required, nullable) — Always null: one seller sells the whole booking (ADR-0149). Will be removed in a later version.
- `environment` (enum, required)
  - Allowed values: `SANDBOX`, `PRODUCTION`
- `status` (enum, required) — Booking status. What each value means and what to do: * RESERVED — transient: Kitionz reserved the booking before calling the supplier. Resolves within seconds. If the request stops before it finishes: with a Live key the booking moves to PENDING\_CONFIRMATION within minutes (never to FAILED on its own) and the Kitionz operations team checks it with the supplier; with a Test key it is closed as FAILED. * PENDING\_CONFIRMATION — the outcome is not final yet. Do NOT book again. Read the booking with `GET /v1/flights/bookings/{id}` about every 30 seconds. `supplierReference` PRESENT = the supplier accepted the booking; usually the PNR follows within 10 minutes and Kitionz checks with the supplier for you. ABSENT = the supplier call gave no final answer, so the booking MAY exist. A booking that is here because something failed — no clear answer from the supplier, a request that stopped before it finished, or a booking the supplier accepted that could not be saved in full — is checked with the supplier by the Kitionz operations team, not automatically; its `events` say which. No webhook is sent when it settles. Still pending after 20 minutes: contact Kitionz support with the booking id. * PARTIALLY\_BOOKED — no longer produced: Kitionz never books a round trip as two separate bookings. Listed until a later version removes it. * HELD — the fare is on hold (not ticketed); ticket before `ticketingTimeLimit`. * PENDING\_FULFILMENT — a request for an offer with `booking.viaSupplierApi: false`: nothing is booked and nothing charged by Kitionz. Book on the supplier’s portal, then `POST /v1/flights/bookings/{id}/fulfil` with the PNR (see `nextAction`), or `/cancel` to withdraw. Unfulfilled requests expire automatically. * CONFIRMED — booked and confirmed; `pnr` and `supplierReference` are present. * FAILED — not booked. Safe to search and book again. * CANCELLED — cancelled or withdrawn (including an expired request). * SCHEDULE\_CHANGED — the airline changed the itinerary after ticketing; review and accept or reaccommodate. * CANCELLED\_BY\_SUPPLIER — the airline/supplier cancelled the booking; a refund or reaccommodation follows.
  - Allowed values: `RESERVED`, `PENDING_CONFIRMATION`, `PARTIALLY_BOOKED`, `HELD`, `PENDING_FULFILMENT`, `CONFIRMED`, `FAILED`, `CANCELLED`, `SCHEDULE_CHANGED`, `CANCELLED_BY_SUPPLIER`
- `bookingMode` (string, required)
- `bookingChannel` (enum, required, nullable)
  - Allowed values: `CONSOLE_UI`, `API`
- `supplierReference` (string, required, nullable)
- `pnr` (string, required, nullable)
- `ticketingTimeLimit` (string, required, nullable)
- `booker` (FlightBookingEnvelopeBooker, required)
- `passengers` (list of FlightBookingEnvelopePassengersItems, required)
- `segments` (list of FlightBookingEnvelopeSegmentsItems, required)
- `events` (list of FlightBookingEnvelopeEventsItems, required)
- `adults` (double, required)
- `children` (double, required)
- `infants` (double, required)
- `departureDate` (string, required, nullable)
- `returnDate` (string, required, nullable)
- `tripType` (string, required)
- `originCode` (string, required)
- `destCode` (string, required)
- `totalAmount` (double, required)
- `currency` (string, required)
- `fareBreakdown` (FlightBookingEnvelopeFareBreakdown, required)
- `reconciliation` (FlightBookingEnvelopeReconciliation, required)
- `externalReference` (string, required, nullable)
- `nextAction` (FlightBookingEnvelopeNextAction, required, nullable)
- `bookedAt` (string, required)
- `createdAt` (string, required)
- `updatedAt` (string, required)
- `baggage` (any, optional)

### V1FlightsBookPostResponsesContentApplicationJsonSchemaMeta

- `requestId` (string, required)
- `timestamp` (datetime, required)
- `path` (string, required)
- `method` (string, required)
- `responseTime` (double, optional)
- `pagination` (V1FlightsBookPostResponsesContentApplicationJsonSchemaMetaPagination, optional)

### ErrorError

- `type` (string, required) — The error family.
- `code` (string, required) — What happened, e.g. `OFFER_EXPIRED`.
- `message` (string, required)
- `request_id` (string, required) — Quote it when you ask Kitionz for help.
- `doc_url` (string, optional) — This code's page in the Kitionz docs.

### BookBodyPassengersItemsFrequentFlyerItems

- `airlineCode` (string, required)
- `number` (string, required)

### BookBodyFormOfPaymentCard

- `last4` (string, optional)
- `brand` (string, optional)
- `token` (string, optional)

### FlightBookingEnvelopeSupplier

Who sold this booking: the real seller (for a marketplace, the agency behind it), with the support contacts Kitionz holds for it. Null when the seller could not be resolved.

- `name` (string, required, nullable)
- `website` (string, required, nullable)
- `supportPhone` (string, required, nullable)
- `supportEmail` (string, required, nullable)

### FlightBookingEnvelopeReturnSupplier

Always null: one seller sells the whole booking (ADR-0149). Will be removed in a later version.

- `name` (string, required, nullable)
- `website` (string, required, nullable)
- `supportPhone` (string, required, nullable)
- `supportEmail` (string, required, nullable)

### FlightBookingEnvelopeBooker

- `name` (string, required, nullable)
- `email` (string, required, nullable)
- `phone` (string, required, nullable)

### FlightBookingEnvelopePassengersItems

- `id` (string, required)
- `passengerIndex` (double, required)
- `title` (string, required)
- `firstName` (string, required)
- `lastName` (string, required, nullable)
- `travelerType` (string, required)
- `dateOfBirth` (string, required, nullable)
- `passportNumber` (string, required, nullable)
- `passportIssueDate` (string, required, nullable)
- `passportExpiryDate` (string, required, nullable)
- `nationality` (string, required, nullable)
- `gender` (string, required, nullable)
- `guardian` (string, required, nullable)
- `wheelChair` (boolean, required)
- `perPaxStatus` (string, required, nullable)
- `perPaxAmount` (double, required, nullable)

### FlightBookingEnvelopeSegmentsItems

- `id` (string, required)
- `segmentIndex` (double, required)
- `legType` (string, required, nullable)
- `legIndex` (double, required, nullable)
- `airlineCode` (string, required)
- `airlineName` (string, required)
- `flightNumber` (string, required)
- `originCode` (string, required)
- `originName` (string, required)
- `destCode` (string, required)
- `destName` (string, required)
- `departureTime` (string, required, nullable) — Departure in the origin airport zone. `null` when the supplier did not state it: only at a stop inside a leg, never on its first flight.
- `arrivalTime` (string, required, nullable) — Arrival in the destination airport zone. `null` when the supplier did not state it: only at a stop inside a leg, never on its last flight.
- `departureTimezone` (string, required, nullable)
- `arrivalTimezone` (string, required, nullable)
- `technicalStops` (list of FlightBookingEnvelopeSegmentsItemsTechnicalStopsItems, required)
- `unnamedStops` (integer, required)
- `layoverAfterMinutes` (integer, required, nullable) — Minutes waited after this flight before the next flight of the same leg: from the two times when both are stated, otherwise the supplier's stated wait saved with the booking. `null` on a leg's last flight, or when neither is known.

### FlightBookingEnvelopeEventsItems

- `id` (string, required)
- `eventType` (string, required)
- `status` (string, required)
- `errorCode` (string, required, nullable)
- `errorMessage` (string, required, nullable)
- `createdAt` (string, required)

### FlightBookingEnvelopeFareBreakdown

- `tenantTotal` (double, required) — The total Kitionz bound and recorded for this booking.
- `currency` (string, required)
- `composition` (FlightBookingEnvelopeFareBreakdownComposition, required, nullable)
- `published` (FlightBookingEnvelopeFareBreakdownPublished, required, nullable)
- `taxComponents` (list of FlightBookingEnvelopeFareBreakdownTaxComponentsItems, required)
- `commercials` (list of FlightBookingEnvelopeFareBreakdownCommercialsItems, required)
- `perPax` (list of FlightBookingEnvelopeFareBreakdownPerPaxItems, required)
- `infantFare` (FlightBookingEnvelopeFareBreakdownInfantFare, optional) — Whether the supplier gave a price for the infants. PRICED: the infant price is in perPax.infant and inside totalAmount. NOT_GIVEN: the supplier gave no infant price, so perPax.infant is absent and totalAmount covers adults and children only — add your own infant charge (the supplier or airline may still charge for the infant). Treat any other status as NOT_GIVEN. On a booking: the supplier's statement on the fare it was made on, which is always the one you were quoted (/book refuses a booking whose infant price changed since the quote). Present when the booking has an infant; absent when it has none, or was made before Kitionz recorded this. On NOT_GIVEN the INF row has perHeadTotal null and tenantTotal covers adults and children only.

### FlightBookingEnvelopeReconciliation

- `inSync` (boolean, required)
- `supplierDataAvailable` (boolean, required)
- `diffs` (list of FlightBookingEnvelopeReconciliationDiffsItems, required)

### FlightBookingEnvelopeNextAction

- `code` ("SUBMIT_PNR", required)
- `method` ("POST", required)
- `path` (string, required)
- `description` (string, required)

### V1FlightsBookPostResponsesContentApplicationJsonSchemaMetaPagination

- `page` (double, optional)
- `limit` (double, optional)
- `total` (double, optional)
- `totalPages` (double, optional)
- `hasNext` (boolean, optional)
- `hasPrev` (boolean, optional)

### FlightBookingEnvelopeSegmentsItemsTechnicalStopsItems

- `airportCode` (string, required)
- `airportName` (string, optional)
- `arrivalTime` (string, optional)
- `departureTime` (string, optional)
- `durationMinutes` (double, optional)
- `arrivalTerminal` (string, optional)
- `departureTerminal` (string, optional)

### FlightBookingEnvelopeFareBreakdownComposition

- `baseFare` (double, required, nullable)
- `taxes` (double, required, nullable)
- `commission` (double, required, nullable)
- `tds` (double, required, nullable)
- `netPayable` (double, required, nullable)

### FlightBookingEnvelopeFareBreakdownPublished

- `baseFare` (double, required, nullable)
- `taxes` (double, required, nullable)
- `total` (double, required, nullable)

### FlightBookingEnvelopeFareBreakdownTaxComponentsItems

- `code` (string, required)
- `amount` (double, required)
- `label` (string, optional)

### FlightBookingEnvelopeFareBreakdownCommercialsItems

- `type` (string, required)
- `amount` (double, required)
- `appliesOn` (string, optional)
- `paxType` (enum, optional)
  - Allowed values: `ADULT`, `CHILD`, `INFANT`
- `supplierType` (string, optional)
- `label` (string, optional)

### FlightBookingEnvelopeFareBreakdownPerPaxItems

- `paxType` (enum, required)
  - Allowed values: `ADT`, `CHD`, `INF`
- `count` (double, required)
- `perHeadTotal` (double, required, nullable)
- `baseFare` (double, required, nullable)
- `totalTax` (double, required, nullable)

### FlightBookingEnvelopeFareBreakdownInfantFare

Whether the supplier gave a price for the infants. PRICED: the infant price is in perPax.infant and inside totalAmount. NOT_GIVEN: the supplier gave no infant price, so perPax.infant is absent and totalAmount covers adults and children only — add your own infant charge (the supplier or airline may still charge for the infant). Treat any other status as NOT_GIVEN. On a booking: the supplier's statement on the fare it was made on, which is always the one you were quoted (/book refuses a booking whose infant price changed since the quote). Present when the booking has an infant; absent when it has none, or was made before Kitionz recorded this. On NOT_GIVEN the INF row has perHeadTotal null and tenantTotal covers adults and children only.

- `status` (enum, required) — Whether the supplier gave a price for the infants. PRICED: the infant price is in perPax.infant and inside totalAmount. NOT_GIVEN: the supplier gave no infant price, so perPax.infant is absent and totalAmount covers adults and children only — add your own infant charge (the supplier or airline may still charge for the infant). Treat any other status as NOT_GIVEN.
  - Allowed values: `PRICED`, `NOT_GIVEN`

### FlightBookingEnvelopeReconciliationDiffsItems

- `field` (string, required)
- `ours` (FlightBookingEnvelopeReconciliationDiffsItemsOurs, required, nullable)
- `supplier` (FlightBookingEnvelopeReconciliationDiffsItemsSupplier, required, nullable)
- `severity` (enum, required)
  - Allowed values: `critical`, `warning`, `info`
- `delta` (double, optional)

### FlightBookingEnvelopeReconciliationDiffsItemsOurs

- double
- string

### FlightBookingEnvelopeReconciliationDiffsItemsSupplier

- double
- string

## Examples

**Request**

```json
{
  "supplierOfferRef": "floffer_034n1fbuIzGX130wB12QcM",
  "adults": 1,
  "departureDate": "2026-11-10",
  "originCode": "DEL",
  "destCode": "BOM",
  "passengers": [
    {
      "title": "MR",
      "firstName": "Raj",
      "travelerType": "ADULT",
      "lastName": "Kumar"
    }
  ],
  "quoteToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6ImtpdGlvbnouZmxpZ2h0LnF1b3RlIiwia2lkIjoidjEiLCJlbmMiOiJBMjU2R0NNIiwiZWtpZCI6Ijk5YzFjYzI1In0.t6vMFSmW73MRTNjQb4R4KLQtI1Oc4zV5CYdecMRxfNHA-AEGH-mSEWQnHrruZM7BS0NsK6oQZ7PQOWeII303Ij52A4ELfAKkrxI3VdNt4XKl24MVgdW25YWEKc9xnq8dzIAQPK2Kh2c-V_tFji3mEXOzEwYHqZT8ixCyf6FVlcjCzKg6ok2_R9ZoLylokn6qCufPhKouhMCwPqqPVhocxJ7KNCOnAGeyvsh4JA5Rpro55mi1O-zSn4qREVCTBiSL48_4F9L1Yslbi7e3hdWmhZi0cVz0IeCkxUppHbqCfRT61rBsCuMMwGtsQiDR6J3xi-SWm-_GJmCMgLwgf-lGHTFVPtaAY1Apf96kc2VcBYm2Zz1YnmE1JqSQFP3qrtk6QBGlUFe0of3GIv-HCPNSWB_4HklVJoqFuywf4xloMs_czLXrIvDiEDI9RwG1BwMTpK2lk_jsKmbLgSSvekg4_m0fOY9xJoqTi6nqPxMBob_zdhgm5St3Q60LsC-R-RSNt8vVfbzj_wHR7nC-S1VDZzSdUF_ztoTTWzXe03xOiW6O42_5T5v3p7A9FVNLibu89om4FahhtsXNjllllxmvP1smrZbWJ3mQtNcLtPy_C8QRN0YxkPeB_at8qj1qvYn1bS_w4yP8xFd7PswR_LZ3RecB9VkAUpe-bzWyPKLT1Z_nhL-qEZVkZKaJzEvQ14aAnSGYmR1HrgTci-VVUzLtPpQSsaQa9ONK3g35glx0VhsmIOvPi2ehpLbLZWPyFYPpoPrCopHSrO_1RSwZNk5FmmaffoI12xrAxjJwsF72xZ6zrxUFh1nofoZ0pm0n5WIQFnhF73guv61ycaTOjkGtfMHYv14Wz8yCueuHBfL9LzsbX3KH48uIoVWLX5eWPA8JMn8Yg23KRz6MOfiX_g0PIWJLrSZMyuWa3DzcMz6H0mjHOzUQBUYEa03GCgAKHCu0yg782VqeLtK25c_Kki0p0Eu-2oznAGP5Y1IdQ67caFqqNfALByVp13VL9B4UZoX9pd9fkeRR1vOPA0gRnoHQS3WMpaW6_QnKt-PkqKct4rzFk6QjecAlWikno7zSmcFi6leJPFpVfdP8S5GguWXPF5eBh9w6BGG94a3pnp0ATbvSxJOMZZzuzpnfILQhAGdARmB0gYWpMtAUvF6UWkJsC_Kk9YPNyjjlwTJOLtRErM-QYFbBy64naHLTk98CynMMuY76BHbzMKtKIs4kKwG1XV2DEmds36or_bA9qGdOF_v1nI6OlUpZ2bHC66DMiA0_0DC9en3Vb0VBpuwnMaJBNdw3BUaCla5XC3m8HIgIX7uz_a0sJfDWv7xxRWovCZj44mV6o7ZHASfTXd9awfccpLcQ9lmwH8bLn77IkeHAxgft5ZMX2_k3XsnMi4Zqbdznyh4xxe7ka6bshixEbKJfmIQC5O6bLKqK6BYpAfaasULjBgZI4-CAf0-Zx1OZmympjB1EcoI.er0c6-SoJBkTk1lHMmrBHxP9Sibofb7YKxR83xKQDLg",
  "tripType": "ONE_WAY",
  "booker": {
    "name": "Raj Kumar",
    "email": "raj@example-agency.in",
    "phone": "+919800000000"
  }
}
```

**Response**

```json
{
  "success": true,
  "statusCode": 201,
  "data": {
    "id": "bkg_034n1fcPCx5SPRxCdIjNUc",
    "sourceCode": "kitionz_test_air",
    "supplier": {
      "name": "Kitionz Test Air",
      "website": null,
      "supportPhone": null,
      "supportEmail": null
    },
    "returnSupplier": null,
    "environment": "SANDBOX",
    "status": "CONFIRMED",
    "bookingMode": "LIVE",
    "bookingChannel": "API",
    "supplierReference": "SIM-CONFIRM-1793080465-ERSEDULT3K",
    "pnr": "TEST28EFA6",
    "ticketingTimeLimit": null,
    "booker": {
      "name": "Raj Kumar",
      "email": "raj@example-agency.in",
      "phone": "+919800000000"
    },
    "passengers": [
      {
        "id": "bkgpax_034n1fcTn9YnCChvDql4pc",
        "passengerIndex": 0,
        "title": "MR",
        "firstName": "Raj",
        "lastName": "Kumar",
        "travelerType": "ADULT",
        "dateOfBirth": "2006-01-01",
        "passportNumber": null,
        "passportIssueDate": null,
        "passportExpiryDate": null,
        "nationality": null,
        "gender": "MALE",
        "guardian": null,
        "wheelChair": false,
        "perPaxStatus": null,
        "perPaxAmount": null
      }
    ],
    "segments": [
      {
        "id": "bkgseg_034n1fcUZTmYwSkN7UvXMV",
        "segmentIndex": 0,
        "legType": "OUTBOUND",
        "legIndex": 0,
        "airlineCode": "ZZ",
        "airlineName": "Zz",
        "flightNumber": "100",
        "originCode": "DEL",
        "originName": "Indira Gandhi International Airport",
        "destCode": "BOM",
        "destName": "Chhatrapati Shivaji Maharaj International Airport",
        "departureTime": "2026-11-10T05:30:00+05:30",
        "arrivalTime": "2026-11-10T07:40:00+05:30",
        "departureTimezone": "Asia/Kolkata",
        "arrivalTimezone": "Asia/Kolkata",
        "technicalStops": [],
        "unnamedStops": 0,
        "layoverAfterMinutes": null
      }
    ],
    "events": [
      {
        "id": "bkgevent_034n1fcVRrqMq4cnnKtSJn",
        "eventType": "FARE_RECHECK_PASSED",
        "status": "SUCCESS",
        "errorCode": null,
        "errorMessage": null,
        "createdAt": "2026-10-27T05:54:26.021Z"
      },
      {
        "id": "bkgevent_034n1fcVRovxXHREAFfuuv",
        "eventType": "BOOK_CONFIRMED",
        "status": "SUCCESS",
        "errorCode": null,
        "errorMessage": null,
        "createdAt": "2026-10-27T05:54:26.021Z"
      }
    ],
    "adults": 1,
    "children": 0,
    "infants": 0,
    "departureDate": "2026-11-10",
    "returnDate": null,
    "tripType": "ONE_WAY",
    "originCode": "DEL",
    "destCode": "BOM",
    "totalAmount": 5324,
    "currency": "INR",
    "fareBreakdown": {
      "tenantTotal": 5324,
      "currency": "INR",
      "composition": {
        "baseFare": 4511.86,
        "taxes": 812.14,
        "commission": 0,
        "tds": 0,
        "netPayable": 5324
      },
      "published": {
        "baseFare": 4511.86,
        "taxes": 812.14,
        "total": 5324
      },
      "taxComponents": [],
      "commercials": [],
      "perPax": [
        {
          "paxType": "ADT",
          "count": 1,
          "perHeadTotal": 5324,
          "baseFare": null,
          "totalTax": null
        }
      ]
    },
    "reconciliation": {
      "inSync": true,
      "supplierDataAvailable": false,
      "diffs": []
    },
    "externalReference": null,
    "nextAction": null,
    "bookedAt": "2026-10-27T05:54:25.986Z",
    "createdAt": "2026-10-27T05:54:25.961Z",
    "updatedAt": "2026-10-27T05:54:25.996Z",
    "baggage": null
  },
  "meta": {
    "requestId": "req_034n1fcGRE36fsP2EcyJZ9",
    "timestamp": "2026-10-27T05:54:26.088Z",
    "path": "/v1/flights/book",
    "method": "POST"
  }
}
```

**SDK Code**

```python
import requests

url = "https://sandbox-api.kitionz.com/v1/flights/book"

payload = {
    "supplierOfferRef": "floffer_034n1fbuIzGX130wB12QcM",
    "adults": 1,
    "departureDate": "2026-11-10",
    "originCode": "DEL",
    "destCode": "BOM",
    "passengers": [
        {
            "title": "MR",
            "firstName": "Raj",
            "travelerType": "ADULT",
            "lastName": "Kumar"
        }
    ],
    "quoteToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6ImtpdGlvbnouZmxpZ2h0LnF1b3RlIiwia2lkIjoidjEiLCJlbmMiOiJBMjU2R0NNIiwiZWtpZCI6Ijk5YzFjYzI1In0.t6vMFSmW73MRTNjQb4R4KLQtI1Oc4zV5CYdecMRxfNHA-AEGH-mSEWQnHrruZM7BS0NsK6oQZ7PQOWeII303Ij52A4ELfAKkrxI3VdNt4XKl24MVgdW25YWEKc9xnq8dzIAQPK2Kh2c-V_tFji3mEXOzEwYHqZT8ixCyf6FVlcjCzKg6ok2_R9ZoLylokn6qCufPhKouhMCwPqqPVhocxJ7KNCOnAGeyvsh4JA5Rpro55mi1O-zSn4qREVCTBiSL48_4F9L1Yslbi7e3hdWmhZi0cVz0IeCkxUppHbqCfRT61rBsCuMMwGtsQiDR6J3xi-SWm-_GJmCMgLwgf-lGHTFVPtaAY1Apf96kc2VcBYm2Zz1YnmE1JqSQFP3qrtk6QBGlUFe0of3GIv-HCPNSWB_4HklVJoqFuywf4xloMs_czLXrIvDiEDI9RwG1BwMTpK2lk_jsKmbLgSSvekg4_m0fOY9xJoqTi6nqPxMBob_zdhgm5St3Q60LsC-R-RSNt8vVfbzj_wHR7nC-S1VDZzSdUF_ztoTTWzXe03xOiW6O42_5T5v3p7A9FVNLibu89om4FahhtsXNjllllxmvP1smrZbWJ3mQtNcLtPy_C8QRN0YxkPeB_at8qj1qvYn1bS_w4yP8xFd7PswR_LZ3RecB9VkAUpe-bzWyPKLT1Z_nhL-qEZVkZKaJzEvQ14aAnSGYmR1HrgTci-VVUzLtPpQSsaQa9ONK3g35glx0VhsmIOvPi2ehpLbLZWPyFYPpoPrCopHSrO_1RSwZNk5FmmaffoI12xrAxjJwsF72xZ6zrxUFh1nofoZ0pm0n5WIQFnhF73guv61ycaTOjkGtfMHYv14Wz8yCueuHBfL9LzsbX3KH48uIoVWLX5eWPA8JMn8Yg23KRz6MOfiX_g0PIWJLrSZMyuWa3DzcMz6H0mjHOzUQBUYEa03GCgAKHCu0yg782VqeLtK25c_Kki0p0Eu-2oznAGP5Y1IdQ67caFqqNfALByVp13VL9B4UZoX9pd9fkeRR1vOPA0gRnoHQS3WMpaW6_QnKt-PkqKct4rzFk6QjecAlWikno7zSmcFi6leJPFpVfdP8S5GguWXPF5eBh9w6BGG94a3pnp0ATbvSxJOMZZzuzpnfILQhAGdARmB0gYWpMtAUvF6UWkJsC_Kk9YPNyjjlwTJOLtRErM-QYFbBy64naHLTk98CynMMuY76BHbzMKtKIs4kKwG1XV2DEmds36or_bA9qGdOF_v1nI6OlUpZ2bHC66DMiA0_0DC9en3Vb0VBpuwnMaJBNdw3BUaCla5XC3m8HIgIX7uz_a0sJfDWv7xxRWovCZj44mV6o7ZHASfTXd9awfccpLcQ9lmwH8bLn77IkeHAxgft5ZMX2_k3XsnMi4Zqbdznyh4xxe7ka6bshixEbKJfmIQC5O6bLKqK6BYpAfaasULjBgZI4-CAf0-Zx1OZmympjB1EcoI.er0c6-SoJBkTk1lHMmrBHxP9Sibofb7YKxR83xKQDLg",
    "tripType": "ONE_WAY",
    "booker": {
        "name": "Raj Kumar",
        "email": "raj@example-agency.in",
        "phone": "+919800000000"
    }
}
headers = {
    "Idempotency-Key": "4f9c2a7e-1b3d-4e8f-9a6c-2d5b7e1f3a90",
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript
const url = 'https://sandbox-api.kitionz.com/v1/flights/book';
const options = {
  method: 'POST',
  headers: {
    'Idempotency-Key': '4f9c2a7e-1b3d-4e8f-9a6c-2d5b7e1f3a90',
    Authorization: 'Bearer <token>',
    'Content-Type': 'application/json'
  },
  body: '{"supplierOfferRef":"floffer_034n1fbuIzGX130wB12QcM","adults":1,"departureDate":"2026-11-10","originCode":"DEL","destCode":"BOM","passengers":[{"title":"MR","firstName":"Raj","travelerType":"ADULT","lastName":"Kumar"}],"quoteToken":"eyJhbGciOiJIUzI1NiIsInR5cCI6ImtpdGlvbnouZmxpZ2h0LnF1b3RlIiwia2lkIjoidjEiLCJlbmMiOiJBMjU2R0NNIiwiZWtpZCI6Ijk5YzFjYzI1In0.t6vMFSmW73MRTNjQb4R4KLQtI1Oc4zV5CYdecMRxfNHA-AEGH-mSEWQnHrruZM7BS0NsK6oQZ7PQOWeII303Ij52A4ELfAKkrxI3VdNt4XKl24MVgdW25YWEKc9xnq8dzIAQPK2Kh2c-V_tFji3mEXOzEwYHqZT8ixCyf6FVlcjCzKg6ok2_R9ZoLylokn6qCufPhKouhMCwPqqPVhocxJ7KNCOnAGeyvsh4JA5Rpro55mi1O-zSn4qREVCTBiSL48_4F9L1Yslbi7e3hdWmhZi0cVz0IeCkxUppHbqCfRT61rBsCuMMwGtsQiDR6J3xi-SWm-_GJmCMgLwgf-lGHTFVPtaAY1Apf96kc2VcBYm2Zz1YnmE1JqSQFP3qrtk6QBGlUFe0of3GIv-HCPNSWB_4HklVJoqFuywf4xloMs_czLXrIvDiEDI9RwG1BwMTpK2lk_jsKmbLgSSvekg4_m0fOY9xJoqTi6nqPxMBob_zdhgm5St3Q60LsC-R-RSNt8vVfbzj_wHR7nC-S1VDZzSdUF_ztoTTWzXe03xOiW6O42_5T5v3p7A9FVNLibu89om4FahhtsXNjllllxmvP1smrZbWJ3mQtNcLtPy_C8QRN0YxkPeB_at8qj1qvYn1bS_w4yP8xFd7PswR_LZ3RecB9VkAUpe-bzWyPKLT1Z_nhL-qEZVkZKaJzEvQ14aAnSGYmR1HrgTci-VVUzLtPpQSsaQa9ONK3g35glx0VhsmIOvPi2ehpLbLZWPyFYPpoPrCopHSrO_1RSwZNk5FmmaffoI12xrAxjJwsF72xZ6zrxUFh1nofoZ0pm0n5WIQFnhF73guv61ycaTOjkGtfMHYv14Wz8yCueuHBfL9LzsbX3KH48uIoVWLX5eWPA8JMn8Yg23KRz6MOfiX_g0PIWJLrSZMyuWa3DzcMz6H0mjHOzUQBUYEa03GCgAKHCu0yg782VqeLtK25c_Kki0p0Eu-2oznAGP5Y1IdQ67caFqqNfALByVp13VL9B4UZoX9pd9fkeRR1vOPA0gRnoHQS3WMpaW6_QnKt-PkqKct4rzFk6QjecAlWikno7zSmcFi6leJPFpVfdP8S5GguWXPF5eBh9w6BGG94a3pnp0ATbvSxJOMZZzuzpnfILQhAGdARmB0gYWpMtAUvF6UWkJsC_Kk9YPNyjjlwTJOLtRErM-QYFbBy64naHLTk98CynMMuY76BHbzMKtKIs4kKwG1XV2DEmds36or_bA9qGdOF_v1nI6OlUpZ2bHC66DMiA0_0DC9en3Vb0VBpuwnMaJBNdw3BUaCla5XC3m8HIgIX7uz_a0sJfDWv7xxRWovCZj44mV6o7ZHASfTXd9awfccpLcQ9lmwH8bLn77IkeHAxgft5ZMX2_k3XsnMi4Zqbdznyh4xxe7ka6bshixEbKJfmIQC5O6bLKqK6BYpAfaasULjBgZI4-CAf0-Zx1OZmympjB1EcoI.er0c6-SoJBkTk1lHMmrBHxP9Sibofb7YKxR83xKQDLg","tripType":"ONE_WAY","booker":{"name":"Raj Kumar","email":"raj@example-agency.in","phone":"+919800000000"}}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://sandbox-api.kitionz.com/v1/flights/book"

	payload := strings.NewReader("{\n  \"supplierOfferRef\": \"floffer_034n1fbuIzGX130wB12QcM\",\n  \"adults\": 1,\n  \"departureDate\": \"2026-11-10\",\n  \"originCode\": \"DEL\",\n  \"destCode\": \"BOM\",\n  \"passengers\": [\n    {\n      \"title\": \"MR\",\n      \"firstName\": \"Raj\",\n      \"travelerType\": \"ADULT\",\n      \"lastName\": \"Kumar\"\n    }\n  ],\n  \"quoteToken\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6ImtpdGlvbnouZmxpZ2h0LnF1b3RlIiwia2lkIjoidjEiLCJlbmMiOiJBMjU2R0NNIiwiZWtpZCI6Ijk5YzFjYzI1In0.t6vMFSmW73MRTNjQb4R4KLQtI1Oc4zV5CYdecMRxfNHA-AEGH-mSEWQnHrruZM7BS0NsK6oQZ7PQOWeII303Ij52A4ELfAKkrxI3VdNt4XKl24MVgdW25YWEKc9xnq8dzIAQPK2Kh2c-V_tFji3mEXOzEwYHqZT8ixCyf6FVlcjCzKg6ok2_R9ZoLylokn6qCufPhKouhMCwPqqPVhocxJ7KNCOnAGeyvsh4JA5Rpro55mi1O-zSn4qREVCTBiSL48_4F9L1Yslbi7e3hdWmhZi0cVz0IeCkxUppHbqCfRT61rBsCuMMwGtsQiDR6J3xi-SWm-_GJmCMgLwgf-lGHTFVPtaAY1Apf96kc2VcBYm2Zz1YnmE1JqSQFP3qrtk6QBGlUFe0of3GIv-HCPNSWB_4HklVJoqFuywf4xloMs_czLXrIvDiEDI9RwG1BwMTpK2lk_jsKmbLgSSvekg4_m0fOY9xJoqTi6nqPxMBob_zdhgm5St3Q60LsC-R-RSNt8vVfbzj_wHR7nC-S1VDZzSdUF_ztoTTWzXe03xOiW6O42_5T5v3p7A9FVNLibu89om4FahhtsXNjllllxmvP1smrZbWJ3mQtNcLtPy_C8QRN0YxkPeB_at8qj1qvYn1bS_w4yP8xFd7PswR_LZ3RecB9VkAUpe-bzWyPKLT1Z_nhL-qEZVkZKaJzEvQ14aAnSGYmR1HrgTci-VVUzLtPpQSsaQa9ONK3g35glx0VhsmIOvPi2ehpLbLZWPyFYPpoPrCopHSrO_1RSwZNk5FmmaffoI12xrAxjJwsF72xZ6zrxUFh1nofoZ0pm0n5WIQFnhF73guv61ycaTOjkGtfMHYv14Wz8yCueuHBfL9LzsbX3KH48uIoVWLX5eWPA8JMn8Yg23KRz6MOfiX_g0PIWJLrSZMyuWa3DzcMz6H0mjHOzUQBUYEa03GCgAKHCu0yg782VqeLtK25c_Kki0p0Eu-2oznAGP5Y1IdQ67caFqqNfALByVp13VL9B4UZoX9pd9fkeRR1vOPA0gRnoHQS3WMpaW6_QnKt-PkqKct4rzFk6QjecAlWikno7zSmcFi6leJPFpVfdP8S5GguWXPF5eBh9w6BGG94a3pnp0ATbvSxJOMZZzuzpnfILQhAGdARmB0gYWpMtAUvF6UWkJsC_Kk9YPNyjjlwTJOLtRErM-QYFbBy64naHLTk98CynMMuY76BHbzMKtKIs4kKwG1XV2DEmds36or_bA9qGdOF_v1nI6OlUpZ2bHC66DMiA0_0DC9en3Vb0VBpuwnMaJBNdw3BUaCla5XC3m8HIgIX7uz_a0sJfDWv7xxRWovCZj44mV6o7ZHASfTXd9awfccpLcQ9lmwH8bLn77IkeHAxgft5ZMX2_k3XsnMi4Zqbdznyh4xxe7ka6bshixEbKJfmIQC5O6bLKqK6BYpAfaasULjBgZI4-CAf0-Zx1OZmympjB1EcoI.er0c6-SoJBkTk1lHMmrBHxP9Sibofb7YKxR83xKQDLg\",\n  \"tripType\": \"ONE_WAY\",\n  \"booker\": {\n    \"name\": \"Raj Kumar\",\n    \"email\": \"raj@example-agency.in\",\n    \"phone\": \"+919800000000\"\n  }\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Idempotency-Key", "4f9c2a7e-1b3d-4e8f-9a6c-2d5b7e1f3a90")
	req.Header.Add("Authorization", "Bearer <token>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://sandbox-api.kitionz.com/v1/flights/book")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Idempotency-Key"] = '4f9c2a7e-1b3d-4e8f-9a6c-2d5b7e1f3a90'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"supplierOfferRef\": \"floffer_034n1fbuIzGX130wB12QcM\",\n  \"adults\": 1,\n  \"departureDate\": \"2026-11-10\",\n  \"originCode\": \"DEL\",\n  \"destCode\": \"BOM\",\n  \"passengers\": [\n    {\n      \"title\": \"MR\",\n      \"firstName\": \"Raj\",\n      \"travelerType\": \"ADULT\",\n      \"lastName\": \"Kumar\"\n    }\n  ],\n  \"quoteToken\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6ImtpdGlvbnouZmxpZ2h0LnF1b3RlIiwia2lkIjoidjEiLCJlbmMiOiJBMjU2R0NNIiwiZWtpZCI6Ijk5YzFjYzI1In0.t6vMFSmW73MRTNjQb4R4KLQtI1Oc4zV5CYdecMRxfNHA-AEGH-mSEWQnHrruZM7BS0NsK6oQZ7PQOWeII303Ij52A4ELfAKkrxI3VdNt4XKl24MVgdW25YWEKc9xnq8dzIAQPK2Kh2c-V_tFji3mEXOzEwYHqZT8ixCyf6FVlcjCzKg6ok2_R9ZoLylokn6qCufPhKouhMCwPqqPVhocxJ7KNCOnAGeyvsh4JA5Rpro55mi1O-zSn4qREVCTBiSL48_4F9L1Yslbi7e3hdWmhZi0cVz0IeCkxUppHbqCfRT61rBsCuMMwGtsQiDR6J3xi-SWm-_GJmCMgLwgf-lGHTFVPtaAY1Apf96kc2VcBYm2Zz1YnmE1JqSQFP3qrtk6QBGlUFe0of3GIv-HCPNSWB_4HklVJoqFuywf4xloMs_czLXrIvDiEDI9RwG1BwMTpK2lk_jsKmbLgSSvekg4_m0fOY9xJoqTi6nqPxMBob_zdhgm5St3Q60LsC-R-RSNt8vVfbzj_wHR7nC-S1VDZzSdUF_ztoTTWzXe03xOiW6O42_5T5v3p7A9FVNLibu89om4FahhtsXNjllllxmvP1smrZbWJ3mQtNcLtPy_C8QRN0YxkPeB_at8qj1qvYn1bS_w4yP8xFd7PswR_LZ3RecB9VkAUpe-bzWyPKLT1Z_nhL-qEZVkZKaJzEvQ14aAnSGYmR1HrgTci-VVUzLtPpQSsaQa9ONK3g35glx0VhsmIOvPi2ehpLbLZWPyFYPpoPrCopHSrO_1RSwZNk5FmmaffoI12xrAxjJwsF72xZ6zrxUFh1nofoZ0pm0n5WIQFnhF73guv61ycaTOjkGtfMHYv14Wz8yCueuHBfL9LzsbX3KH48uIoVWLX5eWPA8JMn8Yg23KRz6MOfiX_g0PIWJLrSZMyuWa3DzcMz6H0mjHOzUQBUYEa03GCgAKHCu0yg782VqeLtK25c_Kki0p0Eu-2oznAGP5Y1IdQ67caFqqNfALByVp13VL9B4UZoX9pd9fkeRR1vOPA0gRnoHQS3WMpaW6_QnKt-PkqKct4rzFk6QjecAlWikno7zSmcFi6leJPFpVfdP8S5GguWXPF5eBh9w6BGG94a3pnp0ATbvSxJOMZZzuzpnfILQhAGdARmB0gYWpMtAUvF6UWkJsC_Kk9YPNyjjlwTJOLtRErM-QYFbBy64naHLTk98CynMMuY76BHbzMKtKIs4kKwG1XV2DEmds36or_bA9qGdOF_v1nI6OlUpZ2bHC66DMiA0_0DC9en3Vb0VBpuwnMaJBNdw3BUaCla5XC3m8HIgIX7uz_a0sJfDWv7xxRWovCZj44mV6o7ZHASfTXd9awfccpLcQ9lmwH8bLn77IkeHAxgft5ZMX2_k3XsnMi4Zqbdznyh4xxe7ka6bshixEbKJfmIQC5O6bLKqK6BYpAfaasULjBgZI4-CAf0-Zx1OZmympjB1EcoI.er0c6-SoJBkTk1lHMmrBHxP9Sibofb7YKxR83xKQDLg\",\n  \"tripType\": \"ONE_WAY\",\n  \"booker\": {\n    \"name\": \"Raj Kumar\",\n    \"email\": \"raj@example-agency.in\",\n    \"phone\": \"+919800000000\"\n  }\n}"

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://sandbox-api.kitionz.com/v1/flights/book")
  .header("Idempotency-Key", "4f9c2a7e-1b3d-4e8f-9a6c-2d5b7e1f3a90")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"supplierOfferRef\": \"floffer_034n1fbuIzGX130wB12QcM\",\n  \"adults\": 1,\n  \"departureDate\": \"2026-11-10\",\n  \"originCode\": \"DEL\",\n  \"destCode\": \"BOM\",\n  \"passengers\": [\n    {\n      \"title\": \"MR\",\n      \"firstName\": \"Raj\",\n      \"travelerType\": \"ADULT\",\n      \"lastName\": \"Kumar\"\n    }\n  ],\n  \"quoteToken\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6ImtpdGlvbnouZmxpZ2h0LnF1b3RlIiwia2lkIjoidjEiLCJlbmMiOiJBMjU2R0NNIiwiZWtpZCI6Ijk5YzFjYzI1In0.t6vMFSmW73MRTNjQb4R4KLQtI1Oc4zV5CYdecMRxfNHA-AEGH-mSEWQnHrruZM7BS0NsK6oQZ7PQOWeII303Ij52A4ELfAKkrxI3VdNt4XKl24MVgdW25YWEKc9xnq8dzIAQPK2Kh2c-V_tFji3mEXOzEwYHqZT8ixCyf6FVlcjCzKg6ok2_R9ZoLylokn6qCufPhKouhMCwPqqPVhocxJ7KNCOnAGeyvsh4JA5Rpro55mi1O-zSn4qREVCTBiSL48_4F9L1Yslbi7e3hdWmhZi0cVz0IeCkxUppHbqCfRT61rBsCuMMwGtsQiDR6J3xi-SWm-_GJmCMgLwgf-lGHTFVPtaAY1Apf96kc2VcBYm2Zz1YnmE1JqSQFP3qrtk6QBGlUFe0of3GIv-HCPNSWB_4HklVJoqFuywf4xloMs_czLXrIvDiEDI9RwG1BwMTpK2lk_jsKmbLgSSvekg4_m0fOY9xJoqTi6nqPxMBob_zdhgm5St3Q60LsC-R-RSNt8vVfbzj_wHR7nC-S1VDZzSdUF_ztoTTWzXe03xOiW6O42_5T5v3p7A9FVNLibu89om4FahhtsXNjllllxmvP1smrZbWJ3mQtNcLtPy_C8QRN0YxkPeB_at8qj1qvYn1bS_w4yP8xFd7PswR_LZ3RecB9VkAUpe-bzWyPKLT1Z_nhL-qEZVkZKaJzEvQ14aAnSGYmR1HrgTci-VVUzLtPpQSsaQa9ONK3g35glx0VhsmIOvPi2ehpLbLZWPyFYPpoPrCopHSrO_1RSwZNk5FmmaffoI12xrAxjJwsF72xZ6zrxUFh1nofoZ0pm0n5WIQFnhF73guv61ycaTOjkGtfMHYv14Wz8yCueuHBfL9LzsbX3KH48uIoVWLX5eWPA8JMn8Yg23KRz6MOfiX_g0PIWJLrSZMyuWa3DzcMz6H0mjHOzUQBUYEa03GCgAKHCu0yg782VqeLtK25c_Kki0p0Eu-2oznAGP5Y1IdQ67caFqqNfALByVp13VL9B4UZoX9pd9fkeRR1vOPA0gRnoHQS3WMpaW6_QnKt-PkqKct4rzFk6QjecAlWikno7zSmcFi6leJPFpVfdP8S5GguWXPF5eBh9w6BGG94a3pnp0ATbvSxJOMZZzuzpnfILQhAGdARmB0gYWpMtAUvF6UWkJsC_Kk9YPNyjjlwTJOLtRErM-QYFbBy64naHLTk98CynMMuY76BHbzMKtKIs4kKwG1XV2DEmds36or_bA9qGdOF_v1nI6OlUpZ2bHC66DMiA0_0DC9en3Vb0VBpuwnMaJBNdw3BUaCla5XC3m8HIgIX7uz_a0sJfDWv7xxRWovCZj44mV6o7ZHASfTXd9awfccpLcQ9lmwH8bLn77IkeHAxgft5ZMX2_k3XsnMi4Zqbdznyh4xxe7ka6bshixEbKJfmIQC5O6bLKqK6BYpAfaasULjBgZI4-CAf0-Zx1OZmympjB1EcoI.er0c6-SoJBkTk1lHMmrBHxP9Sibofb7YKxR83xKQDLg\",\n  \"tripType\": \"ONE_WAY\",\n  \"booker\": {\n    \"name\": \"Raj Kumar\",\n    \"email\": \"raj@example-agency.in\",\n    \"phone\": \"+919800000000\"\n  }\n}")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://sandbox-api.kitionz.com/v1/flights/book', [
  'body' => '{
  "supplierOfferRef": "floffer_034n1fbuIzGX130wB12QcM",
  "adults": 1,
  "departureDate": "2026-11-10",
  "originCode": "DEL",
  "destCode": "BOM",
  "passengers": [
    {
      "title": "MR",
      "firstName": "Raj",
      "travelerType": "ADULT",
      "lastName": "Kumar"
    }
  ],
  "quoteToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6ImtpdGlvbnouZmxpZ2h0LnF1b3RlIiwia2lkIjoidjEiLCJlbmMiOiJBMjU2R0NNIiwiZWtpZCI6Ijk5YzFjYzI1In0.t6vMFSmW73MRTNjQb4R4KLQtI1Oc4zV5CYdecMRxfNHA-AEGH-mSEWQnHrruZM7BS0NsK6oQZ7PQOWeII303Ij52A4ELfAKkrxI3VdNt4XKl24MVgdW25YWEKc9xnq8dzIAQPK2Kh2c-V_tFji3mEXOzEwYHqZT8ixCyf6FVlcjCzKg6ok2_R9ZoLylokn6qCufPhKouhMCwPqqPVhocxJ7KNCOnAGeyvsh4JA5Rpro55mi1O-zSn4qREVCTBiSL48_4F9L1Yslbi7e3hdWmhZi0cVz0IeCkxUppHbqCfRT61rBsCuMMwGtsQiDR6J3xi-SWm-_GJmCMgLwgf-lGHTFVPtaAY1Apf96kc2VcBYm2Zz1YnmE1JqSQFP3qrtk6QBGlUFe0of3GIv-HCPNSWB_4HklVJoqFuywf4xloMs_czLXrIvDiEDI9RwG1BwMTpK2lk_jsKmbLgSSvekg4_m0fOY9xJoqTi6nqPxMBob_zdhgm5St3Q60LsC-R-RSNt8vVfbzj_wHR7nC-S1VDZzSdUF_ztoTTWzXe03xOiW6O42_5T5v3p7A9FVNLibu89om4FahhtsXNjllllxmvP1smrZbWJ3mQtNcLtPy_C8QRN0YxkPeB_at8qj1qvYn1bS_w4yP8xFd7PswR_LZ3RecB9VkAUpe-bzWyPKLT1Z_nhL-qEZVkZKaJzEvQ14aAnSGYmR1HrgTci-VVUzLtPpQSsaQa9ONK3g35glx0VhsmIOvPi2ehpLbLZWPyFYPpoPrCopHSrO_1RSwZNk5FmmaffoI12xrAxjJwsF72xZ6zrxUFh1nofoZ0pm0n5WIQFnhF73guv61ycaTOjkGtfMHYv14Wz8yCueuHBfL9LzsbX3KH48uIoVWLX5eWPA8JMn8Yg23KRz6MOfiX_g0PIWJLrSZMyuWa3DzcMz6H0mjHOzUQBUYEa03GCgAKHCu0yg782VqeLtK25c_Kki0p0Eu-2oznAGP5Y1IdQ67caFqqNfALByVp13VL9B4UZoX9pd9fkeRR1vOPA0gRnoHQS3WMpaW6_QnKt-PkqKct4rzFk6QjecAlWikno7zSmcFi6leJPFpVfdP8S5GguWXPF5eBh9w6BGG94a3pnp0ATbvSxJOMZZzuzpnfILQhAGdARmB0gYWpMtAUvF6UWkJsC_Kk9YPNyjjlwTJOLtRErM-QYFbBy64naHLTk98CynMMuY76BHbzMKtKIs4kKwG1XV2DEmds36or_bA9qGdOF_v1nI6OlUpZ2bHC66DMiA0_0DC9en3Vb0VBpuwnMaJBNdw3BUaCla5XC3m8HIgIX7uz_a0sJfDWv7xxRWovCZj44mV6o7ZHASfTXd9awfccpLcQ9lmwH8bLn77IkeHAxgft5ZMX2_k3XsnMi4Zqbdznyh4xxe7ka6bshixEbKJfmIQC5O6bLKqK6BYpAfaasULjBgZI4-CAf0-Zx1OZmympjB1EcoI.er0c6-SoJBkTk1lHMmrBHxP9Sibofb7YKxR83xKQDLg",
  "tripType": "ONE_WAY",
  "booker": {
    "name": "Raj Kumar",
    "email": "raj@example-agency.in",
    "phone": "+919800000000"
  }
}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
    'Idempotency-Key' => '4f9c2a7e-1b3d-4e8f-9a6c-2d5b7e1f3a90',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://sandbox-api.kitionz.com/v1/flights/book");
var request = new RestRequest(Method.POST);
request.AddHeader("Idempotency-Key", "4f9c2a7e-1b3d-4e8f-9a6c-2d5b7e1f3a90");
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"supplierOfferRef\": \"floffer_034n1fbuIzGX130wB12QcM\",\n  \"adults\": 1,\n  \"departureDate\": \"2026-11-10\",\n  \"originCode\": \"DEL\",\n  \"destCode\": \"BOM\",\n  \"passengers\": [\n    {\n      \"title\": \"MR\",\n      \"firstName\": \"Raj\",\n      \"travelerType\": \"ADULT\",\n      \"lastName\": \"Kumar\"\n    }\n  ],\n  \"quoteToken\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6ImtpdGlvbnouZmxpZ2h0LnF1b3RlIiwia2lkIjoidjEiLCJlbmMiOiJBMjU2R0NNIiwiZWtpZCI6Ijk5YzFjYzI1In0.t6vMFSmW73MRTNjQb4R4KLQtI1Oc4zV5CYdecMRxfNHA-AEGH-mSEWQnHrruZM7BS0NsK6oQZ7PQOWeII303Ij52A4ELfAKkrxI3VdNt4XKl24MVgdW25YWEKc9xnq8dzIAQPK2Kh2c-V_tFji3mEXOzEwYHqZT8ixCyf6FVlcjCzKg6ok2_R9ZoLylokn6qCufPhKouhMCwPqqPVhocxJ7KNCOnAGeyvsh4JA5Rpro55mi1O-zSn4qREVCTBiSL48_4F9L1Yslbi7e3hdWmhZi0cVz0IeCkxUppHbqCfRT61rBsCuMMwGtsQiDR6J3xi-SWm-_GJmCMgLwgf-lGHTFVPtaAY1Apf96kc2VcBYm2Zz1YnmE1JqSQFP3qrtk6QBGlUFe0of3GIv-HCPNSWB_4HklVJoqFuywf4xloMs_czLXrIvDiEDI9RwG1BwMTpK2lk_jsKmbLgSSvekg4_m0fOY9xJoqTi6nqPxMBob_zdhgm5St3Q60LsC-R-RSNt8vVfbzj_wHR7nC-S1VDZzSdUF_ztoTTWzXe03xOiW6O42_5T5v3p7A9FVNLibu89om4FahhtsXNjllllxmvP1smrZbWJ3mQtNcLtPy_C8QRN0YxkPeB_at8qj1qvYn1bS_w4yP8xFd7PswR_LZ3RecB9VkAUpe-bzWyPKLT1Z_nhL-qEZVkZKaJzEvQ14aAnSGYmR1HrgTci-VVUzLtPpQSsaQa9ONK3g35glx0VhsmIOvPi2ehpLbLZWPyFYPpoPrCopHSrO_1RSwZNk5FmmaffoI12xrAxjJwsF72xZ6zrxUFh1nofoZ0pm0n5WIQFnhF73guv61ycaTOjkGtfMHYv14Wz8yCueuHBfL9LzsbX3KH48uIoVWLX5eWPA8JMn8Yg23KRz6MOfiX_g0PIWJLrSZMyuWa3DzcMz6H0mjHOzUQBUYEa03GCgAKHCu0yg782VqeLtK25c_Kki0p0Eu-2oznAGP5Y1IdQ67caFqqNfALByVp13VL9B4UZoX9pd9fkeRR1vOPA0gRnoHQS3WMpaW6_QnKt-PkqKct4rzFk6QjecAlWikno7zSmcFi6leJPFpVfdP8S5GguWXPF5eBh9w6BGG94a3pnp0ATbvSxJOMZZzuzpnfILQhAGdARmB0gYWpMtAUvF6UWkJsC_Kk9YPNyjjlwTJOLtRErM-QYFbBy64naHLTk98CynMMuY76BHbzMKtKIs4kKwG1XV2DEmds36or_bA9qGdOF_v1nI6OlUpZ2bHC66DMiA0_0DC9en3Vb0VBpuwnMaJBNdw3BUaCla5XC3m8HIgIX7uz_a0sJfDWv7xxRWovCZj44mV6o7ZHASfTXd9awfccpLcQ9lmwH8bLn77IkeHAxgft5ZMX2_k3XsnMi4Zqbdznyh4xxe7ka6bshixEbKJfmIQC5O6bLKqK6BYpAfaasULjBgZI4-CAf0-Zx1OZmympjB1EcoI.er0c6-SoJBkTk1lHMmrBHxP9Sibofb7YKxR83xKQDLg\",\n  \"tripType\": \"ONE_WAY\",\n  \"booker\": {\n    \"name\": \"Raj Kumar\",\n    \"email\": \"raj@example-agency.in\",\n    \"phone\": \"+919800000000\"\n  }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = [
  "Idempotency-Key": "4f9c2a7e-1b3d-4e8f-9a6c-2d5b7e1f3a90",
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = [
  "supplierOfferRef": "floffer_034n1fbuIzGX130wB12QcM",
  "adults": 1,
  "departureDate": "2026-11-10",
  "originCode": "DEL",
  "destCode": "BOM",
  "passengers": [
    [
      "title": "MR",
      "firstName": "Raj",
      "travelerType": "ADULT",
      "lastName": "Kumar"
    ]
  ],
  "quoteToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6ImtpdGlvbnouZmxpZ2h0LnF1b3RlIiwia2lkIjoidjEiLCJlbmMiOiJBMjU2R0NNIiwiZWtpZCI6Ijk5YzFjYzI1In0.t6vMFSmW73MRTNjQb4R4KLQtI1Oc4zV5CYdecMRxfNHA-AEGH-mSEWQnHrruZM7BS0NsK6oQZ7PQOWeII303Ij52A4ELfAKkrxI3VdNt4XKl24MVgdW25YWEKc9xnq8dzIAQPK2Kh2c-V_tFji3mEXOzEwYHqZT8ixCyf6FVlcjCzKg6ok2_R9ZoLylokn6qCufPhKouhMCwPqqPVhocxJ7KNCOnAGeyvsh4JA5Rpro55mi1O-zSn4qREVCTBiSL48_4F9L1Yslbi7e3hdWmhZi0cVz0IeCkxUppHbqCfRT61rBsCuMMwGtsQiDR6J3xi-SWm-_GJmCMgLwgf-lGHTFVPtaAY1Apf96kc2VcBYm2Zz1YnmE1JqSQFP3qrtk6QBGlUFe0of3GIv-HCPNSWB_4HklVJoqFuywf4xloMs_czLXrIvDiEDI9RwG1BwMTpK2lk_jsKmbLgSSvekg4_m0fOY9xJoqTi6nqPxMBob_zdhgm5St3Q60LsC-R-RSNt8vVfbzj_wHR7nC-S1VDZzSdUF_ztoTTWzXe03xOiW6O42_5T5v3p7A9FVNLibu89om4FahhtsXNjllllxmvP1smrZbWJ3mQtNcLtPy_C8QRN0YxkPeB_at8qj1qvYn1bS_w4yP8xFd7PswR_LZ3RecB9VkAUpe-bzWyPKLT1Z_nhL-qEZVkZKaJzEvQ14aAnSGYmR1HrgTci-VVUzLtPpQSsaQa9ONK3g35glx0VhsmIOvPi2ehpLbLZWPyFYPpoPrCopHSrO_1RSwZNk5FmmaffoI12xrAxjJwsF72xZ6zrxUFh1nofoZ0pm0n5WIQFnhF73guv61ycaTOjkGtfMHYv14Wz8yCueuHBfL9LzsbX3KH48uIoVWLX5eWPA8JMn8Yg23KRz6MOfiX_g0PIWJLrSZMyuWa3DzcMz6H0mjHOzUQBUYEa03GCgAKHCu0yg782VqeLtK25c_Kki0p0Eu-2oznAGP5Y1IdQ67caFqqNfALByVp13VL9B4UZoX9pd9fkeRR1vOPA0gRnoHQS3WMpaW6_QnKt-PkqKct4rzFk6QjecAlWikno7zSmcFi6leJPFpVfdP8S5GguWXPF5eBh9w6BGG94a3pnp0ATbvSxJOMZZzuzpnfILQhAGdARmB0gYWpMtAUvF6UWkJsC_Kk9YPNyjjlwTJOLtRErM-QYFbBy64naHLTk98CynMMuY76BHbzMKtKIs4kKwG1XV2DEmds36or_bA9qGdOF_v1nI6OlUpZ2bHC66DMiA0_0DC9en3Vb0VBpuwnMaJBNdw3BUaCla5XC3m8HIgIX7uz_a0sJfDWv7xxRWovCZj44mV6o7ZHASfTXd9awfccpLcQ9lmwH8bLn77IkeHAxgft5ZMX2_k3XsnMi4Zqbdznyh4xxe7ka6bshixEbKJfmIQC5O6bLKqK6BYpAfaasULjBgZI4-CAf0-Zx1OZmympjB1EcoI.er0c6-SoJBkTk1lHMmrBHxP9Sibofb7YKxR83xKQDLg",
  "tripType": "ONE_WAY",
  "booker": [
    "name": "Raj Kumar",
    "email": "raj@example-agency.in",
    "phone": "+919800000000"
  ]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://sandbox-api.kitionz.com/v1/flights/book")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```