# Flugtickets

Verfügbare Flugtickets für ein Städtepaar suchen – USD-Preise, günstigste zuerst, mit Teilstrecken, Umstiegen und Gesamtreisedauer.



Suchen Sie verfügbare Ticketoptionen für ein Städtepaar. Die Ergebnisse sind nach Preis sortiert (günstigste zuerst) und werden **1 Stunde** lang gecacht. Preise werden in **USD** zurückgegeben, mit Metadaten zur Originalwährung, wenn die angebotene Währung abweicht.

Jeder **Reiseverlauf** (Itinerary) ist eine vollständige Reiseoption vom Abflugort zum Zielort, gegebenenfalls mit Umsteigeverbindungen. Die Ergebnisse enthalten pro Teilstrecke Fluggesellschaft und Flugnummer, Abflug- und Ankunftsflughäfen mit Ortszeiten, Dauer der Teilstrecke, Anzahl der Stopps sowie die **Umsteigezeiten** (Layover) an den Umsteigeflughäfen.

**Wichtig:** Dieser Endpoint erwartet **dreistellige IATA-Flughafencodes** (`LHR`, `JFK`, `CDG`) — nicht ICAO. Ermitteln Sie die Codes zuerst über die [Flughafensuche](/docs/v31/airport-search).

## Anfrage [#request]

<DocRequirements>
  <DocRequirementAuth />
</DocRequirements>

<DocApiPath method="GET" path="/tickets/search" />

| Parameter     | Typ           | Erforderlich | Standard         | Beschreibung                              |
| ------------- | ------------- | ------------ | ---------------- | ----------------------------------------- |
| `origin`      | string        | Ja           | -                | IATA-Code des Abflughafens, z. B. `LHR`   |
| `destination` | string        | Ja           | -                | IATA-Code des Zielflughafens, z. B. `JFK` |
| `date`        | string (date) | Nein         | 7 Tage im Voraus | Reisedatum `YYYY-MM-DD`                   |
| `passengers`  | integer       | Nein         | `1`              | Anzahl der Passagiere (1–9)               |

## Antwort [#response]

```json
{
  "origin": "LHR",
  "destination": "JFK",
  "date": "2026-05-01",
  "passengers": 1,
  "count": 2,
  "flights": [
    {
      "price_usd": 542.0,
      "original_price": 498.0,
      "original_currency": "EUR",
      "total_duration_min": 465,
      "stops": 0,
      "legs": [
        {
          "flight_number": "BA117",
          "airline": "British Airways",
          "airline_code": "BA",
          "departure_airport": "LHR",
          "departure_airport_name": "London Heathrow Airport",
          "arrival_airport": "JFK",
          "arrival_airport_name": "John F. Kennedy International Airport",
          "departure_time": "09:00",
          "arrival_time": "11:45",
          "departure_datetime": "2026-05-01T09:00:00",
          "arrival_datetime": "2026-05-01T11:45:00",
          "duration_min": 465
        }
      ]
    },
    {
      "price_usd": 398.0,
      "original_price": 367.0,
      "original_currency": "EUR",
      "total_duration_min": 680,
      "stops": 1,
      "legs": [
        {
          "flight_number": "IB3163",
          "airline": "Iberia",
          "airline_code": "IB",
          "departure_airport": "LHR",
          "departure_airport_name": "London Heathrow Airport",
          "arrival_airport": "MAD",
          "arrival_airport_name": "Adolfo Suárez Madrid–Barajas Airport",
          "departure_time": "07:15",
          "arrival_time": "10:30",
          "departure_datetime": "2026-05-01T07:15:00",
          "arrival_datetime": "2026-05-01T10:30:00",
          "duration_min": 135
        },
        {
          "flight_number": "IB6251",
          "airline": "Iberia",
          "airline_code": "IB",
          "departure_airport": "MAD",
          "departure_airport_name": "Adolfo Suárez Madrid–Barajas Airport",
          "arrival_airport": "JFK",
          "arrival_airport_name": "John F. Kennedy International Airport",
          "departure_time": "13:05",
          "arrival_time": "16:15",
          "departure_datetime": "2026-05-01T13:05:00",
          "arrival_datetime": "2026-05-01T16:15:00",
          "duration_min": 490
        }
      ],
      "layovers": [
        {
          "airport": "MAD",
          "airport_name": "Adolfo Suárez Madrid–Barajas Airport",
          "duration_min": 155
        }
      ]
    }
  ]
}
```

### Felder der obersten Ebene [#top-level-fields]

| Feld          | Typ     | Erforderlich | Beschreibung                                                              |
| ------------- | ------- | ------------ | ------------------------------------------------------------------------- |
| `origin`      | string  | **Ja**       | IATA-Code des angefragten Abflugorts                                      |
| `destination` | string  | **Ja**       | IATA-Code des angefragten Zielorts                                        |
| `date`        | string  | **Ja**       | Für die Suche verwendetes Reisedatum                                      |
| `passengers`  | integer | **Ja**       | Anzahl der Passagiere                                                     |
| `count`       | integer | **Ja**       | Anzahl der Reiseverläufe in `flights`                                     |
| `flights`     | array   | **Ja**       | Nach Preis sortierte Optionen (kann leer sein, wenn nichts verfügbar ist) |

**Wichtig:** `count: 0` mit `flights: []` ist eine gültige Antwort — zeigen Sie einen Zustand „keine Verfügbarkeit“ an, statt dies als Fehler zu behandeln.

