The World’s Best Query-Based Flight Tracking and Flight Status API

AeroAPI® (formerly FlightXML) delivers customized access to developers seeking data from millions of flight status inputs for any application using REST/JSON.

Start making queries to power your application. Compare Tiers Now

Key Features

  • Easy to integrate, flexible, and scalable
  • Modern REST-based
  • Compatible with all programming languages
  • Comprehensive developer documentation and interactive portal
  • 99.5% uptime guarantee available
  • Customizable aviation data to meet your unique application needs
  • Current and historical flight data
  • Real-time and configurable flight event alerts
  • Predictive ETAs, powered by FlightAware Foresight

Query Flight Data on Demand

AeroAPI is a simple, query-based API that gives software developers access to a variety of FlightAware's flight data. Users can obtain current or historical data. AeroAPI is a RESTful API delivering accurate and actionable aviation data. With the introduction of FlightAware Foresight, customers have access to the data that powers over half of the predictive airline ETAs in the US.

Query AeroAPI for Flights Based on a Combination Of Properties Including

  • Flight or tail number
  • Origin and/or destination airport
  • Aircraft type
  • A low-to-high range of altitude
  • A low-to-high range of groundspeed

Retrieve Flight Data Through AeroAPI Including:

  • Flight or tail number
  • Aircraft type
  • Origin and/or destination airport
  • Time last position was received
  • Longitude, latitude, groundspeed and altitude
  • FlightAware Foresight, FlightAware’s predictive ETAs
  • Historical flight status and tracks New!
  • And more

Obtain airport-centric data via the API, including:

  • Scheduled flights
  • Departed flights
  • En route flights
  • Arrived flights

AeroAPI Code Snippets

import requests

apiKey = input("API Key: ")
apiUrl = "https://aeroapi.flightaware.com/aeroapi/"

airport = 'KSFO'
payload = {'max_pages': 2}
auth_header = {'x-apikey':apiKey}

response = requests.get(apiUrl + f"airports/{airport}/flights",
    params=payload, headers=auth_header)

if response.status_code == 200:
    print(response.json())
else:
    print("Error executing request")
String YOUR_API_KEY = "API_KEY_HERE";
String apiUrl = "https://aeroapi.flightaware.com/aeroapi/";

String airport = "KSFO";

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
	.uri(URI.create(apiUrl + "airports/" + airport + "/flights"))
	.headers("x-apikey", YOUR_API_KEY)
	.build();
HttpResponse<String> response = client.send(request, BodyHandlers.ofString());

if (response.statusCode() == 200) {
	System.out.println("responseBody: " + response.body());
}
<?php
$apiKey = "YOUR_API_KEY";
$fxmlUrl = "https://aeroapi.flightaware.com/aeroapi/";

$ident = 'SWA45';
$queryParams = array(
	'max_pages' => 2
);
$url = $fxmlUrl . 'flights/' . $ident . '?' . http_build_query($queryParams);

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('x-apikey: ' . $apiKey));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

if ($result = curl_exec($ch)) {
	curl_close($ch);
	echo $result;
}
?>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Threading.Tasks;

namespace AeroApi4Sample
{
    public class FlightsResult
    {
        public List<Flight> Flights { get; set; }
    }

    public class Flight
    {
        public string Ident { get; set; }

        [JsonPropertyName("fa_flight_id")]
        public string FaFlightId { get; set; }

        [JsonPropertyName("scheduled_out")]
        public DateTime ScheduledOut { get; set; }
        
        [JsonPropertyName("actual_out")]
        public DateTime? ActualOut { get; set; }
    }

    public class Program
    {
        static void Main( string[] args )
        {
            Console.Write( "API Key: " );
            var strApiKey = Console.ReadLine();

            Console.Write( "Ident to look up (e.g., UAL47): " );
            var strIdentToLookUp = Console.ReadLine();

            var flights = GetFlights( strApiKey, strIdentToLookUp ).Result;
            
            if( flights == null )
            {
                return;
            }

            var nextFlightToDepart = flights.Where( 
                f => f.ActualOut == null 
                ).OrderBy( f => f.ScheduledOut ).First();

            Console.WriteLine( 
                string.Format( 
                    "Next departure of {0} is {1} at {2}", 
                    strIdentToLookUp,
                    nextFlightToDepart.FaFlightId, 
                    nextFlightToDepart.ScheduledOut 
                    ) 
                );
        }

        private static async Task<List<Flight>> GetFlights( string strApiKey, string strIdent )
        {
            using( var client = new HttpClient() )
            {
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(
                    new MediaTypeWithQualityHeaderValue( "application/json" )
                    );
                client.DefaultRequestHeaders.Add( 
                    "x-apikey", 
                    strApiKey 
                    );

                FlightsResult flightResult = null;
                var response = await client.GetAsync(
                    "https://aeroapi.flightaware.com/aeroapi/flights/" + strIdent
                    );
                var contentStream = await response.Content.ReadAsStreamAsync();

                if( response.IsSuccessStatusCode )
                {
                    flightResult = await JsonSerializer.DeserializeAsync<FlightsResult>(
                        contentStream, 
                        new JsonSerializerOptions 
                        {
                            PropertyNameCaseInsensitive = true
                        }
                        );
                }
                else
                {
                    Console.Error.WriteLine( "API call failed: " + response );
                    return null;
                }

                return flightResult.Flights;
            }
        }
    }
}

