> 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.

# 4 · Search

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

**Search flights.**

**What:** find bookable offers for a route, date(s) and passenger mix across every supplier you have enabled.

**When:** the start of every booking — or on its own to *display* fares.

**Before / After:** optionally call `/origins` + `/destinations` to build the form → here → pick one offer and send its `offerId` → `/fare-quote`.

**Gotchas**

* **Read the new names — the old ones are removed in the next release.** Each new name has the same value as its old one until then, and the reference marks the old name deprecated. `price` (`totalAmount`, `currency`, `baseFare`, `taxes`, `commission`, `tds`, `netPayable`, `publishedTotal`, `passengerFares[{ passengerType, count, perPerson, total, baseFare, taxes }]`, `infantFare` — each `null` when the seller did not state it) for `pricing`; `legs[]` and `segments[]` `origin` / `destination` (`{ iataCode, name, city, countryCode, timezone }`) for `originCode` / `originName` / `departureTimezone` and `destCode` / `destName` / `arrivalTimezone`; `segments[].departureTerminal` / `arrivalTerminal` / `cabin` for `originTerminal` / `destinationTerminal` / `cabinClass`; `marketingCarrier.iataCode` for `marketingCarrier.code`; a technical stop’s `airport` for `airportCode` / `airportName`; `policy.refund` / `policy.change` for `policy.refundPolicy` / `changePolicy`; `isInternational` for `requiredPassengerFields.international`; `booking.requestBooking` (beside `booking.bookable`) for `booking.viaSupplierApi: false`; `supplierCode` for `sourceCode`; `seller` for `supplier`. `price` holds every part of `pricing`: `netPayable`, `publishedBaseFare` / `publishedTaxes`, `taxBreakdown[]` (`taxComponents`), `commercials[]` (with `passengerType`, `owner`) and each row’s `baseFare` / `taxes`. Carriers are one shape `{ iataCode, name, flightNumber }` (null, never `""`, when not stated); airport objects take every fact from the Kitionz airport list (null when the airport is not in it). The offer-level `cabin`, a leg’s `cabinClass` and `fareFamily.cabin` are removed in the next release: read each flight’s `cabin`.
* **`tripType` is optional.** Leave it out and you get every trip kind leaving on `departureDate`: one-way fares AND round-trip offers. `ROUND_TRIP` gives round trips only.
* **`ONE_WAY` can also return round trips.** Some suppliers answer a one-way search with round-trip packages too. Kitionz returns them: each says `tripType: "ROUND_TRIP"` and has its `returnDate`. Read `tripType` on every offer and show it as what it is; never assume an offer is the kind you searched. To get every package, send `ROUND_TRIP` or leave `tripType` out: a supplier that keeps one route list per trip kind is asked in a one-way search only where its one-way list has the route and date.
* **`returnDate` is the day your traveller flies back.** With it, every round-trip offer has that `returnDate`: the local date its return leg leaves. Round-trip offers that return on other days are not in `offers`: `meta.otherReturnDates` counts them per day. Search again with that `returnDate` to see them. `otherReturnDates` counts only the round trips suppliers already sent; it is not a calendar of every return day. Without a `returnDate`, you get the round trips leaving on `departureDate`, each with its own `returnDate`.
* **A `returnDate` with no `tripType`** is a return journey: one-way offers and the round trips back on `returnDate`. Read each one-way offer’s route (`legs[0].origin.iataCode` → `destination.iataCode`); never assume it flies your way out. Today they all do; one-way offers flying back will come in this same answer later. A `returnDate` is refused (400) with `tripType: "ONE_WAY"`, and with `slices` (the date of your second slice is your return date).
* **Each offer says which trip it is:** `tripType` (`ONE_WAY` | `ROUND_TRIP`), `departureDate`, and — for a round trip — `returnDate`, fixed by the fare. A round trip’s price covers **both ways**: label it so in your screen. Send `departureDate` back unchanged on `/fare-quote` and `/book`. Book each offer by its own labels: send the offer's `tripType` and `returnDate`, never the search's. They may be left out there (the offer's own are used); when sent they must be the offer's (a different trip → `400 OFFER_TRIP_MISMATCH`).
* A **round trip is ONE offer** with `legs: [OUTBOUND, RETURN]`, one `totalAmount`, one `offerId`: one fare for both ways, booked with one `/fare-quote` and one `/book`. It can be a series package (seats bought in advance and sold as a pair) or a return fare. Never staple two one-ways together.
* Today round trips come only from suppliers whose catalogue offers them. With `tripType: "ROUND_TRIP"`, every other supplier is listed in `meta.suppliersExcluded` with reason `ROUND_TRIP_NOT_OFFERED` (left out, not a failure).
* Some suppliers need your return date to find round trips. With a `returnDate`, Kitionz asks them for that day only, never for other days, so their other return days are not in `otherReturnDates`. When Kitionz already holds such a supplier’s list of return days and your day is not on it, the supplier is not asked and is listed in `meta.suppliersExcluded` with reason `RETURN_DATE_NOT_LISTED` (left out, not a failure).
* A supplier whose fares are all of a category your `filters.inventoryCategories` (or your connection) leaves out — e.g. a series-only supplier when you ask for `ONLINE` — is not asked at all: it is listed in `meta.suppliersExcluded` with reason `INVENTORY_NOT_REQUESTED` (left out, not a failure).
* A supplier that publishes a date list is asked on every date its list shows. When its current list leaves the date out, it is not asked and is listed in `meta.suppliersExcluded` with reason `DATE_NOT_LISTED` (left out, not a failure). A supplier with no date list is asked on every one-way search (a round trip goes only to suppliers whose catalogue offers round trips, see above).
* Some suppliers return their round-trip packages together with their one-way fares, from one date list for both. Their listed dates count for both trip kinds: a `tripType: "ROUND_TRIP"` search asks them on any listed date, and a search with no `tripType` asks them once and returns both kinds.
* With `slices` the slices decide the kind (one slice = one-way, two = round trip); send `tripType` only if it agrees. The first slice must be the same trip as `origin`, `destination` and `departureDate`, and a second slice must be its exact way back. Never send `returnDate` with `slices`: the date of your second slice is your return date, and `meta.otherReturnDates` is filled for it too. **Refused (400):** three or more slices, and a second slice to other airports (open jaw) — multi-city search is not available.
* **Filters work for every supplier.** Kitionz applies `cabin` and every `filters` field to the offers suppliers return: `cabin` reads the offer’s own `cabin` when it states one, otherwise each flight’s `cabinClass` (a cabin not stated keeps the offer); `refundableOnly` keeps only `REFUNDABLE` (`NOT_GIVEN` — not stated — is left out); `maxConnections` counts changes of flight per direction (`0` = no change of flight; a technical stop on the same flight is allowed; a stop with no airport stated counts); `airlines.include` / `exclude` read each flight’s marketing carrier; `fareBrandsInclude` / `Exclude` read `fareFamily.code`; `maxOffersPerSupplier` keeps each supplier’s cheapest. An empty list is no filter; a filter name Kitionz does not know is refused (400). `meta.suppliers[].offerCount` counts the offers left after your filters.
* **`meta.filtersApplied` says what each filter removed:** one entry per filter you sent, `{ field, removed }` — an offer two filters remove counts under both. Read it when an answer is empty: few suppliers state a fare brand or a refund policy, so `fareBrandsInclude` or `refundableOnly` can remove every offer, and the entry says so.
* **`maxOffersPerSupplier` with no `tripType`:** one-way fares and round-trip packages share one price list per supplier, so a small number can leave out every package (packages usually cost more). Send `tripType` to cap one kind only.
* **An airport code Kitionz does not know** (not an IATA airport or city code it has) is not refused today: suppliers are still asked, and the envelope `meta.diagnostics` carries `UNKNOWN_AIRPORT` naming the field and the code. Check the code. A real airport nobody sells from returns 200 with no offers and no such diagnostic. The same holds on `/destinations` and `/availability`.
* `meta.tripTypes` lists the kinds this search covered; each `meta.suppliers`, `meta.suppliersFailed` and `meta.suppliersExcluded` entry carries the `tripType` of its part (one supplier can appear once per kind) — so the same supplier can be in `suppliersSucceeded` (one kind answered) and in `suppliersFailed` (the other failed). `supplierCounts`, when present, counts distinct suppliers in each list. A `DEADLINE_EXCEEDED` entry with `tookMs: 0` means the search ran out of time before that part asked the supplier.
* Search prices are **indicative** — never charge off them; re-price at `/fare-quote`.
* Pax fields are `adults` / `children` / `infants` (same names across the whole flow).
* **Search with the passengers you will book.** An offer is quoted and booked only for the adults, children and infants it was searched for; another party gets `400 PASSENGER_COUNTS_CHANGED` at `/fare-quote` and `/book` (for every supplier). Each offer’s `expiresAt` says when Kitionz stops accepting its `offerId` (not a price guarantee).
* **With infants, read `price.infantFare.status`.** `PRICED`: the supplier’s infant price is the `INFANT` row of `price.passengerFares` and inside `price.totalAmount`. `NOT_GIVEN`: the supplier gave no infant price, so that row’s `total` is `null` and `price.totalAmount` covers adults and children only. Add your own infant charge (the supplier or airline may still charge for the infant), or hide such fares — your choice. Kitionz never hides a fare and never shows ₹0 for a missing infant price. Treat any other status as `NOT_GIVEN`, and add your infant charge before you sort by price.
* **Count each passenger by age on the last flight of the trip** (the return flight on a round trip): `ADULT` 12 or older, `CHILD` 2–11, `INFANT` under 2. A baby who turns 2 before the return is a `CHILD` for a round trip but an `INFANT` for a one-way fare — when one search returns both, the party you sent fits only one of them; `/book` refuses the other.
* **`supplierCodes` is optional — leave it out.** Kitionz already knows which suppliers your key is enabled for and searches all of them. Send `supplierCodes` only to narrow to a subset of THOSE (blanks ignored; a non-enabled code → 403). Don’t send the empty `[""]` from the example skeleton. (`sources` is its old name, accepted until the next release.)
* **Each offer carries `capabilities`** `{ seatSelection, meals, extraBaggage, hold, fareRules, cancellation: REALTIME|OFFLINE|NONE }` — a supplier-level hint; the exact per-offer answer comes at `/fare-quote` (`eligibility`), and `/book` rejects an unsupported action with a typed 422 (e.g. `HOLD_NOT_SUPPORTED_FOR_THIS_OFFER`). Use `hold` and `cancellation`. **Do not build seat, meal or extra-baggage selling on this:** no Live supplier offers them today (only Kitionz Test Air shows a seat map), and `/book` takes no seats, meals or bags.
* **How an offer books:** read `booking.bookable` FIRST. `bookable: false` → show the fare, don’t offer to book it (`requestBooking` is then `false`). `bookable: true` + `requestBooking: false` → `/book` books with the supplier; the booking’s `status` tells you whether the PNR came back on that call or follows. `bookable: true` + `requestBooking: true` → `/book` records a request (`PENDING_FULFILMENT`); book on the supplier’s portal, then `/bookings/:id/fulfil`. In code: `if (!booking.bookable) … else if (booking.requestBooking) … else …`. (`booking.viaSupplierApi` is the old name: `false` where `requestBooking` is `true`, absent when not bookable.)
* **The same flights often come back from several sellers** — Kitionz returns every offer and never removes a copy. Group them by **`journeyKey`**: equal keys mean the sellers state the same flights at the same start and end times (same airline and flight number, same airports including stops, each leg leaving and arriving at the same local time). Price, seats, baggage and rules differ per offer: never add seats across a group, and book one specific offer with its own `offerId`. Each leg has a `legKey` (same rule, one direction) — equal leg keys never let you split a package or join two one-ways. When `journeyKeyComparable` is `false` (reasons in `legs[].legKeyGaps`) the key is unique to that offer: show it on its own. The key changes when an airline retimes a flight or Kitionz learns a fact a seller left out. The recipe (version `jk1`) is published so you can key your own inventory the same way.

**Example — request** (only `origin` / `destination` / `departureDate` / `adults` are required):

```json
{ "origin": "DEL", "destination": "BOM", "departureDate": "2027-01-15", "adults": 1 }
```

**Response (trimmed)** — send an offer’s `offerId` to `/fare-quote`. Read the new names shown; until the next release each flight also carries its old names (here `marketingCarrier.code`, `originCode`, `destCode`):

```json
{
  "data": {
    "searchId": "srch_x6xpERXqk",
    "offers": [ {
      "offerId": "floffer_9x2k7q",
      "tripType": "ONE_WAY",
      "departureDate": "2027-01-15",
      "journeyKey": "jk1_59da15eff41394c5648af3caaab489ca",
      "journeyKeyComparable": true,
      "price": { "totalAmount": 5480.00, "currency": "INR", "baseFare": null, "taxes": null, "passengerFares": [ { "passengerType": "ADULT", "count": 1, "perPerson": 5480.00, "total": 5480.00 } ], "infantFare": null },
      "isInternational": false,
      "policy": { "refund": "NOT_GIVEN", "change": "NOT_GIVEN" },
      "legs": [ {
        "legType": "OUTBOUND",
        "origin": { "iataCode": "DEL", "name": "Indira Gandhi International Airport", "city": "New Delhi", "countryCode": "IN", "timezone": "Asia/Kolkata" },
        "destination": { "iataCode": "BOM", "name": "Chhatrapati Shivaji Maharaj International Airport", "city": "Mumbai", "countryCode": "IN", "timezone": "Asia/Kolkata" },
        "departureTime": "2027-01-15T06:00:00+05:30", "arrivalTime": "2027-01-15T08:10:00+05:30",
        "segments": [ { "marketingCarrier": { "iataCode": "6E", "code": "6E", "flightNumber": "2134" }, "originCode": "DEL", "destCode": "BOM", "departureTerminal": "1", "arrivalTerminal": null, "cabin": null } ],
        "legKey": "lk1_59da15eff41394c5648af3caaab489ca", "legKeyComparable": true, "legKeyGaps": []
      } ],
      "capabilities": { "seatSelection": false, "hold": false, "cancellation": "OFFLINE" },
      "booking": { "bookable": true, "requestBooking": false, "validatingCarrier": null }
    }, {
      "offerId": "floffer_4h8n2r",
      "tripType": "ROUND_TRIP",
      "departureDate": "2027-01-15",
      "returnDate": "2027-01-19",
      "price": { "totalAmount": 9940.00, "currency": "INR" },
      "legs": [ { "legType": "OUTBOUND" }, { "legType": "RETURN" } ],
      "booking": { "bookable": true, "requestBooking": false }
    } ],
    "meta": { "tripTypes": ["ONE_WAY", "ROUND_TRIP"], "suppliersFailed": [], "otherReturnDates": [] }
  }
}
```

**Example — a return journey** (one-way offers and round trips back on 19 Jan):

```json
{ "origin": "DEL", "destination": "BOM", "departureDate": "2027-01-15", "returnDate": "2027-01-19", "adults": 1 }
```

**Response (trimmed)** — one round-trip offer comes back on 19 Jan; two others come back on 20 Jan and are only counted:

```json
{ "data": { "offers": [ { "tripType": "ONE_WAY", "departureDate": "2027-01-15" }, { "tripType": "ROUND_TRIP", "departureDate": "2027-01-15", "returnDate": "2027-01-19" } ], "meta": { "tripTypes": ["ONE_WAY", "ROUND_TRIP"], "otherReturnDates": [ { "returnDate": "2027-01-20", "offerCount": 2 } ] } } }
```

Reference: https://docs.kitionz.com/flights/search

## Authentication

- `Authorization` header (bearer token, required) — Your Kitionz API key, sent as `Authorization: Bearer keyId:secret`. Create a Test key at sandbox.kitionz.com → **API keys**, a Live key at kitionz.com → **API → API keys**.

## Servers

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

## Request

### Body (application/json)

This endpoint expects a flightSearchBody.

- `origin` (string, required)
- `destination` (string, required)
- `departureDate` (string, required)
- `returnDate` (string, optional) — The day your traveller flies back. Every round-trip offer in the answer has this returnDate (the local date its return leg leaves). Round-trip offers that return on other days are counted in meta.otherReturnDates. With tripType left out you get one-way offers and round trips back on this day: read each one-way offer’s route, never assume it flies out. Not allowed with tripType ONE_WAY, nor with slices (the date of your second slice is your return date).
- `tripType` (enum, optional) — Optional. Left out: every trip kind — one-way fares and round trips. ROUND_TRIP: round trips only. ONE_WAY: one-way fares, plus any round-trip packages a supplier’s one-way answer carries; each says tripType ROUND_TRIP with its returnDate. Read tripType on every offer and book it by its own labels: send fare-quote and book the offer’s tripType, never the search’s. To get every package, send ROUND_TRIP or leave tripType out.
  - Allowed values: `ONE_WAY`, `ROUND_TRIP`
- `adults` (integer, optional, default: 1)
- `children` (integer, optional, default: 0)
- `infants` (integer, optional, default: 0)
- `cabin` (enum, optional) — Optional. The cabin to fly. Kitionz passes it to the suppliers that take a cabin, and leaves out an offer whose cabin is another one: the offer’s own cabin when it states one, otherwise each flight’s cabinClass. A cabin that is not stated (absent or null) keeps the offer. Left out: every cabin.
  - Allowed values: `ECONOMY`, `PREMIUM_ECONOMY`, `BUSINESS`, `FIRST`
- `supplierCodes` (list of string, optional) — Optional. Leave it out to use every supplier your account has switched on. Send a list of supplier codes (each supplier’s code in GET /v1/flights/suppliers) only to narrow this call to some of them; a code you cannot use is refused (403), and blank entries are ignored.
- `slices` (list of FlightSearchBodySlicesItems, optional) — Optional. One slice (a one-way) or two (the way out, then its exact way back). The first slice must be the same trip as origin, destination and departureDate; the second must fly from its destination back to its origin. Three or more slices, or a second slice to other airports (open jaw), are refused (400). Most searches leave slices out and send returnDate instead.
- `filters` (FlightSearchBodyFilters, optional) — Optional. Kitionz applies every filter to the offers suppliers return, the same way for every supplier. A filter only removes offers; meta.filtersApplied says how many each one removed. An unknown filter name is refused (400).

## Response

### 200

Default Response

- `success` (boolean, required)
- `statusCode` (double, required)
- `data` (FlightSearchEnvelope, required) — Flight-search result envelope: searchId + offers + per-supplier meta (partial supplier failures are surfaced in meta.suppliersFailed, never as a top-level error).
- `meta` (V1FlightsSearchPostResponsesContentApplicationJsonSchemaMeta, required)

## Types

### FlightSearchBodySlicesItems

- `origin` (string, required)
- `destination` (string, required)
- `departureDate` (string, required)

### FlightSearchBodyFilters

Optional. Kitionz applies every filter to the offers suppliers return, the same way for every supplier. A filter only removes offers; meta.filtersApplied says how many each one removed. An unknown filter name is refused (400).

- `airlines` (FlightSearchBodyFiltersAirlines, optional) — Optional. Airlines to keep or leave out, compared ignoring case. With both lists, both apply. A flight with no airline code is left out by include and kept by exclude.
- `maxConnections` (integer, optional) — Optional. The most changes of flight in each direction: 0 = no change of flight (a technical stop on the same flight is allowed). A stop the supplier states without saying where (unnamedStops) counts, because it may be a change of flight; a stop on the same flight (technicalStops) does not.
- `refundableOnly` (boolean, optional) — Optional. true: keep only offers whose policy.refundPolicy is REFUNDABLE (a partial refund is not). false or left out: no filter.
- `fareBrandsInclude` (list of string, optional) — Optional. Keep only offers whose fareFamily.code is in this list, compared ignoring case. An offer with no fare family is left out. An empty list is no filter.
- `fareBrandsExclude` (list of string, optional) — Optional. Leave out offers whose fareFamily.code is in this list, compared ignoring case. An offer with no fare family is kept. An empty list is no filter.
- `maxOffersPerSupplier` (integer, optional) — Optional. At most this many offers from each supplier: its cheapest by pricing.totalAmount (at the same price, the one received first). Applied after every other filter. One-way fares and round-trip packages share one price list, so in a search without tripType a small number can leave out every package. meta.suppliers[].offerCount counts what is left.
- `inventoryCategories` (list of enum, optional) — Optional. SERIES (seats bought in advance) or ONLINE (live airline or GDS fares): keep only offers of these kinds. An empty list is no filter.
  - Allowed values: `SERIES`, `ONLINE`

### FlightSearchEnvelope

Flight-search result envelope: searchId + offers + per-supplier meta (partial supplier failures are surfaced in meta.suppliersFailed, never as a top-level error).

- `searchId` (string, required) — Kitionz’s id for this search, for support only: quote it when you contact Kitionz. Never sent back on a later call.
- `offers` (list of FlightSearchEnvelopeOffersItems, required)
- `meta` (FlightSearchEnvelopeMeta, required)

### V1FlightsSearchPostResponsesContentApplicationJsonSchemaMeta

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

### FlightSearchBodyFiltersAirlines

Optional. Airlines to keep or leave out, compared ignoring case. With both lists, both apply. A flight with no airline code is left out by include and kept by exclude.

- `include` (list of string, optional) — Keep only offers where every flight is sold by one of these airlines (the marketing carrier, IATA code such as 6E). An empty list is no filter.
- `exclude` (list of string, optional) — Leave out offers with any flight sold by one of these airlines (IATA code such as 6E). An empty list is no filter.

### FlightSearchEnvelopeOffersItems

- `inventoryCategory` (enum, required)
  - Allowed values: `SERIES`, `ONLINE`
- `offerId` (string, required) — The id of this offer (floffer_…). Send it as offerId to fare-quote and book, until expiresAt; never store it long-term.
- `expiresAt` (string, required) — When Kitionz stops accepting this offerId (ISO 8601, UTC): after it, /fare-quote and /book answer OFFER_EXPIRED and you search again. It is not a price or seat guarantee — the fare can change or sell out before then. A successful /fare-quote extends it.
- `legs` (list of FlightSearchEnvelopeOffersItemsLegsItems, required)
- `journeyKey` (string, required) — Group offers by this value. Two offers with the same journeyKey state the same flights at the same start and end times: for every flight the same airline and flight number, the same airports with every stop on the way, and every leg leaves and arrives at the same local time. Kitionz compares what the sellers state; it does not check the flights with the airline. Price, seats, cabin, baggage, rules and seller can all differ: never add seats across a group (sellers often sell the same seats), and always book one specific offer with its own supplierOfferRef — journeyKey is not accepted by any endpoint. The key is the same in every search and on every day for the same stated flights; it changes when an airline retimes a flight or when Kitionz learns a fact a seller left out. Opaque (`jk1_` + 32 characters, at most 64 letters, digits and `_`): compare whole values, never parse. The recipe is published (version jk1) so you can compute it for your own inventory.
- `journeyKeyComparable` (boolean, required) — false when any leg cannot be compared (see legs[].legKeyGaps). journeyKey is then unique to this offer and never groups with another: show it on its own, and do not store it.
- `tripType` (enum, required) — Which trip this offer is: ONE_WAY, or ROUND_TRIP when the return is part of the same fare (the price covers both ways). Send it back as tripType on /fare-quote and /book.
  - Allowed values: `ONE_WAY`, `ROUND_TRIP`
- `departureDate` (string, required) — Local date the outbound leg departs (YYYY-MM-DD). Send it back as departureDate.
- `price` (FlightSearchEnvelopeOffersItemsPrice, required) — The price: one block with the same names on the offer, the fare quote and the booking. A part the seller did not state is null. Kitionz computes only: netPayable from a stated commission and TDS, each row’s perPerson, and the equal split of one amount stated for adults and children together.
- `baggage` (FlightSearchEnvelopeOffersItemsBaggage, required, nullable) — The included baggage the seller states. null: the seller states no allowance at all (not stated — not zero bags).
- `stops` (double, required)
- `booking` (FlightSearchEnvelopeOffersItemsBooking, required)
- `policy` (FlightSearchEnvelopeOffersItemsPolicy, required)
- `paymentRequirements` (FlightSearchEnvelopeOffersItemsPaymentRequirements, required)
- `requiredPassengerFields` (FlightSearchEnvelopeOffersItemsRequiredPassengerFields, required) — What each passenger needs for this offer. fields lists the details that depend on the trip, each MANDATORY or OPTIONAL (title, first name and passenger type are always required and not listed). On an international offer dateOfBirth, passportNumber, passportExpiryDate (valid at least 6 months after the last flight) and nationality are MANDATORY; children and infants always need dateOfBirth. Collect every MANDATORY field before you take payment: /book refuses a booking without them (422 PASSENGER_FIELD_REQUIRED or PASSPORT_EXPIRY_TOO_SOON) before any supplier is asked.
- `isInternational` (boolean, required) — true when a flight of the offer crosses a border, or when Kitionz cannot tell (then collect the international passenger details).
- `capabilities` (FlightSearchEnvelopeOffersItemsCapabilities, required)
- `supplierOfferRef` (string, required, deprecated) — Old name of offerId (the same value), removed in the next release. Read offerId.
- `pricing` (FlightSearchEnvelopeOffersItemsPricing, required, deprecated) — Old name of price (the same value), removed in the next release. Read price. Every part of it is in price.
- `cabin` (enum, required, nullable, deprecated) — Removed in the next release. Read each flight’s cabin (segments[].cabin). The cabin the seller states. null: the seller did not state it — Kitionz never assumes ECONOMY. The seller's cabin for the fare, else the one cabin every flight states.
  - Allowed values: `ECONOMY`, `PREMIUM_ECONOMY`, `BUSINESS`, `FIRST`
- `supplierCode` (string, optional) — The supplier's code. Present only when your organisation is shown suppliers before booking; otherwise omitted (the supplier is named on the booking).
- `returnDate` (string, optional) — Round trip only: local date the return leg departs (YYYY-MM-DD), fixed by the fare. Send it back as returnDate.
- `availableSeats` (double, optional)
- `fareFamily` (FlightSearchEnvelopeOffersItemsFareFamily, optional)
- `offerExpiresAt` (string, optional)
- `gstInvoiceAvailable` (boolean, optional)
- `fareCategory` (enum, optional)
  - Allowed values: `PRIVATE`, `PUBLISHED`, `CORPORATE`, `SME`, `COUPON`, `PROMO`, `FLEXI`, `SALE`, `OTHER`
- `fareTypeName` (string, optional)
- `fareTier` (double, optional)
- `privateFare` (FlightSearchEnvelopeOffersItemsPrivateFare, optional)
- `totalEmissionsKg` (double, optional)
- `seller` (FlightSearchEnvelopeOffersItemsSeller, optional) — Who sells this offer. Present only when your organisation is shown suppliers before booking; otherwise omitted (the supplier is named on the booking).
- `sourceCode` (string, optional, deprecated) — Old name of supplierCode (the same value), removed in the next release. Read supplierCode. Present only when your organisation is shown suppliers before booking; otherwise omitted (the supplier is named on the booking).
- `supplier` (FlightSearchEnvelopeOffersItemsSupplier, optional, deprecated) — Old name of seller (the same value), removed in the next release. Read seller. Present only when your organisation is shown suppliers before booking; otherwise omitted (the supplier is named on the booking).

### FlightSearchEnvelopeMeta

- `tripTypes` (list of enum, required) — The trip kinds this search covered: the tripType you sent, or ONE_WAY and ROUND_TRIP when you sent none.
  - Allowed values: `ONE_WAY`, `ROUND_TRIP`, `MULTI_CITY`
- `suppliersCalled` (list of string, required) — Empty when your organisation is shown suppliers only after booking; supplierCounts then gives the totals.
- `suppliersSucceeded` (list of string, required) — Empty when your organisation is shown suppliers only after booking; supplierCounts then gives the totals.
- `suppliersFailed` (list of FlightSearchEnvelopeMetaSuppliersFailedItems, required) — One entry per supplier that failed, with its error code. Without supplier disclosure an entry has errorCode and tripType only.
- `suppliers` (list of FlightSearchEnvelopeMetaSuppliersItems, required) — Empty when your organisation is shown suppliers only after booking; supplierCounts then gives the totals.
- `suppliersSkipped` (list of FlightSearchEnvelopeMetaSuppliersSkippedItems, required) — Empty when your organisation is shown suppliers only after booking; supplierCounts then gives the totals.
- `suppliersExcluded` (list of FlightSearchEnvelopeMetaSuppliersExcludedItems, required) — Empty when your organisation is shown suppliers only after booking; supplierCounts then gives the totals.
- `otherReturnDates` (list of FlightSearchEnvelopeMetaOtherReturnDatesItems, required) — Round-trip offers that return on another day than your return date (the returnDate you sent, or the date of your second slice). They are not in offers: search again with that returnDate to see them. It counts only the round trips suppliers already sent that pass your filters (before maxOffersPerSupplier); it is not a calendar of every return day. Sorted by date. Empty when you sent no return date, or when no round trip came back on another day.
- `filtersApplied` (list of FlightSearchEnvelopeMetaFiltersAppliedItems, required) — One entry per filter you sent (cabin and filters.*), with how many offers it removed, so a filter that empties the answer says so: for example fareBrandsInclude when no supplier states a fare brand, or refundableOnly when suppliers do not state a refund policy. Counted on the offers suppliers returned; an every-kind search adds up both parts. Empty when you sent no filter.
- `totalDurationMs` (double, required)
- `supplierCounts` (FlightSearchEnvelopeMetaSupplierCounts, optional) — How many suppliers were called, succeeded, failed, skipped and excluded. Present only when your organisation is shown suppliers only after booking, because the supplier lists are then empty.
- `supplierDisclosure` ("AFTER_BOOKING", optional) — AFTER_BOOKING when this answer leaves suppliers out: they are named on the booking. Absent when your organisation is shown suppliers before booking.

### V1FlightsSearchPostResponsesContentApplicationJsonSchemaMetaPagination

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

### FlightSearchEnvelopeOffersItemsLegsItems

- `legIndex` (double, required)
- `legType` (enum, required)
  - Allowed values: `OUTBOUND`, `RETURN`
- `origin` (FlightSearchEnvelopeOffersItemsLegsItemsOrigin, required) — Where the leg leaves from.
- `destination` (FlightSearchEnvelopeOffersItemsLegsItemsDestination, required) — Where the leg ends.
- `departureTime` (string, required)
- `arrivalTime` (string, required)
- `stops` (double, required)
- `segments` (list of FlightSearchEnvelopeOffersItemsLegsItemsSegmentsItems, required)
- `legKey` (string, required) — Identifies the flights of this leg (one direction). Two legs with the same legKey — in this offer or another — state the same flights: for every flight the same airline and flight number, the same airports with every stop on the way, and the leg leaves and arrives at the same local time. Use it to see that a round-trip package’s outbound is the same flights as a one-way offer. Equal leg keys never let you book a package’s legs separately or join two one-way offers into a round trip. Opaque (`lk1_` + 32 characters): compare whole values, never parse. When legKeyComparable is false it is unique to this leg of this offer and matches nothing.
- `legKeyComparable` (boolean, required) — false when the seller did not state everything needed to compare this leg (legKeyGaps says what). legKey is then unique and never matches another leg.
- `legKeyGaps` (list of enum, required) — Why this leg cannot be compared; empty when it can. New codes may be added: treat an unknown code as opaque and branch only on legKeyComparable. AIRLINE_NOT_STATED: a flight’s airline code is blank or not an airline designator. FLIGHT_NUMBER_MISSING: a flight has no number. FLIGHT_NUMBER_JOINED: numbers joined in one flight ("910/997"). FLIGHT_NUMBER_UNREADABLE: a number that is not 1–4 digits with an optional letter. AIRPORT_NOT_EXACT: an airport that is not a 3-letter code. STOP_NOT_NAMED: a stop whose airport was not stated. TIME_NOT_STATED: the leg’s departure or arrival time cannot be read to the minute. ARRIVAL_UNCONFIRMED: the leg’s arrival time is not trusted. FLIGHTS_NOT_STATED: the leg lists no flights.
  - Allowed values: `AIRLINE_NOT_STATED`, `FLIGHT_NUMBER_MISSING`, `FLIGHT_NUMBER_JOINED`, `FLIGHT_NUMBER_UNREADABLE`, `AIRPORT_NOT_EXACT`, `STOP_NOT_NAMED`, `TIME_NOT_STATED`, `ARRIVAL_UNCONFIRMED`, `FLIGHTS_NOT_STATED`
- `originCode` (string, required, deprecated) — Old name of origin.iataCode (the same value), removed in the next release. Read origin.iataCode.
- `destCode` (string, required, deprecated) — Old name of destination.iataCode (the same value), removed in the next release. Read destination.iataCode.
- `durationMinutes` (double, optional)
- `layovers` (list of FlightSearchEnvelopeOffersItemsLegsItemsLayoversItems, optional) — One entry per stop between flights, in order (`segments.length - 1` entries). Absent for a one-flight leg, and when the wait at a stop cannot be stated (the supplier stated clocks there that contradict each other; both times at that stop are then `null`). Never a shorter list.
- `originName` (string, optional, deprecated) — Old name of origin.name (the same value), removed in the next release. Read origin.name.
- `destName` (string, optional, deprecated) — Old name of destination.name (the same value), removed in the next release. Read destination.name.
- `departureTimezone` (string, optional, nullable, deprecated) — Old name of origin.timezone (the same value), removed in the next release. Read origin.timezone.
- `arrivalTimezone` (string, optional, nullable, deprecated) — Old name of destination.timezone (the same value), removed in the next release. Read destination.timezone.
- `cabinClass` (enum, optional, nullable, deprecated) — Removed in the next release. Read each flight’s cabin (segments[].cabin).
  - Allowed values: `ECONOMY`, `PREMIUM_ECONOMY`, `BUSINESS`, `FIRST`

### FlightSearchEnvelopeOffersItemsPrice

The price: one block with the same names on the offer, the fare quote and the booking. A part the seller did not state is null. Kitionz computes only: netPayable from a stated commission and TDS, each row’s perPerson, and the equal split of one amount stated for adults and children together.

- `totalAmount` (double, required) — What you pay the seller, in INR, for the passengers it priced. When infantFare.status is NOT_GIVEN it covers adults and children only.
- `currency` (string, required)
- `baseFare` (double, required, nullable) — The seller's base fare; null when the seller did not state it — never computed or assumed by Kitionz.
- `taxes` (double, required, nullable) — The seller's own tax split of the fare — not an airline-tax or GST figure; null when the seller did not state it — never computed or assumed by Kitionz.
- `commission` (double, required, nullable) — Your commission on this fare as the seller states it (a stated 0 stays 0); null when the seller did not state it — never computed or assumed by Kitionz.
- `tds` (double, required, nullable) — TDS on the commission as the seller states it; null when the seller did not state it — never computed or assumed by Kitionz.
- `netPayable` (double, required, nullable) — What the fare costs you net: the seller's stated net, else totalAmount − commission + tds when the seller states both; null otherwise.
- `publishedTotal` (double, required, nullable) — The seller's published (list) price; null when the seller did not state it — never computed or assumed by Kitionz.
- `publishedBaseFare` (double, required, nullable) — The published price's base fare; null when the seller did not state it — never computed or assumed by Kitionz.
- `publishedTaxes` (double, required, nullable) — The published price's taxes; null when the seller did not state it — never computed or assumed by Kitionz.
- `taxBreakdown` (list of FlightSearchEnvelopeOffersItemsPriceTaxBreakdownItems, required) — The seller’s itemised taxes; empty when it states none.
- `commercials` (list of FlightSearchEnvelopeOffersItemsPriceCommercialsItems, required) — The seller’s other commercial lines (fees, discounts, incentives); empty when none.
- `passengerFares` (list of FlightSearchEnvelopeOffersItemsPricePassengerFaresItems, required) — One row per passenger type in the party: adults, then children, then infants.
- `infantFare` (FlightSearchEnvelopeOffersItemsPriceInfantFare, required, nullable) — 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. null when the party has no infant — and on a booking with infants that kept no fare statement (still reserved, settled after an unclear /book outcome, or made before Kitionz kept it): then the infant price is not known, which is not "no infant".

### FlightSearchEnvelopeOffersItemsBaggage

The included baggage the seller states. null: the seller states no allowance at all (not stated — not zero bags).

- `perPax` (list of FlightSearchEnvelopeOffersItemsBaggagePerPaxItems, required) — One row per passenger type the seller states an allowance for. A type with no row: not stated for that type. A stated 0 kg stays 0.

### FlightSearchEnvelopeOffersItemsBooking

- `bookable` (boolean, required) — Can this offer be booked through Kitionz right now? Check this first.
- `validatingCarrier` (string, required, nullable) — The airline that issues the ticket, as the seller states it; null when not stated (never guessed from the first flight).
- `requestBooking` (boolean, required) — Read bookable first. bookable false: the offer cannot be booked now (requestBooking false). bookable true + requestBooking false: /book books with the seller. bookable true + requestBooking true: /book records a request (status PENDING\_FULFILMENT) — you book on the seller’s portal, then send the PNR to POST /v1/flights/bookings/\{id}/fulfil.
- `bookingClass` (string, optional)
- `ticketingDeadline` (string, optional, nullable)
- `viaSupplierApi` (boolean, optional, deprecated) — Present only when `bookable` is true. `true` = /book books with the supplier (the booking `status` says whether the PNR came back now or follows). `false` = /book records a request (PENDING\_FULFILMENT): book on the supplier’s portal, then POST /bookings/\{id}/fulfil. Absent when not bookable — never test `!viaSupplierApi` on its own. Replaced by booking.requestBooking (true where this is false), removed in the next release. Read requestBooking.

### FlightSearchEnvelopeOffersItemsPolicy

- `refundBeforeDeparture` (FlightSearchEnvelopeOffersItemsPolicyRefundBeforeDeparture, required)
- `changeBeforeDeparture` (FlightSearchEnvelopeOffersItemsPolicyChangeBeforeDeparture, required)
- `refund` (enum, required) — The seller's refund policy. NOT_GIVEN: the seller did not state it — Kitionz never assumes one. Treat any other value as NOT_GIVEN.
  - Allowed values: `REFUNDABLE`, `PARTIAL_REFUND`, `NON_REFUNDABLE`, `NOT_GIVEN`
- `change` (enum, required) — The seller's change policy. NOT_GIVEN: the seller did not state it — Kitionz never assumes one. Treat any other value as NOT_GIVEN.
  - Allowed values: `FREE_CHANGE`, `CHARGEABLE`, `NOT_ALLOWED`, `NOT_GIVEN`
- `refundPolicy` (enum, required, deprecated) — Old name of refund (the same value), removed in the next release. Read refund.
  - Allowed values: `REFUNDABLE`, `PARTIAL_REFUND`, `NON_REFUNDABLE`, `NOT_GIVEN`
- `changePolicy` (enum, required, deprecated) — Old name of change (the same value), removed in the next release. Read change.
  - Allowed values: `FREE_CHANGE`, `CHARGEABLE`, `NOT_ALLOWED`, `NOT_GIVEN`
- `cancellationFee` (double, optional)
- `changeFee` (double, optional)

### FlightSearchEnvelopeOffersItemsPaymentRequirements

- `requiresInstantPayment` (boolean, required, nullable) — As the seller states it; null when the seller does not say.
- `priceGuaranteeExpiresAt` (string, optional)
- `paymentRequiredBy` (string, optional)

### FlightSearchEnvelopeOffersItemsRequiredPassengerFields

What each passenger needs for this offer. fields lists the details that depend on the trip, each MANDATORY or OPTIONAL (title, first name and passenger type are always required and not listed). On an international offer dateOfBirth, passportNumber, passportExpiryDate (valid at least 6 months after the last flight) and nationality are MANDATORY; children and infants always need dateOfBirth. Collect every MANDATORY field before you take payment: /book refuses a booking without them (422 PASSENGER_FIELD_REQUIRED or PASSPORT_EXPIRY_TOO_SOON) before any supplier is asked.

- `fields` (FlightSearchEnvelopeOffersItemsRequiredPassengerFieldsFields, required)
- `international` (boolean, required, deprecated) — Old name of isInternational (the same value), removed in the next release. Read isInternational.

### FlightSearchEnvelopeOffersItemsCapabilities

- `seatSelection` (boolean, required)
- `meals` (boolean, required)
- `extraBaggage` (boolean, required)
- `hold` (boolean, required)
- `fareRules` (boolean, required)
- `cancellation` (enum, required)
  - Allowed values: `REALTIME`, `OFFLINE`, `NONE`

### FlightSearchEnvelopeOffersItemsPricing

Old name of price (the same value), removed in the next release. Read price. Every part of it is in price.

- `totalAmount` (double, required) — The supplier's total for the passengers it priced, in INR. When infantFare.status is NOT_GIVEN it covers adults and children only — the infants are not in it.
- `currency` (string, required)
- `published` (FlightSearchEnvelopeOffersItemsPricingPublished, required)
- `offered` (FlightSearchEnvelopeOffersItemsPricingOffered, required)
- `taxComponents` (list of FlightSearchEnvelopeOffersItemsPricingTaxComponentsItems, required)
- `commercials` (list of FlightSearchEnvelopeOffersItemsPricingCommercialsItems, required)
- `perPax` (FlightSearchEnvelopeOffersItemsPricingPerPax, optional)
- `infantFare` (FlightSearchEnvelopeOffersItemsPricingInfantFare, 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. Present whenever the party has an infant, absent otherwise. Kitionz never hides a fare because the infant price is missing: it says NOT_GIVEN.
- `components` (list of FlightSearchEnvelopeOffersItemsPricingComponentsItems, optional)

### FlightSearchEnvelopeOffersItemsFareFamily

- `code` (string, required)
- `attributes` (list of FlightSearchEnvelopeOffersItemsFareFamilyAttributesItems, required)
- `name` (string, optional)
- `cabin` (enum, optional, deprecated) — Removed in the next release. Read each flight’s cabin (segments[].cabin).
  - Allowed values: `ECONOMY`, `PREMIUM_ECONOMY`, `BUSINESS`, `FIRST`

### FlightSearchEnvelopeOffersItemsPrivateFare

- `type` (enum, required)
  - Allowed values: `CORPORATE`, `TOUR`, `NEGOTIATED`, `OTHER`
- `corporateCode` (string, optional)
- `tourCode` (string, optional)
- `trackingReference` (string, optional)

### FlightSearchEnvelopeOffersItemsSeller

Who sells this offer. Present only when your organisation is shown suppliers before booking; otherwise omitted (the supplier is named on the booking).

- `code` (string, required)
- `name` (string, required, nullable)
- `website` (string, required, nullable)

### FlightSearchEnvelopeOffersItemsSupplier

Old name of seller (the same value), removed in the next release. Read seller. Present only when your organisation is shown suppliers before booking; otherwise omitted (the supplier is named on the booking).

- `code` (string, required)
- `name` (string, required, nullable)
- `website` (string, required, nullable)

### FlightSearchEnvelopeMetaSuppliersFailedItems

- `errorCode` (string, required)
- `tripType` (enum, required)
  - Allowed values: `ONE_WAY`, `ROUND_TRIP`, `MULTI_CITY`
- `sourceCode` (string, optional) — Present only when your organisation is shown suppliers before booking; otherwise omitted (the supplier is named on the booking).

### FlightSearchEnvelopeMetaSuppliersItems

- `sourceCode` (string, required)
- `tookMs` (double, required)
- `offerCount` (double, required) — How many of this supplier’s offers are in this answer for this part of the search: after your filters and maxOffersPerSupplier.
- `tripType` (enum, required)
  - Allowed values: `ONE_WAY`, `ROUND_TRIP`, `MULTI_CITY`
- `errorCode` (string, optional)

### FlightSearchEnvelopeMetaSuppliersSkippedItems

- `sourceCode` (string, required)
- `reason` (string, required)

### FlightSearchEnvelopeMetaSuppliersExcludedItems

- `sourceCode` (string, required)
- `reason` (string, required)
- `tripType` (enum, required)
  - Allowed values: `ONE_WAY`, `ROUND_TRIP`, `MULTI_CITY`

### FlightSearchEnvelopeMetaOtherReturnDatesItems

- `returnDate` (string, required) — A day other round-trip offers return: the local date their return leg leaves (YYYY-MM-DD), the same as each offer’s returnDate.
- `offerCount` (integer, required) — How many round-trip offers return on that day.

### FlightSearchEnvelopeMetaFiltersAppliedItems

- `field` (enum, required) — The request field of the filter, for example filters.refundableOnly.
  - Allowed values: `cabin`, `filters.inventoryCategories`, `filters.refundableOnly`, `filters.maxConnections`, `filters.airlines.include`, `filters.airlines.exclude`, `filters.fareBrandsInclude`, `filters.fareBrandsExclude`, `filters.maxOffersPerSupplier`
- `removed` (integer, required) — How many offers this filter removed on its own. An offer that two filters remove counts under both. maxOffersPerSupplier counts the offers it left out after every other filter.

### FlightSearchEnvelopeMetaSupplierCounts

How many suppliers were called, succeeded, failed, skipped and excluded. Present only when your organisation is shown suppliers only after booking, because the supplier lists are then empty.

- `called` (integer, required)
- `succeeded` (integer, required)
- `failed` (integer, required)
- `skipped` (integer, required)
- `excluded` (integer, required)

### FlightSearchEnvelopeOffersItemsLegsItemsOrigin

Where the leg leaves from.

- `iataCode` (string, required) — IATA airport code.
- `name` (string, required, nullable) — Airport name from the Kitionz airport list; null when the airport is not in it (the same rule on offers, bookings and stops).
- `city` (string, required, nullable) — The city the airport serves; null when the airport is not in the Kitionz airport list.
- `countryCode` (string, required, nullable) — ISO 3166-1 alpha-2 country code; null when the airport is not in the Kitionz airport list.
- `timezone` (string, required, nullable) — IANA time zone (the flight's local times carry its offset); null when the airport is not in the Kitionz airport list.

### FlightSearchEnvelopeOffersItemsLegsItemsDestination

Where the leg ends.

- `iataCode` (string, required) — IATA airport code.
- `name` (string, required, nullable) — Airport name from the Kitionz airport list; null when the airport is not in it (the same rule on offers, bookings and stops).
- `city` (string, required, nullable) — The city the airport serves; null when the airport is not in the Kitionz airport list.
- `countryCode` (string, required, nullable) — ISO 3166-1 alpha-2 country code; null when the airport is not in the Kitionz airport list.
- `timezone` (string, required, nullable) — IANA time zone (the flight's local times carry its offset); null when the airport is not in the Kitionz airport list.

### FlightSearchEnvelopeOffersItemsLegsItemsSegmentsItems

- `segmentIndex` (double, required)
- `marketingCarrier` (FlightSearchEnvelopeOffersItemsLegsItemsSegmentsItemsMarketingCarrier, required)
- `departureTime` (string, required, nullable) — Departure, ISO 8601 with the origin airport's offset. `null` when the supplier did not state it (or stated clocks at this stop that contradict each other): only at a stop inside a leg (`segments[i > 0]`); a leg's first departure is always given. Show it as "time not stated"; never fill it in. The wait at that stop is `layovers[i - 1].durationMinutes` when `layovers` is present.
- `arrivalTime` (string, required, nullable) — Arrival, ISO 8601 with the destination airport's offset. `null` when the supplier did not state it (or stated clocks at this stop that contradict each other): only at a stop inside a leg (`segments[i < last]`); a leg's last arrival is always given. Show it as "time not stated"; never fill it in.
- `origin` (FlightSearchEnvelopeOffersItemsLegsItemsSegmentsItemsOrigin, required) — Where this flight leaves from.
- `destination` (FlightSearchEnvelopeOffersItemsLegsItemsSegmentsItemsDestination, required) — Where this flight lands.
- `departureTerminal` (string, required, nullable) — The departure terminal as the seller states it; null when not stated.
- `arrivalTerminal` (string, required, nullable) — The arrival terminal as the seller states it; null when not stated.
- `cabin` (enum, required, nullable) — This flight’s cabin as the seller states it. null: not stated — Kitionz never assumes ECONOMY.
  - Allowed values: `ECONOMY`, `PREMIUM_ECONOMY`, `BUSINESS`, `FIRST`
- `originCode` (string, required, deprecated) — Old name of origin.iataCode (the same value), removed in the next release. Read origin.iataCode.
- `destCode` (string, required, deprecated) — Old name of destination.iataCode (the same value), removed in the next release. Read destination.iataCode.
- `operatingCarrier` (FlightSearchEnvelopeOffersItemsLegsItemsSegmentsItemsOperatingCarrier, optional)
- `isCodeshare` (boolean, optional, nullable) — true / false as the seller states it; null when the seller does not say.
- `durationMinutes` (double, optional) — Flight minutes. Absent when either time of this flight is `null` (not stated) — never computed from a missing time.
- `aircraft` (FlightSearchEnvelopeOffersItemsLegsItemsSegmentsItemsAircraft, optional)
- `bookingClass` (string, optional)
- `fareBasisCode` (string, optional)
- `fareType` (string, optional)
- `brandedFare` (string, optional)
- `technicalStops` (list of FlightSearchEnvelopeOffersItemsLegsItemsSegmentsItemsTechnicalStopsItems, optional)
- `unnamedStops` (integer, optional)
- `arrivalTimeUnconfirmed` (boolean, optional) — true when the supplier’s arrival time for this flight could not be trusted: show "arrival time not confirmed" instead of the time and its duration. Absent or false: the times are sane.
- `originName` (string, optional, deprecated) — Old name of origin.name (the same value), removed in the next release. Read origin.name.
- `originTerminal` (string, optional, deprecated) — Old name of departureTerminal (the same value), removed in the next release. Read departureTerminal.
- `destName` (string, optional, deprecated) — Old name of destination.name (the same value), removed in the next release. Read destination.name.
- `destinationTerminal` (string, optional, deprecated) — Old name of arrivalTerminal (the same value), removed in the next release. Read arrivalTerminal.
- `departureTimezone` (string, optional, nullable, deprecated) — Old name of origin.timezone (the same value), removed in the next release. Read origin.timezone.
- `arrivalTimezone` (string, optional, nullable, deprecated) — Old name of destination.timezone (the same value), removed in the next release. Read destination.timezone.
- `cabinClass` (enum, optional, nullable, deprecated) — Old name of cabin (the same value), removed in the next release. Read cabin.
  - Allowed values: `ECONOMY`, `PREMIUM_ECONOMY`, `BUSINESS`, `FIRST`

### FlightSearchEnvelopeOffersItemsLegsItemsLayoversItems

The stop between two flights of a leg. Exactly one per gap: `layovers[k]` is the stop between `segments[k]` and `segments[k + 1]` (the whole list is absent when one stop's wait cannot be stated).

- `airport` (string, required)
- `durationMinutes` (double, required) — Minutes waited at this stop: from the two clocks when both are stated, otherwise the supplier's stated wait.
- `isOvernight` (boolean, required, nullable) — True when the wait is longer than 6 hours by the clocks. `null` when a clock at this stop is not stated, so Kitionz cannot tell.
- `city` (string, optional)
- `airportChange` (boolean, optional)

### FlightSearchEnvelopeOffersItemsPriceTaxBreakdownItems

- `code` (string, required) — The tax code, as the seller states it.
- `label` (string, required, nullable) — The seller’s label; null when not stated.
- `amount` (double, required)

### FlightSearchEnvelopeOffersItemsPriceCommercialsItems

- `type` (string, required) — The kind of line, as the seller states it (e.g. DISCOUNT).
- `amount` (double, required)
- `appliesOn` (string, required, nullable) — The line it is computed on (e.g. TDS on DISCOUNT); null when not stated.
- `passengerType` (enum, required, nullable) — The passenger type it applies to; null when it is for the whole booking or not stated.
  - Allowed values: `ADULT`, `CHILD`, `INFANT`
- `owner` (string, required, nullable) — Who the line belongs to, as the seller states it (e.g. TMC); null when not stated.
- `label` (string, required, nullable) — The seller’s label; null when not stated.

### FlightSearchEnvelopeOffersItemsPricePassengerFaresItems

- `passengerType` (enum, required)
  - Allowed values: `ADULT`, `CHILD`, `INFANT`
- `count` (integer, required) — How many passengers of this type travel.
- `perPerson` (double, required, nullable) — One passenger of this type: total / count, to the paisa (rounded half up when it does not divide evenly, so perPerson × count can differ from total by up to half a paisa a head — charge totalAmount, never a sum of perPerson). null when total is null. The old per-head figure (fareBreakdown.perPax[].perHeadTotal) rounds to whole rupees: switch every place you read per-head prices at once.
- `total` (double, required, nullable) — All count passengers of this type together: the seller’s line for this type, or Kitionz’s equal share of one amount the seller stated for adults and children together. null when no line covers exactly these passengers (an infant price not given, or one amount covering several types that Kitionz did not split). When every row states a total, the rows add up to totalAmount.
- `baseFare` (double, required, nullable) — The base fare of these passengers; null when the seller did not state it — never computed or assumed by Kitionz.
- `taxes` (double, required, nullable) — The taxes of these passengers; null when the seller did not state it — never computed or assumed by Kitionz.

### FlightSearchEnvelopeOffersItemsPriceInfantFare

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.

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

### FlightSearchEnvelopeOffersItemsBaggagePerPaxItems

- `paxType` (enum, required)
  - Allowed values: `ADT`, `CHD`, `INF`
- `checkIn` (FlightSearchEnvelopeOffersItemsBaggagePerPaxItemsCheckIn, optional)
- `cabin` (FlightSearchEnvelopeOffersItemsBaggagePerPaxItemsCabin, optional)
- `segmentRef` (string, optional)

### FlightSearchEnvelopeOffersItemsPolicyRefundBeforeDeparture

- `allowed` (boolean, required, nullable) — true / false as the seller states it; null when the policy is NOT_GIVEN (not stated, never a guessed false).
- `penaltyAmount` (double, optional)
- `penaltyCurrency` (string, optional)

### FlightSearchEnvelopeOffersItemsPolicyChangeBeforeDeparture

- `allowed` (boolean, required, nullable) — true / false as the seller states it; null when the policy is NOT_GIVEN (not stated, never a guessed false).
- `penaltyAmount` (double, optional)
- `penaltyCurrency` (string, optional)

### FlightSearchEnvelopeOffersItemsRequiredPassengerFieldsFields

- `DATE_OF_BIRTH` (enum, optional)
  - Allowed values: `MANDATORY`, `OPTIONAL`
- `PASSPORT_NUMBER` (enum, optional)
  - Allowed values: `MANDATORY`, `OPTIONAL`
- `PASSPORT_EXPIRY` (enum, optional)
  - Allowed values: `MANDATORY`, `OPTIONAL`
- `PASSPORT_ISSUE_DATE` (enum, optional)
  - Allowed values: `MANDATORY`, `OPTIONAL`
- `PASSPORT_ISSUING_COUNTRY` (enum, optional)
  - Allowed values: `MANDATORY`, `OPTIONAL`
- `NATIONALITY` (enum, optional)
  - Allowed values: `MANDATORY`, `OPTIONAL`

### FlightSearchEnvelopeOffersItemsPricingPublished

- `baseFare` (double, required, nullable) — The seller's published base fare; null when the seller did not state it — never computed or assumed by Kitionz.
- `taxes` (double, required, nullable) — The seller's own tax split of the fare — not an airline-tax or GST figure; null when the seller did not state it — never computed or assumed by Kitionz.
- `total` (double, required, nullable) — The seller's published price; null when the seller did not state it — never computed or assumed by Kitionz.

### FlightSearchEnvelopeOffersItemsPricingOffered

- `baseFare` (double, required, nullable) — The seller's base fare; null when the seller did not state it — never computed or assumed by Kitionz.
- `taxes` (double, required, nullable) — The seller's own tax split of the fare — not an airline-tax or GST figure; null when the seller did not state it — never computed or assumed by Kitionz.
- `total` (double, required) — What you pay the seller (= totalAmount). Always stated.
- `commission` (double, required, nullable) — Your commission on this fare as the seller states it (a stated 0 stays 0); null when the seller did not state it — never computed or assumed by Kitionz.
- `tds` (double, required, nullable) — TDS on the commission as the seller states it; null when the seller did not state it — never computed or assumed by Kitionz.
- `netPayable` (double, required, nullable) — The seller's stated net, else total − commission + tds when both are stated; null otherwise.

### FlightSearchEnvelopeOffersItemsPricingTaxComponentsItems

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

### FlightSearchEnvelopeOffersItemsPricingCommercialsItems

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

### FlightSearchEnvelopeOffersItemsPricingPerPax

- `adult` (FlightSearchEnvelopeOffersItemsPricingPerPaxAdult, optional) — One passenger type of the party: count passengers and their total together (one passenger = total / count). A line can be Kitionz’s equal split of one amount the seller stated for adults and children together. On a booking the per-person figure is fareBreakdown.perPax[].perHeadTotal.
- `child` (FlightSearchEnvelopeOffersItemsPricingPerPaxChild, optional) — One passenger type of the party: count passengers and their total together (one passenger = total / count). A line can be Kitionz’s equal split of one amount the seller stated for adults and children together. On a booking the per-person figure is fareBreakdown.perPax[].perHeadTotal.
- `infant` (FlightSearchEnvelopeOffersItemsPricingPerPaxInfant, optional) — One passenger type of the party: count passengers and their total together (one passenger = total / count). A line can be Kitionz’s equal split of one amount the seller stated for adults and children together. On a booking the per-person figure is fareBreakdown.perPax[].perHeadTotal.

### FlightSearchEnvelopeOffersItemsPricingInfantFare

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. Present whenever the party has an infant, absent otherwise. Kitionz never hides a fare because the infant price is missing: it says NOT_GIVEN.

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

### FlightSearchEnvelopeOffersItemsPricingComponentsItems

- `code` (string, required)
- `amount` (double, required)
- `label` (string, optional)
- `applicability` (enum, optional)
  - Allowed values: `PER_BOOKING`, `PER_PAX`, `PER_SEGMENT`

### FlightSearchEnvelopeOffersItemsFareFamilyAttributesItems

- `key` (string, required)
- `status` (enum, required)
  - Allowed values: `INCLUDED`, `CHARGEABLE`, `NOT_OFFERED`
- `label` (string, optional)
- `amount` (double, optional)

### FlightSearchEnvelopeOffersItemsLegsItemsSegmentsItemsMarketingCarrier

- `iataCode` (string, required, nullable) — The airline's IATA code; null when the seller stated none Kitionz can read.
- `name` (string, required, nullable) — The airline's name from the Kitionz airline list; null when not known. On a search offer only, until the next release: the name the seller stated when the airline is not in the list.
- `flightNumber` (string, required, nullable) — The flight number without the airline code; null when not stated.
- `code` (string, required, deprecated) — Old name of iataCode (the same value), removed in the next release. Read iataCode. It is "" when the code could not be read.

### FlightSearchEnvelopeOffersItemsLegsItemsSegmentsItemsOrigin

Where this flight leaves from.

- `iataCode` (string, required) — IATA airport code.
- `name` (string, required, nullable) — Airport name from the Kitionz airport list; null when the airport is not in it (the same rule on offers, bookings and stops).
- `city` (string, required, nullable) — The city the airport serves; null when the airport is not in the Kitionz airport list.
- `countryCode` (string, required, nullable) — ISO 3166-1 alpha-2 country code; null when the airport is not in the Kitionz airport list.
- `timezone` (string, required, nullable) — IANA time zone (the flight's local times carry its offset); null when the airport is not in the Kitionz airport list.

### FlightSearchEnvelopeOffersItemsLegsItemsSegmentsItemsDestination

Where this flight lands.

- `iataCode` (string, required) — IATA airport code.
- `name` (string, required, nullable) — Airport name from the Kitionz airport list; null when the airport is not in it (the same rule on offers, bookings and stops).
- `city` (string, required, nullable) — The city the airport serves; null when the airport is not in the Kitionz airport list.
- `countryCode` (string, required, nullable) — ISO 3166-1 alpha-2 country code; null when the airport is not in the Kitionz airport list.
- `timezone` (string, required, nullable) — IANA time zone (the flight's local times carry its offset); null when the airport is not in the Kitionz airport list.

### FlightSearchEnvelopeOffersItemsLegsItemsSegmentsItemsOperatingCarrier

- `iataCode` (string, required, nullable) — The airline's IATA code; null when the seller stated none Kitionz can read.
- `name` (string, required, nullable) — The airline's name from the Kitionz airline list; null when not known. On a search offer only, until the next release: the name the seller stated when the airline is not in the list.
- `flightNumber` (string, required, nullable) — The flight number without the airline code; null when not stated.
- `code` (string, required, deprecated) — Old name of iataCode (the same value), removed in the next release. Read iataCode. It is "" when the code could not be read.

### FlightSearchEnvelopeOffersItemsLegsItemsSegmentsItemsAircraft

- `code` (string, required)
- `name` (string, optional)

### FlightSearchEnvelopeOffersItemsLegsItemsSegmentsItemsTechnicalStopsItems

- `airport` (FlightSearchEnvelopeOffersItemsLegsItemsSegmentsItemsTechnicalStopsItemsAirport, required) — The airport where the flight stops.
- `airportCode` (string, required, deprecated) — Old name of airport.iataCode (the same value), removed in the next release. Read airport.iataCode.
- `arrivalTime` (string, optional)
- `departureTime` (string, optional)
- `durationMinutes` (double, optional)
- `arrivalTerminal` (string, optional)
- `departureTerminal` (string, optional)
- `airportName` (string, optional, deprecated) — Old name of airport.name (the same value), removed in the next release. Read airport.name.

### FlightSearchEnvelopeOffersItemsBaggagePerPaxItemsCheckIn

- FlightSearchEnvelopeOffersItemsBaggagePerPaxItemsCheckIn0
- FlightSearchEnvelopeOffersItemsBaggagePerPaxItemsCheckIn1

### FlightSearchEnvelopeOffersItemsBaggagePerPaxItemsCabin

- FlightSearchEnvelopeOffersItemsBaggagePerPaxItemsCabin0
- FlightSearchEnvelopeOffersItemsBaggagePerPaxItemsCabin1

### FlightSearchEnvelopeOffersItemsPricingPerPaxAdult

One passenger type of the party: count passengers and their total together (one passenger = total / count). A line can be Kitionz’s equal split of one amount the seller stated for adults and children together. On a booking the per-person figure is fareBreakdown.perPax[].perHeadTotal.

- `count` (double, required) — How many passengers of this type the line covers.
- `total` (double, required) — The price of ALL count passengers of this type together, not of one: one passenger is total / count. The lines add up to pricing.totalAmount.
- `baseFare` (double, optional)
- `totalTax` (double, optional)

### FlightSearchEnvelopeOffersItemsPricingPerPaxChild

One passenger type of the party: count passengers and their total together (one passenger = total / count). A line can be Kitionz’s equal split of one amount the seller stated for adults and children together. On a booking the per-person figure is fareBreakdown.perPax[].perHeadTotal.

- `count` (double, required) — How many passengers of this type the line covers.
- `total` (double, required) — The price of ALL count passengers of this type together, not of one: one passenger is total / count. The lines add up to pricing.totalAmount.
- `baseFare` (double, optional)
- `totalTax` (double, optional)

### FlightSearchEnvelopeOffersItemsPricingPerPaxInfant

One passenger type of the party: count passengers and their total together (one passenger = total / count). A line can be Kitionz’s equal split of one amount the seller stated for adults and children together. On a booking the per-person figure is fareBreakdown.perPax[].perHeadTotal.

- `count` (double, required) — How many passengers of this type the line covers.
- `total` (double, required) — The price of ALL count passengers of this type together, not of one: one passenger is total / count. The lines add up to pricing.totalAmount.
- `baseFare` (double, optional)
- `totalTax` (double, optional)

### FlightSearchEnvelopeOffersItemsLegsItemsSegmentsItemsTechnicalStopsItemsAirport

The airport where the flight stops.

- `iataCode` (string, required) — IATA airport code.
- `name` (string, required, nullable) — Airport name from the Kitionz airport list; null when the airport is not in it (the same rule on offers, bookings and stops).
- `city` (string, required, nullable) — The city the airport serves; null when the airport is not in the Kitionz airport list.
- `countryCode` (string, required, nullable) — ISO 3166-1 alpha-2 country code; null when the airport is not in the Kitionz airport list.
- `timezone` (string, required, nullable) — IANA time zone (the flight's local times carry its offset); null when the airport is not in the Kitionz airport list.

### FlightSearchEnvelopeOffersItemsBaggagePerPaxItemsCheckIn0

- `pieces` (double, required)
- `weightKgPerPiece` (double, optional)

### FlightSearchEnvelopeOffersItemsBaggagePerPaxItemsCheckIn1

- `weightKg` (double, required)

### FlightSearchEnvelopeOffersItemsBaggagePerPaxItemsCabin0

- `pieces` (double, required)
- `weightKgPerPiece` (double, optional)

### FlightSearchEnvelopeOffersItemsBaggagePerPaxItemsCabin1

- `weightKg` (double, required)

## Examples

**Request**

```json
{
  "origin": "DEL",
  "destination": "BOM",
  "departureDate": "2026-11-30",
  "adults": 1
}
```

**Response**

```json
{
  "success": true,
  "statusCode": 200,
  "data": {
    "searchId": "srch_0CQb4MutZ-BmApr6HHFFGw",
    "offers": [
      {
        "inventoryCategory": "SERIES",
        "offerId": "floffer_034nVJS2qOr2Vqu1qfPu9c",
        "expiresAt": "2026-10-28T02:17:18.482Z",
        "legs": [
          {
            "legIndex": 0,
            "legType": "OUTBOUND",
            "origin": {
              "iataCode": "DEL",
              "name": "Indira Gandhi International Airport",
              "city": "New Delhi",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "destination": {
              "iataCode": "BOM",
              "name": "Chhatrapati Shivaji Maharaj International Airport",
              "city": "Mumbai",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "departureTime": "2026-11-30T05:30:00+05:30",
            "arrivalTime": "2026-11-30T07:40:00+05:30",
            "stops": 0,
            "segments": [
              {
                "segmentIndex": 0,
                "marketingCarrier": {
                  "iataCode": "ZZ",
                  "name": "Kitionz Test Air",
                  "flightNumber": "100",
                  "code": "ZZ"
                },
                "departureTime": "2026-11-30T05:30:00+05:30",
                "arrivalTime": "2026-11-30T07:40:00+05:30",
                "origin": {
                  "iataCode": "DEL",
                  "name": "Indira Gandhi International Airport",
                  "city": "New Delhi",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "destination": {
                  "iataCode": "BOM",
                  "name": "Chhatrapati Shivaji Maharaj International Airport",
                  "city": "Mumbai",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "departureTerminal": "3",
                "arrivalTerminal": "2",
                "cabin": null,
                "originCode": "DEL",
                "destCode": "BOM",
                "isCodeshare": null,
                "durationMinutes": 130,
                "arrivalTimeUnconfirmed": false,
                "originName": "Indira Gandhi International Airport",
                "originTerminal": "3",
                "destName": "Chhatrapati Shivaji Maharaj International Airport",
                "destinationTerminal": "2",
                "departureTimezone": "Asia/Kolkata",
                "arrivalTimezone": "Asia/Kolkata",
                "cabinClass": null
              }
            ],
            "legKey": "lk1_a761f65c54610fbe53b69f3de2ff0706",
            "legKeyComparable": true,
            "legKeyGaps": [],
            "originCode": "DEL",
            "destCode": "BOM",
            "durationMinutes": 130,
            "originName": "Indira Gandhi International Airport",
            "destName": "Chhatrapati Shivaji Maharaj International Airport",
            "departureTimezone": "Asia/Kolkata",
            "arrivalTimezone": "Asia/Kolkata",
            "cabinClass": null
          }
        ],
        "journeyKey": "jk1_a761f65c54610fbe53b69f3de2ff0706",
        "journeyKeyComparable": true,
        "tripType": "ONE_WAY",
        "departureDate": "2026-11-30",
        "price": {
          "totalAmount": 5324,
          "currency": "INR",
          "baseFare": null,
          "taxes": null,
          "commission": null,
          "tds": null,
          "netPayable": null,
          "publishedTotal": null,
          "publishedBaseFare": null,
          "publishedTaxes": null,
          "taxBreakdown": [],
          "commercials": [],
          "passengerFares": [
            {
              "passengerType": "ADULT",
              "count": 1,
              "perPerson": 5324,
              "total": 5324,
              "baseFare": null,
              "taxes": null
            }
          ],
          "infantFare": null
        },
        "baggage": {
          "perPax": [
            {
              "paxType": "ADT",
              "checkIn": {
                "weightKg": 15
              },
              "cabin": {
                "weightKg": 7
              }
            }
          ]
        },
        "stops": 0,
        "booking": {
          "bookable": true,
          "validatingCarrier": null,
          "requestBooking": false,
          "ticketingDeadline": null,
          "viaSupplierApi": true
        },
        "policy": {
          "refundBeforeDeparture": {
            "allowed": null
          },
          "changeBeforeDeparture": {
            "allowed": null
          },
          "refund": "NOT_GIVEN",
          "change": "NOT_GIVEN",
          "refundPolicy": "NOT_GIVEN",
          "changePolicy": "NOT_GIVEN"
        },
        "paymentRequirements": {
          "requiresInstantPayment": null
        },
        "requiredPassengerFields": {
          "fields": {
            "DATE_OF_BIRTH": "OPTIONAL",
            "PASSPORT_NUMBER": "OPTIONAL",
            "PASSPORT_EXPIRY": "OPTIONAL",
            "PASSPORT_ISSUE_DATE": "OPTIONAL",
            "PASSPORT_ISSUING_COUNTRY": "OPTIONAL",
            "NATIONALITY": "OPTIONAL"
          },
          "international": false
        },
        "isInternational": false,
        "capabilities": {
          "seatSelection": true,
          "meals": false,
          "extraBaggage": false,
          "hold": true,
          "fareRules": true,
          "cancellation": "REALTIME"
        },
        "supplierOfferRef": "floffer_034nVJS2qOr2Vqu1qfPu9c",
        "pricing": {
          "totalAmount": 5324,
          "currency": "INR",
          "published": {
            "baseFare": null,
            "taxes": null,
            "total": null
          },
          "offered": {
            "baseFare": null,
            "taxes": null,
            "total": 5324,
            "commission": null,
            "tds": null,
            "netPayable": null
          },
          "taxComponents": [],
          "commercials": [],
          "perPax": {
            "adult": {
              "count": 1,
              "total": 5324
            }
          }
        },
        "cabin": null,
        "availableSeats": 9,
        "fareFamily": {
          "code": "TEST_CONFIRM",
          "attributes": [],
          "name": "Test fare — confirms"
        },
        "fareCategory": "PRIVATE",
        "fareTypeName": "Private"
      },
      {
        "inventoryCategory": "SERIES",
        "offerId": "floffer_034nVJS2qRnxKMfFdrMSLK",
        "expiresAt": "2026-10-28T02:17:18.482Z",
        "legs": [
          {
            "legIndex": 0,
            "legType": "OUTBOUND",
            "origin": {
              "iataCode": "DEL",
              "name": "Indira Gandhi International Airport",
              "city": "New Delhi",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "destination": {
              "iataCode": "BOM",
              "name": "Chhatrapati Shivaji Maharaj International Airport",
              "city": "Mumbai",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "departureTime": "2026-11-30T05:30:00+05:30",
            "arrivalTime": "2026-11-30T07:40:00+05:30",
            "stops": 0,
            "segments": [
              {
                "segmentIndex": 0,
                "marketingCarrier": {
                  "iataCode": "ZZ",
                  "name": "Kitionz Test Air",
                  "flightNumber": "900",
                  "code": "ZZ"
                },
                "departureTime": "2026-11-30T05:30:00+05:30",
                "arrivalTime": "2026-11-30T07:40:00+05:30",
                "origin": {
                  "iataCode": "DEL",
                  "name": "Indira Gandhi International Airport",
                  "city": "New Delhi",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "destination": {
                  "iataCode": "BOM",
                  "name": "Chhatrapati Shivaji Maharaj International Airport",
                  "city": "Mumbai",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "departureTerminal": null,
                "arrivalTerminal": null,
                "cabin": null,
                "originCode": "DEL",
                "destCode": "BOM",
                "isCodeshare": null,
                "durationMinutes": 130,
                "arrivalTimeUnconfirmed": false,
                "originName": "Indira Gandhi International Airport",
                "destName": "Chhatrapati Shivaji Maharaj International Airport",
                "departureTimezone": "Asia/Kolkata",
                "arrivalTimezone": "Asia/Kolkata",
                "cabinClass": null
              }
            ],
            "legKey": "lk1_ff67e93816dadec01e379acf9cc370dd",
            "legKeyComparable": true,
            "legKeyGaps": [],
            "originCode": "DEL",
            "destCode": "BOM",
            "durationMinutes": 130,
            "originName": "Indira Gandhi International Airport",
            "destName": "Chhatrapati Shivaji Maharaj International Airport",
            "departureTimezone": "Asia/Kolkata",
            "arrivalTimezone": "Asia/Kolkata",
            "cabinClass": null
          }
        ],
        "journeyKey": "jk1_ff67e93816dadec01e379acf9cc370dd",
        "journeyKeyComparable": true,
        "tripType": "ONE_WAY",
        "departureDate": "2026-11-30",
        "price": {
          "totalAmount": 5324,
          "currency": "INR",
          "baseFare": null,
          "taxes": null,
          "commission": null,
          "tds": null,
          "netPayable": null,
          "publishedTotal": null,
          "publishedBaseFare": null,
          "publishedTaxes": null,
          "taxBreakdown": [],
          "commercials": [],
          "passengerFares": [
            {
              "passengerType": "ADULT",
              "count": 1,
              "perPerson": 5324,
              "total": 5324,
              "baseFare": null,
              "taxes": null
            }
          ],
          "infantFare": null
        },
        "baggage": {
          "perPax": [
            {
              "paxType": "ADT",
              "checkIn": {
                "weightKg": 15
              },
              "cabin": {
                "weightKg": 7
              }
            }
          ]
        },
        "stops": 0,
        "booking": {
          "bookable": true,
          "validatingCarrier": null,
          "requestBooking": true,
          "ticketingDeadline": null,
          "viaSupplierApi": false
        },
        "policy": {
          "refundBeforeDeparture": {
            "allowed": null
          },
          "changeBeforeDeparture": {
            "allowed": null
          },
          "refund": "NOT_GIVEN",
          "change": "NOT_GIVEN",
          "refundPolicy": "NOT_GIVEN",
          "changePolicy": "NOT_GIVEN"
        },
        "paymentRequirements": {
          "requiresInstantPayment": null
        },
        "requiredPassengerFields": {
          "fields": {
            "DATE_OF_BIRTH": "OPTIONAL",
            "PASSPORT_NUMBER": "OPTIONAL",
            "PASSPORT_EXPIRY": "OPTIONAL",
            "PASSPORT_ISSUE_DATE": "OPTIONAL",
            "PASSPORT_ISSUING_COUNTRY": "OPTIONAL",
            "NATIONALITY": "OPTIONAL"
          },
          "international": false
        },
        "isInternational": false,
        "capabilities": {
          "seatSelection": false,
          "meals": false,
          "extraBaggage": false,
          "hold": false,
          "fareRules": false,
          "cancellation": "NONE"
        },
        "supplierOfferRef": "floffer_034nVJS2qRnxKMfFdrMSLK",
        "pricing": {
          "totalAmount": 5324,
          "currency": "INR",
          "published": {
            "baseFare": null,
            "taxes": null,
            "total": null
          },
          "offered": {
            "baseFare": null,
            "taxes": null,
            "total": 5324,
            "commission": null,
            "tds": null,
            "netPayable": null
          },
          "taxComponents": [],
          "commercials": [],
          "perPax": {
            "adult": {
              "count": 1,
              "total": 5324
            }
          }
        },
        "cabin": null,
        "availableSeats": 9,
        "fareFamily": {
          "code": "TEST_CONFIRM",
          "attributes": [],
          "name": "Test fare — confirms"
        },
        "fareCategory": "PRIVATE",
        "fareTypeName": "Private"
      },
      {
        "inventoryCategory": "SERIES",
        "offerId": "floffer_034nVJS2qUDW9V6EUU0kFb",
        "expiresAt": "2026-10-28T02:17:18.482Z",
        "legs": [
          {
            "legIndex": 0,
            "legType": "OUTBOUND",
            "origin": {
              "iataCode": "DEL",
              "name": "Indira Gandhi International Airport",
              "city": "New Delhi",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "destination": {
              "iataCode": "BOM",
              "name": "Chhatrapati Shivaji Maharaj International Airport",
              "city": "Mumbai",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "departureTime": "2026-11-30T07:00:00+05:30",
            "arrivalTime": "2026-11-30T09:10:00+05:30",
            "stops": 0,
            "segments": [
              {
                "segmentIndex": 0,
                "marketingCarrier": {
                  "iataCode": "ZZ",
                  "name": "Kitionz Test Air",
                  "flightNumber": "101",
                  "code": "ZZ"
                },
                "departureTime": "2026-11-30T07:00:00+05:30",
                "arrivalTime": "2026-11-30T09:10:00+05:30",
                "origin": {
                  "iataCode": "DEL",
                  "name": "Indira Gandhi International Airport",
                  "city": "New Delhi",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "destination": {
                  "iataCode": "BOM",
                  "name": "Chhatrapati Shivaji Maharaj International Airport",
                  "city": "Mumbai",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "departureTerminal": "3",
                "arrivalTerminal": "2",
                "cabin": null,
                "originCode": "DEL",
                "destCode": "BOM",
                "isCodeshare": null,
                "durationMinutes": 130,
                "arrivalTimeUnconfirmed": false,
                "originName": "Indira Gandhi International Airport",
                "originTerminal": "3",
                "destName": "Chhatrapati Shivaji Maharaj International Airport",
                "destinationTerminal": "2",
                "departureTimezone": "Asia/Kolkata",
                "arrivalTimezone": "Asia/Kolkata",
                "cabinClass": null
              }
            ],
            "legKey": "lk1_b70ff975d82fcc3b71df10b0c07f39a7",
            "legKeyComparable": true,
            "legKeyGaps": [],
            "originCode": "DEL",
            "destCode": "BOM",
            "durationMinutes": 130,
            "originName": "Indira Gandhi International Airport",
            "destName": "Chhatrapati Shivaji Maharaj International Airport",
            "departureTimezone": "Asia/Kolkata",
            "arrivalTimezone": "Asia/Kolkata",
            "cabinClass": null
          }
        ],
        "journeyKey": "jk1_b70ff975d82fcc3b71df10b0c07f39a7",
        "journeyKeyComparable": true,
        "tripType": "ONE_WAY",
        "departureDate": "2026-11-30",
        "price": {
          "totalAmount": 5424,
          "currency": "INR",
          "baseFare": null,
          "taxes": null,
          "commission": null,
          "tds": null,
          "netPayable": null,
          "publishedTotal": null,
          "publishedBaseFare": null,
          "publishedTaxes": null,
          "taxBreakdown": [],
          "commercials": [],
          "passengerFares": [
            {
              "passengerType": "ADULT",
              "count": 1,
              "perPerson": 5424,
              "total": 5424,
              "baseFare": null,
              "taxes": null
            }
          ],
          "infantFare": null
        },
        "baggage": {
          "perPax": [
            {
              "paxType": "ADT",
              "checkIn": {
                "weightKg": 15
              },
              "cabin": {
                "weightKg": 7
              }
            }
          ]
        },
        "stops": 0,
        "booking": {
          "bookable": true,
          "validatingCarrier": null,
          "requestBooking": false,
          "ticketingDeadline": null,
          "viaSupplierApi": true
        },
        "policy": {
          "refundBeforeDeparture": {
            "allowed": null
          },
          "changeBeforeDeparture": {
            "allowed": null
          },
          "refund": "NOT_GIVEN",
          "change": "NOT_GIVEN",
          "refundPolicy": "NOT_GIVEN",
          "changePolicy": "NOT_GIVEN"
        },
        "paymentRequirements": {
          "requiresInstantPayment": null
        },
        "requiredPassengerFields": {
          "fields": {
            "DATE_OF_BIRTH": "OPTIONAL",
            "PASSPORT_NUMBER": "OPTIONAL",
            "PASSPORT_EXPIRY": "OPTIONAL",
            "PASSPORT_ISSUE_DATE": "OPTIONAL",
            "PASSPORT_ISSUING_COUNTRY": "OPTIONAL",
            "NATIONALITY": "OPTIONAL"
          },
          "international": false
        },
        "isInternational": false,
        "capabilities": {
          "seatSelection": true,
          "meals": false,
          "extraBaggage": false,
          "hold": true,
          "fareRules": true,
          "cancellation": "REALTIME"
        },
        "supplierOfferRef": "floffer_034nVJS2qUDW9V6EUU0kFb",
        "pricing": {
          "totalAmount": 5424,
          "currency": "INR",
          "published": {
            "baseFare": null,
            "taxes": null,
            "total": null
          },
          "offered": {
            "baseFare": null,
            "taxes": null,
            "total": 5424,
            "commission": null,
            "tds": null,
            "netPayable": null
          },
          "taxComponents": [],
          "commercials": [],
          "perPax": {
            "adult": {
              "count": 1,
              "total": 5424
            }
          }
        },
        "cabin": null,
        "availableSeats": 9,
        "fareFamily": {
          "code": "TEST_SLOW_CONFIRM",
          "attributes": [],
          "name": "Test fare — confirms after 2 min"
        },
        "fareCategory": "PRIVATE",
        "fareTypeName": "Private"
      },
      {
        "inventoryCategory": "SERIES",
        "offerId": "floffer_034nVJS2qKcHWI3IPTpkXH",
        "expiresAt": "2026-10-28T02:17:18.482Z",
        "legs": [
          {
            "legIndex": 0,
            "legType": "OUTBOUND",
            "origin": {
              "iataCode": "DEL",
              "name": "Indira Gandhi International Airport",
              "city": "New Delhi",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "destination": {
              "iataCode": "BOM",
              "name": "Chhatrapati Shivaji Maharaj International Airport",
              "city": "Mumbai",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "departureTime": "2026-11-30T05:30:00+05:30",
            "arrivalTime": "2026-11-30T07:40:00+05:30",
            "stops": 0,
            "segments": [
              {
                "segmentIndex": 0,
                "marketingCarrier": {
                  "iataCode": "ZZ",
                  "name": "Kitionz Test Air",
                  "flightNumber": "100",
                  "code": "ZZ"
                },
                "departureTime": "2026-11-30T05:30:00+05:30",
                "arrivalTime": "2026-11-30T07:40:00+05:30",
                "origin": {
                  "iataCode": "DEL",
                  "name": "Indira Gandhi International Airport",
                  "city": "New Delhi",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "destination": {
                  "iataCode": "BOM",
                  "name": "Chhatrapati Shivaji Maharaj International Airport",
                  "city": "Mumbai",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "departureTerminal": "3",
                "arrivalTerminal": "2",
                "cabin": null,
                "originCode": "DEL",
                "destCode": "BOM",
                "isCodeshare": null,
                "durationMinutes": 130,
                "arrivalTimeUnconfirmed": false,
                "originName": "Indira Gandhi International Airport",
                "originTerminal": "3",
                "destName": "Chhatrapati Shivaji Maharaj International Airport",
                "destinationTerminal": "2",
                "departureTimezone": "Asia/Kolkata",
                "arrivalTimezone": "Asia/Kolkata",
                "cabinClass": null
              }
            ],
            "legKey": "lk1_a761f65c54610fbe53b69f3de2ff0706",
            "legKeyComparable": true,
            "legKeyGaps": [],
            "originCode": "DEL",
            "destCode": "BOM",
            "durationMinutes": 130,
            "originName": "Indira Gandhi International Airport",
            "destName": "Chhatrapati Shivaji Maharaj International Airport",
            "departureTimezone": "Asia/Kolkata",
            "arrivalTimezone": "Asia/Kolkata",
            "cabinClass": null
          }
        ],
        "journeyKey": "jk1_a761f65c54610fbe53b69f3de2ff0706",
        "journeyKeyComparable": true,
        "tripType": "ONE_WAY",
        "departureDate": "2026-11-30",
        "price": {
          "totalAmount": 5444,
          "currency": "INR",
          "baseFare": null,
          "taxes": null,
          "commission": null,
          "tds": null,
          "netPayable": null,
          "publishedTotal": null,
          "publishedBaseFare": null,
          "publishedTaxes": null,
          "taxBreakdown": [],
          "commercials": [],
          "passengerFares": [
            {
              "passengerType": "ADULT",
              "count": 1,
              "perPerson": 5444,
              "total": 5444,
              "baseFare": null,
              "taxes": null
            }
          ],
          "infantFare": null
        },
        "baggage": {
          "perPax": [
            {
              "paxType": "ADT",
              "checkIn": {
                "weightKg": 15
              },
              "cabin": {
                "weightKg": 7
              }
            }
          ]
        },
        "stops": 0,
        "booking": {
          "bookable": true,
          "validatingCarrier": null,
          "requestBooking": false,
          "ticketingDeadline": null,
          "viaSupplierApi": true
        },
        "policy": {
          "refundBeforeDeparture": {
            "allowed": null
          },
          "changeBeforeDeparture": {
            "allowed": null
          },
          "refund": "NOT_GIVEN",
          "change": "NOT_GIVEN",
          "refundPolicy": "NOT_GIVEN",
          "changePolicy": "NOT_GIVEN"
        },
        "paymentRequirements": {
          "requiresInstantPayment": null
        },
        "requiredPassengerFields": {
          "fields": {
            "DATE_OF_BIRTH": "OPTIONAL",
            "PASSPORT_NUMBER": "OPTIONAL",
            "PASSPORT_EXPIRY": "OPTIONAL",
            "PASSPORT_ISSUE_DATE": "OPTIONAL",
            "PASSPORT_ISSUING_COUNTRY": "OPTIONAL",
            "NATIONALITY": "OPTIONAL"
          },
          "international": false
        },
        "isInternational": false,
        "capabilities": {
          "seatSelection": true,
          "meals": false,
          "extraBaggage": false,
          "hold": true,
          "fareRules": true,
          "cancellation": "REALTIME"
        },
        "supplierOfferRef": "floffer_034nVJS2qKcHWI3IPTpkXH",
        "pricing": {
          "totalAmount": 5444,
          "currency": "INR",
          "published": {
            "baseFare": null,
            "taxes": null,
            "total": null
          },
          "offered": {
            "baseFare": null,
            "taxes": null,
            "total": 5444,
            "commission": null,
            "tds": null,
            "netPayable": null
          },
          "taxComponents": [],
          "commercials": [],
          "perPax": {
            "adult": {
              "count": 1,
              "total": 5444
            }
          }
        },
        "cabin": null,
        "availableSeats": 4,
        "fareFamily": {
          "code": "TEST_CONFIRM",
          "attributes": [],
          "name": "Test fare — confirms · second seller, same flights, no infant fare"
        },
        "fareCategory": "PRIVATE",
        "fareTypeName": "Private"
      },
      {
        "inventoryCategory": "SERIES",
        "offerId": "floffer_034nVJS2qOjtqSxSo6Pxtw",
        "expiresAt": "2026-10-28T02:17:18.482Z",
        "legs": [
          {
            "legIndex": 0,
            "legType": "OUTBOUND",
            "origin": {
              "iataCode": "DEL",
              "name": "Indira Gandhi International Airport",
              "city": "New Delhi",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "destination": {
              "iataCode": "BOM",
              "name": "Chhatrapati Shivaji Maharaj International Airport",
              "city": "Mumbai",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "departureTime": "2026-11-30T13:05:00+05:30",
            "arrivalTime": "2026-11-30T15:15:00+05:30",
            "stops": 0,
            "segments": [
              {
                "segmentIndex": 0,
                "marketingCarrier": {
                  "iataCode": "ZZ",
                  "name": "Kitionz Test Air",
                  "flightNumber": "132",
                  "code": "ZZ"
                },
                "departureTime": "2026-11-30T13:05:00+05:30",
                "arrivalTime": "2026-11-30T15:15:00+05:30",
                "origin": {
                  "iataCode": "DEL",
                  "name": "Indira Gandhi International Airport",
                  "city": "New Delhi",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "destination": {
                  "iataCode": "BOM",
                  "name": "Chhatrapati Shivaji Maharaj International Airport",
                  "city": "Mumbai",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "departureTerminal": "3",
                "arrivalTerminal": "2",
                "cabin": null,
                "originCode": "DEL",
                "destCode": "BOM",
                "isCodeshare": null,
                "durationMinutes": 130,
                "arrivalTimeUnconfirmed": false,
                "originName": "Indira Gandhi International Airport",
                "originTerminal": "3",
                "destName": "Chhatrapati Shivaji Maharaj International Airport",
                "destinationTerminal": "2",
                "departureTimezone": "Asia/Kolkata",
                "arrivalTimezone": "Asia/Kolkata",
                "cabinClass": null
              }
            ],
            "legKey": "lk1_06d0704341eb0ad56d005a1208460b65",
            "legKeyComparable": true,
            "legKeyGaps": [],
            "originCode": "DEL",
            "destCode": "BOM",
            "durationMinutes": 130,
            "originName": "Indira Gandhi International Airport",
            "destName": "Chhatrapati Shivaji Maharaj International Airport",
            "departureTimezone": "Asia/Kolkata",
            "arrivalTimezone": "Asia/Kolkata",
            "cabinClass": null
          }
        ],
        "journeyKey": "jk1_06d0704341eb0ad56d005a1208460b65",
        "journeyKeyComparable": true,
        "tripType": "ONE_WAY",
        "departureDate": "2026-11-30",
        "price": {
          "totalAmount": 5514,
          "currency": "INR",
          "baseFare": null,
          "taxes": null,
          "commission": null,
          "tds": null,
          "netPayable": null,
          "publishedTotal": null,
          "publishedBaseFare": null,
          "publishedTaxes": null,
          "taxBreakdown": [],
          "commercials": [],
          "passengerFares": [
            {
              "passengerType": "ADULT",
              "count": 1,
              "perPerson": 5514,
              "total": 5514,
              "baseFare": null,
              "taxes": null
            }
          ],
          "infantFare": null
        },
        "baggage": null,
        "stops": 0,
        "booking": {
          "bookable": true,
          "validatingCarrier": null,
          "requestBooking": false,
          "ticketingDeadline": null,
          "viaSupplierApi": true
        },
        "policy": {
          "refundBeforeDeparture": {
            "allowed": null
          },
          "changeBeforeDeparture": {
            "allowed": null
          },
          "refund": "NOT_GIVEN",
          "change": "NOT_GIVEN",
          "refundPolicy": "NOT_GIVEN",
          "changePolicy": "NOT_GIVEN"
        },
        "paymentRequirements": {
          "requiresInstantPayment": null
        },
        "requiredPassengerFields": {
          "fields": {
            "DATE_OF_BIRTH": "OPTIONAL",
            "PASSPORT_NUMBER": "OPTIONAL",
            "PASSPORT_EXPIRY": "OPTIONAL",
            "PASSPORT_ISSUE_DATE": "OPTIONAL",
            "PASSPORT_ISSUING_COUNTRY": "OPTIONAL",
            "NATIONALITY": "OPTIONAL"
          },
          "international": false
        },
        "isInternational": false,
        "capabilities": {
          "seatSelection": true,
          "meals": false,
          "extraBaggage": false,
          "hold": true,
          "fareRules": true,
          "cancellation": "REALTIME"
        },
        "supplierOfferRef": "floffer_034nVJS2qOjtqSxSo6Pxtw",
        "pricing": {
          "totalAmount": 5514,
          "currency": "INR",
          "published": {
            "baseFare": null,
            "taxes": null,
            "total": null
          },
          "offered": {
            "baseFare": null,
            "taxes": null,
            "total": 5514,
            "commission": null,
            "tds": null,
            "netPayable": null
          },
          "taxComponents": [],
          "commercials": [],
          "perPax": {
            "adult": {
              "count": 1,
              "total": 5514
            }
          }
        },
        "cabin": null,
        "availableSeats": 9,
        "fareFamily": {
          "code": "TEST_CONFIRM",
          "attributes": [],
          "name": "Test fare — confirms · baggage not stated"
        },
        "fareCategory": "PRIVATE",
        "fareTypeName": "Private"
      },
      {
        "inventoryCategory": "SERIES",
        "offerId": "floffer_034nVJS2qHyB7crPPauTyz",
        "expiresAt": "2026-10-28T02:17:18.482Z",
        "legs": [
          {
            "legIndex": 0,
            "legType": "OUTBOUND",
            "origin": {
              "iataCode": "DEL",
              "name": "Indira Gandhi International Airport",
              "city": "New Delhi",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "destination": {
              "iataCode": "BOM",
              "name": "Chhatrapati Shivaji Maharaj International Airport",
              "city": "Mumbai",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "departureTime": "2026-11-30T08:30:00+05:30",
            "arrivalTime": "2026-11-30T10:40:00+05:30",
            "stops": 0,
            "segments": [
              {
                "segmentIndex": 0,
                "marketingCarrier": {
                  "iataCode": "ZZ",
                  "name": "Kitionz Test Air",
                  "flightNumber": "102",
                  "code": "ZZ"
                },
                "departureTime": "2026-11-30T08:30:00+05:30",
                "arrivalTime": "2026-11-30T10:40:00+05:30",
                "origin": {
                  "iataCode": "DEL",
                  "name": "Indira Gandhi International Airport",
                  "city": "New Delhi",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "destination": {
                  "iataCode": "BOM",
                  "name": "Chhatrapati Shivaji Maharaj International Airport",
                  "city": "Mumbai",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "departureTerminal": "3",
                "arrivalTerminal": "2",
                "cabin": null,
                "originCode": "DEL",
                "destCode": "BOM",
                "isCodeshare": null,
                "durationMinutes": 130,
                "arrivalTimeUnconfirmed": false,
                "originName": "Indira Gandhi International Airport",
                "originTerminal": "3",
                "destName": "Chhatrapati Shivaji Maharaj International Airport",
                "destinationTerminal": "2",
                "departureTimezone": "Asia/Kolkata",
                "arrivalTimezone": "Asia/Kolkata",
                "cabinClass": null
              }
            ],
            "legKey": "lk1_e6fafa7887932693135112008ee18418",
            "legKeyComparable": true,
            "legKeyGaps": [],
            "originCode": "DEL",
            "destCode": "BOM",
            "durationMinutes": 130,
            "originName": "Indira Gandhi International Airport",
            "destName": "Chhatrapati Shivaji Maharaj International Airport",
            "departureTimezone": "Asia/Kolkata",
            "arrivalTimezone": "Asia/Kolkata",
            "cabinClass": null
          }
        ],
        "journeyKey": "jk1_e6fafa7887932693135112008ee18418",
        "journeyKeyComparable": true,
        "tripType": "ONE_WAY",
        "departureDate": "2026-11-30",
        "price": {
          "totalAmount": 5524,
          "currency": "INR",
          "baseFare": null,
          "taxes": null,
          "commission": null,
          "tds": null,
          "netPayable": null,
          "publishedTotal": null,
          "publishedBaseFare": null,
          "publishedTaxes": null,
          "taxBreakdown": [],
          "commercials": [],
          "passengerFares": [
            {
              "passengerType": "ADULT",
              "count": 1,
              "perPerson": 5524,
              "total": 5524,
              "baseFare": null,
              "taxes": null
            }
          ],
          "infantFare": null
        },
        "baggage": {
          "perPax": [
            {
              "paxType": "ADT",
              "checkIn": {
                "weightKg": 15
              },
              "cabin": {
                "weightKg": 7
              }
            }
          ]
        },
        "stops": 0,
        "booking": {
          "bookable": true,
          "validatingCarrier": null,
          "requestBooking": false,
          "ticketingDeadline": null,
          "viaSupplierApi": true
        },
        "policy": {
          "refundBeforeDeparture": {
            "allowed": null
          },
          "changeBeforeDeparture": {
            "allowed": null
          },
          "refund": "NOT_GIVEN",
          "change": "NOT_GIVEN",
          "refundPolicy": "NOT_GIVEN",
          "changePolicy": "NOT_GIVEN"
        },
        "paymentRequirements": {
          "requiresInstantPayment": null
        },
        "requiredPassengerFields": {
          "fields": {
            "DATE_OF_BIRTH": "OPTIONAL",
            "PASSPORT_NUMBER": "OPTIONAL",
            "PASSPORT_EXPIRY": "OPTIONAL",
            "PASSPORT_ISSUE_DATE": "OPTIONAL",
            "PASSPORT_ISSUING_COUNTRY": "OPTIONAL",
            "NATIONALITY": "OPTIONAL"
          },
          "international": false
        },
        "isInternational": false,
        "capabilities": {
          "seatSelection": true,
          "meals": false,
          "extraBaggage": false,
          "hold": true,
          "fareRules": true,
          "cancellation": "REALTIME"
        },
        "supplierOfferRef": "floffer_034nVJS2qHyB7crPPauTyz",
        "pricing": {
          "totalAmount": 5524,
          "currency": "INR",
          "published": {
            "baseFare": null,
            "taxes": null,
            "total": null
          },
          "offered": {
            "baseFare": null,
            "taxes": null,
            "total": 5524,
            "commission": null,
            "tds": null,
            "netPayable": null
          },
          "taxComponents": [],
          "commercials": [],
          "perPax": {
            "adult": {
              "count": 1,
              "total": 5524
            }
          }
        },
        "cabin": null,
        "availableSeats": 9,
        "fareFamily": {
          "code": "TEST_SLOW_FAIL",
          "attributes": [],
          "name": "Test fare — pending, then fails after 2 min"
        },
        "fareCategory": "PRIVATE",
        "fareTypeName": "Private"
      },
      {
        "inventoryCategory": "SERIES",
        "offerId": "floffer_034nVJS2qVsKojj51BXope",
        "expiresAt": "2026-10-28T02:17:18.482Z",
        "legs": [
          {
            "legIndex": 0,
            "legType": "OUTBOUND",
            "origin": {
              "iataCode": "DEL",
              "name": "Indira Gandhi International Airport",
              "city": "New Delhi",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "destination": {
              "iataCode": "BOM",
              "name": "Chhatrapati Shivaji Maharaj International Airport",
              "city": "Mumbai",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "departureTime": "2026-11-30T21:30:00+05:30",
            "arrivalTime": "2026-11-30T23:40:00+05:30",
            "stops": 0,
            "segments": [
              {
                "segmentIndex": 0,
                "marketingCarrier": {
                  "iataCode": "ZZ",
                  "name": "Kitionz Test Air",
                  "flightNumber": null,
                  "code": "ZZ"
                },
                "departureTime": "2026-11-30T21:30:00+05:30",
                "arrivalTime": "2026-11-30T23:40:00+05:30",
                "origin": {
                  "iataCode": "DEL",
                  "name": "Indira Gandhi International Airport",
                  "city": "New Delhi",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "destination": {
                  "iataCode": "BOM",
                  "name": "Chhatrapati Shivaji Maharaj International Airport",
                  "city": "Mumbai",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "departureTerminal": null,
                "arrivalTerminal": null,
                "cabin": null,
                "originCode": "DEL",
                "destCode": "BOM",
                "isCodeshare": null,
                "durationMinutes": 130,
                "arrivalTimeUnconfirmed": false,
                "originName": "Indira Gandhi International Airport",
                "destName": "Chhatrapati Shivaji Maharaj International Airport",
                "departureTimezone": "Asia/Kolkata",
                "arrivalTimezone": "Asia/Kolkata",
                "cabinClass": null
              }
            ],
            "legKey": "lk1_622a376d2a08f3cdff7961a0936d8fd8",
            "legKeyComparable": false,
            "legKeyGaps": [
              "FLIGHT_NUMBER_MISSING"
            ],
            "originCode": "DEL",
            "destCode": "BOM",
            "durationMinutes": 130,
            "originName": "Indira Gandhi International Airport",
            "destName": "Chhatrapati Shivaji Maharaj International Airport",
            "departureTimezone": "Asia/Kolkata",
            "arrivalTimezone": "Asia/Kolkata",
            "cabinClass": null
          }
        ],
        "journeyKey": "jk1_590fff6c566a1ff9dadf3c5951d7928d",
        "journeyKeyComparable": false,
        "tripType": "ONE_WAY",
        "departureDate": "2026-11-30",
        "price": {
          "totalAmount": 5584,
          "currency": "INR",
          "baseFare": null,
          "taxes": null,
          "commission": null,
          "tds": null,
          "netPayable": null,
          "publishedTotal": null,
          "publishedBaseFare": null,
          "publishedTaxes": null,
          "taxBreakdown": [],
          "commercials": [],
          "passengerFares": [
            {
              "passengerType": "ADULT",
              "count": 1,
              "perPerson": 5584,
              "total": 5584,
              "baseFare": null,
              "taxes": null
            }
          ],
          "infantFare": null
        },
        "baggage": {
          "perPax": [
            {
              "paxType": "ADT",
              "checkIn": {
                "weightKg": 15
              },
              "cabin": {
                "weightKg": 7
              }
            }
          ]
        },
        "stops": 0,
        "booking": {
          "bookable": true,
          "validatingCarrier": null,
          "requestBooking": false,
          "ticketingDeadline": null,
          "viaSupplierApi": true
        },
        "policy": {
          "refundBeforeDeparture": {
            "allowed": null
          },
          "changeBeforeDeparture": {
            "allowed": null
          },
          "refund": "NOT_GIVEN",
          "change": "NOT_GIVEN",
          "refundPolicy": "NOT_GIVEN",
          "changePolicy": "NOT_GIVEN"
        },
        "paymentRequirements": {
          "requiresInstantPayment": null
        },
        "requiredPassengerFields": {
          "fields": {
            "DATE_OF_BIRTH": "OPTIONAL",
            "PASSPORT_NUMBER": "OPTIONAL",
            "PASSPORT_EXPIRY": "OPTIONAL",
            "PASSPORT_ISSUE_DATE": "OPTIONAL",
            "PASSPORT_ISSUING_COUNTRY": "OPTIONAL",
            "NATIONALITY": "OPTIONAL"
          },
          "international": false
        },
        "isInternational": false,
        "capabilities": {
          "seatSelection": true,
          "meals": false,
          "extraBaggage": false,
          "hold": true,
          "fareRules": true,
          "cancellation": "REALTIME"
        },
        "supplierOfferRef": "floffer_034nVJS2qVsKojj51BXope",
        "pricing": {
          "totalAmount": 5584,
          "currency": "INR",
          "published": {
            "baseFare": null,
            "taxes": null,
            "total": null
          },
          "offered": {
            "baseFare": null,
            "taxes": null,
            "total": 5584,
            "commission": null,
            "tds": null,
            "netPayable": null
          },
          "taxComponents": [],
          "commercials": [],
          "perPax": {
            "adult": {
              "count": 1,
              "total": 5584
            }
          }
        },
        "cabin": null,
        "availableSeats": 9,
        "fareFamily": {
          "code": "TEST_CONFIRM",
          "attributes": [],
          "name": "Test fare — confirms · flight number not stated"
        },
        "fareCategory": "PRIVATE",
        "fareTypeName": "Private"
      },
      {
        "inventoryCategory": "SERIES",
        "offerId": "floffer_034nVJS2qc5gJFO2foCCRT",
        "expiresAt": "2026-10-28T02:17:18.482Z",
        "legs": [
          {
            "legIndex": 0,
            "legType": "OUTBOUND",
            "origin": {
              "iataCode": "DEL",
              "name": "Indira Gandhi International Airport",
              "city": "New Delhi",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "destination": {
              "iataCode": "BOM",
              "name": "Chhatrapati Shivaji Maharaj International Airport",
              "city": "Mumbai",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "departureTime": "2026-11-30T10:00:00+05:30",
            "arrivalTime": "2026-11-30T12:10:00+05:30",
            "stops": 0,
            "segments": [
              {
                "segmentIndex": 0,
                "marketingCarrier": {
                  "iataCode": "ZZ",
                  "name": "Kitionz Test Air",
                  "flightNumber": "103",
                  "code": "ZZ"
                },
                "departureTime": "2026-11-30T10:00:00+05:30",
                "arrivalTime": "2026-11-30T12:10:00+05:30",
                "origin": {
                  "iataCode": "DEL",
                  "name": "Indira Gandhi International Airport",
                  "city": "New Delhi",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "destination": {
                  "iataCode": "BOM",
                  "name": "Chhatrapati Shivaji Maharaj International Airport",
                  "city": "Mumbai",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "departureTerminal": "3",
                "arrivalTerminal": "2",
                "cabin": null,
                "originCode": "DEL",
                "destCode": "BOM",
                "isCodeshare": null,
                "durationMinutes": 130,
                "arrivalTimeUnconfirmed": false,
                "originName": "Indira Gandhi International Airport",
                "originTerminal": "3",
                "destName": "Chhatrapati Shivaji Maharaj International Airport",
                "destinationTerminal": "2",
                "departureTimezone": "Asia/Kolkata",
                "arrivalTimezone": "Asia/Kolkata",
                "cabinClass": null
              }
            ],
            "legKey": "lk1_966304dc36566f75a496fb4f8d0e50b6",
            "legKeyComparable": true,
            "legKeyGaps": [],
            "originCode": "DEL",
            "destCode": "BOM",
            "durationMinutes": 130,
            "originName": "Indira Gandhi International Airport",
            "destName": "Chhatrapati Shivaji Maharaj International Airport",
            "departureTimezone": "Asia/Kolkata",
            "arrivalTimezone": "Asia/Kolkata",
            "cabinClass": null
          }
        ],
        "journeyKey": "jk1_966304dc36566f75a496fb4f8d0e50b6",
        "journeyKeyComparable": true,
        "tripType": "ONE_WAY",
        "departureDate": "2026-11-30",
        "price": {
          "totalAmount": 5624,
          "currency": "INR",
          "baseFare": null,
          "taxes": null,
          "commission": null,
          "tds": null,
          "netPayable": null,
          "publishedTotal": null,
          "publishedBaseFare": null,
          "publishedTaxes": null,
          "taxBreakdown": [],
          "commercials": [],
          "passengerFares": [
            {
              "passengerType": "ADULT",
              "count": 1,
              "perPerson": 5624,
              "total": 5624,
              "baseFare": null,
              "taxes": null
            }
          ],
          "infantFare": null
        },
        "baggage": {
          "perPax": [
            {
              "paxType": "ADT",
              "checkIn": {
                "weightKg": 15
              },
              "cabin": {
                "weightKg": 7
              }
            }
          ]
        },
        "stops": 0,
        "booking": {
          "bookable": true,
          "validatingCarrier": null,
          "requestBooking": false,
          "ticketingDeadline": null,
          "viaSupplierApi": true
        },
        "policy": {
          "refundBeforeDeparture": {
            "allowed": null
          },
          "changeBeforeDeparture": {
            "allowed": null
          },
          "refund": "NOT_GIVEN",
          "change": "NOT_GIVEN",
          "refundPolicy": "NOT_GIVEN",
          "changePolicy": "NOT_GIVEN"
        },
        "paymentRequirements": {
          "requiresInstantPayment": null
        },
        "requiredPassengerFields": {
          "fields": {
            "DATE_OF_BIRTH": "OPTIONAL",
            "PASSPORT_NUMBER": "OPTIONAL",
            "PASSPORT_EXPIRY": "OPTIONAL",
            "PASSPORT_ISSUE_DATE": "OPTIONAL",
            "PASSPORT_ISSUING_COUNTRY": "OPTIONAL",
            "NATIONALITY": "OPTIONAL"
          },
          "international": false
        },
        "isInternational": false,
        "capabilities": {
          "seatSelection": true,
          "meals": false,
          "extraBaggage": false,
          "hold": true,
          "fareRules": true,
          "cancellation": "REALTIME"
        },
        "supplierOfferRef": "floffer_034nVJS2qc5gJFO2foCCRT",
        "pricing": {
          "totalAmount": 5624,
          "currency": "INR",
          "published": {
            "baseFare": null,
            "taxes": null,
            "total": null
          },
          "offered": {
            "baseFare": null,
            "taxes": null,
            "total": 5624,
            "commission": null,
            "tds": null,
            "netPayable": null
          },
          "taxComponents": [],
          "commercials": [],
          "perPax": {
            "adult": {
              "count": 1,
              "total": 5624
            }
          }
        },
        "cabin": null,
        "availableSeats": 9,
        "fareFamily": {
          "code": "TEST_TIMEOUT_BOOKED",
          "attributes": [],
          "name": "Test fare — times out, booked after all"
        },
        "fareCategory": "PRIVATE",
        "fareTypeName": "Private"
      },
      {
        "inventoryCategory": "SERIES",
        "offerId": "floffer_034nVJS2qJhCKjpekr78sU",
        "expiresAt": "2026-10-28T02:17:18.482Z",
        "legs": [
          {
            "legIndex": 0,
            "legType": "OUTBOUND",
            "origin": {
              "iataCode": "DEL",
              "name": "Indira Gandhi International Airport",
              "city": "New Delhi",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "destination": {
              "iataCode": "BOM",
              "name": "Chhatrapati Shivaji Maharaj International Airport",
              "city": "Mumbai",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "departureTime": "2026-11-30T08:10:00+05:30",
            "arrivalTime": "2026-11-30T14:05:00+05:30",
            "stops": 1,
            "segments": [
              {
                "segmentIndex": 0,
                "marketingCarrier": {
                  "iataCode": "ZZ",
                  "name": "Kitionz Test Air",
                  "flightNumber": "120",
                  "code": "ZZ"
                },
                "departureTime": "2026-11-30T08:10:00+05:30",
                "arrivalTime": null,
                "origin": {
                  "iataCode": "DEL",
                  "name": "Indira Gandhi International Airport",
                  "city": "New Delhi",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "destination": {
                  "iataCode": "BLR",
                  "name": "Kempegowda International Airport",
                  "city": "Bengaluru",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "departureTerminal": "3",
                "arrivalTerminal": "1",
                "cabin": null,
                "originCode": "DEL",
                "destCode": "BLR",
                "isCodeshare": null,
                "originName": "Indira Gandhi International Airport",
                "originTerminal": "3",
                "destName": "Kempegowda International Airport",
                "destinationTerminal": "1",
                "departureTimezone": "Asia/Kolkata",
                "arrivalTimezone": "Asia/Kolkata",
                "cabinClass": null
              },
              {
                "segmentIndex": 1,
                "marketingCarrier": {
                  "iataCode": "ZZ",
                  "name": "Kitionz Test Air",
                  "flightNumber": "121",
                  "code": "ZZ"
                },
                "departureTime": null,
                "arrivalTime": "2026-11-30T14:05:00+05:30",
                "origin": {
                  "iataCode": "BLR",
                  "name": "Kempegowda International Airport",
                  "city": "Bengaluru",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "destination": {
                  "iataCode": "BOM",
                  "name": "Chhatrapati Shivaji Maharaj International Airport",
                  "city": "Mumbai",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "departureTerminal": "1",
                "arrivalTerminal": "2",
                "cabin": null,
                "originCode": "BLR",
                "destCode": "BOM",
                "isCodeshare": null,
                "arrivalTimeUnconfirmed": false,
                "originName": "Kempegowda International Airport",
                "originTerminal": "1",
                "destName": "Chhatrapati Shivaji Maharaj International Airport",
                "destinationTerminal": "2",
                "departureTimezone": "Asia/Kolkata",
                "arrivalTimezone": "Asia/Kolkata",
                "cabinClass": null
              }
            ],
            "legKey": "lk1_b45956805702474ca32bfea5c9abda14",
            "legKeyComparable": true,
            "legKeyGaps": [],
            "originCode": "DEL",
            "destCode": "BOM",
            "durationMinutes": 355,
            "layovers": [
              {
                "airport": "BLR",
                "durationMinutes": 95,
                "isOvernight": null,
                "airportChange": false
              }
            ],
            "originName": "Indira Gandhi International Airport",
            "destName": "Chhatrapati Shivaji Maharaj International Airport",
            "departureTimezone": "Asia/Kolkata",
            "arrivalTimezone": "Asia/Kolkata",
            "cabinClass": null
          }
        ],
        "journeyKey": "jk1_b45956805702474ca32bfea5c9abda14",
        "journeyKeyComparable": true,
        "tripType": "ONE_WAY",
        "departureDate": "2026-11-30",
        "price": {
          "totalAmount": 5664,
          "currency": "INR",
          "baseFare": null,
          "taxes": null,
          "commission": null,
          "tds": null,
          "netPayable": null,
          "publishedTotal": null,
          "publishedBaseFare": null,
          "publishedTaxes": null,
          "taxBreakdown": [],
          "commercials": [],
          "passengerFares": [
            {
              "passengerType": "ADULT",
              "count": 1,
              "perPerson": 5664,
              "total": 5664,
              "baseFare": null,
              "taxes": null
            }
          ],
          "infantFare": null
        },
        "baggage": {
          "perPax": [
            {
              "paxType": "ADT",
              "checkIn": {
                "weightKg": 15
              },
              "cabin": {
                "weightKg": 7
              }
            }
          ]
        },
        "stops": 1,
        "booking": {
          "bookable": true,
          "validatingCarrier": null,
          "requestBooking": false,
          "ticketingDeadline": null,
          "viaSupplierApi": true
        },
        "policy": {
          "refundBeforeDeparture": {
            "allowed": null
          },
          "changeBeforeDeparture": {
            "allowed": null
          },
          "refund": "NOT_GIVEN",
          "change": "NOT_GIVEN",
          "refundPolicy": "NOT_GIVEN",
          "changePolicy": "NOT_GIVEN"
        },
        "paymentRequirements": {
          "requiresInstantPayment": null
        },
        "requiredPassengerFields": {
          "fields": {
            "DATE_OF_BIRTH": "OPTIONAL",
            "PASSPORT_NUMBER": "OPTIONAL",
            "PASSPORT_EXPIRY": "OPTIONAL",
            "PASSPORT_ISSUE_DATE": "OPTIONAL",
            "PASSPORT_ISSUING_COUNTRY": "OPTIONAL",
            "NATIONALITY": "OPTIONAL"
          },
          "international": false
        },
        "isInternational": false,
        "capabilities": {
          "seatSelection": true,
          "meals": false,
          "extraBaggage": false,
          "hold": true,
          "fareRules": true,
          "cancellation": "REALTIME"
        },
        "supplierOfferRef": "floffer_034nVJS2qJhCKjpekr78sU",
        "pricing": {
          "totalAmount": 5664,
          "currency": "INR",
          "published": {
            "baseFare": null,
            "taxes": null,
            "total": null
          },
          "offered": {
            "baseFare": null,
            "taxes": null,
            "total": 5664,
            "commission": null,
            "tds": null,
            "netPayable": null
          },
          "taxComponents": [],
          "commercials": [],
          "perPax": {
            "adult": {
              "count": 1,
              "total": 5664
            }
          }
        },
        "cabin": null,
        "availableSeats": 9,
        "fareFamily": {
          "code": "TEST_CONFIRM",
          "attributes": [],
          "name": "Test fare — confirms · connection, stop times not stated"
        },
        "fareCategory": "PRIVATE",
        "fareTypeName": "Private"
      },
      {
        "inventoryCategory": "SERIES",
        "offerId": "floffer_034nVJS2qJ27Jc64ncTPva",
        "expiresAt": "2026-10-28T02:17:18.482Z",
        "legs": [
          {
            "legIndex": 0,
            "legType": "OUTBOUND",
            "origin": {
              "iataCode": "DEL",
              "name": "Indira Gandhi International Airport",
              "city": "New Delhi",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "destination": {
              "iataCode": "BOM",
              "name": "Chhatrapati Shivaji Maharaj International Airport",
              "city": "Mumbai",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "departureTime": "2026-11-30T11:30:00+05:30",
            "arrivalTime": "2026-11-30T13:40:00+05:30",
            "stops": 0,
            "segments": [
              {
                "segmentIndex": 0,
                "marketingCarrier": {
                  "iataCode": "ZZ",
                  "name": "Kitionz Test Air",
                  "flightNumber": "104",
                  "code": "ZZ"
                },
                "departureTime": "2026-11-30T11:30:00+05:30",
                "arrivalTime": "2026-11-30T13:40:00+05:30",
                "origin": {
                  "iataCode": "DEL",
                  "name": "Indira Gandhi International Airport",
                  "city": "New Delhi",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "destination": {
                  "iataCode": "BOM",
                  "name": "Chhatrapati Shivaji Maharaj International Airport",
                  "city": "Mumbai",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "departureTerminal": "3",
                "arrivalTerminal": "2",
                "cabin": null,
                "originCode": "DEL",
                "destCode": "BOM",
                "isCodeshare": null,
                "durationMinutes": 130,
                "arrivalTimeUnconfirmed": false,
                "originName": "Indira Gandhi International Airport",
                "originTerminal": "3",
                "destName": "Chhatrapati Shivaji Maharaj International Airport",
                "destinationTerminal": "2",
                "departureTimezone": "Asia/Kolkata",
                "arrivalTimezone": "Asia/Kolkata",
                "cabinClass": null
              }
            ],
            "legKey": "lk1_f251fa64dfc6243584f74f8d6c30a4c7",
            "legKeyComparable": true,
            "legKeyGaps": [],
            "originCode": "DEL",
            "destCode": "BOM",
            "durationMinutes": 130,
            "originName": "Indira Gandhi International Airport",
            "destName": "Chhatrapati Shivaji Maharaj International Airport",
            "departureTimezone": "Asia/Kolkata",
            "arrivalTimezone": "Asia/Kolkata",
            "cabinClass": null
          }
        ],
        "journeyKey": "jk1_f251fa64dfc6243584f74f8d6c30a4c7",
        "journeyKeyComparable": true,
        "tripType": "ONE_WAY",
        "departureDate": "2026-11-30",
        "price": {
          "totalAmount": 5724,
          "currency": "INR",
          "baseFare": null,
          "taxes": null,
          "commission": null,
          "tds": null,
          "netPayable": null,
          "publishedTotal": null,
          "publishedBaseFare": null,
          "publishedTaxes": null,
          "taxBreakdown": [],
          "commercials": [],
          "passengerFares": [
            {
              "passengerType": "ADULT",
              "count": 1,
              "perPerson": 5724,
              "total": 5724,
              "baseFare": null,
              "taxes": null
            }
          ],
          "infantFare": null
        },
        "baggage": {
          "perPax": [
            {
              "paxType": "ADT",
              "checkIn": {
                "weightKg": 15
              },
              "cabin": {
                "weightKg": 7
              }
            }
          ]
        },
        "stops": 0,
        "booking": {
          "bookable": true,
          "validatingCarrier": null,
          "requestBooking": false,
          "ticketingDeadline": null,
          "viaSupplierApi": true
        },
        "policy": {
          "refundBeforeDeparture": {
            "allowed": null
          },
          "changeBeforeDeparture": {
            "allowed": null
          },
          "refund": "NOT_GIVEN",
          "change": "NOT_GIVEN",
          "refundPolicy": "NOT_GIVEN",
          "changePolicy": "NOT_GIVEN"
        },
        "paymentRequirements": {
          "requiresInstantPayment": null
        },
        "requiredPassengerFields": {
          "fields": {
            "DATE_OF_BIRTH": "OPTIONAL",
            "PASSPORT_NUMBER": "OPTIONAL",
            "PASSPORT_EXPIRY": "OPTIONAL",
            "PASSPORT_ISSUE_DATE": "OPTIONAL",
            "PASSPORT_ISSUING_COUNTRY": "OPTIONAL",
            "NATIONALITY": "OPTIONAL"
          },
          "international": false
        },
        "isInternational": false,
        "capabilities": {
          "seatSelection": true,
          "meals": false,
          "extraBaggage": false,
          "hold": true,
          "fareRules": true,
          "cancellation": "REALTIME"
        },
        "supplierOfferRef": "floffer_034nVJS2qJ27Jc64ncTPva",
        "pricing": {
          "totalAmount": 5724,
          "currency": "INR",
          "published": {
            "baseFare": null,
            "taxes": null,
            "total": null
          },
          "offered": {
            "baseFare": null,
            "taxes": null,
            "total": 5724,
            "commission": null,
            "tds": null,
            "netPayable": null
          },
          "taxComponents": [],
          "commercials": [],
          "perPax": {
            "adult": {
              "count": 1,
              "total": 5724
            }
          }
        },
        "cabin": null,
        "availableSeats": 9,
        "fareFamily": {
          "code": "TEST_TIMEOUT_NOT_BOOKED",
          "attributes": [],
          "name": "Test fare — times out, never booked"
        },
        "fareCategory": "PRIVATE",
        "fareTypeName": "Private"
      },
      {
        "inventoryCategory": "SERIES",
        "offerId": "floffer_034nVJS2qbqmYlndwMy6nb",
        "expiresAt": "2026-10-28T02:17:18.482Z",
        "legs": [
          {
            "legIndex": 0,
            "legType": "OUTBOUND",
            "origin": {
              "iataCode": "DEL",
              "name": "Indira Gandhi International Airport",
              "city": "New Delhi",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "destination": {
              "iataCode": "BOM",
              "name": "Chhatrapati Shivaji Maharaj International Airport",
              "city": "Mumbai",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "departureTime": "2026-11-30T06:45:00+05:30",
            "arrivalTime": "2026-11-30T09:55:00+05:30",
            "stops": 0,
            "segments": [
              {
                "segmentIndex": 0,
                "marketingCarrier": {
                  "iataCode": "ZZ",
                  "name": "Kitionz Test Air",
                  "flightNumber": "130",
                  "code": "ZZ"
                },
                "departureTime": "2026-11-30T06:45:00+05:30",
                "arrivalTime": "2026-11-30T09:55:00+05:30",
                "origin": {
                  "iataCode": "DEL",
                  "name": "Indira Gandhi International Airport",
                  "city": "New Delhi",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "destination": {
                  "iataCode": "BOM",
                  "name": "Chhatrapati Shivaji Maharaj International Airport",
                  "city": "Mumbai",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "departureTerminal": null,
                "arrivalTerminal": null,
                "cabin": null,
                "originCode": "DEL",
                "destCode": "BOM",
                "isCodeshare": null,
                "durationMinutes": 190,
                "unnamedStops": 1,
                "arrivalTimeUnconfirmed": false,
                "originName": "Indira Gandhi International Airport",
                "destName": "Chhatrapati Shivaji Maharaj International Airport",
                "departureTimezone": "Asia/Kolkata",
                "arrivalTimezone": "Asia/Kolkata",
                "cabinClass": null
              }
            ],
            "legKey": "lk1_c2f4f051c67021c45caba28967e823f5",
            "legKeyComparable": false,
            "legKeyGaps": [
              "STOP_NOT_NAMED"
            ],
            "originCode": "DEL",
            "destCode": "BOM",
            "durationMinutes": 190,
            "originName": "Indira Gandhi International Airport",
            "destName": "Chhatrapati Shivaji Maharaj International Airport",
            "departureTimezone": "Asia/Kolkata",
            "arrivalTimezone": "Asia/Kolkata",
            "cabinClass": null
          }
        ],
        "journeyKey": "jk1_09a2960b58e10107b54972538682d337",
        "journeyKeyComparable": false,
        "tripType": "ONE_WAY",
        "departureDate": "2026-11-30",
        "price": {
          "totalAmount": 5734,
          "currency": "INR",
          "baseFare": null,
          "taxes": null,
          "commission": null,
          "tds": null,
          "netPayable": null,
          "publishedTotal": null,
          "publishedBaseFare": null,
          "publishedTaxes": null,
          "taxBreakdown": [],
          "commercials": [],
          "passengerFares": [
            {
              "passengerType": "ADULT",
              "count": 1,
              "perPerson": 5734,
              "total": 5734,
              "baseFare": null,
              "taxes": null
            }
          ],
          "infantFare": null
        },
        "baggage": {
          "perPax": [
            {
              "paxType": "ADT",
              "checkIn": {
                "weightKg": 15
              },
              "cabin": {
                "weightKg": 7
              }
            }
          ]
        },
        "stops": 0,
        "booking": {
          "bookable": true,
          "validatingCarrier": null,
          "requestBooking": false,
          "ticketingDeadline": null,
          "viaSupplierApi": true
        },
        "policy": {
          "refundBeforeDeparture": {
            "allowed": null
          },
          "changeBeforeDeparture": {
            "allowed": null
          },
          "refund": "NOT_GIVEN",
          "change": "NOT_GIVEN",
          "refundPolicy": "NOT_GIVEN",
          "changePolicy": "NOT_GIVEN"
        },
        "paymentRequirements": {
          "requiresInstantPayment": null
        },
        "requiredPassengerFields": {
          "fields": {
            "DATE_OF_BIRTH": "OPTIONAL",
            "PASSPORT_NUMBER": "OPTIONAL",
            "PASSPORT_EXPIRY": "OPTIONAL",
            "PASSPORT_ISSUE_DATE": "OPTIONAL",
            "PASSPORT_ISSUING_COUNTRY": "OPTIONAL",
            "NATIONALITY": "OPTIONAL"
          },
          "international": false
        },
        "isInternational": false,
        "capabilities": {
          "seatSelection": true,
          "meals": false,
          "extraBaggage": false,
          "hold": true,
          "fareRules": true,
          "cancellation": "REALTIME"
        },
        "supplierOfferRef": "floffer_034nVJS2qbqmYlndwMy6nb",
        "pricing": {
          "totalAmount": 5734,
          "currency": "INR",
          "published": {
            "baseFare": null,
            "taxes": null,
            "total": null
          },
          "offered": {
            "baseFare": null,
            "taxes": null,
            "total": 5734,
            "commission": null,
            "tds": null,
            "netPayable": null
          },
          "taxComponents": [],
          "commercials": [],
          "perPax": {
            "adult": {
              "count": 1,
              "total": 5734
            }
          }
        },
        "cabin": null,
        "availableSeats": 9,
        "fareFamily": {
          "code": "TEST_CONFIRM",
          "attributes": [],
          "name": "Test fare — confirms · 1 stop, airport not stated"
        },
        "fareCategory": "PRIVATE",
        "fareTypeName": "Private"
      },
      {
        "inventoryCategory": "SERIES",
        "offerId": "floffer_034nVJS2qT3u2OqlWFwIP4",
        "expiresAt": "2026-10-28T02:17:18.482Z",
        "legs": [
          {
            "legIndex": 0,
            "legType": "OUTBOUND",
            "origin": {
              "iataCode": "DEL",
              "name": "Indira Gandhi International Airport",
              "city": "New Delhi",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "destination": {
              "iataCode": "BOM",
              "name": "Chhatrapati Shivaji Maharaj International Airport",
              "city": "Mumbai",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "departureTime": "2026-11-30T09:20:00+05:30",
            "arrivalTime": "2026-11-30T14:25:00+05:30",
            "stops": 0,
            "segments": [
              {
                "segmentIndex": 0,
                "marketingCarrier": {
                  "iataCode": "ZZ",
                  "name": "Kitionz Test Air",
                  "flightNumber": "131",
                  "code": "ZZ"
                },
                "departureTime": "2026-11-30T09:20:00+05:30",
                "arrivalTime": "2026-11-30T14:25:00+05:30",
                "origin": {
                  "iataCode": "DEL",
                  "name": "Indira Gandhi International Airport",
                  "city": "New Delhi",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "destination": {
                  "iataCode": "BOM",
                  "name": "Chhatrapati Shivaji Maharaj International Airport",
                  "city": "Mumbai",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "departureTerminal": "3",
                "arrivalTerminal": "2",
                "cabin": null,
                "originCode": "DEL",
                "destCode": "BOM",
                "isCodeshare": null,
                "durationMinutes": 305,
                "technicalStops": [
                  {
                    "airport": {
                      "iataCode": "BLR",
                      "name": "Kempegowda International Airport",
                      "city": "Bengaluru",
                      "countryCode": "IN",
                      "timezone": "Asia/Kolkata"
                    },
                    "airportCode": "BLR",
                    "arrivalTime": "2026-11-30T11:30:00+05:30",
                    "departureTime": "2026-11-30T12:15:00+05:30",
                    "durationMinutes": 45,
                    "arrivalTerminal": "1",
                    "departureTerminal": "1",
                    "airportName": "Kempegowda International Airport"
                  }
                ],
                "arrivalTimeUnconfirmed": false,
                "originName": "Indira Gandhi International Airport",
                "originTerminal": "3",
                "destName": "Chhatrapati Shivaji Maharaj International Airport",
                "destinationTerminal": "2",
                "departureTimezone": "Asia/Kolkata",
                "arrivalTimezone": "Asia/Kolkata",
                "cabinClass": null
              }
            ],
            "legKey": "lk1_e4db58ca651eb24df6a3a3914f040a08",
            "legKeyComparable": true,
            "legKeyGaps": [],
            "originCode": "DEL",
            "destCode": "BOM",
            "durationMinutes": 305,
            "originName": "Indira Gandhi International Airport",
            "destName": "Chhatrapati Shivaji Maharaj International Airport",
            "departureTimezone": "Asia/Kolkata",
            "arrivalTimezone": "Asia/Kolkata",
            "cabinClass": null
          }
        ],
        "journeyKey": "jk1_e4db58ca651eb24df6a3a3914f040a08",
        "journeyKeyComparable": true,
        "tripType": "ONE_WAY",
        "departureDate": "2026-11-30",
        "price": {
          "totalAmount": 5804,
          "currency": "INR",
          "baseFare": null,
          "taxes": null,
          "commission": null,
          "tds": null,
          "netPayable": null,
          "publishedTotal": null,
          "publishedBaseFare": null,
          "publishedTaxes": null,
          "taxBreakdown": [],
          "commercials": [],
          "passengerFares": [
            {
              "passengerType": "ADULT",
              "count": 1,
              "perPerson": 5804,
              "total": 5804,
              "baseFare": null,
              "taxes": null
            }
          ],
          "infantFare": null
        },
        "baggage": {
          "perPax": [
            {
              "paxType": "ADT",
              "checkIn": {
                "weightKg": 15
              },
              "cabin": {
                "weightKg": 7
              }
            }
          ]
        },
        "stops": 0,
        "booking": {
          "bookable": true,
          "validatingCarrier": null,
          "requestBooking": false,
          "ticketingDeadline": null,
          "viaSupplierApi": true
        },
        "policy": {
          "refundBeforeDeparture": {
            "allowed": null
          },
          "changeBeforeDeparture": {
            "allowed": null
          },
          "refund": "NOT_GIVEN",
          "change": "NOT_GIVEN",
          "refundPolicy": "NOT_GIVEN",
          "changePolicy": "NOT_GIVEN"
        },
        "paymentRequirements": {
          "requiresInstantPayment": null
        },
        "requiredPassengerFields": {
          "fields": {
            "DATE_OF_BIRTH": "OPTIONAL",
            "PASSPORT_NUMBER": "OPTIONAL",
            "PASSPORT_EXPIRY": "OPTIONAL",
            "PASSPORT_ISSUE_DATE": "OPTIONAL",
            "PASSPORT_ISSUING_COUNTRY": "OPTIONAL",
            "NATIONALITY": "OPTIONAL"
          },
          "international": false
        },
        "isInternational": false,
        "capabilities": {
          "seatSelection": true,
          "meals": false,
          "extraBaggage": false,
          "hold": true,
          "fareRules": true,
          "cancellation": "REALTIME"
        },
        "supplierOfferRef": "floffer_034nVJS2qT3u2OqlWFwIP4",
        "pricing": {
          "totalAmount": 5804,
          "currency": "INR",
          "published": {
            "baseFare": null,
            "taxes": null,
            "total": null
          },
          "offered": {
            "baseFare": null,
            "taxes": null,
            "total": 5804,
            "commission": null,
            "tds": null,
            "netPayable": null
          },
          "taxComponents": [],
          "commercials": [],
          "perPax": {
            "adult": {
              "count": 1,
              "total": 5804
            }
          }
        },
        "cabin": null,
        "availableSeats": 9,
        "fareFamily": {
          "code": "TEST_CONFIRM",
          "attributes": [],
          "name": "Test fare — confirms · one flight number with a stop"
        },
        "fareCategory": "PRIVATE",
        "fareTypeName": "Private"
      },
      {
        "inventoryCategory": "SERIES",
        "offerId": "floffer_034nVJS2qZg5JWLWcsYmlL",
        "expiresAt": "2026-10-28T02:17:18.482Z",
        "legs": [
          {
            "legIndex": 0,
            "legType": "OUTBOUND",
            "origin": {
              "iataCode": "DEL",
              "name": "Indira Gandhi International Airport",
              "city": "New Delhi",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "destination": {
              "iataCode": "BOM",
              "name": "Chhatrapati Shivaji Maharaj International Airport",
              "city": "Mumbai",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "departureTime": "2026-11-30T13:00:00+05:30",
            "arrivalTime": "2026-11-30T15:10:00+05:30",
            "stops": 0,
            "segments": [
              {
                "segmentIndex": 0,
                "marketingCarrier": {
                  "iataCode": "ZZ",
                  "name": "Kitionz Test Air",
                  "flightNumber": "105",
                  "code": "ZZ"
                },
                "departureTime": "2026-11-30T13:00:00+05:30",
                "arrivalTime": "2026-11-30T15:10:00+05:30",
                "origin": {
                  "iataCode": "DEL",
                  "name": "Indira Gandhi International Airport",
                  "city": "New Delhi",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "destination": {
                  "iataCode": "BOM",
                  "name": "Chhatrapati Shivaji Maharaj International Airport",
                  "city": "Mumbai",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "departureTerminal": "3",
                "arrivalTerminal": "2",
                "cabin": null,
                "originCode": "DEL",
                "destCode": "BOM",
                "isCodeshare": null,
                "durationMinutes": 130,
                "arrivalTimeUnconfirmed": false,
                "originName": "Indira Gandhi International Airport",
                "originTerminal": "3",
                "destName": "Chhatrapati Shivaji Maharaj International Airport",
                "destinationTerminal": "2",
                "departureTimezone": "Asia/Kolkata",
                "arrivalTimezone": "Asia/Kolkata",
                "cabinClass": null
              }
            ],
            "legKey": "lk1_9d0382ff56b97ad7c89c77e4798b27ba",
            "legKeyComparable": true,
            "legKeyGaps": [],
            "originCode": "DEL",
            "destCode": "BOM",
            "durationMinutes": 130,
            "originName": "Indira Gandhi International Airport",
            "destName": "Chhatrapati Shivaji Maharaj International Airport",
            "departureTimezone": "Asia/Kolkata",
            "arrivalTimezone": "Asia/Kolkata",
            "cabinClass": null
          }
        ],
        "journeyKey": "jk1_9d0382ff56b97ad7c89c77e4798b27ba",
        "journeyKeyComparable": true,
        "tripType": "ONE_WAY",
        "departureDate": "2026-11-30",
        "price": {
          "totalAmount": 5824,
          "currency": "INR",
          "baseFare": null,
          "taxes": null,
          "commission": null,
          "tds": null,
          "netPayable": null,
          "publishedTotal": null,
          "publishedBaseFare": null,
          "publishedTaxes": null,
          "taxBreakdown": [],
          "commercials": [],
          "passengerFares": [
            {
              "passengerType": "ADULT",
              "count": 1,
              "perPerson": 5824,
              "total": 5824,
              "baseFare": null,
              "taxes": null
            }
          ],
          "infantFare": null
        },
        "baggage": {
          "perPax": [
            {
              "paxType": "ADT",
              "checkIn": {
                "weightKg": 15
              },
              "cabin": {
                "weightKg": 7
              }
            }
          ]
        },
        "stops": 0,
        "booking": {
          "bookable": true,
          "validatingCarrier": null,
          "requestBooking": false,
          "ticketingDeadline": null,
          "viaSupplierApi": true
        },
        "policy": {
          "refundBeforeDeparture": {
            "allowed": null
          },
          "changeBeforeDeparture": {
            "allowed": null
          },
          "refund": "NOT_GIVEN",
          "change": "NOT_GIVEN",
          "refundPolicy": "NOT_GIVEN",
          "changePolicy": "NOT_GIVEN"
        },
        "paymentRequirements": {
          "requiresInstantPayment": null
        },
        "requiredPassengerFields": {
          "fields": {
            "DATE_OF_BIRTH": "OPTIONAL",
            "PASSPORT_NUMBER": "OPTIONAL",
            "PASSPORT_EXPIRY": "OPTIONAL",
            "PASSPORT_ISSUE_DATE": "OPTIONAL",
            "PASSPORT_ISSUING_COUNTRY": "OPTIONAL",
            "NATIONALITY": "OPTIONAL"
          },
          "international": false
        },
        "isInternational": false,
        "capabilities": {
          "seatSelection": true,
          "meals": false,
          "extraBaggage": false,
          "hold": true,
          "fareRules": true,
          "cancellation": "REALTIME"
        },
        "supplierOfferRef": "floffer_034nVJS2qZg5JWLWcsYmlL",
        "pricing": {
          "totalAmount": 5824,
          "currency": "INR",
          "published": {
            "baseFare": null,
            "taxes": null,
            "total": null
          },
          "offered": {
            "baseFare": null,
            "taxes": null,
            "total": 5824,
            "commission": null,
            "tds": null,
            "netPayable": null
          },
          "taxComponents": [],
          "commercials": [],
          "perPax": {
            "adult": {
              "count": 1,
              "total": 5824
            }
          }
        },
        "cabin": null,
        "availableSeats": 9,
        "fareFamily": {
          "code": "TEST_SOLD_OUT",
          "attributes": [],
          "name": "Test fare — sold out at book"
        },
        "fareCategory": "PRIVATE",
        "fareTypeName": "Private"
      },
      {
        "inventoryCategory": "SERIES",
        "offerId": "floffer_034nVJS2qZULTz1ja714sf",
        "expiresAt": "2026-10-28T02:17:18.482Z",
        "legs": [
          {
            "legIndex": 0,
            "legType": "OUTBOUND",
            "origin": {
              "iataCode": "DEL",
              "name": "Indira Gandhi International Airport",
              "city": "New Delhi",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "destination": {
              "iataCode": "BOM",
              "name": "Chhatrapati Shivaji Maharaj International Airport",
              "city": "Mumbai",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "departureTime": "2026-11-30T18:20:00+05:30",
            "arrivalTime": "2026-11-30T23:25:00+05:30",
            "stops": 1,
            "segments": [
              {
                "segmentIndex": 0,
                "marketingCarrier": {
                  "iataCode": "ZZ",
                  "name": "Kitionz Test Air",
                  "flightNumber": "134",
                  "code": "ZZ"
                },
                "departureTime": "2026-11-30T18:20:00+05:30",
                "arrivalTime": "2026-11-30T20:30:00+05:30",
                "origin": {
                  "iataCode": "DEL",
                  "name": "Indira Gandhi International Airport",
                  "city": "New Delhi",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "destination": {
                  "iataCode": "BLR",
                  "name": "Kempegowda International Airport",
                  "city": "Bengaluru",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "departureTerminal": "3",
                "arrivalTerminal": "1",
                "cabin": null,
                "originCode": "DEL",
                "destCode": "BLR",
                "isCodeshare": null,
                "durationMinutes": 130,
                "originName": "Indira Gandhi International Airport",
                "originTerminal": "3",
                "destName": "Kempegowda International Airport",
                "destinationTerminal": "1",
                "departureTimezone": "Asia/Kolkata",
                "arrivalTimezone": "Asia/Kolkata",
                "cabinClass": null
              },
              {
                "segmentIndex": 1,
                "marketingCarrier": {
                  "iataCode": "ZZ",
                  "name": "Kitionz Test Air",
                  "flightNumber": null,
                  "code": "ZZ"
                },
                "departureTime": "2026-11-30T21:15:00+05:30",
                "arrivalTime": "2026-11-30T23:25:00+05:30",
                "origin": {
                  "iataCode": "BLR",
                  "name": "Kempegowda International Airport",
                  "city": "Bengaluru",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "destination": {
                  "iataCode": "BOM",
                  "name": "Chhatrapati Shivaji Maharaj International Airport",
                  "city": "Mumbai",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "departureTerminal": "1",
                "arrivalTerminal": "2",
                "cabin": null,
                "originCode": "BLR",
                "destCode": "BOM",
                "isCodeshare": null,
                "durationMinutes": 130,
                "originName": "Kempegowda International Airport",
                "originTerminal": "1",
                "destName": "Chhatrapati Shivaji Maharaj International Airport",
                "destinationTerminal": "2",
                "departureTimezone": "Asia/Kolkata",
                "arrivalTimezone": "Asia/Kolkata",
                "cabinClass": null
              }
            ],
            "legKey": "lk1_6daf807cbd308dbaff92596cb2d9ba84",
            "legKeyComparable": false,
            "legKeyGaps": [
              "FLIGHT_NUMBER_MISSING"
            ],
            "originCode": "DEL",
            "destCode": "BOM",
            "durationMinutes": 305,
            "layovers": [
              {
                "airport": "BLR",
                "durationMinutes": 45,
                "isOvernight": false,
                "airportChange": false
              }
            ],
            "originName": "Indira Gandhi International Airport",
            "destName": "Chhatrapati Shivaji Maharaj International Airport",
            "departureTimezone": "Asia/Kolkata",
            "arrivalTimezone": "Asia/Kolkata",
            "cabinClass": null
          }
        ],
        "journeyKey": "jk1_96f882f6ad3673e619ff2f230b680f82",
        "journeyKeyComparable": false,
        "tripType": "ONE_WAY",
        "departureDate": "2026-11-30",
        "price": {
          "totalAmount": 5844,
          "currency": "INR",
          "baseFare": null,
          "taxes": null,
          "commission": null,
          "tds": null,
          "netPayable": null,
          "publishedTotal": null,
          "publishedBaseFare": null,
          "publishedTaxes": null,
          "taxBreakdown": [],
          "commercials": [],
          "passengerFares": [
            {
              "passengerType": "ADULT",
              "count": 1,
              "perPerson": 5844,
              "total": 5844,
              "baseFare": null,
              "taxes": null
            }
          ],
          "infantFare": null
        },
        "baggage": {
          "perPax": [
            {
              "paxType": "ADT",
              "checkIn": {
                "weightKg": 15
              },
              "cabin": {
                "weightKg": 7
              }
            }
          ]
        },
        "stops": 1,
        "booking": {
          "bookable": true,
          "validatingCarrier": null,
          "requestBooking": false,
          "ticketingDeadline": null,
          "viaSupplierApi": true
        },
        "policy": {
          "refundBeforeDeparture": {
            "allowed": null
          },
          "changeBeforeDeparture": {
            "allowed": null
          },
          "refund": "NOT_GIVEN",
          "change": "NOT_GIVEN",
          "refundPolicy": "NOT_GIVEN",
          "changePolicy": "NOT_GIVEN"
        },
        "paymentRequirements": {
          "requiresInstantPayment": null
        },
        "requiredPassengerFields": {
          "fields": {
            "DATE_OF_BIRTH": "OPTIONAL",
            "PASSPORT_NUMBER": "OPTIONAL",
            "PASSPORT_EXPIRY": "OPTIONAL",
            "PASSPORT_ISSUE_DATE": "OPTIONAL",
            "PASSPORT_ISSUING_COUNTRY": "OPTIONAL",
            "NATIONALITY": "OPTIONAL"
          },
          "international": false
        },
        "isInternational": false,
        "capabilities": {
          "seatSelection": true,
          "meals": false,
          "extraBaggage": false,
          "hold": true,
          "fareRules": true,
          "cancellation": "REALTIME"
        },
        "supplierOfferRef": "floffer_034nVJS2qZULTz1ja714sf",
        "pricing": {
          "totalAmount": 5844,
          "currency": "INR",
          "published": {
            "baseFare": null,
            "taxes": null,
            "total": null
          },
          "offered": {
            "baseFare": null,
            "taxes": null,
            "total": 5844,
            "commission": null,
            "tds": null,
            "netPayable": null
          },
          "taxComponents": [],
          "commercials": [],
          "perPax": {
            "adult": {
              "count": 1,
              "total": 5844
            }
          }
        },
        "cabin": null,
        "availableSeats": 9,
        "fareFamily": {
          "code": "TEST_CONFIRM",
          "attributes": [],
          "name": "Test fare — confirms · one flight number with a stop, not confirmed by the airline"
        },
        "fareCategory": "PRIVATE",
        "fareTypeName": "Private"
      },
      {
        "inventoryCategory": "ONLINE",
        "offerId": "floffer_034nVJS2qQqL4Gkdg16q0J",
        "expiresAt": "2026-10-28T02:17:18.482Z",
        "legs": [
          {
            "legIndex": 0,
            "legType": "OUTBOUND",
            "origin": {
              "iataCode": "DEL",
              "name": "Indira Gandhi International Airport",
              "city": "New Delhi",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "destination": {
              "iataCode": "BOM",
              "name": "Chhatrapati Shivaji Maharaj International Airport",
              "city": "Mumbai",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "departureTime": "2026-11-30T16:40:00+05:30",
            "arrivalTime": "2026-11-30T18:50:00+05:30",
            "stops": 0,
            "segments": [
              {
                "segmentIndex": 0,
                "marketingCarrier": {
                  "iataCode": "ZZ",
                  "name": "Kitionz Test Air",
                  "flightNumber": "133",
                  "code": "ZZ"
                },
                "departureTime": "2026-11-30T16:40:00+05:30",
                "arrivalTime": "2026-11-30T18:50:00+05:30",
                "origin": {
                  "iataCode": "DEL",
                  "name": "Indira Gandhi International Airport",
                  "city": "New Delhi",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "destination": {
                  "iataCode": "BOM",
                  "name": "Chhatrapati Shivaji Maharaj International Airport",
                  "city": "Mumbai",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "departureTerminal": "3",
                "arrivalTerminal": "2",
                "cabin": null,
                "originCode": "DEL",
                "destCode": "BOM",
                "isCodeshare": null,
                "durationMinutes": 130,
                "arrivalTimeUnconfirmed": false,
                "originName": "Indira Gandhi International Airport",
                "originTerminal": "3",
                "destName": "Chhatrapati Shivaji Maharaj International Airport",
                "destinationTerminal": "2",
                "departureTimezone": "Asia/Kolkata",
                "arrivalTimezone": "Asia/Kolkata",
                "cabinClass": null
              }
            ],
            "legKey": "lk1_538ae9cc8cbc491d62c9fca7826b582d",
            "legKeyComparable": true,
            "legKeyGaps": [],
            "originCode": "DEL",
            "destCode": "BOM",
            "durationMinutes": 130,
            "originName": "Indira Gandhi International Airport",
            "destName": "Chhatrapati Shivaji Maharaj International Airport",
            "departureTimezone": "Asia/Kolkata",
            "arrivalTimezone": "Asia/Kolkata",
            "cabinClass": null
          }
        ],
        "journeyKey": "jk1_538ae9cc8cbc491d62c9fca7826b582d",
        "journeyKeyComparable": true,
        "tripType": "ONE_WAY",
        "departureDate": "2026-11-30",
        "price": {
          "totalAmount": 5884,
          "currency": "INR",
          "baseFare": null,
          "taxes": null,
          "commission": null,
          "tds": null,
          "netPayable": null,
          "publishedTotal": null,
          "publishedBaseFare": null,
          "publishedTaxes": null,
          "taxBreakdown": [],
          "commercials": [],
          "passengerFares": [
            {
              "passengerType": "ADULT",
              "count": 1,
              "perPerson": 5884,
              "total": 5884,
              "baseFare": null,
              "taxes": null
            }
          ],
          "infantFare": null
        },
        "baggage": {
          "perPax": [
            {
              "paxType": "ADT",
              "checkIn": {
                "weightKg": 15
              },
              "cabin": {
                "weightKg": 7
              }
            }
          ]
        },
        "stops": 0,
        "booking": {
          "bookable": true,
          "validatingCarrier": null,
          "requestBooking": false,
          "ticketingDeadline": null,
          "viaSupplierApi": true
        },
        "policy": {
          "refundBeforeDeparture": {
            "allowed": null
          },
          "changeBeforeDeparture": {
            "allowed": null
          },
          "refund": "NOT_GIVEN",
          "change": "NOT_GIVEN",
          "refundPolicy": "NOT_GIVEN",
          "changePolicy": "NOT_GIVEN"
        },
        "paymentRequirements": {
          "requiresInstantPayment": null
        },
        "requiredPassengerFields": {
          "fields": {
            "DATE_OF_BIRTH": "OPTIONAL",
            "PASSPORT_NUMBER": "OPTIONAL",
            "PASSPORT_EXPIRY": "OPTIONAL",
            "PASSPORT_ISSUE_DATE": "OPTIONAL",
            "PASSPORT_ISSUING_COUNTRY": "OPTIONAL",
            "NATIONALITY": "OPTIONAL"
          },
          "international": false
        },
        "isInternational": false,
        "capabilities": {
          "seatSelection": true,
          "meals": false,
          "extraBaggage": false,
          "hold": true,
          "fareRules": true,
          "cancellation": "REALTIME"
        },
        "supplierOfferRef": "floffer_034nVJS2qQqL4Gkdg16q0J",
        "pricing": {
          "totalAmount": 5884,
          "currency": "INR",
          "published": {
            "baseFare": null,
            "taxes": null,
            "total": null
          },
          "offered": {
            "baseFare": null,
            "taxes": null,
            "total": 5884,
            "commission": null,
            "tds": null,
            "netPayable": null
          },
          "taxComponents": [],
          "commercials": [],
          "perPax": {
            "adult": {
              "count": 1,
              "total": 5884
            }
          }
        },
        "cabin": null,
        "availableSeats": 9,
        "fareFamily": {
          "code": "TEST_CONFIRM",
          "attributes": [],
          "name": "Test fare — confirms · online fare"
        },
        "fareCategory": "PUBLISHED",
        "fareTypeName": "Published"
      },
      {
        "inventoryCategory": "SERIES",
        "offerId": "floffer_034nVJS2qQF93GwG1nogl3",
        "expiresAt": "2026-10-28T02:17:18.482Z",
        "legs": [
          {
            "legIndex": 0,
            "legType": "OUTBOUND",
            "origin": {
              "iataCode": "DEL",
              "name": "Indira Gandhi International Airport",
              "city": "New Delhi",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "destination": {
              "iataCode": "BOM",
              "name": "Chhatrapati Shivaji Maharaj International Airport",
              "city": "Mumbai",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "departureTime": "2026-11-30T14:30:00+05:30",
            "arrivalTime": "2026-11-30T16:40:00+05:30",
            "stops": 0,
            "segments": [
              {
                "segmentIndex": 0,
                "marketingCarrier": {
                  "iataCode": "ZZ",
                  "name": "Kitionz Test Air",
                  "flightNumber": "106",
                  "code": "ZZ"
                },
                "departureTime": "2026-11-30T14:30:00+05:30",
                "arrivalTime": "2026-11-30T16:40:00+05:30",
                "origin": {
                  "iataCode": "DEL",
                  "name": "Indira Gandhi International Airport",
                  "city": "New Delhi",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "destination": {
                  "iataCode": "BOM",
                  "name": "Chhatrapati Shivaji Maharaj International Airport",
                  "city": "Mumbai",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "departureTerminal": "3",
                "arrivalTerminal": "2",
                "cabin": null,
                "originCode": "DEL",
                "destCode": "BOM",
                "isCodeshare": null,
                "durationMinutes": 130,
                "arrivalTimeUnconfirmed": false,
                "originName": "Indira Gandhi International Airport",
                "originTerminal": "3",
                "destName": "Chhatrapati Shivaji Maharaj International Airport",
                "destinationTerminal": "2",
                "departureTimezone": "Asia/Kolkata",
                "arrivalTimezone": "Asia/Kolkata",
                "cabinClass": null
              }
            ],
            "legKey": "lk1_33f37c4e843d018a8a9143a0b4443dac",
            "legKeyComparable": true,
            "legKeyGaps": [],
            "originCode": "DEL",
            "destCode": "BOM",
            "durationMinutes": 130,
            "originName": "Indira Gandhi International Airport",
            "destName": "Chhatrapati Shivaji Maharaj International Airport",
            "departureTimezone": "Asia/Kolkata",
            "arrivalTimezone": "Asia/Kolkata",
            "cabinClass": null
          }
        ],
        "journeyKey": "jk1_33f37c4e843d018a8a9143a0b4443dac",
        "journeyKeyComparable": true,
        "tripType": "ONE_WAY",
        "departureDate": "2026-11-30",
        "price": {
          "totalAmount": 5924,
          "currency": "INR",
          "baseFare": null,
          "taxes": null,
          "commission": null,
          "tds": null,
          "netPayable": null,
          "publishedTotal": null,
          "publishedBaseFare": null,
          "publishedTaxes": null,
          "taxBreakdown": [],
          "commercials": [],
          "passengerFares": [
            {
              "passengerType": "ADULT",
              "count": 1,
              "perPerson": 5924,
              "total": 5924,
              "baseFare": null,
              "taxes": null
            }
          ],
          "infantFare": null
        },
        "baggage": {
          "perPax": [
            {
              "paxType": "ADT",
              "checkIn": {
                "weightKg": 15
              },
              "cabin": {
                "weightKg": 7
              }
            }
          ]
        },
        "stops": 0,
        "booking": {
          "bookable": true,
          "validatingCarrier": null,
          "requestBooking": false,
          "ticketingDeadline": null,
          "viaSupplierApi": true
        },
        "policy": {
          "refundBeforeDeparture": {
            "allowed": null
          },
          "changeBeforeDeparture": {
            "allowed": null
          },
          "refund": "NOT_GIVEN",
          "change": "NOT_GIVEN",
          "refundPolicy": "NOT_GIVEN",
          "changePolicy": "NOT_GIVEN"
        },
        "paymentRequirements": {
          "requiresInstantPayment": null
        },
        "requiredPassengerFields": {
          "fields": {
            "DATE_OF_BIRTH": "OPTIONAL",
            "PASSPORT_NUMBER": "OPTIONAL",
            "PASSPORT_EXPIRY": "OPTIONAL",
            "PASSPORT_ISSUE_DATE": "OPTIONAL",
            "PASSPORT_ISSUING_COUNTRY": "OPTIONAL",
            "NATIONALITY": "OPTIONAL"
          },
          "international": false
        },
        "isInternational": false,
        "capabilities": {
          "seatSelection": true,
          "meals": false,
          "extraBaggage": false,
          "hold": true,
          "fareRules": true,
          "cancellation": "REALTIME"
        },
        "supplierOfferRef": "floffer_034nVJS2qQF93GwG1nogl3",
        "pricing": {
          "totalAmount": 5924,
          "currency": "INR",
          "published": {
            "baseFare": null,
            "taxes": null,
            "total": null
          },
          "offered": {
            "baseFare": null,
            "taxes": null,
            "total": 5924,
            "commission": null,
            "tds": null,
            "netPayable": null
          },
          "taxComponents": [],
          "commercials": [],
          "perPax": {
            "adult": {
              "count": 1,
              "total": 5924
            }
          }
        },
        "cabin": null,
        "availableSeats": 9,
        "fareFamily": {
          "code": "TEST_SUPPLIER_ERROR",
          "attributes": [],
          "name": "Test fare — supplier error at book"
        },
        "fareCategory": "PRIVATE",
        "fareTypeName": "Private"
      },
      {
        "inventoryCategory": "SERIES",
        "offerId": "floffer_034nVJS2qPKOHsJrDIaYz6",
        "expiresAt": "2026-10-28T02:17:18.482Z",
        "legs": [
          {
            "legIndex": 0,
            "legType": "OUTBOUND",
            "origin": {
              "iataCode": "DEL",
              "name": "Indira Gandhi International Airport",
              "city": "New Delhi",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "destination": {
              "iataCode": "BOM",
              "name": "Chhatrapati Shivaji Maharaj International Airport",
              "city": "Mumbai",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "departureTime": "2026-11-30T16:00:00+05:30",
            "arrivalTime": "2026-11-30T18:10:00+05:30",
            "stops": 0,
            "segments": [
              {
                "segmentIndex": 0,
                "marketingCarrier": {
                  "iataCode": "ZZ",
                  "name": "Kitionz Test Air",
                  "flightNumber": "107",
                  "code": "ZZ"
                },
                "departureTime": "2026-11-30T16:00:00+05:30",
                "arrivalTime": "2026-11-30T18:10:00+05:30",
                "origin": {
                  "iataCode": "DEL",
                  "name": "Indira Gandhi International Airport",
                  "city": "New Delhi",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "destination": {
                  "iataCode": "BOM",
                  "name": "Chhatrapati Shivaji Maharaj International Airport",
                  "city": "Mumbai",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "departureTerminal": "3",
                "arrivalTerminal": "2",
                "cabin": null,
                "originCode": "DEL",
                "destCode": "BOM",
                "isCodeshare": null,
                "durationMinutes": 130,
                "arrivalTimeUnconfirmed": false,
                "originName": "Indira Gandhi International Airport",
                "originTerminal": "3",
                "destName": "Chhatrapati Shivaji Maharaj International Airport",
                "destinationTerminal": "2",
                "departureTimezone": "Asia/Kolkata",
                "arrivalTimezone": "Asia/Kolkata",
                "cabinClass": null
              }
            ],
            "legKey": "lk1_d87f45ee5a40d280a8a2e5569eab0792",
            "legKeyComparable": true,
            "legKeyGaps": [],
            "originCode": "DEL",
            "destCode": "BOM",
            "durationMinutes": 130,
            "originName": "Indira Gandhi International Airport",
            "destName": "Chhatrapati Shivaji Maharaj International Airport",
            "departureTimezone": "Asia/Kolkata",
            "arrivalTimezone": "Asia/Kolkata",
            "cabinClass": null
          }
        ],
        "journeyKey": "jk1_d87f45ee5a40d280a8a2e5569eab0792",
        "journeyKeyComparable": true,
        "tripType": "ONE_WAY",
        "departureDate": "2026-11-30",
        "price": {
          "totalAmount": 6024,
          "currency": "INR",
          "baseFare": null,
          "taxes": null,
          "commission": null,
          "tds": null,
          "netPayable": null,
          "publishedTotal": null,
          "publishedBaseFare": null,
          "publishedTaxes": null,
          "taxBreakdown": [],
          "commercials": [],
          "passengerFares": [
            {
              "passengerType": "ADULT",
              "count": 1,
              "perPerson": 6024,
              "total": 6024,
              "baseFare": null,
              "taxes": null
            }
          ],
          "infantFare": null
        },
        "baggage": {
          "perPax": [
            {
              "paxType": "ADT",
              "checkIn": {
                "weightKg": 15
              },
              "cabin": {
                "weightKg": 7
              }
            }
          ]
        },
        "stops": 0,
        "booking": {
          "bookable": true,
          "validatingCarrier": null,
          "requestBooking": false,
          "ticketingDeadline": null,
          "viaSupplierApi": true
        },
        "policy": {
          "refundBeforeDeparture": {
            "allowed": null
          },
          "changeBeforeDeparture": {
            "allowed": null
          },
          "refund": "NOT_GIVEN",
          "change": "NOT_GIVEN",
          "refundPolicy": "NOT_GIVEN",
          "changePolicy": "NOT_GIVEN"
        },
        "paymentRequirements": {
          "requiresInstantPayment": null
        },
        "requiredPassengerFields": {
          "fields": {
            "DATE_OF_BIRTH": "OPTIONAL",
            "PASSPORT_NUMBER": "OPTIONAL",
            "PASSPORT_EXPIRY": "OPTIONAL",
            "PASSPORT_ISSUE_DATE": "OPTIONAL",
            "PASSPORT_ISSUING_COUNTRY": "OPTIONAL",
            "NATIONALITY": "OPTIONAL"
          },
          "international": false
        },
        "isInternational": false,
        "capabilities": {
          "seatSelection": true,
          "meals": false,
          "extraBaggage": false,
          "hold": true,
          "fareRules": true,
          "cancellation": "REALTIME"
        },
        "supplierOfferRef": "floffer_034nVJS2qPKOHsJrDIaYz6",
        "pricing": {
          "totalAmount": 6024,
          "currency": "INR",
          "published": {
            "baseFare": null,
            "taxes": null,
            "total": null
          },
          "offered": {
            "baseFare": null,
            "taxes": null,
            "total": 6024,
            "commission": null,
            "tds": null,
            "netPayable": null
          },
          "taxComponents": [],
          "commercials": [],
          "perPax": {
            "adult": {
              "count": 1,
              "total": 6024
            }
          }
        },
        "cabin": null,
        "availableSeats": 9,
        "fareFamily": {
          "code": "TEST_PRICE_CHANGE",
          "attributes": [],
          "name": "Test fare — price changes at fare-quote"
        },
        "fareCategory": "PRIVATE",
        "fareTypeName": "Private"
      },
      {
        "inventoryCategory": "SERIES",
        "offerId": "floffer_034nVJS2qYvDvBMfFo5aXf",
        "expiresAt": "2026-10-28T02:17:18.482Z",
        "legs": [
          {
            "legIndex": 0,
            "legType": "OUTBOUND",
            "origin": {
              "iataCode": "DEL",
              "name": "Indira Gandhi International Airport",
              "city": "New Delhi",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "destination": {
              "iataCode": "BOM",
              "name": "Chhatrapati Shivaji Maharaj International Airport",
              "city": "Mumbai",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "departureTime": "2026-11-30T17:30:00+05:30",
            "arrivalTime": "2026-11-30T19:40:00+05:30",
            "stops": 0,
            "segments": [
              {
                "segmentIndex": 0,
                "marketingCarrier": {
                  "iataCode": "ZZ",
                  "name": "Kitionz Test Air",
                  "flightNumber": "108",
                  "code": "ZZ"
                },
                "departureTime": "2026-11-30T17:30:00+05:30",
                "arrivalTime": "2026-11-30T19:40:00+05:30",
                "origin": {
                  "iataCode": "DEL",
                  "name": "Indira Gandhi International Airport",
                  "city": "New Delhi",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "destination": {
                  "iataCode": "BOM",
                  "name": "Chhatrapati Shivaji Maharaj International Airport",
                  "city": "Mumbai",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "departureTerminal": "3",
                "arrivalTerminal": "2",
                "cabin": null,
                "originCode": "DEL",
                "destCode": "BOM",
                "isCodeshare": null,
                "durationMinutes": 130,
                "arrivalTimeUnconfirmed": false,
                "originName": "Indira Gandhi International Airport",
                "originTerminal": "3",
                "destName": "Chhatrapati Shivaji Maharaj International Airport",
                "destinationTerminal": "2",
                "departureTimezone": "Asia/Kolkata",
                "arrivalTimezone": "Asia/Kolkata",
                "cabinClass": null
              }
            ],
            "legKey": "lk1_4ad2c6e5c7296b179fb94d831f839945",
            "legKeyComparable": true,
            "legKeyGaps": [],
            "originCode": "DEL",
            "destCode": "BOM",
            "durationMinutes": 130,
            "originName": "Indira Gandhi International Airport",
            "destName": "Chhatrapati Shivaji Maharaj International Airport",
            "departureTimezone": "Asia/Kolkata",
            "arrivalTimezone": "Asia/Kolkata",
            "cabinClass": null
          }
        ],
        "journeyKey": "jk1_4ad2c6e5c7296b179fb94d831f839945",
        "journeyKeyComparable": true,
        "tripType": "ONE_WAY",
        "departureDate": "2026-11-30",
        "price": {
          "totalAmount": 6124,
          "currency": "INR",
          "baseFare": null,
          "taxes": null,
          "commission": null,
          "tds": null,
          "netPayable": null,
          "publishedTotal": null,
          "publishedBaseFare": null,
          "publishedTaxes": null,
          "taxBreakdown": [],
          "commercials": [],
          "passengerFares": [
            {
              "passengerType": "ADULT",
              "count": 1,
              "perPerson": 6124,
              "total": 6124,
              "baseFare": null,
              "taxes": null
            }
          ],
          "infantFare": null
        },
        "baggage": {
          "perPax": [
            {
              "paxType": "ADT",
              "checkIn": {
                "weightKg": 15
              },
              "cabin": {
                "weightKg": 7
              }
            }
          ]
        },
        "stops": 0,
        "booking": {
          "bookable": true,
          "validatingCarrier": null,
          "requestBooking": false,
          "ticketingDeadline": null,
          "viaSupplierApi": true
        },
        "policy": {
          "refundBeforeDeparture": {
            "allowed": null
          },
          "changeBeforeDeparture": {
            "allowed": null
          },
          "refund": "NOT_GIVEN",
          "change": "NOT_GIVEN",
          "refundPolicy": "NOT_GIVEN",
          "changePolicy": "NOT_GIVEN"
        },
        "paymentRequirements": {
          "requiresInstantPayment": null
        },
        "requiredPassengerFields": {
          "fields": {
            "DATE_OF_BIRTH": "OPTIONAL",
            "PASSPORT_NUMBER": "OPTIONAL",
            "PASSPORT_EXPIRY": "OPTIONAL",
            "PASSPORT_ISSUE_DATE": "OPTIONAL",
            "PASSPORT_ISSUING_COUNTRY": "OPTIONAL",
            "NATIONALITY": "OPTIONAL"
          },
          "international": false
        },
        "isInternational": false,
        "capabilities": {
          "seatSelection": true,
          "meals": false,
          "extraBaggage": false,
          "hold": true,
          "fareRules": true,
          "cancellation": "REALTIME"
        },
        "supplierOfferRef": "floffer_034nVJS2qYvDvBMfFo5aXf",
        "pricing": {
          "totalAmount": 6124,
          "currency": "INR",
          "published": {
            "baseFare": null,
            "taxes": null,
            "total": null
          },
          "offered": {
            "baseFare": null,
            "taxes": null,
            "total": 6124,
            "commission": null,
            "tds": null,
            "netPayable": null
          },
          "taxComponents": [],
          "commercials": [],
          "perPax": {
            "adult": {
              "count": 1,
              "total": 6124
            }
          }
        },
        "cabin": null,
        "availableSeats": 9,
        "fareFamily": {
          "code": "TEST_HOLD",
          "attributes": [],
          "name": "Test fare — hold, then ticket"
        },
        "fareCategory": "PRIVATE",
        "fareTypeName": "Private"
      },
      {
        "inventoryCategory": "SERIES",
        "offerId": "floffer_034nVJS2qThZHZCxXKVOx7",
        "expiresAt": "2026-10-28T02:17:18.482Z",
        "legs": [
          {
            "legIndex": 0,
            "legType": "OUTBOUND",
            "origin": {
              "iataCode": "DEL",
              "name": "Indira Gandhi International Airport",
              "city": "New Delhi",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "destination": {
              "iataCode": "BOM",
              "name": "Chhatrapati Shivaji Maharaj International Airport",
              "city": "Mumbai",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "departureTime": "2026-11-30T19:00:00+05:30",
            "arrivalTime": "2026-11-30T21:10:00+05:30",
            "stops": 0,
            "segments": [
              {
                "segmentIndex": 0,
                "marketingCarrier": {
                  "iataCode": "ZZ",
                  "name": "Kitionz Test Air",
                  "flightNumber": "109",
                  "code": "ZZ"
                },
                "departureTime": "2026-11-30T19:00:00+05:30",
                "arrivalTime": "2026-11-30T21:10:00+05:30",
                "origin": {
                  "iataCode": "DEL",
                  "name": "Indira Gandhi International Airport",
                  "city": "New Delhi",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "destination": {
                  "iataCode": "BOM",
                  "name": "Chhatrapati Shivaji Maharaj International Airport",
                  "city": "Mumbai",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "departureTerminal": "3",
                "arrivalTerminal": "2",
                "cabin": null,
                "originCode": "DEL",
                "destCode": "BOM",
                "isCodeshare": null,
                "durationMinutes": 130,
                "arrivalTimeUnconfirmed": false,
                "originName": "Indira Gandhi International Airport",
                "originTerminal": "3",
                "destName": "Chhatrapati Shivaji Maharaj International Airport",
                "destinationTerminal": "2",
                "departureTimezone": "Asia/Kolkata",
                "arrivalTimezone": "Asia/Kolkata",
                "cabinClass": null
              }
            ],
            "legKey": "lk1_97443f5cfeb41c785306ca4d216ed01a",
            "legKeyComparable": true,
            "legKeyGaps": [],
            "originCode": "DEL",
            "destCode": "BOM",
            "durationMinutes": 130,
            "originName": "Indira Gandhi International Airport",
            "destName": "Chhatrapati Shivaji Maharaj International Airport",
            "departureTimezone": "Asia/Kolkata",
            "arrivalTimezone": "Asia/Kolkata",
            "cabinClass": null
          }
        ],
        "journeyKey": "jk1_97443f5cfeb41c785306ca4d216ed01a",
        "journeyKeyComparable": true,
        "tripType": "ONE_WAY",
        "departureDate": "2026-11-30",
        "price": {
          "totalAmount": 6224,
          "currency": "INR",
          "baseFare": null,
          "taxes": null,
          "commission": null,
          "tds": null,
          "netPayable": null,
          "publishedTotal": null,
          "publishedBaseFare": null,
          "publishedTaxes": null,
          "taxBreakdown": [],
          "commercials": [],
          "passengerFares": [
            {
              "passengerType": "ADULT",
              "count": 1,
              "perPerson": 6224,
              "total": 6224,
              "baseFare": null,
              "taxes": null
            }
          ],
          "infantFare": null
        },
        "baggage": {
          "perPax": [
            {
              "paxType": "ADT",
              "checkIn": {
                "weightKg": 15
              },
              "cabin": {
                "weightKg": 7
              }
            }
          ]
        },
        "stops": 0,
        "booking": {
          "bookable": true,
          "validatingCarrier": null,
          "requestBooking": false,
          "ticketingDeadline": null,
          "viaSupplierApi": true
        },
        "policy": {
          "refundBeforeDeparture": {
            "allowed": false
          },
          "changeBeforeDeparture": {
            "allowed": null
          },
          "refund": "NON_REFUNDABLE",
          "change": "NOT_GIVEN",
          "refundPolicy": "NON_REFUNDABLE",
          "changePolicy": "NOT_GIVEN"
        },
        "paymentRequirements": {
          "requiresInstantPayment": null
        },
        "requiredPassengerFields": {
          "fields": {
            "DATE_OF_BIRTH": "OPTIONAL",
            "PASSPORT_NUMBER": "OPTIONAL",
            "PASSPORT_EXPIRY": "OPTIONAL",
            "PASSPORT_ISSUE_DATE": "OPTIONAL",
            "PASSPORT_ISSUING_COUNTRY": "OPTIONAL",
            "NATIONALITY": "OPTIONAL"
          },
          "international": false
        },
        "isInternational": false,
        "capabilities": {
          "seatSelection": true,
          "meals": false,
          "extraBaggage": false,
          "hold": true,
          "fareRules": true,
          "cancellation": "REALTIME"
        },
        "supplierOfferRef": "floffer_034nVJS2qThZHZCxXKVOx7",
        "pricing": {
          "totalAmount": 6224,
          "currency": "INR",
          "published": {
            "baseFare": null,
            "taxes": null,
            "total": null
          },
          "offered": {
            "baseFare": null,
            "taxes": null,
            "total": 6224,
            "commission": null,
            "tds": null,
            "netPayable": null
          },
          "taxComponents": [],
          "commercials": [],
          "perPax": {
            "adult": {
              "count": 1,
              "total": 6224
            }
          }
        },
        "cabin": null,
        "availableSeats": 9,
        "fareFamily": {
          "code": "TEST_CANCEL_REFUSED",
          "attributes": [],
          "name": "Test fare — confirms; cancel is refused"
        },
        "fareCategory": "PRIVATE",
        "fareTypeName": "Private"
      },
      {
        "inventoryCategory": "SERIES",
        "offerId": "floffer_034nVJS2qRZMcY56v6CY9w",
        "expiresAt": "2026-10-28T02:17:18.482Z",
        "legs": [
          {
            "legIndex": 0,
            "legType": "OUTBOUND",
            "origin": {
              "iataCode": "DEL",
              "name": "Indira Gandhi International Airport",
              "city": "New Delhi",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "destination": {
              "iataCode": "BOM",
              "name": "Chhatrapati Shivaji Maharaj International Airport",
              "city": "Mumbai",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "departureTime": "2026-11-30T20:30:00+05:30",
            "arrivalTime": "2026-11-30T22:40:00+05:30",
            "stops": 0,
            "segments": [
              {
                "segmentIndex": 0,
                "marketingCarrier": {
                  "iataCode": "ZZ",
                  "name": "Kitionz Test Air",
                  "flightNumber": "110",
                  "code": "ZZ"
                },
                "departureTime": "2026-11-30T20:30:00+05:30",
                "arrivalTime": "2026-11-30T22:40:00+05:30",
                "origin": {
                  "iataCode": "DEL",
                  "name": "Indira Gandhi International Airport",
                  "city": "New Delhi",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "destination": {
                  "iataCode": "BOM",
                  "name": "Chhatrapati Shivaji Maharaj International Airport",
                  "city": "Mumbai",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "departureTerminal": "3",
                "arrivalTerminal": "2",
                "cabin": null,
                "originCode": "DEL",
                "destCode": "BOM",
                "isCodeshare": null,
                "durationMinutes": 130,
                "arrivalTimeUnconfirmed": false,
                "originName": "Indira Gandhi International Airport",
                "originTerminal": "3",
                "destName": "Chhatrapati Shivaji Maharaj International Airport",
                "destinationTerminal": "2",
                "departureTimezone": "Asia/Kolkata",
                "arrivalTimezone": "Asia/Kolkata",
                "cabinClass": null
              }
            ],
            "legKey": "lk1_5d06c7f637a7a274a49b4a7e7a1a4f61",
            "legKeyComparable": true,
            "legKeyGaps": [],
            "originCode": "DEL",
            "destCode": "BOM",
            "durationMinutes": 130,
            "originName": "Indira Gandhi International Airport",
            "destName": "Chhatrapati Shivaji Maharaj International Airport",
            "departureTimezone": "Asia/Kolkata",
            "arrivalTimezone": "Asia/Kolkata",
            "cabinClass": null
          }
        ],
        "journeyKey": "jk1_5d06c7f637a7a274a49b4a7e7a1a4f61",
        "journeyKeyComparable": true,
        "tripType": "ONE_WAY",
        "departureDate": "2026-11-30",
        "price": {
          "totalAmount": 6324,
          "currency": "INR",
          "baseFare": null,
          "taxes": null,
          "commission": null,
          "tds": null,
          "netPayable": null,
          "publishedTotal": null,
          "publishedBaseFare": null,
          "publishedTaxes": null,
          "taxBreakdown": [],
          "commercials": [],
          "passengerFares": [
            {
              "passengerType": "ADULT",
              "count": 1,
              "perPerson": 6324,
              "total": 6324,
              "baseFare": null,
              "taxes": null
            }
          ],
          "infantFare": null
        },
        "baggage": {
          "perPax": [
            {
              "paxType": "ADT",
              "checkIn": {
                "weightKg": 15
              },
              "cabin": {
                "weightKg": 7
              }
            }
          ]
        },
        "stops": 0,
        "booking": {
          "bookable": true,
          "validatingCarrier": null,
          "requestBooking": false,
          "ticketingDeadline": null,
          "viaSupplierApi": true
        },
        "policy": {
          "refundBeforeDeparture": {
            "allowed": null
          },
          "changeBeforeDeparture": {
            "allowed": null
          },
          "refund": "NOT_GIVEN",
          "change": "NOT_GIVEN",
          "refundPolicy": "NOT_GIVEN",
          "changePolicy": "NOT_GIVEN"
        },
        "paymentRequirements": {
          "requiresInstantPayment": null
        },
        "requiredPassengerFields": {
          "fields": {
            "DATE_OF_BIRTH": "OPTIONAL",
            "PASSPORT_NUMBER": "OPTIONAL",
            "PASSPORT_EXPIRY": "OPTIONAL",
            "PASSPORT_ISSUE_DATE": "OPTIONAL",
            "PASSPORT_ISSUING_COUNTRY": "OPTIONAL",
            "NATIONALITY": "OPTIONAL"
          },
          "international": false
        },
        "isInternational": false,
        "capabilities": {
          "seatSelection": true,
          "meals": false,
          "extraBaggage": false,
          "hold": true,
          "fareRules": true,
          "cancellation": "REALTIME"
        },
        "supplierOfferRef": "floffer_034nVJS2qRZMcY56v6CY9w",
        "pricing": {
          "totalAmount": 6324,
          "currency": "INR",
          "published": {
            "baseFare": null,
            "taxes": null,
            "total": null
          },
          "offered": {
            "baseFare": null,
            "taxes": null,
            "total": 6324,
            "commission": null,
            "tds": null,
            "netPayable": null
          },
          "taxComponents": [],
          "commercials": [],
          "perPax": {
            "adult": {
              "count": 1,
              "total": 6324
            }
          }
        },
        "cabin": null,
        "availableSeats": 9,
        "fareFamily": {
          "code": "TEST_OFFER_GONE",
          "attributes": [],
          "name": "Test fare — gone at fare-quote"
        },
        "fareCategory": "PRIVATE",
        "fareTypeName": "Private"
      },
      {
        "inventoryCategory": "SERIES",
        "offerId": "floffer_034nVJS2qWmeCDp8qBiGYm",
        "expiresAt": "2026-10-28T02:17:18.482Z",
        "legs": [
          {
            "legIndex": 0,
            "legType": "OUTBOUND",
            "origin": {
              "iataCode": "DEL",
              "name": "Indira Gandhi International Airport",
              "city": "New Delhi",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "destination": {
              "iataCode": "BOM",
              "name": "Chhatrapati Shivaji Maharaj International Airport",
              "city": "Mumbai",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "departureTime": "2026-11-30T22:00:00+05:30",
            "arrivalTime": "2026-12-01T00:10:00+05:30",
            "stops": 0,
            "segments": [
              {
                "segmentIndex": 0,
                "marketingCarrier": {
                  "iataCode": "ZZ",
                  "name": "Kitionz Test Air",
                  "flightNumber": "111",
                  "code": "ZZ"
                },
                "departureTime": "2026-11-30T22:00:00+05:30",
                "arrivalTime": "2026-12-01T00:10:00+05:30",
                "origin": {
                  "iataCode": "DEL",
                  "name": "Indira Gandhi International Airport",
                  "city": "New Delhi",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "destination": {
                  "iataCode": "BOM",
                  "name": "Chhatrapati Shivaji Maharaj International Airport",
                  "city": "Mumbai",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "departureTerminal": "3",
                "arrivalTerminal": "2",
                "cabin": null,
                "originCode": "DEL",
                "destCode": "BOM",
                "isCodeshare": null,
                "durationMinutes": 130,
                "arrivalTimeUnconfirmed": false,
                "originName": "Indira Gandhi International Airport",
                "originTerminal": "3",
                "destName": "Chhatrapati Shivaji Maharaj International Airport",
                "destinationTerminal": "2",
                "departureTimezone": "Asia/Kolkata",
                "arrivalTimezone": "Asia/Kolkata",
                "cabinClass": null
              }
            ],
            "legKey": "lk1_f696d581be91f8d4eae6de124620dcb9",
            "legKeyComparable": true,
            "legKeyGaps": [],
            "originCode": "DEL",
            "destCode": "BOM",
            "durationMinutes": 130,
            "originName": "Indira Gandhi International Airport",
            "destName": "Chhatrapati Shivaji Maharaj International Airport",
            "departureTimezone": "Asia/Kolkata",
            "arrivalTimezone": "Asia/Kolkata",
            "cabinClass": null
          }
        ],
        "journeyKey": "jk1_f696d581be91f8d4eae6de124620dcb9",
        "journeyKeyComparable": true,
        "tripType": "ONE_WAY",
        "departureDate": "2026-11-30",
        "price": {
          "totalAmount": 6424,
          "currency": "INR",
          "baseFare": null,
          "taxes": null,
          "commission": null,
          "tds": null,
          "netPayable": null,
          "publishedTotal": null,
          "publishedBaseFare": null,
          "publishedTaxes": null,
          "taxBreakdown": [],
          "commercials": [],
          "passengerFares": [
            {
              "passengerType": "ADULT",
              "count": 1,
              "perPerson": 6424,
              "total": 6424,
              "baseFare": null,
              "taxes": null
            }
          ],
          "infantFare": null
        },
        "baggage": {
          "perPax": [
            {
              "paxType": "ADT",
              "checkIn": {
                "weightKg": 15
              },
              "cabin": {
                "weightKg": 7
              }
            }
          ]
        },
        "stops": 0,
        "booking": {
          "bookable": true,
          "validatingCarrier": null,
          "requestBooking": false,
          "ticketingDeadline": null,
          "viaSupplierApi": true
        },
        "policy": {
          "refundBeforeDeparture": {
            "allowed": null
          },
          "changeBeforeDeparture": {
            "allowed": null
          },
          "refund": "NOT_GIVEN",
          "change": "NOT_GIVEN",
          "refundPolicy": "NOT_GIVEN",
          "changePolicy": "NOT_GIVEN"
        },
        "paymentRequirements": {
          "requiresInstantPayment": null
        },
        "requiredPassengerFields": {
          "fields": {
            "DATE_OF_BIRTH": "OPTIONAL",
            "PASSPORT_NUMBER": "OPTIONAL",
            "PASSPORT_EXPIRY": "OPTIONAL",
            "PASSPORT_ISSUE_DATE": "OPTIONAL",
            "PASSPORT_ISSUING_COUNTRY": "OPTIONAL",
            "NATIONALITY": "OPTIONAL"
          },
          "international": false
        },
        "isInternational": false,
        "capabilities": {
          "seatSelection": true,
          "meals": false,
          "extraBaggage": false,
          "hold": true,
          "fareRules": true,
          "cancellation": "REALTIME"
        },
        "supplierOfferRef": "floffer_034nVJS2qWmeCDp8qBiGYm",
        "pricing": {
          "totalAmount": 6424,
          "currency": "INR",
          "published": {
            "baseFare": null,
            "taxes": null,
            "total": null
          },
          "offered": {
            "baseFare": null,
            "taxes": null,
            "total": 6424,
            "commission": null,
            "tds": null,
            "netPayable": null
          },
          "taxComponents": [],
          "commercials": [],
          "perPax": {
            "adult": {
              "count": 1,
              "total": 6424
            }
          }
        },
        "cabin": null,
        "availableSeats": 9,
        "fareFamily": {
          "code": "TEST_SUPPLIER_BALANCE_LOW",
          "attributes": [],
          "name": "Test fare — supplier balance too low at fare-quote"
        },
        "fareCategory": "PRIVATE",
        "fareTypeName": "Private"
      },
      {
        "inventoryCategory": "SERIES",
        "offerId": "floffer_034nVJS2qHREre7numz7Ul",
        "expiresAt": "2026-10-28T02:17:18.482Z",
        "legs": [
          {
            "legIndex": 0,
            "legType": "OUTBOUND",
            "origin": {
              "iataCode": "DEL",
              "name": "Indira Gandhi International Airport",
              "city": "New Delhi",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "destination": {
              "iataCode": "BOM",
              "name": "Chhatrapati Shivaji Maharaj International Airport",
              "city": "Mumbai",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "departureTime": "2026-11-30T07:00:00+05:30",
            "arrivalTime": "2026-11-30T09:10:00+05:30",
            "stops": 0,
            "segments": [
              {
                "segmentIndex": 0,
                "marketingCarrier": {
                  "iataCode": "ZZ",
                  "name": "Kitionz Test Air",
                  "flightNumber": "140",
                  "code": "ZZ"
                },
                "departureTime": "2026-11-30T07:00:00+05:30",
                "arrivalTime": "2026-11-30T09:10:00+05:30",
                "origin": {
                  "iataCode": "DEL",
                  "name": "Indira Gandhi International Airport",
                  "city": "New Delhi",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "destination": {
                  "iataCode": "BOM",
                  "name": "Chhatrapati Shivaji Maharaj International Airport",
                  "city": "Mumbai",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "departureTerminal": "3",
                "arrivalTerminal": "2",
                "cabin": null,
                "originCode": "DEL",
                "destCode": "BOM",
                "isCodeshare": null,
                "durationMinutes": 130,
                "arrivalTimeUnconfirmed": false,
                "originName": "Indira Gandhi International Airport",
                "originTerminal": "3",
                "destName": "Chhatrapati Shivaji Maharaj International Airport",
                "destinationTerminal": "2",
                "departureTimezone": "Asia/Kolkata",
                "arrivalTimezone": "Asia/Kolkata",
                "cabinClass": null
              }
            ],
            "legKey": "lk1_d67ba114d9409ebd6d5a41a5d6e23eb9",
            "legKeyComparable": true,
            "legKeyGaps": [],
            "originCode": "DEL",
            "destCode": "BOM",
            "durationMinutes": 130,
            "originName": "Indira Gandhi International Airport",
            "destName": "Chhatrapati Shivaji Maharaj International Airport",
            "departureTimezone": "Asia/Kolkata",
            "arrivalTimezone": "Asia/Kolkata",
            "cabinClass": null
          },
          {
            "legIndex": 1,
            "legType": "RETURN",
            "origin": {
              "iataCode": "BOM",
              "name": "Chhatrapati Shivaji Maharaj International Airport",
              "city": "Mumbai",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "destination": {
              "iataCode": "DEL",
              "name": "Indira Gandhi International Airport",
              "city": "New Delhi",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "departureTime": "2026-12-04T17:00:00+05:30",
            "arrivalTime": "2026-12-04T19:10:00+05:30",
            "stops": 0,
            "segments": [
              {
                "segmentIndex": 0,
                "marketingCarrier": {
                  "iataCode": "ZZ",
                  "name": "Kitionz Test Air",
                  "flightNumber": "160",
                  "code": "ZZ"
                },
                "departureTime": "2026-12-04T17:00:00+05:30",
                "arrivalTime": "2026-12-04T19:10:00+05:30",
                "origin": {
                  "iataCode": "BOM",
                  "name": "Chhatrapati Shivaji Maharaj International Airport",
                  "city": "Mumbai",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "destination": {
                  "iataCode": "DEL",
                  "name": "Indira Gandhi International Airport",
                  "city": "New Delhi",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "departureTerminal": "2",
                "arrivalTerminal": "3",
                "cabin": null,
                "originCode": "BOM",
                "destCode": "DEL",
                "isCodeshare": null,
                "durationMinutes": 130,
                "arrivalTimeUnconfirmed": false,
                "originName": "Chhatrapati Shivaji Maharaj International Airport",
                "originTerminal": "2",
                "destName": "Indira Gandhi International Airport",
                "destinationTerminal": "3",
                "departureTimezone": "Asia/Kolkata",
                "arrivalTimezone": "Asia/Kolkata",
                "cabinClass": null
              }
            ],
            "legKey": "lk1_a582ff345a9e6b4b1ef5b94d26e57ea2",
            "legKeyComparable": true,
            "legKeyGaps": [],
            "originCode": "BOM",
            "destCode": "DEL",
            "durationMinutes": 130,
            "originName": "Chhatrapati Shivaji Maharaj International Airport",
            "destName": "Indira Gandhi International Airport",
            "departureTimezone": "Asia/Kolkata",
            "arrivalTimezone": "Asia/Kolkata",
            "cabinClass": null
          }
        ],
        "journeyKey": "jk1_26886d5b666f8c7c9cf4ff9f4f46e5a0",
        "journeyKeyComparable": true,
        "tripType": "ROUND_TRIP",
        "departureDate": "2026-11-30",
        "price": {
          "totalAmount": 10862,
          "currency": "INR",
          "baseFare": null,
          "taxes": null,
          "commission": null,
          "tds": null,
          "netPayable": null,
          "publishedTotal": null,
          "publishedBaseFare": null,
          "publishedTaxes": null,
          "taxBreakdown": [],
          "commercials": [],
          "passengerFares": [
            {
              "passengerType": "ADULT",
              "count": 1,
              "perPerson": 10862,
              "total": 10862,
              "baseFare": null,
              "taxes": null
            }
          ],
          "infantFare": null
        },
        "baggage": {
          "perPax": [
            {
              "paxType": "ADT",
              "checkIn": {
                "weightKg": 15
              },
              "cabin": {
                "weightKg": 7
              }
            }
          ]
        },
        "stops": 0,
        "booking": {
          "bookable": true,
          "validatingCarrier": null,
          "requestBooking": false,
          "ticketingDeadline": null,
          "viaSupplierApi": true
        },
        "policy": {
          "refundBeforeDeparture": {
            "allowed": null
          },
          "changeBeforeDeparture": {
            "allowed": null
          },
          "refund": "NOT_GIVEN",
          "change": "NOT_GIVEN",
          "refundPolicy": "NOT_GIVEN",
          "changePolicy": "NOT_GIVEN"
        },
        "paymentRequirements": {
          "requiresInstantPayment": null
        },
        "requiredPassengerFields": {
          "fields": {
            "DATE_OF_BIRTH": "OPTIONAL",
            "PASSPORT_NUMBER": "OPTIONAL",
            "PASSPORT_EXPIRY": "OPTIONAL",
            "PASSPORT_ISSUE_DATE": "OPTIONAL",
            "PASSPORT_ISSUING_COUNTRY": "OPTIONAL",
            "NATIONALITY": "OPTIONAL"
          },
          "international": false
        },
        "isInternational": false,
        "capabilities": {
          "seatSelection": true,
          "meals": false,
          "extraBaggage": false,
          "hold": true,
          "fareRules": true,
          "cancellation": "REALTIME"
        },
        "supplierOfferRef": "floffer_034nVJS2qHREre7numz7Ul",
        "pricing": {
          "totalAmount": 10862,
          "currency": "INR",
          "published": {
            "baseFare": null,
            "taxes": null,
            "total": null
          },
          "offered": {
            "baseFare": null,
            "taxes": null,
            "total": 10862,
            "commission": null,
            "tds": null,
            "netPayable": null
          },
          "taxComponents": [],
          "commercials": [],
          "perPax": {
            "adult": {
              "count": 1,
              "total": 10862
            }
          }
        },
        "cabin": null,
        "returnDate": "2026-12-04",
        "availableSeats": 9,
        "fareFamily": {
          "code": "TEST_CONFIRM",
          "attributes": [],
          "name": "Test fare — confirms"
        },
        "fareCategory": "PRIVATE",
        "fareTypeName": "Private"
      },
      {
        "inventoryCategory": "SERIES",
        "offerId": "floffer_034nVJS2qWghRBfRoeaXGN",
        "expiresAt": "2026-10-28T02:17:18.482Z",
        "legs": [
          {
            "legIndex": 0,
            "legType": "OUTBOUND",
            "origin": {
              "iataCode": "DEL",
              "name": "Indira Gandhi International Airport",
              "city": "New Delhi",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "destination": {
              "iataCode": "BOM",
              "name": "Chhatrapati Shivaji Maharaj International Airport",
              "city": "Mumbai",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "departureTime": "2026-11-30T13:00:00+05:30",
            "arrivalTime": "2026-11-30T15:10:00+05:30",
            "stops": 0,
            "segments": [
              {
                "segmentIndex": 0,
                "marketingCarrier": {
                  "iataCode": "ZZ",
                  "name": "Kitionz Test Air",
                  "flightNumber": "144",
                  "code": "ZZ"
                },
                "departureTime": "2026-11-30T13:00:00+05:30",
                "arrivalTime": "2026-11-30T15:10:00+05:30",
                "origin": {
                  "iataCode": "DEL",
                  "name": "Indira Gandhi International Airport",
                  "city": "New Delhi",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "destination": {
                  "iataCode": "BOM",
                  "name": "Chhatrapati Shivaji Maharaj International Airport",
                  "city": "Mumbai",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "departureTerminal": "3",
                "arrivalTerminal": "2",
                "cabin": null,
                "originCode": "DEL",
                "destCode": "BOM",
                "isCodeshare": null,
                "durationMinutes": 130,
                "arrivalTimeUnconfirmed": false,
                "originName": "Indira Gandhi International Airport",
                "originTerminal": "3",
                "destName": "Chhatrapati Shivaji Maharaj International Airport",
                "destinationTerminal": "2",
                "departureTimezone": "Asia/Kolkata",
                "arrivalTimezone": "Asia/Kolkata",
                "cabinClass": null
              }
            ],
            "legKey": "lk1_9dfeae859d3f88920df2db2bbf94f5fe",
            "legKeyComparable": true,
            "legKeyGaps": [],
            "originCode": "DEL",
            "destCode": "BOM",
            "durationMinutes": 130,
            "originName": "Indira Gandhi International Airport",
            "destName": "Chhatrapati Shivaji Maharaj International Airport",
            "departureTimezone": "Asia/Kolkata",
            "arrivalTimezone": "Asia/Kolkata",
            "cabinClass": null
          },
          {
            "legIndex": 1,
            "legType": "RETURN",
            "origin": {
              "iataCode": "BOM",
              "name": "Chhatrapati Shivaji Maharaj International Airport",
              "city": "Mumbai",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "destination": {
              "iataCode": "DEL",
              "name": "Indira Gandhi International Airport",
              "city": "New Delhi",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "departureTime": "2026-12-05T21:00:00+05:30",
            "arrivalTime": "2026-12-05T23:10:00+05:30",
            "stops": 0,
            "segments": [
              {
                "segmentIndex": 0,
                "marketingCarrier": {
                  "iataCode": "ZZ",
                  "name": "Kitionz Test Air",
                  "flightNumber": "164",
                  "code": "ZZ"
                },
                "departureTime": "2026-12-05T21:00:00+05:30",
                "arrivalTime": "2026-12-05T23:10:00+05:30",
                "origin": {
                  "iataCode": "BOM",
                  "name": "Chhatrapati Shivaji Maharaj International Airport",
                  "city": "Mumbai",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "destination": {
                  "iataCode": "DEL",
                  "name": "Indira Gandhi International Airport",
                  "city": "New Delhi",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "departureTerminal": "2",
                "arrivalTerminal": "3",
                "cabin": null,
                "originCode": "BOM",
                "destCode": "DEL",
                "isCodeshare": null,
                "durationMinutes": 130,
                "arrivalTimeUnconfirmed": false,
                "originName": "Chhatrapati Shivaji Maharaj International Airport",
                "originTerminal": "2",
                "destName": "Indira Gandhi International Airport",
                "destinationTerminal": "3",
                "departureTimezone": "Asia/Kolkata",
                "arrivalTimezone": "Asia/Kolkata",
                "cabinClass": null
              }
            ],
            "legKey": "lk1_7cf45bd85d5842eb6c3d5ad41c10408e",
            "legKeyComparable": true,
            "legKeyGaps": [],
            "originCode": "BOM",
            "destCode": "DEL",
            "durationMinutes": 130,
            "originName": "Chhatrapati Shivaji Maharaj International Airport",
            "destName": "Indira Gandhi International Airport",
            "departureTimezone": "Asia/Kolkata",
            "arrivalTimezone": "Asia/Kolkata",
            "cabinClass": null
          }
        ],
        "journeyKey": "jk1_fba0d5dd23192ce43584670f4fbadcf6",
        "journeyKeyComparable": true,
        "tripType": "ROUND_TRIP",
        "departureDate": "2026-11-30",
        "price": {
          "totalAmount": 10862,
          "currency": "INR",
          "baseFare": null,
          "taxes": null,
          "commission": null,
          "tds": null,
          "netPayable": null,
          "publishedTotal": null,
          "publishedBaseFare": null,
          "publishedTaxes": null,
          "taxBreakdown": [],
          "commercials": [],
          "passengerFares": [
            {
              "passengerType": "ADULT",
              "count": 1,
              "perPerson": 10862,
              "total": 10862,
              "baseFare": null,
              "taxes": null
            }
          ],
          "infantFare": null
        },
        "baggage": {
          "perPax": [
            {
              "paxType": "ADT",
              "checkIn": {
                "weightKg": 15
              },
              "cabin": {
                "weightKg": 7
              }
            }
          ]
        },
        "stops": 0,
        "booking": {
          "bookable": true,
          "validatingCarrier": null,
          "requestBooking": false,
          "ticketingDeadline": null,
          "viaSupplierApi": true
        },
        "policy": {
          "refundBeforeDeparture": {
            "allowed": null
          },
          "changeBeforeDeparture": {
            "allowed": null
          },
          "refund": "NOT_GIVEN",
          "change": "NOT_GIVEN",
          "refundPolicy": "NOT_GIVEN",
          "changePolicy": "NOT_GIVEN"
        },
        "paymentRequirements": {
          "requiresInstantPayment": null
        },
        "requiredPassengerFields": {
          "fields": {
            "DATE_OF_BIRTH": "OPTIONAL",
            "PASSPORT_NUMBER": "OPTIONAL",
            "PASSPORT_EXPIRY": "OPTIONAL",
            "PASSPORT_ISSUE_DATE": "OPTIONAL",
            "PASSPORT_ISSUING_COUNTRY": "OPTIONAL",
            "NATIONALITY": "OPTIONAL"
          },
          "international": false
        },
        "isInternational": false,
        "capabilities": {
          "seatSelection": true,
          "meals": false,
          "extraBaggage": false,
          "hold": true,
          "fareRules": true,
          "cancellation": "REALTIME"
        },
        "supplierOfferRef": "floffer_034nVJS2qWghRBfRoeaXGN",
        "pricing": {
          "totalAmount": 10862,
          "currency": "INR",
          "published": {
            "baseFare": null,
            "taxes": null,
            "total": null
          },
          "offered": {
            "baseFare": null,
            "taxes": null,
            "total": 10862,
            "commission": null,
            "tds": null,
            "netPayable": null
          },
          "taxComponents": [],
          "commercials": [],
          "perPax": {
            "adult": {
              "count": 1,
              "total": 10862
            }
          }
        },
        "cabin": null,
        "returnDate": "2026-12-05",
        "availableSeats": 9,
        "fareFamily": {
          "code": "TEST_CONFIRM",
          "attributes": [],
          "name": "Test fare — confirms"
        },
        "fareCategory": "PRIVATE",
        "fareTypeName": "Private"
      },
      {
        "inventoryCategory": "SERIES",
        "offerId": "floffer_034nVJS2qSl8sBs4rAav6r",
        "expiresAt": "2026-10-28T02:17:18.482Z",
        "legs": [
          {
            "legIndex": 0,
            "legType": "OUTBOUND",
            "origin": {
              "iataCode": "DEL",
              "name": "Indira Gandhi International Airport",
              "city": "New Delhi",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "destination": {
              "iataCode": "BOM",
              "name": "Chhatrapati Shivaji Maharaj International Airport",
              "city": "Mumbai",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "departureTime": "2026-11-30T08:30:00+05:30",
            "arrivalTime": "2026-11-30T10:40:00+05:30",
            "stops": 0,
            "segments": [
              {
                "segmentIndex": 0,
                "marketingCarrier": {
                  "iataCode": "ZZ",
                  "name": "Kitionz Test Air",
                  "flightNumber": "141",
                  "code": "ZZ"
                },
                "departureTime": "2026-11-30T08:30:00+05:30",
                "arrivalTime": "2026-11-30T10:40:00+05:30",
                "origin": {
                  "iataCode": "DEL",
                  "name": "Indira Gandhi International Airport",
                  "city": "New Delhi",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "destination": {
                  "iataCode": "BOM",
                  "name": "Chhatrapati Shivaji Maharaj International Airport",
                  "city": "Mumbai",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "departureTerminal": "3",
                "arrivalTerminal": "2",
                "cabin": null,
                "originCode": "DEL",
                "destCode": "BOM",
                "isCodeshare": null,
                "durationMinutes": 130,
                "arrivalTimeUnconfirmed": false,
                "originName": "Indira Gandhi International Airport",
                "originTerminal": "3",
                "destName": "Chhatrapati Shivaji Maharaj International Airport",
                "destinationTerminal": "2",
                "departureTimezone": "Asia/Kolkata",
                "arrivalTimezone": "Asia/Kolkata",
                "cabinClass": null
              }
            ],
            "legKey": "lk1_4067dcad06680d7dc3ccc07540a1505e",
            "legKeyComparable": true,
            "legKeyGaps": [],
            "originCode": "DEL",
            "destCode": "BOM",
            "durationMinutes": 130,
            "originName": "Indira Gandhi International Airport",
            "destName": "Chhatrapati Shivaji Maharaj International Airport",
            "departureTimezone": "Asia/Kolkata",
            "arrivalTimezone": "Asia/Kolkata",
            "cabinClass": null
          },
          {
            "legIndex": 1,
            "legType": "RETURN",
            "origin": {
              "iataCode": "BOM",
              "name": "Chhatrapati Shivaji Maharaj International Airport",
              "city": "Mumbai",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "destination": {
              "iataCode": "DEL",
              "name": "Indira Gandhi International Airport",
              "city": "New Delhi",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "departureTime": "2026-12-04T18:00:00+05:30",
            "arrivalTime": "2026-12-04T20:10:00+05:30",
            "stops": 0,
            "segments": [
              {
                "segmentIndex": 0,
                "marketingCarrier": {
                  "iataCode": "ZZ",
                  "name": "Kitionz Test Air",
                  "flightNumber": "161",
                  "code": "ZZ"
                },
                "departureTime": "2026-12-04T18:00:00+05:30",
                "arrivalTime": "2026-12-04T20:10:00+05:30",
                "origin": {
                  "iataCode": "BOM",
                  "name": "Chhatrapati Shivaji Maharaj International Airport",
                  "city": "Mumbai",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "destination": {
                  "iataCode": "DEL",
                  "name": "Indira Gandhi International Airport",
                  "city": "New Delhi",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "departureTerminal": "2",
                "arrivalTerminal": "3",
                "cabin": null,
                "originCode": "BOM",
                "destCode": "DEL",
                "isCodeshare": null,
                "durationMinutes": 130,
                "arrivalTimeUnconfirmed": false,
                "originName": "Chhatrapati Shivaji Maharaj International Airport",
                "originTerminal": "2",
                "destName": "Indira Gandhi International Airport",
                "destinationTerminal": "3",
                "departureTimezone": "Asia/Kolkata",
                "arrivalTimezone": "Asia/Kolkata",
                "cabinClass": null
              }
            ],
            "legKey": "lk1_90551b2a7311e40ed6f5859f12e6d10e",
            "legKeyComparable": true,
            "legKeyGaps": [],
            "originCode": "BOM",
            "destCode": "DEL",
            "durationMinutes": 130,
            "originName": "Chhatrapati Shivaji Maharaj International Airport",
            "destName": "Indira Gandhi International Airport",
            "departureTimezone": "Asia/Kolkata",
            "arrivalTimezone": "Asia/Kolkata",
            "cabinClass": null
          }
        ],
        "journeyKey": "jk1_8741aba716ecf0994b5aa1a85b7403f6",
        "journeyKeyComparable": true,
        "tripType": "ROUND_TRIP",
        "departureDate": "2026-11-30",
        "price": {
          "totalAmount": 11062,
          "currency": "INR",
          "baseFare": null,
          "taxes": null,
          "commission": null,
          "tds": null,
          "netPayable": null,
          "publishedTotal": null,
          "publishedBaseFare": null,
          "publishedTaxes": null,
          "taxBreakdown": [],
          "commercials": [],
          "passengerFares": [
            {
              "passengerType": "ADULT",
              "count": 1,
              "perPerson": 11062,
              "total": 11062,
              "baseFare": null,
              "taxes": null
            }
          ],
          "infantFare": null
        },
        "baggage": {
          "perPax": [
            {
              "paxType": "ADT",
              "checkIn": {
                "weightKg": 15
              },
              "cabin": {
                "weightKg": 7
              }
            }
          ]
        },
        "stops": 0,
        "booking": {
          "bookable": true,
          "validatingCarrier": null,
          "requestBooking": false,
          "ticketingDeadline": null,
          "viaSupplierApi": true
        },
        "policy": {
          "refundBeforeDeparture": {
            "allowed": null
          },
          "changeBeforeDeparture": {
            "allowed": null
          },
          "refund": "NOT_GIVEN",
          "change": "NOT_GIVEN",
          "refundPolicy": "NOT_GIVEN",
          "changePolicy": "NOT_GIVEN"
        },
        "paymentRequirements": {
          "requiresInstantPayment": null
        },
        "requiredPassengerFields": {
          "fields": {
            "DATE_OF_BIRTH": "OPTIONAL",
            "PASSPORT_NUMBER": "OPTIONAL",
            "PASSPORT_EXPIRY": "OPTIONAL",
            "PASSPORT_ISSUE_DATE": "OPTIONAL",
            "PASSPORT_ISSUING_COUNTRY": "OPTIONAL",
            "NATIONALITY": "OPTIONAL"
          },
          "international": false
        },
        "isInternational": false,
        "capabilities": {
          "seatSelection": true,
          "meals": false,
          "extraBaggage": false,
          "hold": true,
          "fareRules": true,
          "cancellation": "REALTIME"
        },
        "supplierOfferRef": "floffer_034nVJS2qSl8sBs4rAav6r",
        "pricing": {
          "totalAmount": 11062,
          "currency": "INR",
          "published": {
            "baseFare": null,
            "taxes": null,
            "total": null
          },
          "offered": {
            "baseFare": null,
            "taxes": null,
            "total": 11062,
            "commission": null,
            "tds": null,
            "netPayable": null
          },
          "taxComponents": [],
          "commercials": [],
          "perPax": {
            "adult": {
              "count": 1,
              "total": 11062
            }
          }
        },
        "cabin": null,
        "returnDate": "2026-12-04",
        "availableSeats": 9,
        "fareFamily": {
          "code": "TEST_SLOW_CONFIRM",
          "attributes": [],
          "name": "Test fare — confirms after 2 min"
        },
        "fareCategory": "PRIVATE",
        "fareTypeName": "Private"
      },
      {
        "inventoryCategory": "SERIES",
        "offerId": "floffer_034nVJS2qK0lTUzk8vo7dT",
        "expiresAt": "2026-10-28T02:17:18.482Z",
        "legs": [
          {
            "legIndex": 0,
            "legType": "OUTBOUND",
            "origin": {
              "iataCode": "DEL",
              "name": "Indira Gandhi International Airport",
              "city": "New Delhi",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "destination": {
              "iataCode": "BOM",
              "name": "Chhatrapati Shivaji Maharaj International Airport",
              "city": "Mumbai",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "departureTime": "2026-11-30T10:00:00+05:30",
            "arrivalTime": "2026-11-30T12:10:00+05:30",
            "stops": 0,
            "segments": [
              {
                "segmentIndex": 0,
                "marketingCarrier": {
                  "iataCode": "ZZ",
                  "name": "Kitionz Test Air",
                  "flightNumber": "142",
                  "code": "ZZ"
                },
                "departureTime": "2026-11-30T10:00:00+05:30",
                "arrivalTime": "2026-11-30T12:10:00+05:30",
                "origin": {
                  "iataCode": "DEL",
                  "name": "Indira Gandhi International Airport",
                  "city": "New Delhi",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "destination": {
                  "iataCode": "BOM",
                  "name": "Chhatrapati Shivaji Maharaj International Airport",
                  "city": "Mumbai",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "departureTerminal": "3",
                "arrivalTerminal": "2",
                "cabin": null,
                "originCode": "DEL",
                "destCode": "BOM",
                "isCodeshare": null,
                "durationMinutes": 130,
                "arrivalTimeUnconfirmed": false,
                "originName": "Indira Gandhi International Airport",
                "originTerminal": "3",
                "destName": "Chhatrapati Shivaji Maharaj International Airport",
                "destinationTerminal": "2",
                "departureTimezone": "Asia/Kolkata",
                "arrivalTimezone": "Asia/Kolkata",
                "cabinClass": null
              }
            ],
            "legKey": "lk1_8b863067657acc527be7d28db5a5280c",
            "legKeyComparable": true,
            "legKeyGaps": [],
            "originCode": "DEL",
            "destCode": "BOM",
            "durationMinutes": 130,
            "originName": "Indira Gandhi International Airport",
            "destName": "Chhatrapati Shivaji Maharaj International Airport",
            "departureTimezone": "Asia/Kolkata",
            "arrivalTimezone": "Asia/Kolkata",
            "cabinClass": null
          },
          {
            "legIndex": 1,
            "legType": "RETURN",
            "origin": {
              "iataCode": "BOM",
              "name": "Chhatrapati Shivaji Maharaj International Airport",
              "city": "Mumbai",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "destination": {
              "iataCode": "DEL",
              "name": "Indira Gandhi International Airport",
              "city": "New Delhi",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "departureTime": "2026-12-04T19:00:00+05:30",
            "arrivalTime": "2026-12-04T21:10:00+05:30",
            "stops": 0,
            "segments": [
              {
                "segmentIndex": 0,
                "marketingCarrier": {
                  "iataCode": "ZZ",
                  "name": "Kitionz Test Air",
                  "flightNumber": "162",
                  "code": "ZZ"
                },
                "departureTime": "2026-12-04T19:00:00+05:30",
                "arrivalTime": "2026-12-04T21:10:00+05:30",
                "origin": {
                  "iataCode": "BOM",
                  "name": "Chhatrapati Shivaji Maharaj International Airport",
                  "city": "Mumbai",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "destination": {
                  "iataCode": "DEL",
                  "name": "Indira Gandhi International Airport",
                  "city": "New Delhi",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "departureTerminal": "2",
                "arrivalTerminal": "3",
                "cabin": null,
                "originCode": "BOM",
                "destCode": "DEL",
                "isCodeshare": null,
                "durationMinutes": 130,
                "arrivalTimeUnconfirmed": false,
                "originName": "Chhatrapati Shivaji Maharaj International Airport",
                "originTerminal": "2",
                "destName": "Indira Gandhi International Airport",
                "destinationTerminal": "3",
                "departureTimezone": "Asia/Kolkata",
                "arrivalTimezone": "Asia/Kolkata",
                "cabinClass": null
              }
            ],
            "legKey": "lk1_930a0616c70e7b646ee8b92023fda0ab",
            "legKeyComparable": true,
            "legKeyGaps": [],
            "originCode": "BOM",
            "destCode": "DEL",
            "durationMinutes": 130,
            "originName": "Chhatrapati Shivaji Maharaj International Airport",
            "destName": "Indira Gandhi International Airport",
            "departureTimezone": "Asia/Kolkata",
            "arrivalTimezone": "Asia/Kolkata",
            "cabinClass": null
          }
        ],
        "journeyKey": "jk1_a5e98ca975e50bc33254179215bdfed2",
        "journeyKeyComparable": true,
        "tripType": "ROUND_TRIP",
        "departureDate": "2026-11-30",
        "price": {
          "totalAmount": 11262,
          "currency": "INR",
          "baseFare": null,
          "taxes": null,
          "commission": null,
          "tds": null,
          "netPayable": null,
          "publishedTotal": null,
          "publishedBaseFare": null,
          "publishedTaxes": null,
          "taxBreakdown": [],
          "commercials": [],
          "passengerFares": [
            {
              "passengerType": "ADULT",
              "count": 1,
              "perPerson": 11262,
              "total": 11262,
              "baseFare": null,
              "taxes": null
            }
          ],
          "infantFare": null
        },
        "baggage": {
          "perPax": [
            {
              "paxType": "ADT",
              "checkIn": {
                "weightKg": 15
              },
              "cabin": {
                "weightKg": 7
              }
            }
          ]
        },
        "stops": 0,
        "booking": {
          "bookable": true,
          "validatingCarrier": null,
          "requestBooking": false,
          "ticketingDeadline": null,
          "viaSupplierApi": true
        },
        "policy": {
          "refundBeforeDeparture": {
            "allowed": null
          },
          "changeBeforeDeparture": {
            "allowed": null
          },
          "refund": "NOT_GIVEN",
          "change": "NOT_GIVEN",
          "refundPolicy": "NOT_GIVEN",
          "changePolicy": "NOT_GIVEN"
        },
        "paymentRequirements": {
          "requiresInstantPayment": null
        },
        "requiredPassengerFields": {
          "fields": {
            "DATE_OF_BIRTH": "OPTIONAL",
            "PASSPORT_NUMBER": "OPTIONAL",
            "PASSPORT_EXPIRY": "OPTIONAL",
            "PASSPORT_ISSUE_DATE": "OPTIONAL",
            "PASSPORT_ISSUING_COUNTRY": "OPTIONAL",
            "NATIONALITY": "OPTIONAL"
          },
          "international": false
        },
        "isInternational": false,
        "capabilities": {
          "seatSelection": true,
          "meals": false,
          "extraBaggage": false,
          "hold": true,
          "fareRules": true,
          "cancellation": "REALTIME"
        },
        "supplierOfferRef": "floffer_034nVJS2qK0lTUzk8vo7dT",
        "pricing": {
          "totalAmount": 11262,
          "currency": "INR",
          "published": {
            "baseFare": null,
            "taxes": null,
            "total": null
          },
          "offered": {
            "baseFare": null,
            "taxes": null,
            "total": 11262,
            "commission": null,
            "tds": null,
            "netPayable": null
          },
          "taxComponents": [],
          "commercials": [],
          "perPax": {
            "adult": {
              "count": 1,
              "total": 11262
            }
          }
        },
        "cabin": null,
        "returnDate": "2026-12-04",
        "availableSeats": 9,
        "fareFamily": {
          "code": "TEST_PRICE_CHANGE",
          "attributes": [],
          "name": "Test fare — price changes at fare-quote"
        },
        "fareCategory": "PRIVATE",
        "fareTypeName": "Private"
      },
      {
        "inventoryCategory": "SERIES",
        "offerId": "floffer_034nVJS2qPhQ6ULk346Pcm",
        "expiresAt": "2026-10-28T02:17:18.482Z",
        "legs": [
          {
            "legIndex": 0,
            "legType": "OUTBOUND",
            "origin": {
              "iataCode": "DEL",
              "name": "Indira Gandhi International Airport",
              "city": "New Delhi",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "destination": {
              "iataCode": "BOM",
              "name": "Chhatrapati Shivaji Maharaj International Airport",
              "city": "Mumbai",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "departureTime": "2026-11-30T11:30:00+05:30",
            "arrivalTime": "2026-11-30T13:40:00+05:30",
            "stops": 0,
            "segments": [
              {
                "segmentIndex": 0,
                "marketingCarrier": {
                  "iataCode": "ZZ",
                  "name": "Kitionz Test Air",
                  "flightNumber": "143",
                  "code": "ZZ"
                },
                "departureTime": "2026-11-30T11:30:00+05:30",
                "arrivalTime": "2026-11-30T13:40:00+05:30",
                "origin": {
                  "iataCode": "DEL",
                  "name": "Indira Gandhi International Airport",
                  "city": "New Delhi",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "destination": {
                  "iataCode": "BOM",
                  "name": "Chhatrapati Shivaji Maharaj International Airport",
                  "city": "Mumbai",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "departureTerminal": "3",
                "arrivalTerminal": "2",
                "cabin": null,
                "originCode": "DEL",
                "destCode": "BOM",
                "isCodeshare": null,
                "durationMinutes": 130,
                "arrivalTimeUnconfirmed": false,
                "originName": "Indira Gandhi International Airport",
                "originTerminal": "3",
                "destName": "Chhatrapati Shivaji Maharaj International Airport",
                "destinationTerminal": "2",
                "departureTimezone": "Asia/Kolkata",
                "arrivalTimezone": "Asia/Kolkata",
                "cabinClass": null
              }
            ],
            "legKey": "lk1_1f0fb697df6a5046811ab94a2dcb38d7",
            "legKeyComparable": true,
            "legKeyGaps": [],
            "originCode": "DEL",
            "destCode": "BOM",
            "durationMinutes": 130,
            "originName": "Indira Gandhi International Airport",
            "destName": "Chhatrapati Shivaji Maharaj International Airport",
            "departureTimezone": "Asia/Kolkata",
            "arrivalTimezone": "Asia/Kolkata",
            "cabinClass": null
          },
          {
            "legIndex": 1,
            "legType": "RETURN",
            "origin": {
              "iataCode": "BOM",
              "name": "Chhatrapati Shivaji Maharaj International Airport",
              "city": "Mumbai",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "destination": {
              "iataCode": "DEL",
              "name": "Indira Gandhi International Airport",
              "city": "New Delhi",
              "countryCode": "IN",
              "timezone": "Asia/Kolkata"
            },
            "departureTime": "2026-12-04T20:00:00+05:30",
            "arrivalTime": "2026-12-04T22:10:00+05:30",
            "stops": 0,
            "segments": [
              {
                "segmentIndex": 0,
                "marketingCarrier": {
                  "iataCode": "ZZ",
                  "name": "Kitionz Test Air",
                  "flightNumber": "163",
                  "code": "ZZ"
                },
                "departureTime": "2026-12-04T20:00:00+05:30",
                "arrivalTime": "2026-12-04T22:10:00+05:30",
                "origin": {
                  "iataCode": "BOM",
                  "name": "Chhatrapati Shivaji Maharaj International Airport",
                  "city": "Mumbai",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "destination": {
                  "iataCode": "DEL",
                  "name": "Indira Gandhi International Airport",
                  "city": "New Delhi",
                  "countryCode": "IN",
                  "timezone": "Asia/Kolkata"
                },
                "departureTerminal": "2",
                "arrivalTerminal": "3",
                "cabin": null,
                "originCode": "BOM",
                "destCode": "DEL",
                "isCodeshare": null,
                "durationMinutes": 130,
                "arrivalTimeUnconfirmed": false,
                "originName": "Chhatrapati Shivaji Maharaj International Airport",
                "originTerminal": "2",
                "destName": "Indira Gandhi International Airport",
                "destinationTerminal": "3",
                "departureTimezone": "Asia/Kolkata",
                "arrivalTimezone": "Asia/Kolkata",
                "cabinClass": null
              }
            ],
            "legKey": "lk1_e91b02ea34517330fcaa03ef51628e9a",
            "legKeyComparable": true,
            "legKeyGaps": [],
            "originCode": "BOM",
            "destCode": "DEL",
            "durationMinutes": 130,
            "originName": "Chhatrapati Shivaji Maharaj International Airport",
            "destName": "Indira Gandhi International Airport",
            "departureTimezone": "Asia/Kolkata",
            "arrivalTimezone": "Asia/Kolkata",
            "cabinClass": null
          }
        ],
        "journeyKey": "jk1_222d26667fcb4ee7d7383210922b446e",
        "journeyKeyComparable": true,
        "tripType": "ROUND_TRIP",
        "departureDate": "2026-11-30",
        "price": {
          "totalAmount": 11462,
          "currency": "INR",
          "baseFare": null,
          "taxes": null,
          "commission": null,
          "tds": null,
          "netPayable": null,
          "publishedTotal": null,
          "publishedBaseFare": null,
          "publishedTaxes": null,
          "taxBreakdown": [],
          "commercials": [],
          "passengerFares": [
            {
              "passengerType": "ADULT",
              "count": 1,
              "perPerson": 11462,
              "total": 11462,
              "baseFare": null,
              "taxes": null
            }
          ],
          "infantFare": null
        },
        "baggage": {
          "perPax": [
            {
              "paxType": "ADT",
              "checkIn": {
                "weightKg": 15
              },
              "cabin": {
                "weightKg": 7
              }
            }
          ]
        },
        "stops": 0,
        "booking": {
          "bookable": true,
          "validatingCarrier": null,
          "requestBooking": false,
          "ticketingDeadline": null,
          "viaSupplierApi": true
        },
        "policy": {
          "refundBeforeDeparture": {
            "allowed": null
          },
          "changeBeforeDeparture": {
            "allowed": null
          },
          "refund": "NOT_GIVEN",
          "change": "NOT_GIVEN",
          "refundPolicy": "NOT_GIVEN",
          "changePolicy": "NOT_GIVEN"
        },
        "paymentRequirements": {
          "requiresInstantPayment": null
        },
        "requiredPassengerFields": {
          "fields": {
            "DATE_OF_BIRTH": "OPTIONAL",
            "PASSPORT_NUMBER": "OPTIONAL",
            "PASSPORT_EXPIRY": "OPTIONAL",
            "PASSPORT_ISSUE_DATE": "OPTIONAL",
            "PASSPORT_ISSUING_COUNTRY": "OPTIONAL",
            "NATIONALITY": "OPTIONAL"
          },
          "international": false
        },
        "isInternational": false,
        "capabilities": {
          "seatSelection": true,
          "meals": false,
          "extraBaggage": false,
          "hold": true,
          "fareRules": true,
          "cancellation": "REALTIME"
        },
        "supplierOfferRef": "floffer_034nVJS2qPhQ6ULk346Pcm",
        "pricing": {
          "totalAmount": 11462,
          "currency": "INR",
          "published": {
            "baseFare": null,
            "taxes": null,
            "total": null
          },
          "offered": {
            "baseFare": null,
            "taxes": null,
            "total": 11462,
            "commission": null,
            "tds": null,
            "netPayable": null
          },
          "taxComponents": [],
          "commercials": [],
          "perPax": {
            "adult": {
              "count": 1,
              "total": 11462
            }
          }
        },
        "cabin": null,
        "returnDate": "2026-12-04",
        "availableSeats": 9,
        "fareFamily": {
          "code": "TEST_SOLD_OUT",
          "attributes": [],
          "name": "Test fare — sold out at book"
        },
        "fareCategory": "PRIVATE",
        "fareTypeName": "Private"
      }
    ],
    "meta": {
      "tripTypes": [
        "ONE_WAY",
        "ROUND_TRIP"
      ],
      "suppliersCalled": [],
      "suppliersSucceeded": [],
      "suppliersFailed": [],
      "suppliers": [],
      "suppliersSkipped": [],
      "suppliersExcluded": [],
      "otherReturnDates": [],
      "filtersApplied": [],
      "totalDurationMs": 93,
      "supplierCounts": {
        "called": 2,
        "succeeded": 2,
        "failed": 0,
        "skipped": 0,
        "excluded": 0
      },
      "supplierDisclosure": "AFTER_BOOKING"
    }
  },
  "meta": {
    "requestId": "req_034nVJRuYaSPyF3hv3uIJR",
    "timestamp": "2026-10-28T02:02:18.502Z",
    "path": "/v1/flights/search",
    "method": "POST"
  }
}
```

**SDK Code**

```python
import requests

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

payload = {
    "origin": "DEL",
    "destination": "BOM",
    "departureDate": "2026-11-30",
    "adults": 1
}
headers = {
    "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/search';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"origin":"DEL","destination":"BOM","departureDate":"2026-11-30","adults":1}'
};

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/search"

	payload := strings.NewReader("{\n  \"origin\": \"DEL\",\n  \"destination\": \"BOM\",\n  \"departureDate\": \"2026-11-30\",\n  \"adults\": 1\n}")

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

	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/search")

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

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"origin\": \"DEL\",\n  \"destination\": \"BOM\",\n  \"departureDate\": \"2026-11-30\",\n  \"adults\": 1\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/search")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"origin\": \"DEL\",\n  \"destination\": \"BOM\",\n  \"departureDate\": \"2026-11-30\",\n  \"adults\": 1\n}")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://sandbox-api.kitionz.com/v1/flights/search', [
  'body' => '{
  "origin": "DEL",
  "destination": "BOM",
  "departureDate": "2026-11-30",
  "adults": 1
}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

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

```csharp
using RestSharp;

var client = new RestClient("https://sandbox-api.kitionz.com/v1/flights/search");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"origin\": \"DEL\",\n  \"destination\": \"BOM\",\n  \"departureDate\": \"2026-11-30\",\n  \"adults\": 1\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = [
  "origin": "DEL",
  "destination": "BOM",
  "departureDate": "2026-11-30",
  "adults": 1
] as [String : Any]

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

let request = NSMutableURLRequest(url: NSURL(string: "https://sandbox-api.kitionz.com/v1/flights/search")! 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()
```