New rate limits now apply to all accounts.

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

Auth
x-api-key on every request (direct subscription). Learn more →

Departures

GEThttps://data.skylinkapi.com/v3/schedules/departures

Arrivals

GEThttps://data.skylinkapi.com/v3/schedules/arrivals
ParameterTypeRequiredDefaultDescription
icaostringOne of icao / iata-4-letter ICAO airport code
iatastringOne of icao / iata-3-letter IATA airport code
datestringNocurrent dateDate in DD-MM-YYYY format. Range: 5 days back to 1 day forward
timestringNocurrent timeTime in HH:MM format. Requires date when provided
tsintegerNo-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

FieldTypeRequiredDescription
iatastringYesRequested airport IATA code when known
directionstringYesdepartures or arrivals
airport_codestringYesEcho of your query
flightsarrayYesSchedule rows (may be empty)
total_flightsintegerYesTotal flights in the queried window
pages_fetchedintegerYesPages fetched behind the scenes

Flight row object (flights[])

FieldTypeRequiredDescription
TimestringYesLocal scheduled time
DatestringYesLocal date label
IATAstringYesOpposite airport IATA code
DestinationstringDepartures onlyDestination city/airport label
OriginstringArrivals onlyOrigin city/airport label
FlightstringYesFlight number
AirlinestringYesAirline display name
StatusstringYesFree-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: int

Integration

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."
    }
  ]
}
GET
/schedules/departures
x-api-key<token>

Your SkyLink licence key, for keys bought direct from skylinkapi.com.

In: header

Query Parameters

icao?string

4-letter ICAO airport code (e.g. KJFK, EGLL)

Length4 <= length <= 4
iata?string

3-letter IATA airport code (e.g. JFK, LHR)

Length3 <= length <= 3
date?string

Date in DD-MM-YYYY format (e.g. 11-02-2026). Range: 5 days back to 1 day forward.

time?string

Time in HH:MM format (e.g. 14:30). Requires date parameter.

ts?integer

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": {}
    }
  ]
}
GET
/schedules/arrivals
x-api-key<token>

Your SkyLink licence key, for keys bought direct from skylinkapi.com.

In: header

Query Parameters

icao?string

4-letter ICAO airport code (e.g. KJFK, EGLL)

Length4 <= length <= 4
iata?string

3-letter IATA airport code (e.g. JFK, LHR)

Length3 <= length <= 3
date?string

Date in DD-MM-YYYY format (e.g. 11-02-2026). Range: 5 days back to 1 day forward.

time?string

Time in HH:MM format (e.g. 14:30). Requires date parameter.

ts?integer

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