curl --request GET \
--url https://data.flightportrait.com/v1/airports/{code}import requests
url = "https://data.flightportrait.com/v1/airports/{code}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://data.flightportrait.com/v1/airports/{code}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://data.flightportrait.com/v1/airports/{code}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://data.flightportrait.com/v1/airports/{code}"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://data.flightportrait.com/v1/airports/{code}")
.asString();require 'uri'
require 'net/http'
url = URI("https://data.flightportrait.com/v1/airports/{code}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"iata": "SIN",
"ident": "WSSS",
"name": "Singapore Changi",
"kind": "large_airport",
"lat": 1.35019,
"lon": 103.994,
"iso_country": "SG",
"municipality": "Singapore",
"tz": "Asia/Singapore",
"observed": {
"departures": 120,
"destinations": 40,
"tails": 80,
"days_observed": 60,
"routes": [
{
"dst": "LHR",
"flights": 14,
"days": 7
}
]
},
"today": {
"day": "2026-09-23",
"source": "published",
"departures": [
{
"flight": "SQ322",
"dst": "LHR",
"dep": "09:00",
"callsign": "SIA322",
"type": "A359"
}
],
"arrivals": [
{
"flight": "SQ317",
"org": "LHR",
"arr": "06:55",
"callsign": "SIA317",
"type": "A359"
}
]
},
"board": [
{
"flight": "SQ322",
"dst": "LHR",
"dep": "09:00",
"arr": "15:10",
"type": "A359",
"flights": 12,
"source": "observed"
}
],
"arrivals": [
{
"flight": "SQ317",
"org": "LHR",
"dep": "11:00",
"arr": "06:55",
"type": "A359",
"flights": 11,
"source": "observed"
}
],
"airlines": [
{
"icao": "SIA",
"flights": 90
}
],
"times": "local",
"window_days": 60,
"coverage": "observed"
}{
"error": "<string>",
"detail": "<string>"
}{
"error": "<string>",
"detail": "<string>"
}{
"error": "rate_limited",
"detail": "slow down"
}{
"error": "<string>",
"detail": "<string>"
}Airport
One airport, IATA or ICAO code: registry identity, observed totals and busiest routes, and the inferred departures and arrivals boards in the airport’s LOCAL time. Circuits excluded. observed is null when the log artifact is not loaded. 404 if unknown. Rate: 120 per 600 s (bucket airport). Cache: 1 h edge.
curl --request GET \
--url https://data.flightportrait.com/v1/airports/{code}import requests
url = "https://data.flightportrait.com/v1/airports/{code}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://data.flightportrait.com/v1/airports/{code}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://data.flightportrait.com/v1/airports/{code}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://data.flightportrait.com/v1/airports/{code}"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://data.flightportrait.com/v1/airports/{code}")
.asString();require 'uri'
require 'net/http'
url = URI("https://data.flightportrait.com/v1/airports/{code}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"iata": "SIN",
"ident": "WSSS",
"name": "Singapore Changi",
"kind": "large_airport",
"lat": 1.35019,
"lon": 103.994,
"iso_country": "SG",
"municipality": "Singapore",
"tz": "Asia/Singapore",
"observed": {
"departures": 120,
"destinations": 40,
"tails": 80,
"days_observed": 60,
"routes": [
{
"dst": "LHR",
"flights": 14,
"days": 7
}
]
},
"today": {
"day": "2026-09-23",
"source": "published",
"departures": [
{
"flight": "SQ322",
"dst": "LHR",
"dep": "09:00",
"callsign": "SIA322",
"type": "A359"
}
],
"arrivals": [
{
"flight": "SQ317",
"org": "LHR",
"arr": "06:55",
"callsign": "SIA317",
"type": "A359"
}
]
},
"board": [
{
"flight": "SQ322",
"dst": "LHR",
"dep": "09:00",
"arr": "15:10",
"type": "A359",
"flights": 12,
"source": "observed"
}
],
"arrivals": [
{
"flight": "SQ317",
"org": "LHR",
"dep": "11:00",
"arr": "06:55",
"type": "A359",
"flights": 11,
"source": "observed"
}
],
"airlines": [
{
"icao": "SIA",
"flights": 90
}
],
"times": "local",
"window_days": 60,
"coverage": "observed"
}{
"error": "<string>",
"detail": "<string>"
}{
"error": "<string>",
"detail": "<string>"
}{
"error": "rate_limited",
"detail": "slow down"
}{
"error": "<string>",
"detail": "<string>"
}Path Parameters
IATA or ICAO airport code.
Response
OK
ICAO ident.
Totals from the flight log. Null = log artifact not loaded. Circuits excluded.
Show child attributes
Show child attributes
Inferred typical departures, local time, dep-sorted. Rows are a mix of observation and published timetable data; check each row's source.
Show child attributes
Show child attributes
Inferred typical arrivals, this airport's local time, arr-sorted. Same provenance rules as board.
Show child attributes
Show child attributes
Busiest airlines on the board, top 20.
Show child attributes
Show child attributes
"local"Days of history the log covers. Null when the log artifact is not loaded.
Always "observed": evidence from our receivers and open trace archives, never a published schedule or registry.
"observed"OurAirports kind (large_airport, ...).
commercial, general, military, or closed.
Olson timezone.
Today's board as the airport publishes it, in the airport's local day. Null when no published board is held for it.
Show child attributes
Show child attributes