Flugtickets
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.
Anfrage
Voraussetzungen
x-api-key bei jeder Anfrage (Direktabonnement). Mehr erfahren →https://data.skylinkapi.com/v3.1/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
{
"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
| 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[])
| 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[])
| 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[])
| 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
"""Flight ticket search models for /tickets/search."""from __future__ import annotationsfrom dataclasses import dataclass@dataclassclass TicketLeg: flight_number: str airline: str airline_code: str departure_airport: str departure_airport_name: str arrival_airport: str arrival_airport_name: str departure_time: str arrival_time: str departure_datetime: str arrival_datetime: str duration_min: int@dataclassclass TicketItinerary: price_usd: float original_price: float original_currency: str total_duration_min: int stops: int legs: list[TicketLeg]@dataclassclass TicketSearchResponse: origin: str destination: str date: str passengers: int count: int flights: list[TicketItinerary]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.
import osfrom dataclasses import dataclassimport requestsBASE = "https://data.skylinkapi.com/v3.1"HEADERS = { "x-api-key": os.getenv("SKYLINK_API_KEY", "YOUR_API_KEY")}@dataclassclass TicketOption: price_usd: float stops: int total_duration_min: int first_flight: str | Nonedef search_tickets( *, origin: str, destination: str, date: str | None = None, passengers: int = 1,) -> dict: """Search available flight tickets for a city pair.""" params: dict[str, str | int] = { "origin": origin.upper(), "destination": destination.upper(), "passengers": passengers, } if date: params["date"] = date r = requests.get(f"{BASE}/tickets/search", headers=HEADERS, params=params, timeout=(10, 30)) r.raise_for_status() return r.json()def cheapest_ticket(origin: str, destination: str, *, date: str | None = None) -> TicketOption | None: data = search_tickets(origin=origin, destination=destination, date=date) flights = data.get("flights") or [] if not flights: return None best = flights[0] legs = best.get("legs") or [] first = legs[0]["flight_number"] if legs else None return TicketOption( price_usd=float(best["price_usd"]), stops=int(best["stops"]), total_duration_min=int(best["total_duration_min"]), first_flight=first, )if __name__ == "__main__": import json data = search_tickets(origin="JFK", destination="LAX") print(json.dumps({"count": data.get("count"), "origin": data.get("origin")}, indent=2, default=str))Hinweise zur Implementierung
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.
Fehlerantworten
Informationen zu plattformweiten Fehlern finden Sie unter Fehlerbehandlung. Endpoint-spezifisches Verhalten:
422 — ungültige Parameter
Wird zurückgegeben, wenn origin/destination fehlen oder die Validierung nicht bestehen.
Integrationsleitfäden
| Leitfaden | Inhalt |
|---|---|
| Ticketsuche | Günstigste vs. schnellste Option, Reiseverläufe, mehrere Passagiere |
| Fehlerbehandlung | Leere Ergebnisse, IATA-Codes, unverbindliche Preise |
| Caching & Monitoring | Cache-Schlüssel für 1 h und Debounce |
Your SkyLink licence key, for keys bought direct from skylinkapi.com.
In: header
Query Parameters
Origin airport IATA code (e.g. 'LHR')
Destination airport IATA code (e.g. 'JFK')
Travel date (YYYY-MM-DD). Defaults to 7 days from today.
Number of passengers (default 1, max 9)
11 <= value <= 9Response Body
application/json
application/json
curl -X GET "https://data.skylinkapi.com/v3.1/tickets/search?origin=string&destination=string"{
"origin": "LHR",
"destination": "JFK",
"date": "2026-05-01",
"passengers": 1,
"count": 3,
"flights": [
{
"price_usd": 542,
"original_price": 498,
"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,
"original_price": 367,
"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
}
]
}
]
}{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}