# OpenSky Network

> Track aircraft with the OpenSky Network, a community of receivers that share live ADS-B data. Find what is flying over a place right now, look up an aircraft by its transponder address, replay the path it flew, and list the arrivals and departures at any airport.

App · Travel & Places · 8 actions. Web page: https://docs.lodol.com/docs/integrations/opensky-network

## Actions

### Find aircraft in an area

List the aircraft OpenSky can see within a radius of a point, nearest first, each with its position, altitude, speed and heading. Leave the centre empty to look worldwide.

**Inputs**

- Centre latitude (`latitude`, number): Latitude of the point to look around, in degrees. Leave this and the longitude empty to look worldwide. From -90 to 90.
- Centre longitude (`longitude`, number): Longitude of the point to look around, in degrees. From -180 to 180.
- Radius (km) (`radius_km`, number): How far around the centre point to look, in kilometres. A smaller radius also costs fewer of the day's API credits. From 1 to 20000. Default: `100`.
- As of (`at_time`, date and time): Positions as they were at this moment. Leave empty for right now. OpenSky keeps live positions for one hour.
- Flight status (`flight_status`, text): Keep only aircraft that are airborne, or only those on the ground. One of: `any`, `airborne`, `on_ground` (On the ground). Default: `any`.
- Aircraft categories (`categories`, list): Keep only these kinds of aircraft. Leave empty for all of them. Not every transponder broadcasts its category, and those aircraft are left out whenever this filter is used. One or more of: `no_information` (No information at all), `no_adsb_category` (No ADS-B emitter category information), `light` (Light (< 15500 lbs)), `small` (Small (15500 to 75000 lbs)), `large` (Large (75000 to 300000 lbs)), `high_vortex_large` (High vortex large (aircraft such as B-757)), `heavy` (Heavy (> 300000 lbs)), `high_performance` (High performance (> 5g acceleration and 400 kts)), `rotorcraft`, `glider` (Glider / sailplane), and 11 more.
- How many aircraft (`limit`, number): The most aircraft to return. However many were cut, the full number that matched still comes back as Total matched. From 1 to 10000. Default: `100`.

**Outputs**

- `aircraft` (list): The aircraft in the area, nearest to the centre first
- `count` (number): How many rows were returned
- `observed_at` (text): The moment these positions describe (ISO 8601, UTC). Feed it back into 'As of' to re-read the same snapshot.
- `total_matched` (number): How many matched before the limit was applied

**Example output**

```json
{
  "aircraft": [
    {
      "baro_altitude_ft": 20650.0,
      "baro_altitude_m": 6294.12,
      "callsign": "DLH9LF",
      "category": "Large (75000 to 300000 lbs)",
      "distance_km": 4.2,
      "geo_altitude_ft": 21875.0,
      "geo_altitude_m": 6667.5,
      "icao24": "3c675a",
      "last_contact_at": "2026-08-15T09:35:10Z",
      "latitude": 50.0264,
      "longitude": 8.5431,
      "on_ground": false,
      "origin_country": "Germany",
      "position_source": "ADS-B",
      "position_updated_at": "2026-08-15T09:35:10Z",
      "sensors": [],
      "spi": false,
      "squawk": "1000",
      "true_track": 170.3,
      "velocity_knots": 397.7,
      "velocity_ms": 204.59,
      "vertical_rate_ft_per_min": 1088.6,
      "vertical_rate_ms": 5.53
    }
  ],
  "count": 1,
  "observed_at": "2026-08-15T09:35:10Z",
  "total_matched": 1
}
```

### Get aircraft seen by your receivers

List the aircraft the connected account's own OpenSky receivers can see. This costs no API credits and has no history limit, but it only works for accounts that feed data to OpenSky.

**Inputs**