### Reiseverlauf (`flights[]`) [#itinerary-flights]

| Feld                 | Typ     | Erforderlich | Null?  | Beschreibung                                                        |
| -------------------- | ------- | ------------ | ------ | ------------------------------------------------------------------- |
| `price_usd`          | number  | **Ja**       | Nie    | Gesamtpreis in USD                                                  |
| `original_price`     | number  | **Ja**       | Nie    | Ursprüngliches Angebot vor der Umrechnung in USD                    |
| `original_currency`  | string  | **Ja**       | Nie    | ISO-Währung von `original_price`, z. B. `EUR`                       |
| `total_duration_min` | integer | **Ja**       | Nie    | Reisedauer von Tür zu Tür in Minuten, einschließlich Umsteigezeiten |
| `stops`              | integer | **Ja**       | Nie    | Anzahl der Umstiege (`0` = Nonstop)                                 |
| `legs`               | array   | **Ja**       | Nie    | Durchgeführte Flugsegmente in Reihenfolge                           |
| `layovers`           | array   | Nein         | **Ja** | Vorhanden, wenn `stops` > 0                                         |

### Teilstrecke (`legs[]`) [#leg-legs]

| Feld                     | Typ     | Erforderlich | Beschreibung                                   |
| ------------------------ | ------- | ------------ | ---------------------------------------------- |
| `flight_number`          | string  | **Ja**       | Vermarktende Flugnummer (Marketing-Flugnummer) |
| `airline`                | string  | **Ja**       | Anzeigename der Fluggesellschaft               |
| `airline_code`           | string  | **Ja**       | IATA-Code der Fluggesellschaft                 |
| `departure_airport`      | string  | **Ja**       | IATA-Code des Abflughafens                     |
| `departure_airport_name` | string  | **Ja**       | Name des Abflughafens                          |
| `arrival_airport`        | string  | **Ja**       | IATA-Code des Ankunftsflughafens               |
| `arrival_airport_name`   | string  | **Ja**       | Name des Ankunftsflughafens                    |
| `departure_time`         | string  | **Ja**       | Lokale Abflugzeit `HH:MM`                      |
| `arrival_time`           | string  | **Ja**       | Lokale Ankunftszeit `HH:MM`                    |
| `departure_datetime`     | string  | **Ja**       | Lokales Abflugdatum mit Uhrzeit (ISO)          |
| `arrival_datetime`       | string  | **Ja**       | Lokales Ankunftsdatum mit Uhrzeit (ISO)        |
| `duration_min`           | integer | **Ja**       | Blockzeit der Teilstrecke in Minuten           |

### Umstieg (`layovers[]`) [#layover-layovers]

| Feld           | Typ     | Erforderlich | Beschreibung                           |
| -------------- | ------- | ------------ | -------------------------------------- |
| `airport`      | string  | **Ja**       | IATA-Code des Umsteigeflughafens       |
| `airport_name` | string  | **Ja**       | Name des Umsteigeflughafens            |
| `duration_min` | integer | **Ja**       | Bodenzeit vor der nächsten Teilstrecke |

## Client-Typen [#client-types]

<DocClientTypes id="v31/tickets/search-types" />

## Integration [#integration]

UIs für die Ticketsuche entprellen die Flughafenauswahl typischerweise (Debounce) und cachen Antworten pro Tupel `(origin, destination, date, passengers)` für bis zu eine Stunde. Das folgende Beispiel ruft Ergebnisse ab, bildet die günstigste Option auf ein Kartenmodell ab und behandelt leere `flights`-Arrays sauber.

<DocExample id="v31/tickets/search-fetch" />

### Hinweise zur Implementierung [#implementation-notes]

**Wichtig:** Angebote sind unverbindliche Momentaufnahmen des Marktes, kein Live-Bestand der Fluggesellschaften. Weisen Sie in passagierorientierten UIs darauf hin, dass sich Preise bei der Buchung ändern können.

Für den Echtzeitstatus eines gebuchten Flugs verwenden Sie [Flugstatus](/docs/v31/flight-status).

## Fehlerantworten [#error-responses]

Informationen zu plattformweiten Fehlern finden Sie unter [Fehlerbehandlung](/docs/errors). Endpoint-spezifisches Verhalten:

### 422 — ungültige Parameter [#422--invalid-parameters]

Wird zurückgegeben, wenn `origin`/`destination` fehlen oder die Validierung nicht bestehen.

### Integrationsleitfäden [#integration-guides]

| Leitfaden                                                        | Inhalt                                                              |
| ---------------------------------------------------------------- | ------------------------------------------------------------------- |
| [Ticketsuche](/docs/v31/tickets-integration)                     | Günstigste vs. schnellste Option, Reiseverläufe, mehrere Passagiere |
| [Fehlerbehandlung](/docs/v31/tickets-integration-errors)         | Leere Ergebnisse, IATA-Codes, unverbindliche Preise                 |
| [Caching & Monitoring](/docs/v31/tickets-integration-production) | Cache-Schlüssel für 1 h und Debounce                                |

<APIPage document="&#x22;https://api.skylinkapi.com/v3.1/openapi.json&#x22;" operations="[{&#x22;path&#x22;:&#x22;/tickets/search&#x22;,&#x22;method&#x22;:&#x22;get&#x22;}]" />
