# Kiwi.com Flight Search API Documentation

<p><strong>Kiwi.com Flight Search API Documentation</strong> Search one-way flights, or add a return date for a return trip. Each itinerary has the price, duration, segments with flight number, marketing and operating carrier, cabin and local times, layovers, baggage rules, a booking link and flags for virtual interlining and hidden-city routing. Every filter is applied by Kiwi.com and checked before the answer: dates, stops and price band. A search returns one result set of up to 50 itineraries and has no pages. total_available is the number of itineraries returned, at most 50. An empty list with a price band means no offer within that band.</p>

- **Documentation:** [https://scrappa.co/docs/kiwi-api/kiwi_flights_search](https://scrappa.co/docs/kiwi-api/kiwi_flights_search)
- **API group:** Kiwi.com API
- **Endpoint:** `GET https://scrappa.co/api/kiwi/flights/search`

## Authentication

Send your Scrappa API key in the `X-API-KEY` request header. Paid endpoints also support accountless x402 payments when called without an API key.

## Parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `origin` | string | Yes | Kiwi.com place id from the locations endpoint (City:berlin_de, Station:airport:BER) or an airport code (BER). Example: City:berlin_de. |
| `destination` | string | Yes | Place id or airport code of the destination. Example: City:london_gb. |
| `departure_date` | string | Yes | Departure date, YYYY-MM-DD, today or later. Every result departs on this date. |
| `return_date` | string | No | Return date, YYYY-MM-DD. Leave it out for a one-way search. Every inbound leg departs on this date. |
| `adults` | integer | No | Adults, 1 to 9. Defaults to 1. Adults, children and infants together are at most 9. |
| `children` | integer | No | Children, 0 to 8. Defaults to 0. |
| `infants` | integer | No | Infants, 0 to 8. Each infant needs an adult. Defaults to 0. |
| `cabin` | string | No | economy, premium_economy, business or first. Defaults to economy. |
| `max_stops` | integer | No | Maximum stops per leg, 0 to 3. 0 returns direct flights only. |
| `min_price` | integer | No | Minimum total price in the chosen currency. |
| `max_price` | integer | No | Maximum total price in the chosen currency. |
| `sort` | string | No | quality, price or duration. Defaults to quality. |
| `limit` | integer | No | Itineraries to return, 1 to 50. Defaults to 25. A search has no pages. |
| `carriers` | string | No | Only these airlines, 2-letter codes, comma separated. Example: LH,AF. |
| `exclude_carriers` | string | No | Leave out these airlines, 2-letter codes, comma separated. |
| `currency` | string | No | Price currency, a 3-letter code such as EUR or USD. Defaults to EUR. |
| `locale` | string | No | Language of names, such as en or de. Defaults to en. |

## Example response

```json
{
    "data": {
        "sort": "quality",
        "cabin": "economy",
        "limit": 25,
        "notice": null,
        "origin": "City:berlin_de",
        "currency": "EUR",
        "trip_type": "one_way",
        "passengers": {
            "adults": 1,
            "infants": 0,
            "children": 0
        },
        "destination": "City:london_gb",
        "itineraries": [
            {
                "id": "ItineraryOneWay:eyJwcm92aWRlcnMiOiJLSVdJIiwicm91...",
                "type": "one_way",
                "price": {
                    "amount": 69,
                    "currency": "EUR",
                    "formatted": "69 \u20ac"
                },
                "stops": 0,
                "arrival": {
                    "city": "London",
                    "airport": "Luton",
                    "country": "United Kingdom",
                    "local_time": "2026-11-19T18:05:00",
                    "airport_code": "LTN",
                    "country_code": "GB"
                },
                "baggage": {
                    "hand_bags_included": 0,
                    "no_checked_baggage": false,
                    "checked_bags_included": 0,
                    "personal_item_included": 1,
                    "checked_bag_tier_prices": [
                        75,
                        150
                    ]
                },
                "carriers": [
                    {
                        "code": "U2",
                        "icao": "EZY",
                        "name": "easyJet"
                    }
                ],
                "duration": 7200,
                "layovers": [],
                "provider": {
                    "code": "KIWI",
                    "name": "Kiwi.com",
                    "content_provider": {
                        "id": "ContentProvider:KIWI",
                        "name": "kiwi.com"
                    }
                },
                "segments": [
                    {
                        "type": "FLIGHT",
                        "arrival": {
                            "city": "London",
                            "airport": "Luton",
                            "country": "United Kingdom",
                            "local_time": "2026-11-19T18:05:00",
                            "airport_code": "LTN",
                            "country_code": "GB"
                        },
                        "carrier": {
                            "code": "U2",
                            "name": "easyJet"
                        },
                        "duration": 7200,
                        "departure": {
                            "city": "Berlin",
                            "airport": "Berlin Brandenburg",
                            "country": "Germany",
                            "local_time": "2026-11-19T17:05:00",
                            "airport_code": "BER",
                            "country_code": "DE"
                        },
                        "cabin_class": "ECONOMY",
                        "flight_number": "U22602",
                        "operating_carrier": {
                            "code": "U2",
                            "name": "easyJet"
                        }
                    }
                ],
                "share_id": "eyJyIjoiVTI6MjYwMjpCRVI6MTc5NTEwNDMwMDpMVE46MTc5...",
                "departure": {
                    "city": "Berlin",
                    "airport": "Berlin Brandenburg",
                    "country": "Germany",
                    "local_time": "2026-11-19T17:05:00",
                    "airport_code": "BER",
                    "country_code": "DE"
                },
                "price_eur": 69,
                "booking_url": "https://www.kiwi.com/en/booking/?direct=true&locale=en&currency=eur&passengers=1-0-0&token=...",
                "travel_hacks": {
                    "hidden_city": false,
                    "virtual_interlining": false
                }
            }
        ],
        "return_date": null,
        "departure_date": "2026-11-19",
        "filters_applied": [],
        "total_available": 2
    },
    "meta": {
        "billable": true,
        "endpoint_family": "flight_search"
    },
    "success": true
}
```

## Errors

| Status | Error | Description |
| --- | --- | --- |
| 422 | Validation Error | A parameter is missing or invalid. This response is not billable. |
| 503 | Upstream Unavailable | Kiwi.com did not answer in time. Retry the request. This response is not billable. |
| 503 | Unexpected Upstream Answer | Kiwi.com answered in a form this API does not read. This response is not billable. |

## More Scrappa resources

- [API documentation](https://scrappa.co/docs)
- [Full LLM-readable API reference](https://scrappa.co/llms-full.txt)
- [OpenAPI specification](https://scrappa.co/docs/api.json)
- [Pricing](https://scrappa.co/pricing)
