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

# Kitionz Flight API

One API to search, price and book flights across every supplier connected to your Kitionz account. You integrate Kitionz once; Kitionz handles each supplier's differences and always answers in the same format.

## Before you start

* **Test** — `https://sandbox-api.kitionz.com`, with a Test key (`atz_test_…`). Create it at [sandbox.kitionz.com](https://sandbox.kitionz.com) → **API → API keys**. Every Test booking is simulated by Kitionz Test Air: no supplier is booked, nothing is charged.
* **Live** — `https://api.kitionz.com`, with a Live key (`atz_live_…`) from [kitionz.com](https://kitionz.com) → **API → API keys**, your server's IP address on the key's allow-list, and live access approved for each supplier.

A Test key works only on the Test address and a Live key only on the Live address.

## Authentication

Send your key on every call:

```
Authorization: Bearer <keyId>:<secret>
```

The secret is shown once, when you create or rotate the key. Keep it on your server — never in a browser or an app.

## Writes need an Idempotency-Key

Every call that books or changes a booking needs an `Idempotency-Key` header: a new unique value for each new request. If a request times out, send the SAME request again with the SAME key — you get the first answer back instead of a second booking.

## Answers

Every answer has the same envelope:

```json
{ "success": true, "statusCode": 200, "data": { … }, "meta": { "requestId": "req_…" } }
```

An error looks like this, and `code` tells you what to do (see **Error codes**):

```json
{ "success": false, "statusCode": 409, "error": { "type": "…", "code": "OFFER_EXPIRED", "message": "…", "request_id": "req_…" } }
```

Quote the `request_id` when you ask Kitionz for help.

## The 8 calls, in the order you make them

| # | Call            | Method | Path                               | What it does                          |
| - | --------------- | ------ | ---------------------------------- | ------------------------------------- |
| 1 | Origins         | POST   | `/v1/flights/origins`              | List origin airports                  |
| 2 | Destinations    | POST   | `/v1/flights/destinations`         | List destinations for an origin       |
| 3 | Available dates | POST   | `/v1/flights/availability`         | List available dates for a route      |
| 4 | Search          | POST   | `/v1/flights/search`               | Search flights                        |
| 5 | Fare quote      | POST   | `/v1/flights/fare-quote`           | Re-price an offer & get a quote token |
| 6 | Book            | POST   | `/v1/flights/book`                 | Place a booking                       |
| 7 | Get a booking   | GET    | `/v1/flights/bookings/{id}`        | Get a booking                         |
| 8 | Cancel          | POST   | `/v1/flights/bookings/{id}/cancel` | Cancel a booking                      |

Kitionz offers more — fare rules, seat maps, holds, refunds, booking lists. They are in the developer docs inside your Kitionz console ([sandbox.kitionz.com](https://sandbox.kitionz.com) → **API**).

## Try the calls on these pages

Each call has a **Try it** button. Choose the **Test** address and enter your Test key as `keyId:secret`. Never enter a Live key on a website.

## Use Postman

Prefer Postman? Download the [collection](https://kitionz.com/postman/kitionz-flight-api.postman_collection.json) and the [Test environment](https://kitionz.com/postman/kitionz-test.postman_environment.json), import both (**File → Import**), fill in `keyId` and `secret`, and send the calls in order. Each call stores what the next one needs.

Every example answer here was recorded from the real API on 2026-10-27, in Test, against Kitionz Test Air. Live answers have the same shape.