REST API reference

Kiwi.com API

13 endpoints for Kiwi.com. Each one is a POST with a JSON body, called with your API key.

Base URL
https://cotlet.dev/api/v1/kiwi-com
Connects with
Your own Kiwi.com account (the one that holds your bookings)
Integration page
Kiwi.com
Kiwi.com Endpoints
Endpoint Access Description
search_flights read Flights between two places for set dates, with price, duration and a booking link.
list_trips read Trips on your account with booking number, route, dates and whether travel documents are missing.
get_trip read One trip: flights, passengers, bags, seats, check-in status and which travel documents are still needed.
get_boarding_passes read Boarding passes Kiwi.com received after checking you in, as download links.
get_baggage_options read Bags you can still add to a trip, with the price of each.
get_seat_map read Seats you can pick on one flight of a trip, where the airline offers seat selection.
get_cancellation_options read What you get back if you cancel this trip now, under its ticket type.
get_invoice read Invoice of a booking as a PDF download link.
get_credit_balance read Your Kiwi.com Credit balance and its expiration date.
add_travel_documents write Add the passport or ID details Kiwi.com needs to check a passenger in.
add_baggage write Buy a bag from get_baggage_options for the price shown there.
select_seat write Pick a seat for a passenger on one flight, where the airline offers it.
cancel_trip write Cancel a trip and request the refund you picked from get_cancellation_options.

POST https://cotlet.dev/api/v1/kiwi-com/search_flights

Searches Kiwi.com flights for one-way or round trips and returns the flights Kiwi.com finds, each with a link to book on Kiwi.com. Date flexibility goes up to 3 days either side. It does not need your trips, so it works before you book anything.

Parameters

Parameters: search_flights
NameTypeDescription
from required string City or airport, name or IATA code.
to required string City or airport, name or IATA code.
departure_date required date Outbound date.
return_date date Leave out for one-way.
flex_days integer Search this many days either side, 0 to 3. Default: 0.
adults integer Default: 1.
cabin_class enum economy, premium_economy, business or first. Default: economy.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/kiwi-com/search_flights \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"from":"from","to":"to","departure_date":"2026-10-01"}'
Python
result = client.call("kiwi-com", "search_flights", {"from":"from","to":"to","departure_date":"2026-10-01"})
Node.js
const result = await cotlet.call('kiwi-com', 'search_flights', {"from":"from","to":"to","departure_date":"2026-10-01"});
CLI
cotlet call kiwi-com search_flights --data '{"from":"from","to":"to","departure_date":"2026-10-01"}'

Example response

{
  "flights": [
    {
      "price": {
        "amount": 128,
        "currency": "EUR"
      },
      "route": "PRG-LIS",
      "departs": "2026-11-12T06:40:00+01:00",
      "arrives": "2026-11-12T09:10:00+00:00",
      "duration": "4h 30m",
      "stops": 0,
      "booking_url": "https://www.kiwi.com/en/booking?token=example1"
    },
    {
      "price": {
        "amount": 112,
        "currency": "EUR"
      },
      "route": "PRG-LIS",
      "departs": "2026-11-13T13:55:00+01:00",
      "arrives": "2026-11-13T18:20:00+00:00",
      "duration": "5h 25m",
      "stops": 1,
      "booking_url": "https://www.kiwi.com/en/booking?token=example2"
    }
  ]
}

List trips

read

POST https://cotlet.dev/api/v1/kiwi-com/list_trips

Returns the trips on your account. Each trip shows the booking number, route, departure, passenger count and documents_missing. Use trip_id in every other trip tool.

Parameters

Parameters: list_trips
NameTypeDescription
when enum upcoming, past or all. Default: upcoming.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/kiwi-com/list_trips \
  -H "Authorization: Bearer $COTLET_API_KEY"
Python
result = client.call("kiwi-com", "list_trips")
Node.js
const result = await cotlet.call('kiwi-com', 'list_trips');
CLI
cotlet call kiwi-com list_trips

Example response

{
  "trips": [
    {
      "trip_id": "512834907",
      "route": "PRG-BCN-PRG",
      "departs": "2026-11-14T07:20:00+01:00",
      "passengers": 1,
      "documents_missing": true
    },
    {
      "trip_id": "734120655",
      "route": "PRG-BER",
      "departs": "2026-12-02T09:05:00+01:00",
      "passengers": 2,
      "documents_missing": false
    }
  ]
}

Get trip

read

POST https://cotlet.dev/api/v1/kiwi-com/get_trip

Returns the full trip as shown on its booking page: each flight with its flight_id, each passenger with passenger_id, bags and seats already booked, check-in status, and the travel documents Kiwi.com still needs per passenger. Use the IDs in the write tools.

Parameters

