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

# 5 · Fare quote

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

**Re-price an offer & get a quote token.**

**What:** re-prices a chosen offer against the live supplier and returns a **signed `quoteToken`**.

**When:** after the traveller picks an offer from `/search`, immediately before `/book`.

**Before / After:** `/search` → here → `/book` (pass the `quoteToken`).

**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` (the price block of every answer) for `pricing`; `supplierCode` for `sourceCode`.
* **Always show your customer `price.totalAmount` from this response, never the search price.** `priceChanged` is `true` when it differs from the offer’s total at Search (`searchTotalAmount`) — Kitionz compares the two for every supplier. Then book with this token only if your customer accepts the new price.
* **With an infant, read `price.infantFare.status` before comparing.** When the infant price was not given at Search but is given in this quote (or the other way round), the two totals cover different passengers: the difference is the infant fare, not a fare change.
* The `quoteToken` binds this price, offer and passengers for about 15 minutes (`quoteTokenExpiresAt`); after that, quote again.
* **The passengers must be the ones you searched with** — the same `adults`, `children` and `infants`. Another party is refused before any supplier is asked: `400 PASSENGER_COUNTS_CHANGED`, with both parties in `details.searchedParty` and `details.sentParty`. Search again with these passengers. (`400 BOOK_PAX_SHAPE_UNSUPPORTED` means something else: the supplier refused the searched passengers — choose another fare.)
* It does **not** hold the seat. `/book` asks the supplier again: if the price went up you get `FARE_HIGHER_THAN_QUOTED`, if the seats are gone you get `INSUFFICIENT_SEATS`, and nothing is booked; quote again. If the price went down, some suppliers book at the lower price and some refuse any change with `409 SUPPLIER_FARE_CHANGED_AT_BOOK` (nothing booked: quote again and show the new price). Never rely on either.
* **`offerId` is the offer you chose** — its `offerId` in the `/search` answer. (`supplierOfferRef` is the old name of this field, in the request and in the search answer: accepted until the next release, which removes it. Sending both with different values → `400 VALIDATION_ERROR` naming both.)
* Send the **same** `adults`/`children`/`infants` + offer id + dates you’ll book with — the token binds them.
* **Every quote is checked before it is signed.** In the quote, every adult and child row of `price.passengerFares` states a total above 0, and the rows add up to `price.totalAmount` exactly. A quote that fails this is refused with `422 FARE_QUOTE_UNUSABLE` (the reason is in `error.supplierError.failureClass`; nothing is quoted or booked): choose another fare or search again.
* **With infants, read `price.infantFare.status` here, not at search** — the quote is the truth and can differ. `NOT_GIVEN`: `totalAmount` covers adults and children only; add your own infant charge. A missing infant price is never a reason to refuse a quote.
* **Send the offer’s `departureDate` back** from `/search`. `tripType` and `returnDate` may be left out: the offer’s own trip is used. When you send them, they must be the offer’s; another trip answers `400 OFFER_TRIP_MISMATCH` (its `details` name the offer’s values). A `returnDate` needs `tripType: "ROUND_TRIP"`.
* No supplier field: the offer id already names the supplier. Most organisations see the supplier only after booking, and sending `sourceCode` returns `SOURCE_CODE_NOT_ACCEPTED`.

**Example — request:**

```json
{ "offerId": "floffer_9x2k7q", "tripType": "ONE_WAY", "departureDate": "2027-01-15", "adults": 1 }
```

**Response (trimmed)** — pass `quoteToken` straight to `/book`:

```json
{ "data": { "offerId": "floffer_9x2k7q", "quoteToken": "eyJhbGci…", "quoteTokenExpiresAt": "2027-01-10T04:45:00.000Z", "priceChanged": false, "searchTotalAmount": 5480.00, "price": { "totalAmount": 5480.00, "currency": "INR", "baseFare": null, "taxes": null, "passengerFares": [ { "passengerType": "ADULT", "count": 1, "perPerson": 5480.00, "total": 5480.00 } ], "infantFare": null } } }
```

Reference: https://docs.kitionz.com/flights/fare-quote

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

- `offerId` (string, required) — Required (or its old name supplierOfferRef; send one, null is refused): the id of the offer you chose in /search — the offer's offerId (floffer_…, 30 characters).
- `adults` (integer, required)
- `departureDate` (string, required) — The offer's `departureDate` from /search — send it back unchanged (a different date → 400 OFFER_TRIP_MISMATCH).
- `sourceCode` (string, optional) — Leave it out: the offer id already names the supplier. Only an organisation shown suppliers before booking may send it, and it must then match the offer; for everyone else it is refused with SOURCE_CODE_NOT_ACCEPTED.
- `children` (integer, optional, default: 0)
- `infants` (integer, optional, default: 0)
- `tripType` (enum, optional) — The offer's `tripType` from /search. May be left out: the offer's own trip type is used. When sent it must be the offer's (another → 400 OFFER_TRIP_MISMATCH).
  - Allowed values: `ONE_WAY`, `ROUND_TRIP`
- `returnDate` (string, optional) — Round trip only: the offer's `returnDate` from /search, sent only with tripType ROUND_TRIP. May be left out (the offer fixes it); when sent, send it on /fare-quote and /book alike.

## Response

### 200

Default Response

- `success` (boolean, required)
- `statusCode` (double, required)
- `data` (FlightFareQuoteResponse, required) — Re-priced fare quote with per-offer eligibility AND the signed quoteToken + quoteTokenExpiresAt that /book requires.
- `meta` (V1FlightsFareQuotePostResponsesContentApplicationJsonSchemaMeta, required)

## Types

### FlightFareQuoteResponse

Re-priced fare quote with per-offer eligibility AND the signed quoteToken + quoteTokenExpiresAt that /book requires.

- `offerId` (string, required) — The offer this quote is for: the offerId you sent.
- `price` (FlightFareQuoteResponsePrice, 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.
- `eligibility` (FlightFareQuoteResponseEligibility, required)
- `quoteToken` (string, required)
- `quoteTokenExpiresAt` (string, required)
- `priceChanged` (boolean, required) — true when this quote’s total (`price.totalAmount`) differs from the offer’s total at Search (`searchTotalAmount`). Kitionz compares the two for every supplier. This `quoteToken` carries the quoted price: if it changed, book only after your customer accepts the new one. With an infant, check `price.infantFare.status` first: when the infant price was not given at Search but is given now (or the other way round), the two totals cover different passengers, so the difference is the infant fare, not a fare change.
- `searchTotalAmount` (double, required) — The offer’s total at Search (its `price.totalAmount` then), in `price.currency`. It covers the passengers whose price Search gave: with an infant whose price was not given at Search it excludes the infant, while this quote may include it (see `price.infantFare.status`).
- `pricing` (FlightFareQuoteResponsePricing, required, deprecated) — Old name of price (the same value), removed in the next release. Read price. Every part of it is in price.
- `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).
- `supplierQuoteRef` (string, optional) — Present only when your organisation is shown suppliers before booking; otherwise omitted (the supplier is named on the booking).
- `availableSeats` (double, optional)
- `ssrCatalog` (list of FlightFareQuoteResponseSsrCatalogItems, optional)
- `baggage` (FlightFareQuoteResponseBaggage, optional)
- `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).

### V1FlightsFareQuotePostResponsesContentApplicationJsonSchemaMeta

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

### FlightFareQuoteResponsePrice

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 FlightFareQuoteResponsePriceTaxBreakdownItems, required) — The seller’s itemised taxes; empty when it states none.
- `commercials` (list of FlightFareQuoteResponsePriceCommercialsItems, required) — The seller’s other commercial lines (fees, discounts, incentives); empty when none.
- `passengerFares` (list of FlightFareQuoteResponsePricePassengerFaresItems, required) — One row per passenger type in the party: adults, then children, then infants.
- `infantFare` (FlightFareQuoteResponsePriceInfantFare, 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".

### FlightFareQuoteResponseEligibility

- `bookingModesSupported` (list of enum, required)
  - Allowed values: `LIVE`, `HOLD`, `REQUEST`
- `seatSelectionAllowed` (boolean, required)
- `ssrCategoriesAllowed` (list of enum, required)
  - Allowed values: `SEATS`, `BAGGAGE`, `MEALS`, `OTHER`
- `fareRulesAvailable` (boolean, required)
- `ticketingTimeLimit` (string, optional)
- `notes` (string, optional)

### FlightFareQuoteResponsePricing

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` (FlightFareQuoteResponsePricingPublished, required)
- `offered` (FlightFareQuoteResponsePricingOffered, required)
- `taxComponents` (list of FlightFareQuoteResponsePricingTaxComponentsItems, required)
- `commercials` (list of FlightFareQuoteResponsePricingCommercialsItems, required)
- `perPax` (FlightFareQuoteResponsePricingPerPax, optional)
- `infantFare` (FlightFareQuoteResponsePricingInfantFare, 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 FlightFareQuoteResponsePricingComponentsItems, optional)

