Schedules
Departure and arrival schedules for an airport over a time window. Both operations return the same flight-row shape with a direction discriminator (departures or arrivals). By default the API returns upcoming flights for roughly the next 12 hours.
Use for airport boards, dispatch dashboards, and batch ETL. Provide exactly one airport identifier (icao or iata) per request.
Important: Flight row keys use title case — Time, Flight, Status, not time, flight, status. Accessing lowercase keys returns undefined.
Request
Requirements
x-api-key on every request (direct subscription). Learn more →Departures
https://data.skylinkapi.com/v3/schedules/departuresArrivals
https://data.skylinkapi.com/v3/schedules/arrivals| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
icao | string | One of icao / iata | - | 4-letter ICAO airport code |
iata | string | One of icao / iata | - | 3-letter IATA airport code |
date | string | No | current date | Date in DD-MM-YYYY format. Range: 5 days back to 1 day forward |
time | string | No | current time | Time in HH:MM format. Requires date when provided |
ts | integer | No | - | Unix timestamp in milliseconds. When set, overrides date and time |
Response
Departures example
{
"iata": "MXP",
"direction": "departures",
"airport_code": "LIMC",
"flights": [
{
"Time": "16:05",
"Date": "11 Feb",
"IATA": "ICN",
"Destination": "Seoul",
"Flight": "C84093",
"Airline": "Federal Airlines",
"Status": "Estimated 16:39"
}
],
"total_flights": 85,
"pages_fetched": 3
}Arrivals example
{
"iata": "MXP",
"direction": "arrivals",
"airport_code": "LIMC",
"flights": [
{
"Time": "16:20",
"Date": "11 Feb",
"IATA": "RAK",
"Origin": "Marrakech",
"Flight": "EC3929",
"Airline": "easyJet Europe",
"Status": "Landed 16:15"
}
],
"total_flights": 72,
"pages_fetched": 3
}Envelope fields
| Field | Type | Required | Description |
|---|---|---|---|
iata | string | Yes | Requested airport IATA code when known |
direction | string | Yes | departures or arrivals |
airport_code | string | Yes | Echo of your query |
flights | array | Yes | Schedule rows (may be empty) |
total_flights | integer | Yes | Total flights in the queried window |
pages_fetched | integer | Yes | Pages fetched behind the scenes |
Flight row object (flights[])
| Field | Type | Required | Description |
|---|---|---|---|
Time | string | Yes | Local scheduled time |
Date | string | Yes | Local date label |
IATA | string | Yes | Opposite airport IATA code |
Destination | string | Departures only | Destination city/airport label |
Origin | string | Arrivals only | Origin city/airport label |
Flight | string | Yes | Flight number |
Airline | string | Yes | Airline display name |
Status | string | Yes | Free-form status text |
Client types
"""Schedules response models for /schedules/departures and /schedules/arrivals."""from __future__ import annotationsfrom dataclasses import dataclass@dataclassclass SchedulesRequest: """Query input shared by both schedules endpoints.""" icao: str | None = None iata: str | None = None date: str | None = None time: str | None = None ts: int | None = None@dataclassclass ScheduleFlight: Time: str Date: str IATA: str Flight: str Airline: str Status: str Destination: str | None = None Origin: str | None = None@dataclassclass SchedulesResponse: iata: str direction: str airport_code: str flights: list[ScheduleFlight] total_flights: int pages_fetched: intIntegration
import osimport requestsBASE = "https://data.skylinkapi.com/v3"HEADERS = { "x-api-key": os.getenv("SKYLINK_API_KEY", "YOUR_API_KEY")}def fetch_schedules(direction: str, *, icao: str | None = None, iata: str | None = None) -> dict: """Fetch airport schedules for arrivals or departures.""" if bool(icao) == bool(iata): raise ValueError("Provide exactly one of icao or iata") if direction not in {"arrivals", "departures"}: raise ValueError("direction must be arrivals or departures") code = icao.upper() if icao else (iata or "").upper() params = {"icao": code} if icao else {"iata": code} r = requests.get(f"{BASE}/schedules/{direction}", headers=HEADERS, params=params, timeout=(10, 20)) r.raise_for_status() return r.json()if __name__ == "__main__": import json data = fetch_schedules("departures", icao="KJFK") flights = data.get("flights") or [] print(json.dumps({"count": len(flights), "sample": flights[:3]}, indent=2, default=str))Implementation notes
Status parsing. Status is display text — parse conservatively.
Single-flight detail. For gate and terminal on one flight, use Flight Status.
Error responses
422 - invalid date/time or missing airport code
{
"detail": [
{
"type": "value_error",
"loc": ["query", "date"],
"msg": "Invalid date format. Expected DD-MM-YYYY."
}
]
}Your SkyLink licence key, for keys bought direct from skylinkapi.com.
In: header
Query Parameters
4-letter ICAO airport code (e.g. KJFK, EGLL)
4 <= length <= 43-letter IATA airport code (e.g. JFK, LHR)
3 <= length <= 3Date in DD-MM-YYYY format (e.g. 11-02-2026). Range: 5 days back to 1 day forward.
Time in HH:MM format (e.g. 14:30). Requires date parameter.
Unix timestamp in milliseconds (alternative to date/time).
Response Body
application/json
application/json
curl -X GET "https://data.skylinkapi.com/v3/schedules/departures"{
"iata": "MXP",
"direction": "departures",
"airport_code": "LIMC",
"flights": [
{
"Time": "16:05",
"Date": "11 Feb",
"IATA": "ICN",
"Destination": "Seoul",
"Flight": "C84093",
"Airline": "Federal Airlines",
"Status": "Estimated 16:39"
}
],
"total_flights": 85,
"pages_fetched": 3
}{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}Your SkyLink licence key, for keys bought direct from skylinkapi.com.
In: header
Query Parameters
4-letter ICAO airport code (e.g. KJFK, EGLL)
4 <= length <= 43-letter IATA airport code (e.g. JFK, LHR)
3 <= length <= 3Date in DD-MM-YYYY format (e.g. 11-02-2026). Range: 5 days back to 1 day forward.
Time in HH:MM format (e.g. 14:30). Requires date parameter.
Unix timestamp in milliseconds (alternative to date/time).
Response Body
application/json
application/json
curl -X GET "https://data.skylinkapi.com/v3/schedules/arrivals"{
"iata": "MXP",
"direction": "arrivals",
"airport_code": "LIMC",
"flights": [
{
"Time": "16:20",
"Date": "11 Feb",
"IATA": "RAK",
"Origin": "Marrakech",
"Flight": "EC3929",
"Airline": "easyJet Europe",
"Status": "Landed 16:15"
}
],
"total_flights": 72,
"pages_fetched": 3
}{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}Related: Flight Status · Airports · Airlines