Parameters: get_trip
NameTypeDescription
trip_id required string Booking number from list_trips.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/kiwi-com/get_trip \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"trip_id":"trip_8c41d2"}'
Python
result = client.call("kiwi-com", "get_trip", {"trip_id":"trip_8c41d2"})
Node.js
const result = await cotlet.call('kiwi-com', 'get_trip', {"trip_id":"trip_8c41d2"});
CLI
cotlet call kiwi-com get_trip --data '{"trip_id":"trip_8c41d2"}'

Example response

{
  "trip_id": "512834907",
  "status": "confirmed",
  "flights": [
    {
      "flight_id": "f1",
      "route": "PRG-BCN",
      "departs": "2026-11-14T07:20:00+01:00",
      "carrier": "Example Air"
    },
    {
      "flight_id": "f2",
      "route": "BCN-PRG",
      "departs": "2026-11-17T18:45:00+01:00",
      "carrier": "Example Air"
    }
  ],
  "passengers": [
    {
      "passenger_id": "p1",
      "name": "Ana Lopez",
      "bags": [
        "Cabin bag"
      ],
      "seats": {},
      "documents_needed": [
        "document number",
        "expiry date"
      ]
    }
  ],
  "check_in": "waiting for the airline to open"
}

POST https://cotlet.dev/api/v1/kiwi-com/get_boarding_passes

Returns one download link per passenger and flight once Kiwi.com has checked you in. Before that the list is empty and check_in says what is pending. If you checked in with the airline yourself, the airline sent the pass and Kiwi.com has none.

Parameters

Parameters: get_boarding_passes
NameTypeDescription
trip_id required string Booking number from list_trips.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/kiwi-com/get_boarding_passes \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"trip_id":"trip_8c41d2"}'
Python
result = client.call("kiwi-com", "get_boarding_passes", {"trip_id":"trip_8c41d2"})
Node.js
const result = await cotlet.call('kiwi-com', 'get_boarding_passes', {"trip_id":"trip_8c41d2"});
CLI
cotlet call kiwi-com get_boarding_passes --data '{"trip_id":"trip_8c41d2"}'

Example response

{
  "trip_id": "512834907",
  "passes": [
    {
      "passenger_id": "p1",
      "flight_id": "f1",
      "url": "https://cotlet.dev/api/v1/files/example/boarding-pass-f1.pdf"
    },
    {
      "passenger_id": "p1",
      "flight_id": "f2",
      "url": "https://cotlet.dev/api/v1/files/example/boarding-pass-f2.pdf"
    }
  ]
}

POST https://cotlet.dev/api/v1/kiwi-com/get_baggage_options

Returns the bag options Kiwi.com offers for the itinerary, each with its price and the passenger it is for. Options are sold for the whole itinerary. The list is empty when Kiwi.com no longer sells bags for the trip, which is the case from 36 hours before departure, and for self-transfer itineraries with short layovers.

Parameters

Parameters: get_baggage_options
NameTypeDescription
trip_id required string Booking number from list_trips.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/kiwi-com/get_baggage_options \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"trip_id":"trip_8c41d2"}'
Python
result = client.call("kiwi-com", "get_baggage_options", {"trip_id":"trip_8c41d2"})
Node.js
const result = await cotlet.call('kiwi-com', 'get_baggage_options', {"trip_id":"trip_8c41d2"});
CLI
cotlet call kiwi-com get_baggage_options --data '{"trip_id":"trip_8c41d2"}'

Example response

{
  "trip_id": "512834907",
  "options": [
    {
      "bag_option_id": "bo_chk20_p1",
      "passenger_id": "p1",
      "description": "Checked bag, 20 kg",
      "price": {
        "amount": 64,
        "currency": "EUR"
      }
    },
    {
      "bag_option_id": "bo_cab_p1",
      "passenger_id": "p1",
      "description": "Cabin bag, 10 kg",
      "price": {
        "amount": 38,
        "currency": "EUR"
      }
    }
  ]
}

POST https://cotlet.dev/api/v1/kiwi-com/get_seat_map

Returns the seat map Kiwi.com shows for one flight, with each free seat and its price if there is one. Seat selection is open up to 48 hours before departure. If the airline does not offer it, the list is empty and the airline assigns your seat at check-in at no extra cost.

Parameters

Parameters: get_seat_map
NameTypeDescription
trip_id required string Booking number from list_trips.
flight_id required string Flight ID from get_trip.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/kiwi-com/get_seat_map \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"trip_id":"trip_8c41d2","flight_id":"flight_8c41d2"}'
Python
result = client.call("kiwi-com", "get_seat_map", {"trip_id":"trip_8c41d2","flight_id":"flight_8c41d2"})
Node.js
const result = await cotlet.call('kiwi-com', 'get_seat_map', {"trip_id":"trip_8c41d2","flight_id":"flight_8c41d2"});
CLI
cotlet call kiwi-com get_seat_map --data '{"trip_id":"trip_8c41d2","flight_id":"flight_8c41d2"}'