### FlightFareQuoteResponseSsrCatalogItems

- `type` (enum, required)
  - Allowed values: `SEAT`, `BAGGAGE`, `MEAL`, `OTHER`
- `supplierSsrRef` (string, required)
- `label` (string, required)
- `price` (double, required)
- `currency` (string, required)
- `perPax` (boolean, required)
- `free` (boolean, required)
- `segmentRef` (string, optional)
- `description` (string, optional)

### FlightFareQuoteResponseBaggage

- `perPax` (list of FlightFareQuoteResponseBaggagePerPaxItems, 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.

### V1FlightsFareQuotePostResponsesContentApplicationJsonSchemaMetaPagination

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

### FlightFareQuoteResponsePriceTaxBreakdownItems

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

### FlightFareQuoteResponsePriceCommercialsItems

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

### FlightFareQuoteResponsePricePassengerFaresItems

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

### FlightFareQuoteResponsePriceInfantFare

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`

### FlightFareQuoteResponsePricingPublished

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

### FlightFareQuoteResponsePricingOffered

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

### FlightFareQuoteResponsePricingTaxComponentsItems

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

### FlightFareQuoteResponsePricingCommercialsItems

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

### FlightFareQuoteResponsePricingPerPax

- `adult` (FlightFareQuoteResponsePricingPerPaxAdult, 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` (FlightFareQuoteResponsePricingPerPaxChild, 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` (FlightFareQuoteResponsePricingPerPaxInfant, 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.

### FlightFareQuoteResponsePricingInfantFare

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`

### FlightFareQuoteResponsePricingComponentsItems

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

### FlightFareQuoteResponseBaggagePerPaxItems

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

### FlightFareQuoteResponsePricingPerPaxAdult

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)

### FlightFareQuoteResponsePricingPerPaxChild

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)

### FlightFareQuoteResponsePricingPerPaxInfant

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)

### FlightFareQuoteResponseBaggagePerPaxItemsCheckIn

- FlightFareQuoteResponseBaggagePerPaxItemsCheckIn0
- FlightFareQuoteResponseBaggagePerPaxItemsCheckIn1

### FlightFareQuoteResponseBaggagePerPaxItemsCabin

- FlightFareQuoteResponseBaggagePerPaxItemsCabin0
- FlightFareQuoteResponseBaggagePerPaxItemsCabin1

### FlightFareQuoteResponseBaggagePerPaxItemsCheckIn0

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

### FlightFareQuoteResponseBaggagePerPaxItemsCheckIn1

- `weightKg` (double, required)

### FlightFareQuoteResponseBaggagePerPaxItemsCabin0

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

### FlightFareQuoteResponseBaggagePerPaxItemsCabin1

- `weightKg` (double, required)

## Examples

### Price confirmed

**Request**

```json
{
  "offerId": "floffer_034nVJS2qOr2Vqu1qfPu9c",
  "adults": 1,
  "departureDate": "2026-11-30",
  "tripType": "ONE_WAY"
}
```

**Response**

