This page documents the on-time performance endpoints available through the AirStream API. These endpoints provide analytics derived from the Bureau of Transportation Statistics Airline On-Time Performance dataset, covering flight delays, cancellations, diversions, and related operational metrics for domestic U.S. carriers. All performance endpoints are prefixed with /performance.


Understanding Performance Data

The Airline On-Time Performance dataset reports monthly flight-level operational statistics for domestic flights operated by carriers that account for at least 1% of total domestic scheduled-service passenger revenues. Each record represents a specific route operated by a specific carrier in a given month.

Metric Type Description Example
Volume Flight counts by outcome Flights operated, cancelled, diverted
Delays Delay counts and total minutes Departures delayed 15+ minutes, total delay minutes
Efficiency Time-in-motion totals Air time, taxi-out, taxi-in, elapsed time
Rates Derived percentage metrics On-time arrival rate, cancellation rate, diversion rate

Each level has two endpoint types:

Endpoint Purpose
Route (/route) Aggregate OTP metrics for a specific origin-destination pair
Breakdown (/breakdown) OTP analytics grouped by one or more dimensions (carrier, airport, etc.)

Time Parameters

All endpoints support three time modes.

Single Period

Parameter Type Description
year int The year of the data
month int The month of the data

Multi-Period Range

Parameter Type Description
start_year int The first year of the data (inclusive)
start_month int The first month of the data (inclusive)
end_year int The last year of the data (inclusive)
end_month int The last month of the data (inclusive)

Range queries are limited to 60 months maximum.

Specific Periods (Across Years)

Parameter Type Description
start_year int Start year (inclusive)
end_year int End year (inclusive)
months string Comma-separated months (e.g. 6,12)

Route

Aggregate OTP metrics for a specific origin-destination pair.

  GET /performance/route
  

Required Parameters

Parameter Type Description
origin string Origin airport (3-letter IATA code)
destination string Destination airport (3-letter IATA code)

Plus time parameters.

Optional Parameters

Parameter Type Description
metrics string Comma-separated list of metrics to return, default all base
carrier string Filter by 2-letter carrier code
cancellationcode string Filter by cancellation cause code
  • A (Carrier)
  • B (Weather)
  • C (National Air System)
  • D (Security)
dayofweek int Filter by day of week (1=Monday, 7=Sunday)
distancegroup int Filter by distance band
  • 1 (Less Than 500 Miles)
  • 2 (500-999 Miles)
  • 3 (1000-1499 Miles)
  • 4 (1500-1999 Miles)
  • 5 (2000-2499 Miles)
  • 6 (2500-2999 Miles)
  • 7 (3000-3499 Miles)
  • 8 (3500-3999 Miles)
  • 9 (4000-4499 Miles)
  • 10 (4500-4999 Miles)
limit int Max rows returned (default 50, max 100)
limit_results bool Limit to most recent 12 months of data

Example

On-time performance and flight counts for ORD to LAX in June 2025:

  GET /performance/route?year=2025&month=6&origin=ORD&destination=LAX&metrics=flights,on_time_pct,cancel_pct
  
  {
  "meta": {
    "year": 2025,
    "month": 6,
    "metrics": [
      "flights",
      "on_time_pct",
      "cancel_pct"
    ],
    "origin": {
      "airport_id": 13930,
      "iata_code": "ORD",
      "name": "Chicago O'Hare International",
      "city": "Chicago, IL",
      "state": "IL",
      "state_fips": "17",
      "country": "US",
      "world_area_code": 41,
      "latitude": 41.979,
      "longitude": -87.904
    },
    "destination": {
      "airport_id": 12892,
      "iata_code": "LAX",
      "name": "Los Angeles International",
      "city": "Los Angeles, CA",
      "state": "CA",
      "state_fips": "06",
      "country": "US",
      "world_area_code": 91,
      "latitude": 33.942,
      "longitude": -118.408
    }
  },
  "result": {
    "flights": {
      "value": 823
    },
    "on_time_pct": {
      "value": 74.97
    },
    "cancel_pct": {
      "value": 2.31
    }
  }
}
  

Breakdown

OTP analytics grouped by one or more dimensions.

  GET /performance/breakdown
  

Required Parameters

Parameter Type Description
by string Comma-separated breakdown dimensions to group results by

Plus time parameters.

Optional Parameters