More detailed AeroAPI examples can be viewed here.

Compare Tiers

Included APIs
FlightAware Foresight info
checkmark*
Aireon Space-Based ADS-B info
checkmark*
Historical Flight Data info
checkmark
checkmark
Pricing Details
Per-query usage fees (subject to monthly minimum)
Per-query usage fees (subject to monthly minimum)
Per-query usage fees (up to $5 free per month, or $10 free per month for ADS-B feeders)
Monthly minimum fee info
$1,000/month
$100/month
$0/month
Result set rate limit info
100 result sets/second
5 result sets/second
10 result sets/minute
Volume Discounting info
checkmark
checkmark
Authorized Uses
Overview info
Storage and distribution of derivative works for business, business-to-consumer commercial purposes, and all Business-to-Business commercial purposes.
Storage and distribution of derivative works for business or business-to-consumer purposes.
Storage and distribution of derivative works for personal or academic purposes only.
Internal Use for Business info
checkmark
checkmark
Commercialization for Business to Consumer (B2C) info
checkmark
checkmark
Commercialization for Business to Business (B2B) info
checkmark
Internal Use for Personal info
checkmark
checkmark
checkmark
Academic info
checkmark
checkmark
checkmark
General
Up-time guarantee info
99.5%
E-mail Support info
checkmark
checkmark
Phone Support info
checkmark
Invoicing Available info
checkmark

AeroAPI Query Fees

A single Query may return one-to-many results, dependent upon the type of call being made and the input parameters provided. For pricing purposes, a 'result set' is defined as 15 results (records). Pricing is per result set. Pricing is subject to change.

Function
Pricing
GET /flights/search
Search for flights
$0.050
/result set
GET /flights/search/positions
Search for flight positions
$0.050
/result set
GET /flights/search/count
Get count of flights matching search parameters
$0.020
/result set
GET /flights/search/advanced
Search for flights using advanced syntax
$0.050
/result set
GET /flights/{ident}
Get information for a flight
$0.005
/result set
GET /flights/{ident}/canonical
Get the canonical ident of a flight
$0.001
/result set
POST /flights/{ident}/intents
Submit a Flight Intent
$0.000
/result set
GET /flights/{id}/position
Get flight's current position
$0.010
/result set
GET /flights/{id}/track
Get flight's track
$0.012
/result set
GET /flights/{id}/route
Get flight's filed route
$0.010
/result set
GET /flights/{id}/map
Get an image of a flight's track on a map
$0.030
/result set
Function
Pricing
GET /foresight/flights/{ident}
Get information for a flight, including Foresight data
$0.015
/result set
GET /foresight/flights/search/advanced
Search for flights, responses include Foresight data
$0.060
/result set
GET /foresight/flights/{id}/position
Get flight's current position, including Foresight data
$0.020
/result set
Function
Pricing
GET /airports
Get all airports
$0.005
/result set
GET /airports/nearby
Get airports near a location
$0.004
/result set
GET /airports/delays
Get delay information for all airports with delays
$0.050
/result set
GET /airports/{id}
Get static information about an airport
$0.015
/result set
GET /airports/{id}/canonical
Get the canonical code of an airport
$0.001
/result set
GET /airports/{id}/nearby
Get airports near an airport
$0.004
/result set
GET /airports/{id}/delays
Get airport delay information
$0.010
/result set
GET /airports/{id}/flights
Get all flights for a given airport
$0.020
/result set
GET /airports/{id}/flights/arrivals
Get flights that have recently arrived at an airport
$0.005
/result set
GET /airports/{id}/flights/departures
Get flights that have recently departed from an airport
$0.005
/result set
GET /airports/{id}/flights/scheduled_departures
Get future flights departing from an airport
$0.005
/result set
GET /airports/{id}/flights/scheduled_arrivals
Get future flights arriving at an airport
$0.005
/result set
GET /airports/{id}/flights/to/{dest_id}
Get flights with a specific origin and destination
$0.050
/result set
GET /airports/{id}/flights/counts
Get flight counts for an airport
$0.100
/result set
GET /airports/{id}/weather/observations
Get weather conditions for given airport
$0.002
/result set
GET /airports/{id}/weather/forecast
Get weather forecast for given airport
$0.002
/result set
GET /airports/{id}/routes/{dest_id}
Get routes between 2 airports
$0.020
/result set
Function
Pricing
GET /operators
Get all operators.
$0.002
/result set
GET /operators/{id}
Get static information for an operator.
$0.015
/result set
GET /operators/{id}/canonical
Get the canonical code of an operator for API usage.
$0.001
/result set
GET /operators/{id}/flights
Get all of an operator's flights
$0.030
/result set
GET /operators/{id}/flights/scheduled
Get scheduled flights
$0.015
/result set
GET /operators/{id}/flights/arrivals
Get arrived flights
$0.015
/result set
GET /operators/{id}/flights/enroute
Get en route flights
$0.015
/result set
GET /operators/{id}/flights/counts
Get flight counts for operator
$0.100
/result set
Function
Pricing
Push Alert Delivery
Alert delivery callback from FlightAware
$0.020
/result set
GET /alerts
Get all configured alerts
$0.000
/result set
POST /alerts
Create new alert
$0.000
/result set
GET /alerts/{id}
Get specific alert
$0.000
/result set
PUT /alerts/{id}
Modify specific alert
$0.000
/result set
DELETE /alerts/{id}
Delete specific alert
$0.000
/result set
GET /alerts/endpoint
Get configured alert callback URL
$0.000
/result set
PUT /alerts/endpoint
Set alert callback URL
$0.000
/result set
DELETE /alerts/endpoint
Remove and disable default account-wide alert callback URL
$0.000
/result set
Function
Pricing
GET /history/flights/{ident}
Get information for a historical flight
$0.020
/result set
GET /history/flights/{id}/track
Get historical information for a flight's track
$0.060
/result set
GET /history/flights/{id}/map
Get an image of a historical flight's track on a map
$0.140
/result set
GET /history/flights/{id}/route
Get historical flight's filed route
$0.040
/result set
GET /history/aircraft/{registration}/last_flight
Get aircraft's last known flight
$0.200
/result set
Function
Pricing
GET /aircraft/{ident}/blocked
Check if a given ident is blocked
$0.020
/result set
GET /aircraft/{ident}/owner
Get the owner of an aircraft
$0.002
/result set
GET /aircraft/types/{type}
Get information about an aircraft type
$0.100
/result set
GET /schedules/{date_start}/{date_end}
Get scheduled flights
$0.020
/result set
GET /disruption_counts/{entity_type}
Get global flight disruption statistics
$0.020
/result set
GET /disruption_counts/{entity_type}/{id}
Get flight disruption statistics for a particular entity
$0.020
/result set