```json
{
  "success": true,
  "statusCode": 200,
  "data": {
    "offerId": "floffer_034nVJS2qOr2Vqu1qfPu9c",
    "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
    },
    "eligibility": {
      "bookingModesSupported": [
        "LIVE"
      ],
      "seatSelectionAllowed": false,
      "ssrCategoriesAllowed": [],
      "fareRulesAvailable": true,
      "notes": "Kitionz Test Air — simulated; no supplier is called."
    },
    "quoteToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6ImtpdGlvbnouZmxpZ2h0LnF1b3RlIiwia2lkIjoidjEiLCJlbmMiOiJBMjU2R0NNIiwiZWtpZCI6Ijk5YzFjYzI1In0.8MqhUmWOkoXdxbEUVwzlpw-KUQcfQDl324tCejs1sRcgjNKyoWGrETBEx2d_gaZWPIl3HTylQ0xYyLuHlYQke1ihfB2sXe0BWwGlUl2gW1gAyt-7yoggVgtisnVC9PWS24uM9XT-JyuwEpOhs3vv8RNwRJo4J7wgphBj0VaEgEd0SIOtwGslritHFMRfn9eWBmtGIGVqudOXVof56pItX-hqrP4-qke55WI-sBa_K-e4pfsEfp_gITrtTh3Hj2xJnQxCb6xWFDsFDjwn_6h9BZZ_hTSWfFrHRPeYcbOH0J8TyQvHMUjaKG0jLoyxdeanBbKq0x_gFjgIV0NFa6u2XgouzRvRgcttj5cOXQJ3OsNpWPuMnw7JPXCJDshvP9zK-rPX2zlO_6eddQ5otuC07FyyAEHT_RoDVdgcGO9-8xSGsX-qF3zEhXMrul0cQz4vEGgYayBl4y5VgOkSbxWaQMo5gPxE7uiS1Snhq_XxbNwNlOLoPIwbx-Uh89YsZ9PPNIP-HHyVk4-kP1XqWaz31LoOvcsmFONi76cV9Pd_VhpMpRF8nV-uKGLMd2ew3Szwb4vX6tGSeO5B6Oy1hOwxAIA0CcD1jrEHBxtq7weskKid-PSunGKFjT1jU3def-q8DLKXRazj7_ddzio1nBJDGCAjchCs6QQLLQ8VesBvxQlMSRsuBHdWQwxpqwIUZWA5sq8SI99Tm3Y2BiE6aQEnxwjw0-OaWmNjJ-pBsitEOEDiz4Zk7dzIj4-70-Mo1VGox0Ks2GqnXl6hetOF-hfaUxzPsNDMeJpnMXJhbV3XQwA6zQo2ctgvZbZw3mSY5M0oeofeV4LgfjsJLCj9gPhKrGr9uUtdZ-E02iaVScuRim2FwPmaj6uLPe7UzCVqaJbUknUaOD48nLLtEDN7e_uMIK56TRN9GSmi5qXQaVFjYVNw3fCOULMzrYvAjJq5Pl3RGZQ7oWttPaNSXtGWmxSb9p8V7JRpK9HC49PqziUi667AkMNm-hdmeTSaOZFp1RlJ32jrLlMWqCyZeGzN-vemwIxLGmz3M073qqGRr5RIoq9qxOkgWzGLd2UVfVNRwmTBPCr5g2YkzqWHGQmZzBAaH8zJwC1Vr5lSdx5OpYTE9GBBrC0qIbo7TLhfYTrKSK0KbbsQTbT9sxMFiUA7tJZ_8m-iTvBy4FXM7shVFS8nu4MxokZQ5f3J8oPyMG7FCO-r-DuP3bgQUL60eUWnNNWZF96jvh-9ivYF5p5dsBknvQmbUXF_Lc1vx7iMfrxNORVjds2M11CGlZwdnrzVKRgFPJFgEXCb-fh-W52LwvIsGrOQOGNF3WOc1oc2q2TZudaew7EGJO2jnpMNN1Plfz59Gq7vhoR21qVh2WlVb30Y4SpcDzrOZDrfljKidHgh0yUXSk2UpXE04huQ5f6h4DevY3wfism03A-ZZJzLCsu4Mlp9hvOjoloKP3BgkzYmYTeQ83fnaKg.SaKgkn7xuE5gdl4-_EhJwZdguw7WKscg8m1kCYpjk50",
    "quoteTokenExpiresAt": "2026-10-28T02:17:18.000Z",
    "priceChanged": false,
    "searchTotalAmount": 5324,
    "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
        }
      }
    },
    "availableSeats": 9,
    "baggage": {
      "perPax": [
        {
          "paxType": "ADT",
          "checkIn": {
            "weightKg": 15
          },
          "cabin": {
            "weightKg": 7
          }
        }
      ]
    }
  },
  "meta": {
    "requestId": "req_034nVJS78VV7ljJWiaoV4r",
    "timestamp": "2026-10-28T02:02:18.567Z",
    "path": "/v1/flights/fare-quote",
    "method": "POST"
  }
}
```

**SDK Code**

```python Price confirmed
import requests

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

payload = {
    "offerId": "floffer_034nVJS2qOr2Vqu1qfPu9c",
    "adults": 1,
    "departureDate": "2026-11-30",
    "tripType": "ONE_WAY"
}
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

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

print(response.json())
```

```javascript Price confirmed
const url = 'https://sandbox-api.kitionz.com/v1/flights/fare-quote';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"offerId":"floffer_034nVJS2qOr2Vqu1qfPu9c","adults":1,"departureDate":"2026-11-30","tripType":"ONE_WAY"}'
};

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

```go Price confirmed
package main

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

