curl --request GET \
--url https://data.flightportrait.com/v1/estimatedimport requests
url = "https://data.flightportrait.com/v1/estimated"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://data.flightportrait.com/v1/estimated', 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/estimated",
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/estimated"
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/estimated")
.asString();require 'uri'
require 'net/http'
url = URI("https://data.flightportrait.com/v1/estimated")
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{
"generated_at": 1790140000,
"method": "converge-to-destination",
"accuracy": {
"day": "2026-09-22",
"n": 208,
"median_km": 2.3,
"by_gap_min": {
"5-15": {
"n": 153,
"median_km": 1.4
},
"60-120": {
"n": 43,
"median_km": 76.9
}
}
},
"aircraft": [
{
"hex": "4ca8e4",
"flight": "RYR1153",
"t": "B738",
"r": "9H-QDS",
"category": "A3",
"lat": 43.1021,
"lon": 11.9403,
"track": 312.4,
"alt_baro": 36000,
"gs": 452,
"estimated": true,
"last_seen": {
"at": 1790139412,
"lat": 42.2,
"lon": 13.1
},
"destination": "PSA",
"eta": 1790140700
}
]
}{
"error": "rate_limited",
"detail": "slow down"
}Estimated positions
Aircraft the network stopped hearing while cruising, drawn where they most likely are: flown on from the last observed position toward the destination their callsign’s route names, at the last observed speed (holding the last track 10 minutes, then turning toward the destination). Every entry is an estimate, never an observation: estimated is always true, last_seen is the last real position, alt_baro and gs are the last observed values. An aircraft appears 90 s after it was last heard and leaves when it is heard again, nears its destination, or its flight time runs out. Kept in memory, never archived or exported. Scored every night against the previous day’s real coverage gaps; accuracy is the latest night’s result for the method in use (median error by gap length), null before the first. Rate: 300 per 600 s (bucket estimated). Cache: 15 s edge, 10 s browser.
curl --request GET \
--url https://data.flightportrait.com/v1/estimatedimport requests
url = "https://data.flightportrait.com/v1/estimated"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://data.flightportrait.com/v1/estimated', 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/estimated",
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/estimated"
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/estimated")
.asString();require 'uri'
require 'net/http'
url = URI("https://data.flightportrait.com/v1/estimated")
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{
"generated_at": 1790140000,
"method": "converge-to-destination",
"accuracy": {
"day": "2026-09-22",
"n": 208,
"median_km": 2.3,
"by_gap_min": {
"5-15": {
"n": 153,
"median_km": 1.4
},
"60-120": {
"n": 43,
"median_km": 76.9
}
}
},
"aircraft": [
{
"hex": "4ca8e4",
"flight": "RYR1153",
"t": "B738",
"r": "9H-QDS",
"category": "A3",
"lat": 43.1021,
"lon": 11.9403,
"track": 312.4,
"alt_baro": 36000,
"gs": 452,
"estimated": true,
"last_seen": {
"at": 1790139412,
"lat": 42.2,
"lon": 13.1
},
"destination": "PSA",
"eta": 1790140700
}
]
}{
"error": "rate_limited",
"detail": "slow down"
}Response
OK