Live and historical flight positions, airport data, airline data, flight tracks, events, and API usage from Flightradar24.
Bring your own key. This API needs your own Flightradar24 key - get one from the provider, add it once below, and the proxy injects it on every call. Your OmniStream plan covers the unified SDK, key storage, and proxy - the provider's own rate limits still apply to your key.
This is a community listing. If you own this API, you can request ownership.
npm install omnistream-sdkimport { OmniClient } from "omnistream-sdk";
const omni = new OmniClient({ token: process.env.OMNI_KEY! });
// One key reaches every API on the marketplace.
const data = await omni.call("flightradar24/get-airlines-light");One install, one key - the same client calls every API on the marketplace.
Specifies the FR24 API version. The currently available version is `v1`.
Airline ICAO code.
Get basic airline information by ICAO code
Get detailed airport information by code
Get basic airline information by code
Get real-time flight positions with detailed information
/**
* Flightradar24 - generated by OmniStream from Flightradar24's OpenAPI spec.
* One typed method per endpoint. A single Omni key reaches the API.
*/
const DEFAULT_BASE = "https://grid.skinvaults.online/v1/proxy/flightradar24";
export class Flightradar24Error extends Error {
status: number;
code?: string;
constructor(status: number, code: string | undefined, message?: string) {
super(message || `Flightradar24 error ${status}`);
this.name = "Flightradar24Error";
this.status = status;
this.code = code;
}
}
export interface Flightradar24Options {
baseUrl?: string;
fetch?: typeof fetch;
timeoutMs?: number;
}
export class Flightradar24 {
/** @param token Your OmniStream key (one key for every API). */
constructor(private token: string, private opts: Flightradar24Options = {}) {
if (!token) throw new Error("Flightradar24: token is required");
}
rateLimit: { remainingMinute?: number; remainingDay?: number } | null = null;
private async _request(method: string, path: string, { params, body }: { params?: Record<string, unknown>; body?: unknown } = {}): Promise<any> {
const f = this.opts.fetch ?? globalThis.fetch;
const url = new URL((this.opts.baseUrl ?? DEFAULT_BASE).replace(/\/+$/, "") + path);
if (params) for (const [k, v] of Object.entries(params)) if (v != null) url.searchParams.set(k, String(v));
const headers: Record<string, string> = { "x-omni-key": this.token };
if (body !== undefined) headers["content-type"] = "application/json";
const res = await f(url, { method, headers, body: body !== undefined ? JSON.stringify(body) : undefined });
this.rateLimit = {
remainingMinute: Number(res.headers.get("x-ratelimit-remaining-minute")) || undefined,
remainingDay: Number(res.headers.get("x-ratelimit-remaining-day")) || undefined,
};
const data = await res.json().catch(() => ({}));
if (!res.ok) throw new Flightradar24Error(res.status, data?.error?.code, data?.error?.message);
return data.data ?? data;
}
/** Get basic airline information by ICAO code */
getAirlinesLight(params: { "Accept-Version": string; "icao": string }): Promise<any> {
return this._request("GET", "/api/static/airlines/{icao}/light", { params });
}
/** Get detailed airport information by code */
getAirportsFull(params: { "Accept-Version": string; "code": string }): Promise<any> {
return this._request("GET", "/api/static/airports/{code}/full", { params });
}
/** Get basic airline information by code */
getAirportsLight(params: { "Accept-Version": string; "code": string }): Promise<any> {
return this._request("GET", "/api/static/airports/{code}/light", { params });
}
/** Get real-time flight positions with detailed information */
getLiveFlightPositionsFull(params: { "Accept-Version": string; "bounds"?: string; "flights"?: string; "callsigns"?: string; "registrations"?: string; "painted_as"?: string; "operating_as"?: string; "airports"?: string; "routes"?: string; "aircraft"?: string; "altitude_ranges"?: string; "squawks"?: string; "categories"?: string; "data_sources"?: string; "airspaces"?: string; "gspeed"?: string; "limit"?: number }): Promise<any> {
return this._request("GET", "/api/live/flight-positions/full", { params });
}
/** Get real-time flight positions */
getLiveFlightPositionsLight(params: { "Accept-Version": string; "bounds"?: string; "flights"?: string; "callsigns"?: string; "registrations"?: string; "painted_as"?: string; "operating_as"?: string; "airports"?: string; "routes"?: string; "aircraft"?: string; "altitude_ranges"?: string; "squawks"?: string; "categories"?: string; "data_sources"?: string; "airspaces"?: string; "gspeed"?: string; "limit"?: number }): Promise<any> {
return this._request("GET", "/api/live/flight-positions/light", { params });
}
/** Get count of live flight positions */
getapiLiveFlightPositionsCount(params: { "Accept-Version": string; "bounds"?: string; "flights"?: string; "callsigns"?: string; "registrations"?: string; "painted_as"?: string; "operating_as"?: string; "airports"?: string; "routes"?: string; "aircraft"?: string; "altitude_ranges"?: string; "squawks"?: string; "categories"?: string; "data_sources"?: string; "airspaces"?: string; "gspeed"?: string }): Promise<any> {
return this._request("GET", "/api/live/flight-positions/count", { params });
}
/** Get historical flight positions */
getHistoricFlightPositionsFull(params: { "Accept-Version": string; "timestamp": number; "bounds"?: string; "flights"?: string; "callsigns"?: string; "registrations"?: string; "painted_as"?: string; "operating_as"?: string; "airports"?: string; "routes"?: string; "aircraft"?: string; "altitude_ranges"?: string; "squawks"?: string; "categories"?: string; "data_sources"?: string; "gspeed"?: string; "limit"?: number }): Promise<any> {
return this._request("GET", "/api/historic/flight-positions/full", { params });
}
/** Get historical flight positions with basic details */
getHistoricFlightPositionsLight(params: { "Accept-Version": string; "timestamp": number; "bounds"?: string; "flights"?: string; "callsigns"?: string; "registrations"?: string; "painted_as"?: string; "operating_as"?: string; "airports"?: string; "routes"?: string; "aircraft"?: string; "altitude_ranges"?: string; "squawks"?: string; "categories"?: string; "data_sources"?: string; "gspeed"?: string; "limit"?: number }): Promise<any> {
return this._request("GET", "/api/historic/flight-positions/light", { params });
}
/** Get count of historical flight positions */
getapiHistoricFlightPositionsCount(params: { "Accept-Version": string; "timestamp": number; "bounds"?: string; "flights"?: string; "callsigns"?: string; "registrations"?: string; "painted_as"?: string; "operating_as"?: string; "airports"?: string; "routes"?: string; "aircraft"?: string; "altitude_ranges"?: string; "squawks"?: string; "categories"?: string; "data_sources"?: string; "gspeed"?: string }): Promise<any> {
return this._request("GET", "/api/historic/flight-positions/count", { params });
}
/** Returns selected flight events, with all available information. */
getHistoricalFlightEventsFull(params: { "Accept-Version": string; "flight_ids"?: string; "event_types"?: string }): Promise<any> {
return this._request("GET", "/api/historic/flight-events/full", { params });
}
/** Returns selected flight events. */
getHistoricalFlightEventsLight(params: { "Accept-Version": string; "flight_ids"?: string; "event_types"?: string }): Promise<any> {
return this._request("GET", "/api/historic/flight-events/light", { params });
}
/** Get summary of flights with detailed information */
getFlightSummaryFull(params: { "Accept-Version": string; "flight_ids"?: string; "flight_datetime_from"?: string; "flight_datetime_to"?: string; "flights"?: string; "callsigns"?: string; "registrations"?: string; "painted_as"?: string; "operating_as"?: string; "airports"?: string; "routes"?: string; "aircraft"?: string; "sort"?: string; "limit"?: number }): Promise<any> {
return this._request("GET", "/api/flight-summary/full", { params });
}
/** Get summary of flights with basic information */
getFlightSummaryLight(params: { "Accept-Version": string; "flight_ids"?: string; "flight_datetime_from"?: string; "flight_datetime_to"?: string; "flights"?: string; "callsigns"?: string; "registrations"?: string; "painted_as"?: string; "operating_as"?: string; "airports"?: string; "routes"?: string; "aircraft"?: string; "sort"?: string; "limit"?: number }): Promise<any> {
return this._request("GET", "/api/flight-summary/light", { params });
}
/** Get count of flight summaries */
getapiFlightSummaryCount(params: { "Accept-Version": string; "flight_ids"?: string; "flight_datetime_from"?: string; "flight_datetime_to"?: string; "flights"?: string; "callsigns"?: string; "registrations"?: string; "painted_as"?: string; "operating_as"?: string; "airports"?: string; "routes"?: string; "aircraft"?: string }): Promise<any> {
return this._request("GET", "/api/flight-summary/count", { params });
}
/** Get positional tracks for a specific flight */
getFlightsTracks(params: { "Accept-Version": string; "flight_id"?: string }): Promise<any> {
return this._request("GET", "/api/flight-tracks", { params });
}
/** Get info on API account usage */
getApiUsage(params: { "Accept-Version": string; "period"?: string }): Promise<any> {
return this._request("GET", "/api/usage", { params });
}
}
export default Flightradar24;
No reviews yet. Be the first to rate this API.
Yes. Flightradar24 uses bearer authentication, so you bring your own key from the provider. You store it once on OmniStream and the proxy injects it into every call, so your code only ever sends your Omni key.
Live and historical flight positions, airport data, airline data, flight tracks, events, and API usage from Flightradar24. It exposes 16 endpoints over GET, including GET /api/static/airlines/{icao}/light, GET /api/static/airports/{code}/full, GET /api/static/airports/{code}/light.
Install the OmniStream SDK for your language and call Flightradar24 through it. The client is generated from this API's OpenAPI spec, so parameters and responses are fully typed, and the same client also calls every other API in the marketplace.
You can start on the free plan. OmniStream charges for the unified SDK, key storage and proxy rather than for Flightradar24 itself, and Flightradar24's own rate limits still apply to your provider key.
Get real-time flight positions
Get count of live flight positions
Get historical flight positions
Get historical flight positions with basic details
Get count of historical flight positions
Returns selected flight events, with all available information.
Returns selected flight events.
Get summary of flights with detailed information
Get summary of flights with basic information
Get count of flight summaries
Get positional tracks for a specific flight
Get info on API account usage