func main() {

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

	payload := strings.NewReader("{\n  \"offerId\": \"floffer_034nVJS2qOr2Vqu1qfPu9c\",\n  \"adults\": 1,\n  \"departureDate\": \"2026-11-30\",\n  \"tripType\": \"ONE_WAY\"\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 Price confirmed
require 'uri'
require 'net/http'

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

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  \"offerId\": \"floffer_034nVJS2qOr2Vqu1qfPu9c\",\n  \"adults\": 1,\n  \"departureDate\": \"2026-11-30\",\n  \"tripType\": \"ONE_WAY\"\n}"

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

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

HttpResponse<String> response = Unirest.post("https://sandbox-api.kitionz.com/v1/flights/fare-quote")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"offerId\": \"floffer_034nVJS2qOr2Vqu1qfPu9c\",\n  \"adults\": 1,\n  \"departureDate\": \"2026-11-30\",\n  \"tripType\": \"ONE_WAY\"\n}")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

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

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

```csharp Price confirmed
using RestSharp;

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

```swift Price confirmed
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = [
  "offerId": "floffer_034nVJS2qOr2Vqu1qfPu9c",
  "adults": 1,
  "departureDate": "2026-11-30",
  "tripType": "ONE_WAY"
] as [String : Any]

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

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

### Price changed since search

**Request**

```json
{
  "offerId": "floffer_034nVJS2qPKOHsJrDIaYz6",
  "adults": 1,
  "departureDate": "2026-11-30",
  "tripType": "ONE_WAY"
}
```

**Response**

```json
{
  "success": true,
  "statusCode": 200,
  "data": {
    "offerId": "floffer_034nVJS2qPKOHsJrDIaYz6",
    "price": {
      "totalAmount": 6626,
      "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": 6626,
          "total": 6626,
          "baseFare": null,
          "taxes": null
        }
      ],
      "infantFare": null
    },
    "eligibility": {
      "bookingModesSupported": [
        "LIVE"
      ],
      "seatSelectionAllowed": false,
      "ssrCategoriesAllowed": [],
      "fareRulesAvailable": true,
      "notes": "Kitionz Test Air — simulated; no supplier is called."
    },
    "quoteToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6ImtpdGlvbnouZmxpZ2h0LnF1b3RlIiwia2lkIjoidjEiLCJlbmMiOiJBMjU2R0NNIiwiZWtpZCI6Ijk5YzFjYzI1In0.Ajh7Y9JWi96d4EFsJ9o8YgAd8A2LPmt6qneWdy9rTsxWvKIsdPNiZ6ygLAi_hbYgMa64JtgI9jI2ifWhTkgDG4cx8SDTJjuRI9HEo6mvi_QWP11TbbK2xCQsZTplIBoB1RUt2FldmSyhSS1PwZKr-hVDzP5UcmQbpuxz64cpUyvSbXxtug7DbjaipzLkQC4bO95Zm8_arcoPwz6YG_ni4dyubp5DTDeVOd4OZmG3v1QTWAS4zjGEfc1g8rQwrsuNCwoVlEbUB2WQskUqlslGX3rtx-8n5_Noyl780FvVf6T17am56IEXPQCrrJ70ePTYlVxRYwRT5-q6oL4Aq05I3OhaQCpAFLDYX91ixZwP8ooKWKNb1FlJ1yp_WLCwUFj5S2RnXUgO80thtHj_SrnzUOykqiofLhngI0-QpN0HNdqSUGPanzKRBhACCW9Nbh6cRqWXny5QkifVW5o0NG70WQTChPoG8OJ6xDvuEg-IZZWuvWHQLDR_0zLw5-HIIGaUaqFf1lNSco1zCJWIY7UfRVubCR2Z4SvbzPJ59e0NLLUhIaiJsMbha2TfOJdGcnAeW9-CaRunGauzTS6GR-h0mj9yxBA_Ozs8vqeH-cPZraeS_O05qFOzHV8uOexF_cVnow86IHYQVfusj-CXCyiKVhS3qm25TgWkdLp9pn22B4iAp9q8rj1YTdPgOsKzrKZQLZ42pkOXV1sLaGznIFq6Ianb1eeJtRLlfzSZP8jTj_aWdkFMEeSUMmv7lhXvy8up4NaXQYsxmYIjoBvOJuErIoAArDulzQw89_TOmqcid05ZHpygEMBc3Bcd_EAWE__xYHkZ2HMDV5S5xMiKkRGDfZGnaM2UxgUeBicnHiKnra1JknvMrfPKvOAO_izlvksojVIlBkbGwfoEUJM-cUCMQlR065hd2AJXOVYHXcbhrLMraq0irYIsDyC3i5CXFGfImGb0_gEV0dkW8fwSBCTi9b5yNzPsKlzDQ_O8rnEMpp91TTjeRugbnI79TT-nrey9-Nk0BrfC7j48NB6ScfvKihjRL8PjpAMYB8Hd0P-3HkUFJgQhMyxoyPGmFuKj3HTVdE6MZtTKnrzF_X4zrbGISyCLx9ZEJMBDrqVxwjNQlMCaSm2yyughhRnyu9Dl25KXpVQhcpCD4pHJufTM4trXHtJSHSM5Y-XnGvLXa60zb8LA6gy-lmDTmLCu-US4w1FGjcUFXQ3udk5kaxFb4MrYwyKiHOvbkhModBiaX_pRBkmVvqKsO2msOt4jRrbKuKC-15pt2YO0Y63neP7eu2iq11MtsNzxjJDx0uQu5PBADHJboBZaY4hiUDe1k5cW6BTUIGHMfhLCmN2INBSA-znER-nLVUpH5Xmx78QakAjW1L8FP3GzLscbc2dJ-GNHedO91MmbvWvY6gtIPYmmAhIVvBkZMrrahuOEkkrdFQQoJY35hG33csgyQjDdphd-1kXXx0FjE09mtUAsAw.kAYYE68WUMMBUxUIMzubRie605xdKUz_ToGjaFE0R6g",
    "quoteTokenExpiresAt": "2026-10-28T02:17:18.000Z",
    "priceChanged": true,
    "searchTotalAmount": 6024,
    "pricing": {
      "totalAmount": 6626,
      "currency": "INR",
      "published": {
        "baseFare": null,
        "taxes": null,
        "total": null
      },
      "offered": {
        "baseFare": null,
        "taxes": null,
        "total": 6626,
        "commission": null,
        "tds": null,
        "netPayable": null
      },
      "taxComponents": [],
      "commercials": [],
      "perPax": {
        "adult": {
          "count": 1,
          "total": 6626
        }
      }
    },
    "availableSeats": 9,
    "baggage": {
      "perPax": [
        {
          "paxType": "ADT",
          "checkIn": {
            "weightKg": 15
          },
          "cabin": {
            "weightKg": 7
          }
        }
      ]
    }
  },
  "meta": {
    "requestId": "req_034nVJSCIXwCbKaRT0HDhL",
    "timestamp": "2026-10-28T02:02:18.608Z",
    "path": "/v1/flights/fare-quote",
    "method": "POST"
  }
}
```

**SDK Code**

```python Price changed since search
import requests

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

payload = {
    "offerId": "floffer_034nVJS2qPKOHsJrDIaYz6",
    "adults": 1,
    "departureDate": "2026-11-30",
    "tripType": "ONE_WAY"
}
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

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

print(response.json())
```

```javascript Price changed since search
const url = 'https://sandbox-api.kitionz.com/v1/flights/fare-quote';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"offerId":"floffer_034nVJS2qPKOHsJrDIaYz6","adults":1,"departureDate":"2026-11-30","tripType":"ONE_WAY"}'
};

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

```go Price changed since search
package main

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

func main() {

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

	payload := strings.NewReader("{\n  \"offerId\": \"floffer_034nVJS2qPKOHsJrDIaYz6\",\n  \"adults\": 1,\n  \"departureDate\": \"2026-11-30\",\n  \"tripType\": \"ONE_WAY\"\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 Price changed since search
require 'uri'
require 'net/http'

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

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  \"offerId\": \"floffer_034nVJS2qPKOHsJrDIaYz6\",\n  \"adults\": 1,\n  \"departureDate\": \"2026-11-30\",\n  \"tripType\": \"ONE_WAY\"\n}"

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

```java Price changed since search
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://sandbox-api.kitionz.com/v1/flights/fare-quote")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"offerId\": \"floffer_034nVJS2qPKOHsJrDIaYz6\",\n  \"adults\": 1,\n  \"departureDate\": \"2026-11-30\",\n  \"tripType\": \"ONE_WAY\"\n}")
  .asString();
```

```php Price changed since search
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

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

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

```csharp Price changed since search
using RestSharp;

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

```swift Price changed since search
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = [
  "offerId": "floffer_034nVJS2qPKOHsJrDIaYz6",
  "adults": 1,
  "departureDate": "2026-11-30",
  "tripType": "ONE_WAY"
] as [String : Any]

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

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

### Price confirmed (sold-out fare)

**Request**

```json
{
  "offerId": "floffer_034nVJS2qZg5JWLWcsYmlL",
  "adults": 1,
  "departureDate": "2026-11-30",
  "tripType": "ONE_WAY"
}
```

**Response**

```json
{
  "success": true,
  "statusCode": 200,
  "data": {
    "offerId": "floffer_034nVJS2qZg5JWLWcsYmlL",
    "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
    },
    "eligibility": {
      "bookingModesSupported": [
        "LIVE"
      ],
      "seatSelectionAllowed": false,
      "ssrCategoriesAllowed": [],
      "fareRulesAvailable": true,
      "notes": "Kitionz Test Air — simulated; no supplier is called."
    },
    "quoteToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6ImtpdGlvbnouZmxpZ2h0LnF1b3RlIiwia2lkIjoidjEiLCJlbmMiOiJBMjU2R0NNIiwiZWtpZCI6Ijk5YzFjYzI1In0.fVPDaj6Ic381QSo1ohDyN3KdgAUibjc_hRP0gY_y4GUUwVIHM8tVKMF4e5TjZnF68DCL9NuPBN32aC7jSDsz1XrHaR-0Ezk7_fc2DK3MBezS5PE4mkT8REaRxCnaBhxC1SULHYdXUqWEguN0DEN1pBIx3n_UToS7utMCRSgRLbXrzB5C7ivmOUcdkRK8wg0PI7ndht30EzbFSlfl83B2cKGAomA62a22q3aYK8j1BnOBkYKHGCF8fkKEZ6gwEMOTD8_rd2LifdcTspk-NaLP851TlkGQZlXsksPj-RtxQtVblG65Ry-Z1vxdsdE0WkK2oyGw4HZ6RRDIS9YMSD6xtTQJ3qJhvjiXLWW7BqYn81-rf36uD_wliSY9J_bdAe7YUP96PgCga9QMImhAgRXJULhmfPhATuzidWE9fMxok7-_g14KESIg373d6HR91cKIVbkdMlZUHZqIGupf0DeMsF0kC4bSG5cLZrljF7LzVi0EIWMoTyL8Ygi5zE0pheVFy_FegZShBetXGahTd4kpGDtAOqMLjWsgLaGlBLUi2gULDljxgzFXoRjU8mjJZZjqnzqpjZHdtjivdBEDJYtqw2odpGDkFJnu6QJIFzPrSOvphTouuGDuyxVtVl4zJZUFRpElSZf2acI9tzz2nFsqvG_Td1MbmarssGUJD2ZW9TiW8hKcsHqvilhivjWaJF_-osCJGHIE-OjrN8rWfz6sDjJv8cLjyNe8op5blGMjvFgdRVXaUDhr8erNNYaik_lrZRaHtly7LgP3quiiW4KaPFvLRP7SGQu961MtdoRdfkuqgs7Zzb1Tfv8VDueFxCw-WNpVufv-dla_d_mwyfyssXs7fgNT0zQHnyYJBPkseT8Y_1wlVL91DE7PsN2IH48C5kEI5O6ysqwf7_KOqz_PmAJJo3hLqTy6Tjx5KeEWADTfo7-wI8Lo_lrrk3jnezloSiwidOs8ACBCp05ZhSDZ4RRIlKLVexPJRpZ3huVGyNQXvH_FDFj-VQcwGcsFyd_x47ciFEWLy4rN8WV0iH8Wru6m2wQm9gCcPVAaaC3fm58HCBH3wkeNtqFSefI4lk9P4yyOqRzfS-Ls1wS1ahsrv113cLJr5DNgFQrbWTti8YMFGpsOUwzo0VXApqRMXfonM6CBFtZNRTAcfW7hJ4LU-Tf21K9-7knj2bukU1kOJP0SGJ5FF987_kHFq9EJeXQl-S74tDzUV2SrIpCu6unKsSxDIiZ6-7fF40hrEeEr9UvE2CFTXdV2xYieBpt4ZmTEa-CKrS903uGmNrNEOnDvfXVrexM-iD8zYtiHwC2DZ6t3-wGKnV-l6aFBnmpgrxOmghVNe0Jz-nGpgHuTu8CTkWP3Q7adh3YNn9OUAMgB80ac8c2OWbuoWfSlvvHLk7fMfo0psKQxjpt_MQ74vHyaWe8O97BOGld5u2ycH-MnsnunFGfLgeET19GFpH6ofWvHt8kP0NGo.gx8p4HZ5h8FwzCIKdmiVAfjrPRWxWY9mJGJA6IIuKIE",
    "quoteTokenExpiresAt": "2026-10-28T02:17:18.000Z",
    "priceChanged": false,
    "searchTotalAmount": 5824,
    "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
        }
      }
    },
    "availableSeats": 9,
    "baggage": {
      "perPax": [
        {
          "paxType": "ADT",
          "checkIn": {
            "weightKg": 15
          },
          "cabin": {
            "weightKg": 7
          }
        }
      ]
    }
  },
  "meta": {
    "requestId": "req_034nVJSifGyrn735wEfkuV",
    "timestamp": "2026-10-28T02:02:18.928Z",
    "path": "/v1/flights/fare-quote",
    "method": "POST"
  }
}
```

**SDK Code**

```python Price confirmed (sold-out fare)
import requests

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