- Receiver serial numbers (`serials`, list): Only report what these receivers of yours can see. Leave empty for all of them. Serial numbers are listed on your OpenSky account page.
- Aircraft addresses (`icao24`, list): Only report these aircraft, as ICAO 24-bit addresses. Leave empty for everything your receivers can see.
- As of (`at_time`, date and time): Positions as they were at this moment. Leave empty for right now. Your own receivers' history has no one-hour limit.
- Flight status (`flight_status`, text): Keep only aircraft that are airborne, or only those on the ground. One of: `any`, `airborne`, `on_ground` (On the ground). Default: `any`.
- Aircraft categories (`categories`, list): Keep only these kinds of aircraft. Leave empty for all of them. Not every transponder broadcasts its category, and those aircraft are left out whenever this filter is used. One or more of: `no_information` (No information at all), `no_adsb_category` (No ADS-B emitter category information), `light` (Light (< 15500 lbs)), `small` (Small (15500 to 75000 lbs)), `large` (Large (75000 to 300000 lbs)), `high_vortex_large` (High vortex large (aircraft such as B-757)), `heavy` (Heavy (> 300000 lbs)), `high_performance` (High performance (> 5g acceleration and 400 kts)), `rotorcraft`, `glider` (Glider / sailplane), and 11 more.
- How many aircraft (`limit`, number): The most aircraft to return. However many were cut, the full number that matched still comes back as Total matched. From 1 to 10000. Default: `100`.

**Outputs**

- `aircraft` (list): The aircraft your own receivers can currently see
- `count` (number): How many rows were returned
- `observed_at` (text): The moment these positions describe (ISO 8601, UTC). Feed it back into 'As of' to re-read the same snapshot.
- `total_matched` (number): How many matched before the limit was applied

**Example output**

```json
{
  "aircraft": [
    {
      "baro_altitude_ft": 20650.0,
      "baro_altitude_m": 6294.12,
      "callsign": "DLH9LF",
      "category": "Large (75000 to 300000 lbs)",
      "distance_km": null,
      "geo_altitude_ft": 21875.0,
      "geo_altitude_m": 6667.5,
      "icao24": "3c675a",
      "last_contact_at": "2026-08-15T09:35:10Z",
      "latitude": 50.0264,
      "longitude": 8.5431,
      "on_ground": false,
      "origin_country": "Germany",
      "position_source": "ADS-B",
      "position_updated_at": "2026-08-15T09:35:10Z",
      "sensors": [],
      "spi": false,
      "squawk": "1000",
      "true_track": 170.3,
      "velocity_knots": 397.7,
      "velocity_ms": 204.59,
      "vertical_rate_ft_per_min": 1088.6,
      "vertical_rate_ms": 5.53
    }
  ],
  "count": 1,
  "observed_at": "2026-08-15T09:35:10Z",
  "total_matched": 1
}
```

### Get an aircraft's position

Look up where one or more aircraft are right now from their ICAO 24-bit transponder addresses. An aircraft that is switched off or out of range is simply not returned.

**Inputs**

- Aircraft addresses (`icao24`, list, required): One or more ICAO 24-bit addresses: six hexadecimal characters each, for example 3c675a. Every action here returns this address, so it can be chained from a search or from a flight.
- As of (`at_time`, date and time): Positions as they were at this moment. Leave empty for right now. OpenSky keeps live positions for one hour.

**Outputs**

- `aircraft` (list): The aircraft that were found. An aircraft that is switched off or out of range is simply absent.
- `count` (number): How many rows were returned
- `observed_at` (text): The moment these positions describe (ISO 8601, UTC). Feed it back into 'As of' to re-read the same snapshot.
- `total_matched` (number): How many matched before the limit was applied

**Example output**

```json
{
  "aircraft": [
    {
      "baro_altitude_ft": 20650.0,
      "baro_altitude_m": 6294.12,
      "callsign": "DLH9LF",
      "category": "Large (75000 to 300000 lbs)",
      "distance_km": null,
      "geo_altitude_ft": 21875.0,
      "geo_altitude_m": 6667.5,
      "icao24": "3c675a",
      "last_contact_at": "2026-08-15T09:35:10Z",
      "latitude": 50.0264,
      "longitude": 8.5431,
      "on_ground": false,
      "origin_country": "Germany",
      "position_source": "ADS-B",
      "position_updated_at": "2026-08-15T09:35:10Z",
      "sensors": [],
      "spi": false,
      "squawk": "1000",
      "true_track": 170.3,
      "velocity_knots": 397.7,
      "velocity_ms": 204.59,
      "vertical_rate_ft_per_min": 1088.6,
      "vertical_rate_ms": 5.53
    }
  ],
  "count": 1,
  "observed_at": "2026-08-15T09:35:10Z",
  "total_matched": 1
}
```