Parameter Type Description
metrics string Comma-separated metrics
origin string Filter by origin airport
destination string Filter by destination airport
carrier string Filter by carrier code
cancellationcode string Filter by cancellation cause code
  • A (Carrier)
  • B (Weather)
  • C (National Air System)
  • D (Security)
dayofweek int Filter by day of week, 1=Monday–7=Sunday
distancegroup int Filter by distance band
  • 1 (Less Than 500 Miles)
  • 2 (500-999 Miles)
  • 3 (1000-1499 Miles)
  • 4 (1500-1999 Miles)
  • 5 (2000-2499 Miles)
  • 6 (2500-2999 Miles)
  • 7 (3000-3499 Miles)
  • 8 (3500-3999 Miles)
  • 9 (4000-4499 Miles)
  • 10 (4500-4999 Miles)
sort_by string Sort column, default first metric (single-period only)
sort_order string asc or desc, default desc (single-period only)
limit int Max rows (single-period: default 50, max 100; multi-period: per period, default 25, max 50)
limit_results bool Limit to most recent 12 months of data

Breakdown Dimensions

All dimensions support both single-period and multi-period queries. A dimension cannot be both a breakdown dimension and a filter in the same query.

Dimension Description
carrier Carrier
origin Origin airport
destination Destination airport
cancellationcode Cancellation cause code
dayofweek Day of week
distancegroup Distance band

Example

On-time performance by carrier for all flights arriving at ORD in June 2025:

  GET /performance/breakdown?year=2025&month=6&by=carrier&destination=ORD&metrics=flights,on_time_pct
  
  {
  "meta": {
    "year": 2025,
    "month": 6,
    "breakdown_by": [
      "carrier"
    ],
    "metrics": [
      "flights",
      "on_time_pct"
    ],
    "count": 18,
    "sort_by": "flights",
    "sort_order": "desc",
    "destination": {
      "airport_id": 13930,
      "iata_code": "ORD",
      "name": "Chicago O'Hare International",
      "city": "Chicago, IL",
      "state": "IL",
      "state_fips": "17",
      "country": "US",
      "world_area_code": 41,
      "latitude": 41.979,
      "longitude": -87.904
    }
  },
  "results": [
    {
      "carrier": {
        "carrier_code": "AA",
        "carrier_name": "American Airlines Inc.",
        "airline_id": 19805
      },
      "flights": {
        "value": 4102,
        "share": 26.84
      },
      "on_time_pct": {
        "value": 71.38
      }
    },
    {
      "carrier": {
        "carrier_code": "UA",
        "carrier_name": "United Air Lines Inc.",
        "airline_id": 19977
      },
      "flights": {
        "value": 3847,
        "share": 25.17
      },
      "on_time_pct": {
        "value": 68.92
      }
    },
    . . .
  ]
}
  

Metrics

All base metrics (indicated in bold) will be returned by default.

Metric Description
flights Total flights
cancelled Cancelled flights
diverted Diverted flights
dep_delayed Flights with a departure delay of 15 or more minutes
arr_delayed Flights with an arrival delay of 15 or more minutes
dep_delay_minutes Total departure delay minutes
arr_delay_minutes Total arrival delay minutes
total_distance Total distance flown (miles)
air_time Total air time (minutes)
taxi_out Total taxi-out time (minutes)
taxi_in Total taxi-in time (minutes)
elapsed_time Total actual elapsed time (minutes)
on_time_pct On-time arrival rate — arrivals not delayed 15+ minutes as a percentage of total flights
cancel_pct Cancellation rate — cancelled flights as a percentage of total flights
divert_pct Diversion rate — diverted flights as a percentage of total flights
avg_dep_delay Average departure delay per flight (minutes)
avg_arr_delay Average arrival delay per flight (minutes)
avg_air_time Average air time per flight (minutes)
avg_taxi_out Average taxi-out time per flight (minutes)
avg_taxi_in Average taxi-in time per flight (minutes)
avg_elapsed_time Average actual elapsed time per flight (minutes)

Constraints

  • A dimension cannot be both a breakdown (by) and a filter in the same query.
  • Range and specific-period queries are limited to 60 months maximum.
  • limit defaults and caps: single-period default 50 (max 100); multi-period default 25 (max 50). In range mode, limit applies per period.
  • limit_results=true restricts to the most recent 12 months.
  • sort_by and sort_order apply only in single-period mode. Range mode always ranks by the first requested metric descending.