payload = {
    "offerId": "floffer_034nVJS2qZg5JWLWcsYmlL",
    "adults": 1,
    "departureDate": "2026-11-30",
    "tripType": "ONE_WAY"
}
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

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

print(response.json())
```

```javascript Price confirmed (sold-out fare)
const url = 'https://sandbox-api.kitionz.com/v1/flights/fare-quote';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"offerId":"floffer_034nVJS2qZg5JWLWcsYmlL","adults":1,"departureDate":"2026-11-30","tripType":"ONE_WAY"}'
};

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

```go Price confirmed (sold-out fare)
package main

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

func main() {

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

	payload := strings.NewReader("{\n  \"offerId\": \"floffer_034nVJS2qZg5JWLWcsYmlL\",\n  \"adults\": 1,\n  \"departureDate\": \"2026-11-30\",\n  \"tripType\": \"ONE_WAY\"\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 Price confirmed (sold-out fare)
require 'uri'
require 'net/http'

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

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  \"offerId\": \"floffer_034nVJS2qZg5JWLWcsYmlL\",\n  \"adults\": 1,\n  \"departureDate\": \"2026-11-30\",\n  \"tripType\": \"ONE_WAY\"\n}"

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

```java Price confirmed (sold-out fare)
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://sandbox-api.kitionz.com/v1/flights/fare-quote")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"offerId\": \"floffer_034nVJS2qZg5JWLWcsYmlL\",\n  \"adults\": 1,\n  \"departureDate\": \"2026-11-30\",\n  \"tripType\": \"ONE_WAY\"\n}")
  .asString();