Note: The max_pages input parameter can be used to limit/control how many result sets will be returned, with one page being equivalent to one result set.

Start making queries today! Compare Tiers

Volume Discounting

All Premium and Standard tier accounts are eligible for volume discounting. The first $1000 of usage per month is always billed at list price, followed by each incremental level of usage being discounted at a more generous level. For monthly usage above $64,000 the discount is set at 94% off, which will enable you to continue to grow your applications and take full advantage of new features with minimal variance in total monthly cost.

Pricing
Discount
$0 - $1,000 / month
No Discount
$1,000 - $2,000
30% Discount
$2,000 - $4,000
51% Discount
$4,000 - $8,000
65% Discount
$8,000 - $16,000
76% Discount
$16,000 - $32,000
83% Discount
$32,000 - $64,000
88% Discount
Above $64,000
94% Discount

Please contact FlightAware for more information regarding additional discounting available with 3 or 4 year term commitments.

Used by Organizations Across the World

Frequently Asked Questions

How am I charged when the API returns multiple results for one query?

In general, you are charged once per query. However, for queries that may return multiple pages of results (defined as sets of up to 15 results), you will be charge for the total number of pages returned (calculated as the per-query fee times the number of pages returned). You can control the maximum number of pages returned by the API for one query. Please refer to the API documentation for details on how to set the "max_pages" parameter.

How can I view my AeroAPI billing status?

Existing customers can visit the AeroAPI portal to see accrued charges.

What is new in version 4?

Version 4 features more detailed results on flight queries and push alerts so you get the same or more information with fewer calls. We redesigned the API to provide an easier to use RESTful interface. The all-new interactive web portal allows you to explore the API and try it without writing any code. A 99.5% uptime guarantee is also now available.

I use version 2 or version 3 of AeroAPI, what is the future of these products?

Version 2 and version 3 of AeroAPI will continue to be available to existing customers until October 31, 2023. These legacy products are no longer available for new sign-ups. We encourage legacy AeroAPI customers to plan to adopt the new version of AeroAPI in the near future so that they will not be impacted by the end-of-life of the old products in 2023. Additionally, customers on the new version of AeroAPI will receive access to future updates of AeroAPI without changing to a new product.

I use version 2 or version 3 of AeroAPI, how can I switch to version 4?

You can get started with the new version of AeroAPI today, just sign-up on-line. As an existing AeroAPI customer, the monthly minimum fee is waived for the first month of your new V4 subscription at the Standard or Premium tier if you sign-up prior to July 1, 2023.

Documentation

FlightAware's API for flight status, flight tracking and aviation data can be accessed via REST and the API can be accessed using any programming language.

Support

Please visit our FAQ to find answers to general questions or check out our discussion forum for more in-depth information.

Login

Don't have an account? Register now (free) for customized features, flight alerts, and more!
Did you know that FlightAware flight tracking is supported by advertising?
You can help us keep FlightAware free by allowing ads from FlightAware.com. We work hard to keep our advertising relevant and unobtrusive to create a great experience. It's quick and easy to whitelist ads on FlightAware or please consider our premium accounts.
Dismiss