curl --request GET \
--url https://data.flightportrait.com/v1/flights/{callsign}import requests
url = "https://data.flightportrait.com/v1/flights/{callsign}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://data.flightportrait.com/v1/flights/{callsign}', 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/flights/{callsign}",
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/flights/{callsign}"
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/flights/{callsign}")
.asString();require 'uri'
require 'net/http'
url = URI("https://data.flightportrait.com/v1/flights/{callsign}")
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{
"callsign": "SQ322",
"route": [
"SIN",
"LHR"
],
"route_source": "observed",
"legs": [
{
"org": "SIN",
"dst": "LHR",
"flights": 12,
"days": 7,
"last": "2026-08-27",
"dep": "09:00",
"arr": "15:10",
"type": "A359"
}
],
"aircraft": [
{
"hex": "76cd06",
"reg": "9V-SHF",
"type": "A359",
"flights": 8
}
],
"recent": [
{
"date": "2026-08-27",
"org": "SIN",
"dst": "LHR",
"dep_ts": 1787800000,
"arr_ts": 1787845000
}
],
"window_days": 60,
"coverage": "observed"
}{
"error": "<string>",
"detail": "<string>"
}{
"error": "<string>",
"detail": "<string>"
}{
"error": "rate_limited",
"detail": "slow down"
}{
"error": "<string>",
"detail": "<string>"
}Flight
One flight number: derived route, observed legs with typical local times, the airframes that fly it, recent operations. Sections fed by an unloaded artifact are null. Observation, not a published schedule. 404 if never observed. Rate: 120 per 600 s (bucket flight). Cache: 1 h edge.
curl --request GET \
--url https://data.flightportrait.com/v1/flights/{callsign}import requests
url = "https://data.flightportrait.com/v1/flights/{callsign}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://data.flightportrait.com/v1/flights/{callsign}', 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/flights/{callsign}",
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/flights/{callsign}"
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/flights/{callsign}")
.asString();require 'uri'
require 'net/http'
url = URI("https://data.flightportrait.com/v1/flights/{callsign}")
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{
"callsign": "SQ322",
"route": [
"SIN",
"LHR"
],
"route_source": "observed",
"legs": [
{
"org": "SIN",
"dst": "LHR",
"flights": 12,
"days": 7,
"last": "2026-08-27",
"dep": "09:00",
"arr": "15:10",
"type": "A359"
}
],
"aircraft": [
{
"hex": "76cd06",
"reg": "9V-SHF",
"type": "A359",
"flights": 8
}
],
"recent": [
{
"date": "2026-08-27",
"org": "SIN",
"dst": "LHR",
"dep_ts": 1787800000,
"arr_ts": 1787845000
}
],
"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
Callsign or flight ident, 2-12 alphanumerics.
Response
OK
The operating callsign the record is for.
[origin, ...via, destination], IATA, from the derived routes artifact, else from the community catalog. Null when unknown or the artifact is not loaded.
Observed legs, busiest first (top 10), with typical local times when the inferred timetable knows them. Null = log artifact not loaded.
Show child attributes
Show child attributes
Airframes flying it, busiest first (top 8). Null = log artifact not loaded.
Show child attributes
Show child attributes
Latest operations, newest first (up to 10). Null = log artifact not loaded.
Show child attributes
Show child attributes
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"The marketed number the request used when it differed (BA272 for BAW272).
observed, observed+catalog, or catalog. Null when route is null.