```

```php Price confirmed (sold-out fare)
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

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

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

```csharp Price confirmed (sold-out fare)
using RestSharp;

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

```swift Price confirmed (sold-out fare)
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = [
  "offerId": "floffer_034nVJS2qZg5JWLWcsYmlL",
  "adults": 1,
  "departureDate": "2026-11-30",
  "tripType": "ONE_WAY"
] as [String : Any]

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

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

### Price confirmed (hold fare)

**Request**

```json
{
  "offerId": "floffer_034nVJS2qYvDvBMfFo5aXf",
  "adults": 1,
  "departureDate": "2026-11-30",
  "tripType": "ONE_WAY"
}
```

**Response**

```json
{
  "success": true,
  "statusCode": 200,
  "data": {
    "offerId": "floffer_034nVJS2qYvDvBMfFo5aXf",
    "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
    },
    "eligibility": {
      "bookingModesSupported": [
        "LIVE",
        "HOLD"
      ],
      "seatSelectionAllowed": false,
      "ssrCategoriesAllowed": [],
      "fareRulesAvailable": true,
      "notes": "Kitionz Test Air — simulated; no supplier is called."
    },
    "quoteToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6ImtpdGlvbnouZmxpZ2h0LnF1b3RlIiwia2lkIjoidjEiLCJlbmMiOiJBMjU2R0NNIiwiZWtpZCI6Ijk5YzFjYzI1In0.YMO_RDh-s1yG_s5_OS-n9gkMoV-9Fp8U9X7RBn5FYTzvqhIOX9G5E8iY-KRNuU_UKsPI9YYZQKlFSfXcMuWeA31n7Jc5f7IdA4JeQ3fnb_5i73f-yTXtCBfq4d5hZu9ADTPsApRsTkAYP8ZPs5d6q-A2WXU0Lba6uFkZZ65jQVxHXxnmn-ycJ2WQcmlSbtaDhAgGwoGDyy9idawGRpH5kDJp0QpGweimiNTqtkUqiLs9u9YauX_krPaEh7Ln1chiRLgN49olYRyPvgfY0YRhkU7KaxxnZuxJZlGBmpf4ckNeDARQEbbPu1oazs3YgBkdQIOKegTcouNpCWksOlRo-Va89bjisf3tXMc2iZnxfhZNkp6tcbfMUBeyt5dxWLBZk2NobsgFvPipXybiMPE3nagVSNZML2X56NM6NSgG_htJAtzz41eXysijj-ENs-N1T1yJmyhryI-SEvl63Vz8fq_FUi1id80_M5CufV5Ven7hA-miz9knjG_LMhdJrvMZixSQa5z3FM1AgoJkha8znRPkEECux_w0RY3i8zNyETMIQtG6BJSUjwdllR0hrXrIdgp3q-OJPMkLQDpX0voy-KaTaOArP9pZYCfD-O_14mNXNMcGyYB3Yp-AFgcZlRJwNy80inXjFKCCtHgSQosQ9EaysNQmkNekrxAzJW8-ScuKqYu7ZOLnWbwQiXBhsmk5t6U47HmUoe-8oBirojms5amV4-J0ue_XkLqhsPGaN5j-ftDOyc9wVWE_Xg45wDD1pNNvJmfoSG_zTzeXxhQfXWSszztGM_9hCgZDNqHJDUch3HwMhpBKjuM1peJNhNCoDEc81flg-yAz_tzHt5wr15q7pmy4rARMOnK6euWXYp1ZFj81-iOOIzYilEmYFV0Dn9JGdKO9e1AHvc_mXYiXusGnjizW8Lo3sTs5KoDCMGCE2D9Xl3bf0RjNrqRiJwJXXOUDomjZ8YSSFpWmD6nUJga5dlSk2mzLB-Pnm5XocalzAxQt3KodqOl5vXbiyJ_6R-EQcG9EMG5QjuZFbTWTB7LbtL3plabGqkmC_mJdmeaTSxPBliANNH7kYSV0r93IjOEEXGyENJK57gFX2j0ULgTvV1KG-xFEQcoZOo2Etp7dbluRO4YMWdn67JF7deUoSoMuo8jhPegc6Jel3RY0KNhmEsXss0w_rOwiFYcOo6gdEN4Ii2MWsbq4-kybHzHndMd6Fvp3Da2_spOdridPMaellyvZMQP1rZmk6Si6ABTl2Nw1CmCfUWDfoAio5DFVV9ptUaiSOrksL4VaJ5nm1uV3hyIJfAiFtELszipRcO96Hhb5aDqSjve0tnF0CHivrRR94jEZHDYhNhiqwGPvYFFAAbP_UcBC6u1CtQvMrPASITI6dxW4bKndUOPUBePV5AT7QYzOEXUnk2vuUaXRuNXVqXhrfxXjwpcc76iUpIcLdAT6jQOgrJnDqXLbV8Gerve7jtZ8WoLX.HKoeXRW6AS3LKEhLrK1jK-_jyqW0fSvnT84Aik00XhE",
    "quoteTokenExpiresAt": "2026-10-28T02:17:19.000Z",
    "priceChanged": false,
    "searchTotalAmount": 6124,
    "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
        }
      }
    },
    "availableSeats": 9,
    "baggage": {
      "perPax": [
        {
          "paxType": "ADT",
          "checkIn": {
            "weightKg": 15
          },
          "cabin": {
            "weightKg": 7
          }
        }
      ]
    }
  },
  "meta": {
    "requestId": "req_034nVJTbFqNYMRSV01yp1k",
    "timestamp": "2026-10-28T02:02:19.499Z",
    "path": "/v1/flights/fare-quote",
    "method": "POST"
  }
}
```