### Get an aircraft's track

Get the path one aircraft flew as a list of waypoints, each with its position, altitude and heading. Leave the time empty for the track of a flight happening right now, or give a moment inside a past flight (up to 30 days back) for that flight's track.

**Inputs**

- Aircraft address (`icao24`, text, required): The aircraft's ICAO 24-bit address: six hexadecimal characters, for example 3c675a. Every action here returns this address, so it can be chained from a search or from a flight.
- A moment during the flight (`at_time`, date and time): Any moment between the flight taking off and landing. Leave empty for the flight happening right now. OpenSky keeps tracks for 30 days.

**Outputs**

- `callsign` (text): The callsign flown for the whole track. Can be empty.
- `end_time` (text): When the track ends (ISO 8601, UTC)
- `icao24` (text): The aircraft's ICAO 24-bit address in hex
- `start_time` (text): When the track begins (ISO 8601, UTC)
- `waypoint_count` (number): How many waypoints the track has. Zero means OpenSky has no track for that aircraft at that moment.
- `waypoints` (list): The path flown, in order

**Example output**

```json
{
  "callsign": "DLH9LF",
  "end_time": "2026-08-13T07:38:02Z",
  "icao24": "3c675a",
  "start_time": "2026-08-13T06:12:41Z",
  "waypoint_count": 1,
  "waypoints": [
    {
      "baro_altitude_ft": 400.0,
      "baro_altitude_m": 121.92,
      "latitude": 50.0264,
      "longitude": 8.5431,
      "on_ground": false,
      "time": "2026-08-13T06:12:41Z",
      "true_track": 249.8
    }
  ]
}
```

### List an aircraft's flights

List the flights one aircraft made in a window of up to two days, with the airports it flew between. Flights are worked out overnight, so the most recent day may not be there yet.

**Inputs**

- Aircraft address (`icao24`, text, required): The aircraft's ICAO 24-bit address: six hexadecimal characters, for example 3c675a. Every action here returns this address, so it can be chained from a search or from a flight.
- From (`start_time`, date and time, required): The start of the window to look in.
- To (`end_time`, date and time, required): The end of the window to look in. OpenSky answers this one for windows of up to two days.
- How many flights (`limit`, number): The most flights to return, earliest departure first. However many were cut, the full number that matched still comes back as Total matched. From 1 to 10000. Default: `100`.

**Outputs**

- `count` (number): How many rows were returned
- `flights` (list): The aircraft's flights, earliest departure first
- `total_matched` (number): How many matched before the limit was applied

**Example output**

```json
{
  "count": 1,
  "flights": [
    {
      "arrival_airport": "EGLL",
      "arrival_airport_altitude_m": 122.0,
      "arrival_airport_distance_m": 2380.0,
      "arrival_time": "2026-08-13T07:38:02Z",
      "callsign": "DLH9LF",
      "departure_airport": "EDDF",
      "departure_airport_altitude_m": 91.0,
      "departure_airport_distance_m": 1420.0,
      "departure_time": "2026-08-13T06:12:41Z",
      "duration_minutes": 85.3,
      "icao24": "3c675a",
      "other_arrival_airport_candidates": 0,
      "other_departure_airport_candidates": 0
    }
  ],
  "total_matched": 1
}
```

### List arrivals at an airport

List the flights that landed at an airport during a window of up to two days, with where each one came from. Arrivals are worked out overnight, so the most recent day may not be there yet.

**Inputs**

- Airport (`airport`, text, required): The airport's four-letter ICAO code, for example EDDF for Frankfurt. IATA codes such as FRA are not accepted. Flights that landed here are returned.
- From (`start_time`, date and time, required): The start of the window to look in.
- To (`end_time`, date and time, required): The end of the window to look in. OpenSky answers this one for windows of up to two days.
- How many flights (`limit`, number): The most flights to return, earliest departure first. However many were cut, the full number that matched still comes back as Total matched. From 1 to 10000. Default: `100`.

