I am using /api/flight-summary/light programmatically with rolling windows and I keep seeing the same failure mode:
Core failure mode
flight_datetime_from / flight_datetime_to is evaluated on first_seen.
first_seen is often far from actual departure time (sometimes by hours).
Matching fields (dest_icao, type, reg) can also appear later.
That combination creates misses: the flight is operationally active (or even airborne), but the query returns empty in real time. Later, replaying the same window can return the flight.
Support previously explained that this behavior is expected for many GA/military flights (late destination/type/reg assignment + first_seen time basis). My data matches that, but I also see misses when aircraft sit on the ground a long time before takeoff.
What I am expecting
If a flight is active and matches the filter now, there should be a way to retrieve it without relying only on initial first_seen.
What I am observing
Real-time polling returns empty windows.
Re-running the same request later can return the missed flight.
Data sources in examples below
csv snippets are from the CSV download on the flight/aircraft page on Flightradar24.
text snippets are real-time log lines from my poller at the moment the requests ran.
json snippets are post-mortem responses from replaying the same request windows found in the text snippets.
---
Example 1: inbound QXG (OECFE)
---
Example 2: aircraft type CA9 (PRZJM)
---
Example 3: inbound YYW (CFKAH)
---
Example 4: inbound DLL / KDLC (N5001U)
In this incident I logged 54 request/response pairs for inbound
LL; all 54 responses were empty in real time.
---
Example 5: inbound WBG (NAF77, C130) with long ground time
first_seen -> airborne gap is 2:13:52.
In this incident I logged 76 request/response pairs for inbound:WBG; all 76 were empty.
---
Why this is hard for clients
To avoid misses, clients have to increase window size significantly. That increases duplicate results and credit cost. A narrow real-time window is efficient but can miss flights when first_seen and matching-field availability are not aligned with actual flight activity.
Requested API improvements
Add a selectable time basis for flight_datetime_from / flight_datetime_to. Example: flight_datetime_field=first_seen|last_seen|datetim e_takeoff|datetime_landed.
Add an update-time query mode. Example: updated_since=<timestamp> or field_changed_since=<timestamp>. This would let clients catch late dest_icao / type / reg assignments without huge windows.
Add activity-aware filtering with clear timestamp semantics. Example: activity=airborne, min_altitude, min_groundspeed. Optionally apply datetime filtering to the first record that satisfies the activity filter.
Add assignment timestamps in payload. Example: dest_assigned_at, type_assigned_at, reg_assigned_at. This makes client behavior deterministic and easier to debug.
Add an active-flight time mode. Example: include flights where last_seen is inside the window (optionally with flight_ended=false).
Thanks for reviewing. I am trying to build a reliable real-time integration while keeping credit usage efficient.
Core failure mode
flight_datetime_from / flight_datetime_to is evaluated on first_seen.
first_seen is often far from actual departure time (sometimes by hours).
Matching fields (dest_icao, type, reg) can also appear later.
That combination creates misses: the flight is operationally active (or even airborne), but the query returns empty in real time. Later, replaying the same window can return the flight.
Support previously explained that this behavior is expected for many GA/military flights (late destination/type/reg assignment + first_seen time basis). My data matches that, but I also see misses when aircraft sit on the ground a long time before takeoff.
What I am expecting
If a flight is active and matches the filter now, there should be a way to retrieve it without relying only on initial first_seen.
What I am observing
Real-time polling returns empty windows.
Re-running the same request later can return the missed flight.
Data sources in examples below
csv snippets are from the CSV download on the flight/aircraft page on Flightradar24.
text snippets are real-time log lines from my poller at the moment the requests ran.
json snippets are post-mortem responses from replaying the same request windows found in the text snippets.
---
Example 1: inbound QXG (OECFE)
Code:
2026-02-12 03:52:37,079 INFO src.poller: Poll window: from=2026-02-12T11:46:05 to=2026-02-12T11:52:37 2026-02-12 03:53:48,657 INFO src.fr24.client: FR24 request URL: /api/flight-summary/light?airports=inbound:QXG&flight_datetime_from=2026-02-12T11:46:05&flight_datetime_to=2026-02-12T11:52:37 2026-02-12 03:54:01,998 INFO src.poller: Poll end [dur=84.9s sleep=9.7s] [air=none reg=none apt=none]
Code:
Timestamp,UTC,Callsign,Position,Altitude,Speed,Direction 1770896767,2026-02-12T11:46:07Z,OECFE,"48.105549,14.953217",0,0,182 1770897173,2026-02-12T11:52:53Z,OECFE,"48.102081,14.949646",1725,35,40
Code:
{"fr24_id":"3e4d1744","callsign":"OECFE","first_seen":"2026-02-12T11:46:07Z","datetime_takeoff":"2026-02-12T11:52:24Z","dest_icao":"LOLG","dest_icao_actual":"LOLG"}
Example 2: aircraft type CA9 (PRZJM)
Code:
2026-02-12 11:37:59,616 INFO src.poller: Poll window: from=2026-02-12T19:31:29 to=2026-02-12T19:37:59 2026-02-12 11:38:15,885 INFO src.fr24.client: FR24 request URL: /api/flight-summary/light?aircraft=CA9&flight_datetime_from=2026-02-12T19:31:29&flight_datetime_to=2026-02-12T19:37:59 2026-02-12 11:42:35,614 INFO src.poller: Poll window: from=2026-02-12T19:36:03 to=2026-02-12T19:42:35 2026-02-12 11:42:51,881 INFO src.fr24.client: FR24 request URL: /api/flight-summary/light?aircraft=CA9&flight_datetime_from=2026-02-12T19:36:03&flight_datetime_to=2026-02-12T19:42:35
Code:
Timestamp,UTC,Callsign,Position,Altitude,Speed,Direction 1770924750,2026-02-12T19:32:30Z,PRZJM,"-3.379589,-64.724937",0,0,210 1770925515,2026-02-12T19:45:15Z,PRZJM,"-3.3983,-64.566788",5625,130,84
Code:
{"fr24_id":"3e4eac29","callsign":"PRZJM","type":"CA9","reg":"PR-ZJM","first_seen":"2026-02-12T19:32:30Z","datetime_takeoff":"2026-02-12T19:41:38Z"}
Example 3: inbound YYW (CFKAH)
Code:
2026-02-12 12:57:20,993 INFO src.fr24.client: FR24 request URL: /api/flight-summary/light?airports=inbound:YYW&flight_datetime_from=2026-02-12T20:25:32&flight_datetime_to=2026-02-12T20:56:02
2026-02-12 12:57:21,304 INFO src.fr24.client: FR24 response JSON: {"data": []}
2026-02-12 13:15:41,906 INFO src.fr24.client: FR24 request URL: /api/flight-summary/light?airports=inbound:YYW&flight_datetime_from=2026-02-12T20:42:20&flight_datetime_to=2026-02-12T21:14:23
2026-02-12 13:15:42,284 INFO src.fr24.client: FR24 response JSON: {"data": []}
2026-02-12 13:45:29,809 INFO src.fr24.client: FR24 request URL: /api/flight-summary/light?airports=inbound:YYW&flight_datetime_from=2026-02-12T21:11:29&flight_datetime_to=2026-02-12T21:44:11
2026-02-12 13:45:30,097 INFO src.fr24.client: FR24 response JSON: {"data": []}
Code:
Timestamp,UTC,Callsign,Position,Altitude,Speed,Direction 1770929658,2026-02-12T20:54:18Z,CFKAH,"48.37635,-89.314636",0,10,236 1770930714,2026-02-12T21:11:54Z,CFKAH,"48.375137,-89.31237",450,64,71
Code:
{"fr24_id":"3e4ef91e","callsign":"CFKAH","first_seen":"2026-02-12T20:54:18Z","datetime_takeoff":"2026-02-12T21:11:54Z","dest_icao":"CYYW","dest_icao_actual":"CYQT"}
Example 4: inbound DLL / KDLC (N5001U)
Code:
2026-02-14 09:56:49,329 INFO src.fr24.client: FR24 request URL: /api/flight-summary/light?airports=inbound:DLL&flight_datetime_from=2026-02-14T16:51:57&flight_datetime_to=2026-02-14T17:54:58
2026-02-14 09:56:49,652 INFO src.fr24.client: FR24 response JSON: {"data": []}
...
2026-02-14 12:37:40,350 INFO src.fr24.client: FR24 request URL: /api/flight-summary/light?airports=inbound:DLL&flight_datetime_from=2026-02-14T19:32:48&flight_datetime_to=2026-02-14T20:35:49
2026-02-14 12:37:40,678 INFO src.fr24.client: FR24 response JSON: {"data": []}
Code:
Timestamp,UTC,Callsign,Position,Altitude,Speed,Direction 1771091653,2026-02-14T17:54:13Z,N5001U,"33.989365,-80.346886",775,95,40
Code:
{"fr24_id":"3e564439","callsign":"N5001U","first_seen":"2026-02-14T17:54:13Z","datetime_takeoff":"2026-02-14T17:53:42Z","dest_icao":"KDLC","dest_icao_actual":"KDLC"}
LL; all 54 responses were empty in real time.---
Example 5: inbound WBG (NAF77, C130) with long ground time
Code:
Timestamp,UTC,Callsign,Position,Altitude,Speed,Direction 1771398091,2026-02-18T07:01:31Z,NAF77,"51.4506,5.382262",0,0,216 1771406123,2026-02-18T09:15:23Z,NAF77,"51.444458,5.368118",75,108,35
Code:
2026-02-17 23:05:04,327 INFO src.fr24.client: FR24 request URL: /api/flight-summary/light?airports=inbound:WBG&flight_datetime_from=2026-02-18T05:59:46&flight_datetime_to=2026-02-18T07:02:47
2026-02-17 23:05:04,640 INFO src.fr24.client: FR24 response JSON: {"data": []}
2026-02-18 00:09:00,180 INFO src.fr24.client: FR24 request URL: /api/flight-summary/light?airports=inbound:WBG&flight_datetime_from=2026-02-18T07:03:39&flight_datetime_to=2026-02-18T08:06:43
2026-02-18 00:09:00,501 INFO src.fr24.client: FR24 response JSON: {"data": []}
2026-02-18 01:18:54,314 INFO src.fr24.client: FR24 request URL: /api/flight-summary/light?airports=inbound:WBG&flight_datetime_from=2026-02-18T08:13:37&flight_datetime_to=2026-02-18T09:16:37
2026-02-18 01:18:54,638 INFO src.fr24.client: FR24 response JSON: {"data": []}
---
Why this is hard for clients
To avoid misses, clients have to increase window size significantly. That increases duplicate results and credit cost. A narrow real-time window is efficient but can miss flights when first_seen and matching-field availability are not aligned with actual flight activity.
Requested API improvements
Add a selectable time basis for flight_datetime_from / flight_datetime_to. Example: flight_datetime_field=first_seen|last_seen|datetim e_takeoff|datetime_landed.
Add an update-time query mode. Example: updated_since=<timestamp> or field_changed_since=<timestamp>. This would let clients catch late dest_icao / type / reg assignments without huge windows.
Add activity-aware filtering with clear timestamp semantics. Example: activity=airborne, min_altitude, min_groundspeed. Optionally apply datetime filtering to the first record that satisfies the activity filter.
Add assignment timestamps in payload. Example: dest_assigned_at, type_assigned_at, reg_assigned_at. This makes client behavior deterministic and easier to debug.
Add an active-flight time mode. Example: include flights where last_seen is inside the window (optionally with flight_ended=false).
Thanks for reviewing. I am trying to build a reliable real-time integration while keeping credit usage efficient.
Comment