**SDK Code**

```python Price confirmed (hold fare)
import requests

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

payload = {
    "offerId": "floffer_034nVJS2qYvDvBMfFo5aXf",
    "adults": 1,
    "departureDate": "2026-11-30",
    "tripType": "ONE_WAY"
}
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

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

print(response.json())
```

```javascript Price confirmed (hold fare)
const url = 'https://sandbox-api.kitionz.com/v1/flights/fare-quote';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"offerId":"floffer_034nVJS2qYvDvBMfFo5aXf","adults":1,"departureDate":"2026-11-30","tripType":"ONE_WAY"}'
};

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

```go Price confirmed (hold fare)
package main

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

func main() {

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

	payload := strings.NewReader("{\n  \"offerId\": \"floffer_034nVJS2qYvDvBMfFo5aXf\",\n  \"adults\": 1,\n  \"departureDate\": \"2026-11-30\",\n  \"tripType\": \"ONE_WAY\"\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 Price confirmed (hold fare)
require 'uri'
require 'net/http'

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

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  \"offerId\": \"floffer_034nVJS2qYvDvBMfFo5aXf\",\n  \"adults\": 1,\n  \"departureDate\": \"2026-11-30\",\n  \"tripType\": \"ONE_WAY\"\n}"

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

```java Price confirmed (hold fare)
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://sandbox-api.kitionz.com/v1/flights/fare-quote")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"offerId\": \"floffer_034nVJS2qYvDvBMfFo5aXf\",\n  \"adults\": 1,\n  \"departureDate\": \"2026-11-30\",\n  \"tripType\": \"ONE_WAY\"\n}")
  .asString();
```

```php Price confirmed (hold fare)
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

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

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

```csharp Price confirmed (hold fare)
using RestSharp;

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

```swift Price confirmed (hold fare)
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = [
  "offerId": "floffer_034nVJS2qYvDvBMfFo5aXf",
  "adults": 1,
  "departureDate": "2026-11-30",
  "tripType": "ONE_WAY"
] as [String : Any]

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

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

### Price confirmed (request fare)

**Request**

```json
{
  "offerId": "floffer_034nVJS2qRnxKMfFdrMSLK",
  "adults": 1,
  "departureDate": "2026-11-30",
  "tripType": "ONE_WAY"
}
```

**Response**

```json
{
  "success": true,
  "statusCode": 200,
  "data": {
    "offerId": "floffer_034nVJS2qRnxKMfFdrMSLK",
    "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
    },
    "eligibility": {
      "bookingModesSupported": [
        "REQUEST"
      ],
      "seatSelectionAllowed": false,
      "ssrCategoriesAllowed": [],
      "fareRulesAvailable": false,
      "notes": "Kitionz Test Portal — a request booking: fulfil it with POST /bookings/:id/fulfil and a TEST PNR."
    },
    "quoteToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6ImtpdGlvbnouZmxpZ2h0LnF1b3RlIiwia2lkIjoidjEiLCJlbmMiOiJBMjU2R0NNIiwiZWtpZCI6Ijk5YzFjYzI1In0.aVikY9JRxsEY0mgv_yeg_s1JF04rAq-I5bl2PWHSDUqGPVN8oWzAz7wP749kkTZCyRMj74DG7pZQ0an-hE9guJQeP3R7fUnuXW8_Cf-DUXDQeMWR77xjnl5edeeh_KTYIklIX-M4ERy185mBKeCP8NMnjjVEnlD1nX3DnTc5CbisF7dwygkwSA2VdeX8hi1JTG6JEc5sCBTdw5uDWKghhoWCMxSjFTMyFi4cedOBn_pLa6Yye4lywmUIyWZBRW9f2g_Peyrx86s0FStdn7zB6FmWi_3VBKnVf31vpIP4_Y9XP2ytF8byzSppVcF5aFtR9yEIjXktbfRg1NjnHFVi_GMlEmWpTrVj5Hn3Z4UOf4WQzNjtXy9L-6kH1VNFZl4xWhuQkBGqhM5AnbUfTNMUvklB9kOIPHvLknHBAbYeUVd6Xbb9f6a3RwDBOp7Xg9JTvirKmeL6nAGEFaRh_vREPhr-pNvoSmbFWmyGHbOe00heJw11pJUKfonLDQNY89tGjhkN5pP-1nkpIHRcFSB4MVqCrS5FKsnEMTK_7f9_ixSfdm-AtAgera2-L1o3DpwhTOtF4xizCW-tTIKlOKxyntWtrSqhpVWFSTHeQqo9uhiJo1zNmuQ345EUFv72zJtxfKrJXntWNEd61TBiX8VdAtRcDXRbpCoXvI7cRRGsRilt1b37A4A-eAvBHQJ0gj2-OmVax3cFStamKbLFt2rAk6-JJGOMTFSP-V27I0QtYy5x_j4n-xw2c1CLfXJHlW85HQqyJkPVgIu-0QWRUkgRzAnv7AndWezyJQka28Wl8uVD32YVZqhxOjaYSmbxJZbpcLpybEtrGWtkVcgowRrfmkNHT-9IznUW5F1VkHe7GK1pUKA6AULJ5HnUCoFsnyvmJPVoN4POYFY8lUrN-ST83Hz7v-hO9G83sA41Mrw5eyu4SQKlO7Oequ2VOXmcF4fExGkfZJ4Yit5-qWD2LRXJqmK8KADU_PhHRqJbbcNgATqTVjl_cJpq4f9DfkmO-YztKbFujFpT4hwHE7SJJUW9uRGBQq5o_E4EQU6qRu442SeMnOf9J_48qfU2sEljmvf0vJJp9_OCf05MxAbwKZb7nTcBdjwAeqY8donn3LXY7NwECvRTFdGUlcrNEwVi0bBfiQ_vBrT6BNy8qWd431trpQdxoNz1GTn1BKHt7t7W-AX2kTbggb4XnKVvjqbNZQxhptwPXdho1rZoaC9cnh5qOinoBwkRmokQRawU2N6D43r--LlGx7vWN271xAZR5GecpC4ln6ynEsjXlgQ-shqIg37xc3ETRdlc3mWRlHX0wL8Cx6MF-g2tHoXmtsS5HWEldnPayexXS0rlnOgrVOua5TLQ7JFaxdbmjMogCWtxUBWsJBpJl5aMNH6tr0eFJf5fDHRtNbPvQtN5H24G2uFT83GN9r_1tWtCw8_nwD57os_daRx_KLGGwTcwP2C5VjfSleqWNouwolb_nFybVEbftzCaOhmM1PBSNvswZQcCIynCd7PnTD4WeYwYWS5F_Gl_PFSgU1SQOPLi.boNfVneOQLeKEIoNq0Q0bZjzbWYqk5XH_lsqvM6d28I",
    "quoteTokenExpiresAt": "2026-10-28T02:17:19.000Z",
    "priceChanged": false,
    "searchTotalAmount": 5324,
    "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
        }
      }
    },
    "availableSeats": 9,
    "baggage": {
      "perPax": [
        {
          "paxType": "ADT",
          "checkIn": {
            "weightKg": 15
          },
          "cabin": {
            "weightKg": 7
          }
        }
      ]
    }
  },
  "meta": {
    "requestId": "req_034nVJU4atNmvCuUBrYSEu",
    "timestamp": "2026-10-28T02:02:19.794Z",
    "path": "/v1/flights/fare-quote",
    "method": "POST"
  }
}
```

**SDK Code**

```python Price confirmed (request fare)
import requests

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

