AIRAC API Documentation

Comprehensive aviation data API for waypoints, navaids, airways, airports, and procedures

RESTful JSON API Updated Every AIRAC Cycle Fast & Reliable

Overview

The AIRAC API provides access to worldwide aviation navigation data including waypoints, navaids, airways, airports, and procedures. Data is updated every AIRAC cycle (28 days) to ensure accuracy and compliance with current aviation standards.

Note: This API aggregates data from multiple authoritative sources including government aviation authorities, commercial navigation data providers, and certified aeronautical databases to provide comprehensive global coverage.

Key Features

  • RESTful JSON API
  • No authentication required
  • AIRAC cycle-aware caching
  • Global aviation data coverage

Data Sources

  • FAA NASR & CIFP data
  • Jeppesen NavData
  • International sources
  • Updated every 28 days
  • Quality-assured data
View Complete Data Source List

Primary Navigation Data

  • • FAA NASR (National Airspace System Resources)
  • • CIFP (Coded Instrument Flight Procedures)
  • • Jeppesen NavData
  • • Lido Navigation Data
  • • ARINC Navigation Database

International Sources

  • • NavCanada FIS
  • • AirServices Australia
  • • Aisweb Brazil API
  • • New Zealand AIP (XML)
  • • ForeFlight GIS VFR Capture

Base URL

https://airac.net/api/v1

All API endpoints are relative to this base URL.

AIRAC Cycle

All API responses include AIRAC cycle information in the headers:

X-AIRAC-Cycle:
Current AIRAC cycle (e.g., "2512")
X-AIRAC-Effective-Date:
Cycle effective date in ISO 8601 format
X-AIRAC-Expiration-Date:
Cycle expiration date in ISO 8601 format

Get Current AIRAC Cycle

GET
/airac/current

Returns the current AIRAC cycle information including effective dates and days remaining.

Example Request

curl -H "Accept: application/json" \
     https://airac.net/api/v1/airac/current

Example Response

{
    "status": "success",
    "data": {
        "cycle": "2512",
        "effective_date": "2025-11-27T00:00:00+00:00",
        "expiration_date": "2025-12-25T00:00:00+00:00",
        "is_current": true,
        "days_remaining": 3
    }
}

Caching

Show endpoints (specific resource lookups) include cache headers that expire at the end of the current AIRAC cycle:

Cache-Control
Public caching with max-age until cycle expiration
ETag
Entity tag for conditional requests
Last-Modified
AIRAC cycle effective date
Expires
AIRAC cycle expiration date

Note: Query endpoints (searches and listings) are not cached to ensure fresh results.

Waypoints

Search Waypoints

GET /waypoints

Parameters:

Parameter Type Description
identifier string Waypoint identifier (e.g., "ROKME")
region string ICAO region code (e.g., "K2")
type string Waypoint type code (C, I, N, R, U, V, W)
name string Waypoint name (partial match)
page integer Page number (default: 1)
per_page integer Results per page (default: 50, max: 100)

Example Request:

GET /api/v1/waypoints?identifier=ROKME&region=K2

Example Response:

{
    "status": "success",
    "data": [
        {
            "identifier": "ROKME",
            "latitude": 34.156667,
            "longitude": -117.327222,
            "name": "ROKME",
            "type": {
                "code": "REP-PT",
                "description": "Reporting Point"
            },
            "coordinates": {
                "lat": 34.156667,
                "lon": -117.327222
            },
            "url": "http://localhost:8000/api/v1/waypoints/K2/ROKME",
            "region": "K2"
        }
    ],
    "pagination": {
        "page": 1,
        "per_page": 50,
        "total": null,
        "has_more": false
    }
}

Find Nearby Waypoints

GET /waypoints/nearby

Parameters:

Parameter Type Required Description
latitude float Center latitude
longitude float Center longitude
radius float Search radius in nautical miles

Example Request:

