AOPA APIaopa.org ↗
Search US airports, get runways, METARs, TAFs, NOTAMs, and find aviation events near any coordinate via the AOPA.org API.
What is the AOPA API?
The AOPA API provides 6 endpoints covering US airport search, detailed airport records, runway specifications, weather (METARs and TAFs), NOTAMs, and nearby aviation events. The get_airport_overview endpoint alone returns over a dozen fields including field elevation, communication frequencies, operational status, and terminal procedures. The search_events endpoint surfaces fly-ins, air shows, and seminars sorted by proximity to any coordinate.
curl -X GET 'https://api.parse.bot/scraper/21222cd8-3859-4e17-8616-d5b80527fa75/search_airports?query=Chicago' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace aopa-org-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""AOPA Airports API — flight planning workflow with bounded calls."""
from parse_apis.aopa_airports_api import AOPA, AirportNotFound
client = AOPA()
# Search for airports near Chicago — limit caps total items returned.
for airport in client.airportsummaries.search(query="Chicago", limit=5):
print(airport.name, airport.faa_id, airport.location.latitude)
# Drill into one airport's full detail via .first() then .details().
summary = client.airportsummaries.search(query="Orlando", limit=1).first()
if summary:
detail = summary.details()
print(detail.name, detail.elev, detail.status, detail.tower_present)
# Construct an airport by key and check its runways.
ohare = client.airport(faa_id="ORD")
for runway in ohare.runways.list(limit=3):
print(runway.name, runway.length, runway.surface_readable)
# Get live weather for the constructed airport.
wx = ohare.weather()
for metar in wx.metars[:2]:
print(metar.icao_code, metar.flight_category, metar.temp_c, metar.raw_text[:60])
# Check NOTAMs — empty list is a valid outcome (all-clear).
for notam in ohare.notams.list(limit=3):
print(notam.notam_id, notam.is_tfr, notam.report[:60] if notam.report else "")
# Typed error handling for a nonexistent airport.
try:
bad = client.airport(faa_id="ZZZZ")
bad.weather()
except AirportNotFound as exc:
print(f"Not found: {exc.airport_id}")
# Search upcoming aviation events near Chicago coordinates.
for event in client.events.search(lat=41.88, lon=-87.63, radius=50, limit=3):
print(event.title, event.format, event.distance)
print("exercised: airportsummaries.search / details / airport construct / runways.list / weather / notams.list / events.search")
Full-text search over US airports by ICAO code, FAA code, name, city, or state. Returns lightweight summaries with identifiers and coordinates. A single query string matches across all fields; no field-specific filtering. Results are not paginated — the server returns all matches (typically 5–20 for a city name).
| Param | Type | Description |
|---|---|---|
| queryrequired | string | Search query matching airport ICAO code, FAA code, name, city, or state. |
{
"type": "object",
"fields": {
"airports": "array of airport summary objects with airportId, faaId, icaoId, name, city, stateProvince, country, airportUsage, location"
}
}About the AOPA API
Airport Search and Overview
The search_airports endpoint accepts a single query string matched against ICAO code, FAA code, airport name, city, and state simultaneously — no field-specific filtering is available. Results return lightweight summaries including airportId, faaId, icaoId, name, city, stateProvince, country, airportUsage, and location coordinates. For a full record, pass the FAA or ICAO identifier to get_airport_overview, which returns a heavy 50–150 KB response containing field elevation (elev), operational status, NOTAM arrays (notaMsUS), and associated metadata.
Runways and Weather
The get_airport_runways endpoint returns each landing surface at an airport — runways and helipads — with length, width, materialType1, condition, edgeLighting, and per-end takeoff/landing area details such as ILS type, obstacle notes, and gradient. Weather is available via get_airport_weather, which accepts either an airport_id (auto-resolving coordinates) or explicit lat/lon values. It searches within 25 nm for METARs and 50 nm for TAFs, returning fields like flight_category, wind_speed_kt, visibility_statute_mi, and full raw_text for both products.
NOTAMs and Events
The get_airport_notams endpoint combines US domestic and international NOTAMs into a single array, each entry carrying effectiveDate, expirationDate, rawData, a decoded report, and an isTfr flag marking Temporary Flight Restrictions. For event discovery, the search_events POST endpoint accepts lat, lon, and an optional radius in miles, returning aviation events with startDateTimeUTC, endDateTimeUTC, format, cost, and proximity dist. Webinar or online events may appear with null coordinates and null distance.
The AOPA API is a managed, monitored endpoint for aopa.org — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when aopa.org changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official aopa.org API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a preflight briefing tool that pulls METARs, TAFs, and NOTAMs for any airport in one workflow
- Display runway dimensions and surface conditions on a pilot's airport information app
- Alert pilots to active TFRs at a destination by filtering NOTAMs where
isTfris true - Find fly-ins and air shows within a custom radius of a user's home airport coordinate
- Populate an aviation mapping tool with airport identifiers, coordinates, and operational status
- Check
flight_categoryacross multiple nearby METARs to assess area VFR/IFR conditions - Cross-reference runway weight-bearing capacity data for flight planning with specific aircraft
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does AOPA offer an official public developer API?+
What does `get_airport_weather` return, and how wide is its search radius?+
icao_code, raw_text, temp_c, wind_speed_kt, visibility_statute_mi, flight_category, and observation_time. Each TAF includes raw_text, valid_time_from, valid_time_to, and a forecasts array.Does the search_airports endpoint support pagination or field-specific filtering?+
query parameter matches across ICAO code, FAA code, name, city, and state simultaneously; you cannot restrict the match to a single field. If you need server-side field filtering or paginated results, you can fork this API on Parse and revise it to add that logic.Does this API cover international airports outside the US?+
search_airports and detail endpoints reference US FAA identifiers and domestic NOTAM sources. International airports are not currently covered. You can fork this API on Parse and revise it to add endpoints targeting international data sources.Are historical METARs or archived NOTAMs available?+
get_airport_weather returns current observations and forecasts, and get_airport_notams returns only active NOTAMs with future expiration dates. Historical weather or expired NOTAM archives are not exposed. You can fork this API on Parse and revise it to point at a historical METAR archive such as the NOAA Aviation Weather Center's historical data service.