payload = {
    "offerId": "floffer_034nVJS2qRnxKMfFdrMSLK",
    "adults": 1,
    "departureDate": "2026-11-30",
    "tripType": "ONE_WAY"
}
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

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

print(response.json())
```

```javascript Price confirmed (request fare)
const url = 'https://sandbox-api.kitionz.com/v1/flights/fare-quote';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"offerId":"floffer_034nVJS2qRnxKMfFdrMSLK","adults":1,"departureDate":"2026-11-30","tripType":"ONE_WAY"}'
};

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

```go Price confirmed (request fare)
package main

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

func main() {

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

	payload := strings.NewReader("{\n  \"offerId\": \"floffer_034nVJS2qRnxKMfFdrMSLK\",\n  \"adults\": 1,\n  \"departureDate\": \"2026-11-30\",\n  \"tripType\": \"ONE_WAY\"\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 Price confirmed (request fare)
require 'uri'
require 'net/http'

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

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  \"offerId\": \"floffer_034nVJS2qRnxKMfFdrMSLK\",\n  \"adults\": 1,\n  \"departureDate\": \"2026-11-30\",\n  \"tripType\": \"ONE_WAY\"\n}"

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

```java Price confirmed (request fare)
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://sandbox-api.kitionz.com/v1/flights/fare-quote")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"offerId\": \"floffer_034nVJS2qRnxKMfFdrMSLK\",\n  \"adults\": 1,\n  \"departureDate\": \"2026-11-30\",\n  \"tripType\": \"ONE_WAY\"\n}")
  .asString();
```

```php Price confirmed (request fare)
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

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

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

```csharp Price confirmed (request fare)
using RestSharp;

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

```swift Price confirmed (request fare)
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = [
  "offerId": "floffer_034nVJS2qRnxKMfFdrMSLK",
  "adults": 1,
  "departureDate": "2026-11-30",
  "tripType": "ONE_WAY"
] as [String : Any]

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

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