Example response

{
  "trip_id": "512834907",
  "flight_id": "f1",
  "seats": [
    {
      "seat": "14C",
      "price": {
        "amount": 9,
        "currency": "EUR"
      }
    },
    {
      "seat": "14D",
      "price": {
        "amount": 9,
        "currency": "EUR"
      }
    }
  ]
}

POST https://cotlet.dev/api/v1/kiwi-com/get_cancellation_options

Returns the refund options Kiwi.com offers for this trip, each with a refund_option_id, where the money goes and the amount. Requests follow the rules of each airline and the ticket type: Saver and Standard tickets allow cancelling single flights, Flexi only the whole booking. The call changes nothing.

Parameters

Parameters: get_cancellation_options
NameTypeDescription
trip_id required string Booking number from list_trips.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/kiwi-com/get_cancellation_options \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"trip_id":"trip_8c41d2"}'
Python
result = client.call("kiwi-com", "get_cancellation_options", {"trip_id":"trip_8c41d2"})
Node.js
const result = await cotlet.call('kiwi-com', 'get_cancellation_options', {"trip_id":"trip_8c41d2"});
CLI
cotlet call kiwi-com get_cancellation_options --data '{"trip_id":"trip_8c41d2"}'

Example response

{
  "trip_id": "734120655",
  "ticket_type": "Standard",
  "options": [
    {
      "refund_option_id": "rf_credit",
      "refund_as": "Kiwi.com Credit",
      "amount": 112.5,
      "currency": "EUR"
    },
    {
      "refund_option_id": "rf_original",
      "refund_as": "Original payment",
      "amount": 98,
      "currency": "EUR"
    }
  ]
}

POST https://cotlet.dev/api/v1/kiwi-com/get_invoice

Returns the invoice Kiwi.com shows at the bottom of the booking page, as a PDF link. Billing details on it cannot be changed after booking, as Kiwi.com reports them to local tax authorities.

Parameters

Parameters: get_invoice
NameTypeDescription
trip_id required string Booking number from list_trips.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/kiwi-com/get_invoice \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"trip_id":"trip_8c41d2"}'
Python
result = client.call("kiwi-com", "get_invoice", {"trip_id":"trip_8c41d2"})
Node.js
const result = await cotlet.call('kiwi-com', 'get_invoice', {"trip_id":"trip_8c41d2"});
CLI
cotlet call kiwi-com get_invoice --data '{"trip_id":"trip_8c41d2"}'

Example response

{
  "trip_id": "512834907",
  "invoice_url": "https://cotlet.dev/api/v1/files/example/invoice-512834907.pdf",
  "issued_on": "2026-09-02"
}

POST https://cotlet.dev/api/v1/kiwi-com/get_credit_balance

Returns the Kiwi.com Credit shown in your account, with the expiration date of each part. Credit is what Kiwi.com often issues when it refunds a cancellation.

Parameters

No parameters.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/kiwi-com/get_credit_balance \
  -H "Authorization: Bearer $COTLET_API_KEY"
Python
result = client.call("kiwi-com", "get_credit_balance")
Node.js
const result = await cotlet.call('kiwi-com', 'get_credit_balance');
CLI
cotlet call kiwi-com get_credit_balance

Example response

{
  "balance": {
    "amount": 112.5,
    "currency": "EUR"
  },
  "parts": [
    {
      "amount": 112.5,
      "currency": "EUR",
      "expires_on": "2028-09-18"
    }
  ]
}

Add travel documents

write Confirm

POST https://cotlet.dev/api/v1/kiwi-com/add_travel_documents

Saves the travel document details for one passenger, which Kiwi.com passes to the airline for check-in. It accepts them up to 24 hours before departure; later you check in with the airline. Send the fields get_trip lists under documents_needed. By default you confirm each call; you can switch that off for this tool.

Parameters

Parameters: add_travel_documents
NameTypeDescription
trip_id required string Booking number from list_trips.
passenger_id required string Passenger ID from get_trip.
details required object The fields listed in documents_needed by get_trip, e.g. document_number and expiry_date.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/kiwi-com/add_travel_documents \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"trip_id":"512834907","passenger_id":"p1","details":{"document_number":"XK1234567","expiry_date":"2031-04-18"}}'
Python
result = client.call("kiwi-com", "add_travel_documents", {"trip_id":"512834907","passenger_id":"p1","details":{"document_number":"XK1234567","expiry_date":"2031-04-18"}})
Node.js
const result = await cotlet.call('kiwi-com', 'add_travel_documents', {"trip_id":"512834907","passenger_id":"p1","details":{"document_number":"XK1234567","expiry_date":"2031-04-18"}});
CLI
cotlet call kiwi-com add_travel_documents --data '{"trip_id":"512834907","passenger_id":"p1","details":{"document_number":"XK1234567","expiry_date":"2031-04-18"}}'