GET /api/v1/waypoints/nearby?latitude=33.9425&longitude=-118.4081&radius=20

Get Specific Waypoint

GET /waypoints/{identifier}

Query Parameters:

region string Optional region code for disambiguation

Example Request:

GET /api/v1/waypoints/ROKME           // Returns all waypoints named ROKME
GET /api/v1/waypoints/K2/ROKME        // Returns specific waypoint in region K2

Example Response:

{
    "status": "success",
    "data": {
        "identifier": "ROKME",
        "latitude": 34.156667,
        "longitude": -117.327222,
        "name": "ROKME",
        "type": {
            "code": "REP-PT",
            "description": "Reporting Point"
        },
        "coordinates": {
            "lat": 34.156667,
            "lon": -117.327222
        },
        "url": "http://localhost:8000/api/v1/waypoints/K2/ROKME",
        "region": "K2"
    }
}

Note: When multiple waypoints share the same identifier, the API returns an array. Use the region in the path to get a specific waypoint.

Airways

Search Airways

GET /airways

Parameters:

Parameter Type Description
identifier string Airway identifier (e.g., "J1")
type string Airway type (V, J, Q, T, L, S)
level string Flight level (low, high)
fix string Find airways containing this fix

Example Request:

GET /api/v1/airways?identifier=J1

Example Response:

{
    "status": "success",
    "data": [
        {
            "identifier": "J1",
            "type": "J",
            "url": "http://localhost:8000/api/v1/airways/J1",
            "minimum_altitude_ft": 18000,
            "maximum_altitude_ft": 45000
        }
    ]
}

Get Specific Airway

GET /airways/{identifier}

Returns airway details including all segments.

Example Request:

GET /api/v1/airways/J1

Find Route Between Fixes

GET /airways/route

Parameters:

Parameter Type Required Description
from string Starting fix identifier
to string Ending fix identifier

Example Request:

GET /api/v1/airways/route?from=LAX&to=SFO

Airports

Search Airports

GET /airports

Parameters (at least one required):

Parameter Type Description
identifier string ICAO/IATA/LID code
name string Airport name (partial match)
city string City name (partial match)
country string Country code
type string Airport type
min_runway_length integer Minimum runway length in feet

Example Request:

GET /api/v1/airports?city=Los%20Angeles

Example Response:

{
    "status": "success",
    "data": [
        {
            "icao": "KLAX",
            "name": "Los Angeles International Airport",
            "latitude": 33.9425,
            "longitude": -118.4081,
            "coordinates": {
                "lat": 33.9425,
                "lon": -118.4081
            },
            "url": "http://localhost:8000/api/v1/airports/KLAX",
            "links": {
                "procedures": "http://localhost:8000/api/v1/airports/KLAX/procedures"
            },
            "iata": "LAX",
            "elevation_ft": 125,
            "city": "Los Angeles",
            "state": "CA",
            "country": "US"
        }
    ]
}

Find Nearby Airports

GET /airports/nearby

Same parameters as waypoints/nearby endpoint.

Example Request:

GET /api/v1/airports/nearby?latitude=33.9425&longitude=-118.4081&radius=30

Get Specific Airport

GET /airports/{icao}

Accepts ICAO (4-letter) or IATA (3-letter) codes.

Example Request:

GET /api/v1/airports/KLAX

Procedures

Search Procedures

GET /procedures

Parameters (airport or type required):

Parameter Type Description
airport string Airport ICAO code
identifier string Procedure identifier
type string Procedure type (SID, STAR, APP)
runway string Runway identifier
fix string Find procedures containing this fix

Example Request:

GET /api/v1/procedures?airport=KLAX&type=SID

Example Response:

{
    "status": "success",
    "data": [
        {
            "airport": "KLAX",
            "airport_url": "http://localhost:8000/api/v1/airports/KLAX",
            "identifier": "LOOP1",
            "type": {
                "code": "SID",
                "description": "Standard Instrument Departure"
            },
            "name": "LOOP ONE",
            "url": "http://localhost:8000/api/v1/procedures/KLAX/LOOP1",
            "links": {
                "transitions": "http://localhost:8000/api/v1/procedures/KLAX/LOOP1/transitions"
            },
            "runway": "25L"
        }
    ]
}

Get Specific Procedure

GET /procedures/{airport}/{identifier}

Returns procedure details. Without a transition parameter, returns a structured format showing all transitions and the common route. With a transition parameter, returns only that specific transition's segments.

Query Parameters:

transition string Optional - specific transition (e.g., "SEA", "RW28L")

Example Request (Structured):

GET /api/v1/procedures/KPDX/HELNS6

Example Response (Structured):

{
    "status": "success",
    "data": {
        "airport": "KPDX",
        "airport_url": "http://localhost:8000/api/v1/airports/KPDX",
        "identifier": "HELNS6",
        "type": {
            "code": "STAR",
            "description": "Standard Terminal Arrival Route"
        },
        "name": "HELNS SIX",
        "url": "http://localhost:8000/api/v1/procedures/KPDX/HELNS6",
        "common_route": [
            {
                "sequence": 10,
                "fix_identifier": "HELNS",
                "fix_url": "http://localhost:8000/api/v1/waypoints/HELNS",
                "fix_coordinates": { "lat": 46.9523, "lon": -122.3096 }
            },
            {
                "sequence": 20,
                "fix_identifier": "KRATR",
                "fix_url": "http://localhost:8000/api/v1/waypoints/KRATR",
                "fix_coordinates": { "lat": 46.2761, "lon": -122.4939 }
            }
        ],
        "transitions": {
            "SEA": [
                { "sequence": 10, "fix_identifier": "SEA" },
                { "sequence": 20, "fix_identifier": "BUWZO" },
                { "sequence": 30, "fix_identifier": "HELNS" }
            ],
            "BUWZO": [
                { "sequence": 10, "fix_identifier": "BUWZO" },
                { "sequence": 20, "fix_identifier": "HELNS" }
            ]
        },
        "runway_transitions": {
            "28L": [
                { "sequence": 10, "fix_identifier": "BTG" },
                { "sequence": 20, "fix_identifier": "KPDX" }
            ]
        },
        "available_transitions": ["SEA", "BUWZO"],
        "available_runways": ["03", "10B", "21", "28L", "28R"]
    }
}

Example Request (Specific Transition):

GET /api/v1/procedures/KPDX/HELNS6?transition=SEA

Example Response (Specific Transition):

{
    "status": "success",
    "data": {
        "airport": "KPDX",
        "identifier": "HELNS6",
        "type": { "code": "STAR", "description": "Standard Terminal Arrival Route" },
        "transition": "SEA",
        "segments": [
            {
                "sequence": 10,
                "path_terminator": "TF",
                "fix_identifier": "SEA"
            },
            {
                "sequence": 20,
                "path_terminator": "TF",
                "fix_identifier": "BUWZO",
                "fix_coordinates": { "lat": 46.9523, "lon": -122.3096 }
            }
        ]
    }
}

Get Procedure Transitions

GET /procedures/{airport}/{identifier}/transitions

Example Request:

GET /api/v1/procedures/KLAX/LOOP1/transitions

Routes

Router Parser

GET /routes/parse

Parse a route string, calculating distances and bearings between waypoints.

Query Parameters:

Parameter Type Required Description
origin string Origin airport ICAO code (4 letters)
destination string Destination airport ICAO code (4 letters)
route string Route string (max 2000 characters)
departure_runway string Departure runway (e.g., 07R, 25L). Optional but recommended for proper SID selection
arrival_runway string Arrival runway (e.g., 27L, 09R). Optional but recommended for proper STAR selection

