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

# 7 · Get a booking

GET https://sandbox-api.kitionz.com/v1/flights/bookings/{id}

**Get a booking.**

**What:** the current state of one booking — `status`, `pnr`, legs, passengers, amount.

**When:** to confirm a booking after `/book`, or to show its details.


**Gotcha:** the `status` field in the response lists every value with what to do. Never book again while it is `RESERVED` or `PENDING_CONFIRMATION`. This is the call to repeat while a booking is pending (every 30 seconds): Kitionz keeps checking with the supplier for you. `/refresh` and `/status` ask the supplier directly, so use them only now and then.

Reference: https://docs.kitionz.com/flight-api/7-get-a-booking

## Authentication

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

## Servers

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

## Request

### Path parameters

- `id` (string, required)

## Response

### 200

Default Response

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

## Types

### FlightBookingEnvelope

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

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

### V1FlightsBookingsIdGetResponsesContentApplicationJsonSchemaMeta

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

### FlightBookingEnvelopeSupplier

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

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

### FlightBookingEnvelopeReturnSupplier

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

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

### FlightBookingEnvelopeBooker

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

### FlightBookingEnvelopePassengersItems

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

### FlightBookingEnvelopeSegmentsItems

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

### FlightBookingEnvelopeEventsItems

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

### FlightBookingEnvelopeFareBreakdown

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

### FlightBookingEnvelopeReconciliation

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

### FlightBookingEnvelopeNextAction

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

### V1FlightsBookingsIdGetResponsesContentApplicationJsonSchemaMetaPagination

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

### FlightBookingEnvelopeSegmentsItemsTechnicalStopsItems

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

### FlightBookingEnvelopeFareBreakdownComposition

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

### FlightBookingEnvelopeFareBreakdownPublished

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

### FlightBookingEnvelopeFareBreakdownTaxComponentsItems

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

### FlightBookingEnvelopeFareBreakdownCommercialsItems

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

### FlightBookingEnvelopeFareBreakdownPerPaxItems

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

### FlightBookingEnvelopeFareBreakdownInfantFare

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

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

### FlightBookingEnvelopeReconciliationDiffsItems

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

### FlightBookingEnvelopeReconciliationDiffsItemsOurs

- double
- string

### FlightBookingEnvelopeReconciliationDiffsItemsSupplier

- double
- string

## Examples

**Response**

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

**SDK Code**

```python
import requests

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

headers = {"Authorization": "Bearer <token>"}

response = requests.get(url, headers=headers)

print(response.json())
```

```javascript
const url = 'https://sandbox-api.kitionz.com/v1/flights/bookings/bkg_034n1fcPCx5SPRxCdIjNUc';
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};

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"
	"net/http"
	"io"
)

func main() {

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

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("Authorization", "Bearer <token>")

	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/bookings/bkg_034n1fcPCx5SPRxCdIjNUc")

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

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'

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.get("https://sandbox-api.kitionz.com/v1/flights/bookings/bkg_034n1fcPCx5SPRxCdIjNUc")
  .header("Authorization", "Bearer <token>")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://sandbox-api.kitionz.com/v1/flights/bookings/bkg_034n1fcPCx5SPRxCdIjNUc', [
  'headers' => [
    'Authorization' => 'Bearer <token>',
  ],
]);

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

```csharp
using RestSharp;

var client = new RestClient("https://sandbox-api.kitionz.com/v1/flights/bookings/bkg_034n1fcPCx5SPRxCdIjNUc");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer <token>");
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["Authorization": "Bearer <token>"]

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

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