Example response

{
  "trip_id": "512834907",
  "passenger_id": "p1",
  "status": "saved",
  "check_in": "waiting for the airline to open"
}

Add baggage

write Confirm

POST https://cotlet.dev/api/v1/kiwi-com/add_baggage

Adds one bag option to the booking and charges the price from get_baggage_options. The bag cannot be removed or moved to another passenger afterwards, and Kiwi.com may add a processing fee depending on your service package. By default you confirm each call; you can switch that off for this tool.

Parameters

Parameters: add_baggage
NameTypeDescription
trip_id required string Booking number from list_trips.
bag_option_id required string Option ID from get_baggage_options.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/kiwi-com/add_baggage \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"trip_id":"512834907","bag_option_id":"bo_chk20_p1"}'
Python
result = client.call("kiwi-com", "add_baggage", {"trip_id":"512834907","bag_option_id":"bo_chk20_p1"})
Node.js
const result = await cotlet.call('kiwi-com', 'add_baggage', {"trip_id":"512834907","bag_option_id":"bo_chk20_p1"});
CLI
cotlet call kiwi-com add_baggage --data '{"trip_id":"512834907","bag_option_id":"bo_chk20_p1"}'

Example response

{
  "trip_id": "512834907",
  "status": "added",
  "bag": {
    "bag_option_id": "bo_chk20_p1",
    "description": "Checked bag, 20 kg",
    "passenger_id": "p1"
  },
  "price": {
    "amount": 64,
    "currency": "EUR"
  }
}

Select seat

write Confirm

POST https://cotlet.dev/api/v1/kiwi-com/select_seat

Reserves one seat from get_seat_map for one passenger on one flight, up to 48 hours before departure. The seat then shows on the e-ticket and in the trip. A seat with a price charges your payment method. By default you confirm each call; you can switch that off for this tool.

Parameters

Parameters: select_seat
NameTypeDescription
trip_id required string Booking number from list_trips.
flight_id required string Flight ID from get_trip.
passenger_id required string Passenger ID from get_trip.
seat required string Seat from get_seat_map, e.g. 14C.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/kiwi-com/select_seat \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"trip_id":"trip_8c41d2","flight_id":"flight_8c41d2","passenger_id":"passenger_8c41d2","seat":"seat"}'
Python
result = client.call("kiwi-com", "select_seat", {"trip_id":"trip_8c41d2","flight_id":"flight_8c41d2","passenger_id":"passenger_8c41d2","seat":"seat"})
Node.js
const result = await cotlet.call('kiwi-com', 'select_seat', {"trip_id":"trip_8c41d2","flight_id":"flight_8c41d2","passenger_id":"passenger_8c41d2","seat":"seat"});
CLI
cotlet call kiwi-com select_seat --data '{"trip_id":"trip_8c41d2","flight_id":"flight_8c41d2","passenger_id":"passenger_8c41d2","seat":"seat"}'

Example response

{
  "trip_id": "512834907",
  "flight_id": "f1",
  "passenger_id": "p1",
  "seat": "14C",
  "status": "reserved",
  "price": {
    "amount": 9,
    "currency": "EUR"
  }
}

Cancel trip

write Confirm

POST https://cotlet.dev/api/v1/kiwi-com/cancel_trip

Sends the cancellation request to Kiwi.com, which handles it under the airline rules for your ticket type. Pass refund_option_id from get_cancellation_options. On Saver and Standard tickets you can name single flights in flight_ids; on Flexi tickets the whole booking is cancelled. By default you confirm each call; you can switch that off for this tool.

Parameters

Parameters: cancel_trip
NameTypeDescription
trip_id required string Booking number from list_trips.
refund_option_id required string Option ID from get_cancellation_options.
flight_ids string[] Cancel only these flights (Saver and Standard tickets). Default: whole trip.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/kiwi-com/cancel_trip \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"trip_id":"734120655","refund_option_id":"rf_credit"}'
Python
result = client.call("kiwi-com", "cancel_trip", {"trip_id":"734120655","refund_option_id":"rf_credit"})
Node.js
const result = await cotlet.call('kiwi-com', 'cancel_trip', {"trip_id":"734120655","refund_option_id":"rf_credit"});
CLI
cotlet call kiwi-com cancel_trip --data '{"trip_id":"734120655","refund_option_id":"rf_credit"}'

Example response

{
  "trip_id": "734120655",
  "status": "cancellation requested",
  "refund": {
    "refund_option_id": "rf_credit",
    "refund_as": "Kiwi.com Credit",
    "amount": 112.5,
    "currency": "EUR"
  }
}