Supported Route Elements:

  • Waypoints: 2-5 letter identifiers (e.g., DOTSS, CIVET)
  • Airways: Letter followed by numbers (e.g., J5, V23, Q822) - automatically expanded to include all intermediate waypoints
  • Coordinates: Lat/Lon in format DDNDDW (e.g., 51N020W) or DDMMN/DDDMMW
  • SID/STAR procedures: Alphanumeric identifiers (e.g., OBOK3D, LOGA2H) - automatically expanded to include all procedure waypoints
  • NAT Tracks: NAT followed by letter or number (e.g., NATA, NATB, NAT1)

Route Processing Features:

  • Airway Expansion: Airways are automatically expanded to show all intermediate waypoints between entry and exit points
  • SID/STAR Expansion: Procedures are expanded to show all waypoints in the departure/arrival routing
  • Runway Transitions: When departure/arrival runways are provided, appropriate runway-specific transitions are selected for SIDs/STARs
  • Duplicate Removal: Consecutive duplicate waypoints are automatically removed
  • Distance & Bearing: Calculates great circle distance (nm) and true bearing between each waypoint pair

Example Request:

GET /api/v1/routes/parse?origin=EDDF&destination=EGLL&route=OBOK3D%20OBOKA%20Z29%20TORNU%20BREDA%20ABNED%20L980%20LOGAN%20LOGA2H&departure_runway=07C&arrival_runway=09L

Example Response:

{
    "status": "success",
    "data": {
        "origin": "EDDF",
        "destination": "EGLL",
        "total_distance": 410.2,
        "segments": [
            {
                "from": {
                    "identifier": "EDDF",
                    "name": "Frankfurt/Main",
                    "type": "airport",
                    "coordinates": {
                        "lat": 50.033333,
                        "lon": 8.570556
                    }
                },
                "to": {
                    "identifier": "DF08C",
                    "name": "DF08C",
                    "type": "waypoint",
                    "coordinates": {
                        "lat": 50.049167,
                        "lon": 8.628056
                    },
                    "via": "OBOK3D"
                },
                "distance": 3.2,
                "bearing": 070,
                "cumulative_distance": 3.2
            },
            {
                "from": {
                    "identifier": "DF08C",
                    "name": "DF08C",
                    "type": "waypoint",
                    "coordinates": {
                        "lat": 50.049167,
                        "lon": 8.628056
                    }
                },
                "to": {
                    "identifier": "DF149",
                    "name": "DF149",
                    "type": "waypoint",
                    "coordinates": {
                        "lat": 50.142778,
                        "lon": 8.696111
                    },
                    "via": "OBOK3D"
                },
                "distance": 7.2,
                "bearing": 035,
                "cumulative_distance": 10.4
            },
            // ... additional segments showing expanded SID waypoints, airway waypoints, and STAR waypoints ...
        ],
        "errors": []
    }
}

Note: Errors are non-blocking. The navlog will still be generated for valid segments.

Error Types:

  • airport_not_found - Origin or destination airport not found (critical error)
  • waypoint_not_found - Waypoint identifier not found in database
  • airway_not_found - Airway identifier not found
  • airway_endpoints_not_found - Entry or exit waypoints for airway not specified
  • waypoints_not_on_airway - Entry/exit waypoints not found on specified airway
  • procedure_not_found - SID/STAR procedure not found at airport
  • procedure_no_segments - Procedure found but has no route segments
  • procedure_waypoint_not_found - Waypoint in procedure could not be resolved
  • nat_track_not_supported - NAT tracks are not currently supported

Airspace

Search Controlled Airspace

GET /airspace/controlled

Search for controlled airspace areas (Class A, B, C, D, E).

Parameters:

Parameter Type Required Description
classification string Airspace class (A, B, C, D, E)
name string Airspace name (partial match)
airport string Airport ICAO code (e.g., "KLAX")
page integer Page number

Example Request:

GET /api/v1/airspace/controlled?classification=B&airport=KLAX

Example Response:

{
    "status": "success",
    "data": [
        {
            "type": "D",
            "name": "LOS ANGELES",
            "classification": "B",
            "center": "KLAX",
            "lower_limit": {
                "value": 0,
                "unit": "ft",
                "reference": "ground",
                "text": "GND"
            },
            "upper_limit": {
                "value": 10000,
                "unit": "ft",
                "reference": "msl",
                "text": "10000 ft MSL"
            }
        }
    ]
}

Search Restricted Airspace

GET /airspace/restricted

Search for restricted, prohibited, warning, and alert areas.

Parameters:

Parameter Type Required Description
type string Type (R-Restricted, P-Prohibited, W-Warning, A-Alert)
designation string Area designation (e.g., "R-2501")
active boolean Only show currently active areas

Example Request:

GET /api/v1/airspace/restricted?type=R

Example Response:

{
    "status": "success",
    "data": [
        {
            "type": { "code": "R", "description": "Restricted Area" },
            "designation": "2501",
            "name": "Fort Irwin",
            "url": "http://localhost:8000/api/v1/airspace/restricted/2501",
            "lower_limit": {
                "value": 0,
                "unit": "ft",
                "reference": "ground",
                "text": "SFC"
            },
            "upper_limit": {
                "value": null,
                "unit": null,
                "reference": "unlimited",
                "text": "Unlimited"
            },
            "controlling_agency": "ZLA ARTCC",
            "active_by_notam": true
        }
    ]
}

Get Restricted Airspace by Designation

GET /airspace/restricted/{designation}

Retrieve restricted airspace information by its designation identifier.

Parameters:

Parameter Type Required Description
designation string Airspace designation (e.g., "500", "2501")

Example Request:

GET /api/v1/airspace/restricted/500

Example Response:

{
    "status": "success",
    "data": {
        "type": { "code": "R", "description": "Restricted Area" },
        "designation": "500",
        "name": "NOTO",
        "url": "http://localhost:8000/api/v1/airspace/restricted/500",
        "lower_limit": {
            "value": 4000,
            "unit": "ft",
            "reference": "agl",
            "text": "04000 ft AGL"
        },
        "upper_limit": {
            "value": 19000,
            "unit": "ft",
            "reference": "standard",
            "text": "FL190"
        }
    }
}

Search FIR/UIR Regions

GET /airspace/fir

Search for Flight Information Regions (FIR) and Upper Information Regions (UIR).

Parameters:

Parameter Type Required Description
identifier string FIR identifier (e.g., "KZLA")
name string FIR name (partial match)
country string Country code

Example Request:

GET /api/v1/airspace/fir?identifier=KZLA

Example Response:

{
    "status": "success",
    "data": [
        {
            "identifier": "KZLA",
            "name": "Los Angeles Center",
            "type": {
                "code": "FIR",
                "description": "Flight Information Region"
            },
            "url": "http://localhost:8000/api/v1/airspace/fir/KZLA",
            "country_code": "US",
            "is_subregion": false
        }
    ]
}

Get Specific FIR/UIR

GET /airspace/fir/{identifier}

Retrieve detailed information about a specific FIR/UIR region.

Parameters:

Parameter Type Required Description
identifier string FIR identifier

Example Request:

GET /api/v1/airspace/fir/KZLA

Reference Data

List All Countries

GET /countries

Retrieve a paginated list of all countries.

Example Request:

GET /api/v1/countries?page=1

Example Response:

{
    "status": "success",
    "data": [
        {
            "code": "US",
            "name": "United States",
            "url": "http://localhost:8000/api/v1/countries/US"
        }
    ]
}

Get Country

GET /countries/{code}

Retrieve a specific country by ISO 2-letter code.

Example Request:

GET /api/v1/countries/US

List States for Country

GET /countries/{country}/states

Retrieve all states/provinces for a specific country.

Example Request:

GET /api/v1/countries/US/states

Example Response:

