Open questions
curl --request GET \
--url https://data.flightportrait.com/v1/gapsimport requests
url = "https://data.flightportrait.com/v1/gaps"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://data.flightportrait.com/v1/gaps', 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/gaps",
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/gaps"
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/gaps")
.asString();require 'uri'
require 'net/http'
url = URI("https://data.flightportrait.com/v1/gaps")
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{
"total": 1,
"offset": 0,
"gaps": [
{
"callsign": "SIA842",
"side": "dest",
"known": "SIN",
"type": "B78X",
"n_recent": 13,
"last_seen": "2026-09-06",
"last_heard": {
"lat": 12.41,
"lon": 106.92,
"track": 21
},
"rotation_km": 3150,
"suggested": [
"TFU",
"CTU"
]
}
],
"coverage": "observed"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}{
"error": "rate_limited",
"detail": "slow down"
}{
"error": "<string>",
"detail": "<string>"
}Contributions
Open questions
Callsigns whose route observation settled at one end only, most-seen first. Each row says which end is missing, which is known, where the aircraft was last heard, and how far its rotation says the other end is. Answers go to the contribution door, not this API. Rate: 300 per 600 s (bucket gaps). Cache: 10 min edge.
GET
/
v1
/
gaps
Open questions
curl --request GET \
--url https://data.flightportrait.com/v1/gapsimport requests
url = "https://data.flightportrait.com/v1/gaps"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://data.flightportrait.com/v1/gaps', 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/gaps",
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/gaps"
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/gaps")
.asString();require 'uri'
require 'net/http'
url = URI("https://data.flightportrait.com/v1/gaps")
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{
"total": 1,
"offset": 0,
"gaps": [
{
"callsign": "SIA842",
"side": "dest",
"known": "SIN",
"type": "B78X",
"n_recent": 13,
"last_seen": "2026-09-06",
"last_heard": {
"lat": 12.41,
"lon": 106.92,
"track": 21
},
"rotation_km": 3150,
"suggested": [
"TFU",
"CTU"
]
}
],
"coverage": "observed"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}{
"error": "rate_limited",
"detail": "slow down"
}{
"error": "<string>",
"detail": "<string>"
}Query Parameters
ICAO airline prefix.
Required string length:
2 - 3Pattern:
^(origin|dest)$Required range:
1 <= x <= 200Required range:
x >= 0