**Outputs**

- `count` (number): How many rows were returned
- `flights` (list): The flights that landed there, earliest departure first
- `total_matched` (number): How many matched before the limit was applied

**Example output**

```json
{
  "count": 1,
  "flights": [
    {
      "arrival_airport": "EGLL",
      "arrival_airport_altitude_m": 122.0,
      "arrival_airport_distance_m": 2380.0,
      "arrival_time": "2026-08-13T07:38:02Z",
      "callsign": "DLH9LF",
      "departure_airport": "EDDF",
      "departure_airport_altitude_m": 91.0,
      "departure_airport_distance_m": 1420.0,
      "departure_time": "2026-08-13T06:12:41Z",
      "duration_minutes": 85.3,
      "icao24": "3c675a",
      "other_arrival_airport_candidates": 0,
      "other_departure_airport_candidates": 0
    }
  ],
  "total_matched": 1
}
```

### List departures from an airport

List the flights that left an airport during a window of up to two days, with where each one went. Departures are worked out overnight, so the most recent day may not be there yet.

**Inputs**

- Airport (`airport`, text, required): The airport's four-letter ICAO code, for example EDDF for Frankfurt. IATA codes such as FRA are not accepted. Flights that took off from here are returned.
- From (`start_time`, date and time, required): The start of the window to look in.
- To (`end_time`, date and time, required): The end of the window to look in. OpenSky answers this one for windows of up to two days.
- How many flights (`limit`, number): The most flights to return, earliest departure first. However many were cut, the full number that matched still comes back as Total matched. From 1 to 10000. Default: `100`.

**Outputs**

- `count` (number): How many rows were returned
- `flights` (list): The flights that left there, earliest departure first
- `total_matched` (number): How many matched before the limit was applied

**Example output**

```json
{
  "count": 1,
  "flights": [
    {
      "arrival_airport": "EGLL",
      "arrival_airport_altitude_m": 122.0,
      "arrival_airport_distance_m": 2380.0,
      "arrival_time": "2026-08-13T07:38:02Z",
      "callsign": "DLH9LF",
      "departure_airport": "EDDF",
      "departure_airport_altitude_m": 91.0,
      "departure_airport_distance_m": 1420.0,
      "departure_time": "2026-08-13T06:12:41Z",
      "duration_minutes": 85.3,
      "icao24": "3c675a",
      "other_arrival_airport_candidates": 0,
      "other_departure_airport_candidates": 0
    }
  ],
  "total_matched": 1
}
```

### List flights in a time window

List every flight the whole network saw in a window of up to two hours, each with its estimated departure and arrival airports. Flights are worked out overnight, so ask for a window that has already been processed rather than the last few hours.

**Inputs**

- From (`start_time`, date and time, required): The start of the window to look in.
- To (`end_time`, date and time, required): The end of the window to look in. OpenSky answers this one for windows of up to two hours.
- How many flights (`limit`, number): The most flights to return, earliest departure first. However many were cut, the full number that matched still comes back as Total matched. From 1 to 10000. Default: `100`.

**Outputs**

- `count` (number): How many rows were returned
- `flights` (list): The flights that finished in the window, earliest departure first
- `total_matched` (number): How many matched before the limit was applied

**Example output**

```json
{
  "count": 1,
  "flights": [
    {
      "arrival_airport": "EGLL",
      "arrival_airport_altitude_m": 122.0,
      "arrival_airport_distance_m": 2380.0,
      "arrival_time": "2026-08-13T07:38:02Z",
      "callsign": "DLH9LF",
      "departure_airport": "EDDF",
      "departure_airport_altitude_m": 91.0,
      "departure_airport_distance_m": 1420.0,
      "departure_time": "2026-08-13T06:12:41Z",
      "duration_minutes": 85.3,
      "icao24": "3c675a",
      "other_arrival_airport_candidates": 0,
      "other_departure_airport_candidates": 0
    }
  ],
  "total_matched": 1
}
```