{
    "status": "success",
    "data": [
        {
            "state_code": "CA",
            "name": "California",
            "country_code": "US",
            "country": {
                "code": "US",
                "name": "United States"
            }
        }
    ]
}

List All States/Provinces

GET /states

Retrieve a paginated list of all states/provinces.

Example Request:

GET /api/v1/states?page=1

Get State

GET /states/{country}/{state}

Retrieve a specific state by country and state codes.

Example Request:

GET /api/v1/states/US/CA

Response Format

Parameter Type Required Description
query string Search query (min 2 chars)
types[] array Entity types to search (waypoint, navaid, airport)
limit integer Max results per type (default: 10, max: 50)

Example Request:

GET /api/v1/search?query=LAX

Example Response:

{
    "status": "success",
    "data": {
        "airports": [
            {
                "icao": "KLAX",
                "name": "Los Angeles International Airport"
            }
        ],
        "navaids": [
            {
                "identifier": "LAX",
                "name": "LOS ANGELES",
                "type": "VOR"
            }
        ],
        "waypoints": []
    }
}

Response Format

Success Response

{
    "status": "success",
    "data": {
        // Response data
    }
}

Paginated Response

{
    "status": "success",
    "data": [...],
    "pagination": {
        "page": 1,
        "per_page": 50,
        "total": null,
        "has_more": true
    }
}

Error Response

{
    "status": "error",
    "message": "Error description"
}

Data Types

Waypoint Types

Code Description
C Combined named intersection and RNAV
I Unnamed, charted intersection
N NDB navaid as waypoint
R Named intersection
U Uncharted airway intersection
V VFR waypoint
W RNAV waypoint

Navaid Types

Type Description
VOR VHF Omnidirectional Range
VORDME VOR/DME
DME Distance Measuring Equipment
TACAN Tactical Air Navigation
VORTAC VOR/TACAN
NDB Non-Directional Beacon

Procedure Types

Type Description
SID Standard Instrument Departure
STAR Standard Terminal Arrival Route
APP Instrument Approach Procedure

Usage Guidelines

To ensure a great experience for all users, please follow these guidelines:

Best Practices

Be respectful of server resources
Set meaningful User-Agent headers
Cache responses appropriately

Technical Guidelines

Handle errors with exponential backoff
Respect rate limit headers
Use JSON API, not HTML scraping

User-Agent Requirements

Please use a descriptive User-Agent header that identifies your application:

Good Examples

MyFlightTracker/1.0 (https://myapp.com; contact@myapp.com) AviationStats/2.1 (+https://github.com/username/repo) RouteAnalyzer/1.0 (Discord: username#1234) FlightPlannerPro/3.0 (https://flightplanner.pro) AeroDataBot/1.5 (Twitter: @aerodatabot)

Bad Examples

curl/7.64.1 python-requests/2.28.0 Mozilla/5.0 (compatible) Java/1.8.0 axios/0.27.2

Accessing JSON Data

All API endpoints return JSON data. Always include the Accept header:

curl -H "Accept: application/json" \
     -H "User-Agent: MyApp/1.0 (contact@myapp.com)" \
     https://airac.net/api/v1/waypoints

Pagination

The API uses page-based pagination for list endpoints:

GET /api/v1/waypoints?page=2&per_page=100

Important Notes

  • Default page size is 50 items
  • Maximum page size is 100 items
  • Check has_more to determine if additional pages exist
  • Page numbering starts at 1

Rate Limits

Currently, there are no enforced rate limits. However, we ask that you be respectful of server resources.

If rate limits are implemented in the future, standard HTTP headers will be used:

X-RateLimit-Limit: 60
X-RateLimit-Remaining: 59
X-RateLimit-Reset: 1640995200

Best Practice: Implement proper handling for 429 (Too Many Requests) responses with exponential backoff.

Questions & Support

If you have questions about the API or need assistance:

Please include your User-Agent string when reporting issues