Docs · API Reference
AvioWeather Developer API
REST API for aviation weather data. METAR, TAF, SIGMET, historic archive — sourced from NOAA AWC (current) and Iowa State ASOS (historic), fully decoded, served from a 5-minute global snapshot in eu-west-1 (Ireland).
Overview
The API is read-only, JSON over HTTPS, and authenticated with a single header. Base URL:
https://api.developer.avioweather.app
All endpoints live under /v1/. We never break v1 — additive changes only. When we do introduce breaking changes, they ship under /v2/ and v1 stays running for at least 12 months.
Authentication
Send your API key in the X-API-Key request header. Keys have the format ak_live_v2.<payload>.<signature> (signed; validated at the edge) and are generated from the developer portal after you create an account and choose a plan.
curl https://api.developer.avioweather.app/v1/metar/LIRF \ -H "X-API-Key: ak_live_v2.xxxxxxxx~pro~000.xxxxxxxx"
Plans & limits
Each plan has a daily request cap and a per-second rate limit. When the daily cap is reached, calls return 429 until 00:00 UTC the next day. There is no automatic overage. Paid plans include every endpoint — they differ only by volume.
| Plan | Daily requests | Rate limit | Endpoints |
|---|---|---|---|
free | 1,000 | 2 req/s | METAR, station |
pro — €7.99/mo | 50,000 | 20 req/s | All endpoints |
business — €15.99/mo | 250,000 | 50 req/s | All + priority support |
enterprise — €37.99/mo | 500,000 | 100 req/s | All + 99.9% SLA |
Use GET /v1/usage to check remaining quota. That endpoint authenticates against your key but does not count toward the monthly quota.
Errors
Errors come back as JSON with a stable code field — match on the code, not the human-readable error string.
| Status | Code | Meaning |
|---|---|---|
| 401 | NO_KEY | X-API-Key header missing |
| 401 | BAD_KEY | Key not recognized |
| 401 | REVOKED | Key revoked by admin or self-service |
| 400 | BAD_REQUEST | Malformed parameters (e.g. bad date format) |
| 400 | RANGE_TOO_LARGE | History range exceeds 60 days |
| 403 | TIER_INSUFFICIENT | Endpoint requires a higher plan |
| 404 | NOT_FOUND | No data for that ICAO (e.g. closed aerodrome) |
| 429 | RATE_LIMITED | Per-second rate limit exceeded — retry after 1 s |
| 429 | QUOTA_EXCEEDED | Monthly quota exhausted — retry after reset_iso |
| 502 | UPSTREAM_ERROR | Upstream source (NOAA/Iowa) failed; retry with backoff |
| 5xx | — | Internal failure; safe to retry with exponential backoff |
GET /v1/metar/{icao}
Returns the most recent METAR for the given ICAO airport, fully decoded. Served from the 5-minute pipeline snapshot (the same data the AvioWeather apps consume); falls back to a live NOAA fetch if the station is not in the current snapshot. source tells you which path answered.
Path parameters
- icao
- string Four-letter ICAO code, e.g.
LIRF. Case-insensitive.
Example response
{
"icao": "LIRF",
"name": "Roma Fiumicino",
"latitude": 41.8, "longitude": 12.24, "elevation_m": 5,
"raw": "LIRF 191420Z 22008G18KT 9999 FEW040 SCT100 17/09 Q1018",
"observed_at": "2026-05-19T14:20:00Z",
"flight_category": "VFR",
"wind": { "direction_deg": 220, "variable": false, "speed_kt": 8, "gust_kt": 18 },
"visibility": { "statute_miles": 6.21, "meters": 9999 },
"clouds": [ { "cover": "FEW", "base_ft": 4000 }, { "cover": "SCT", "base_ft": 10000 } ],
"weather": [],
"temperature_c": 17, "dewpoint_c": 9,
"altimeter_hpa": 1018, "sea_level_pressure_hpa": null,
"source": "pipeline", "age_seconds": 95
}
GET /v1/metar?icao=…
Batch METAR for up to 20 ICAOs in a single call, resolved from one snapshot read. Each METAR returned counts as 1 against your quota. Unknown ICAOs come back as { "icao": "XXXX", "error": "NOT_FOUND" } in the array rather than failing the whole request.
Query parameters
- icao
- string Comma-separated ICAO codes. Maximum 20 per request.
{ "count": 3, "metars": [ { "icao": "LIRF", … }, … ] }
GET /v1/station/{icao}
Station metadata (name, coordinates, elevation) plus the latest flight category and observation time.
{
"icao": "LIRF", "name": "Roma Fiumicino",
"latitude": 41.8, "longitude": 12.24, "elevation_m": 5,
"flight_category": "VFR", "last_observation_at": "2026-05-19T14:20:00Z",
"source": "pipeline"
}
GET /v1/taf/{icao}
Current TAF (terminal aerodrome forecast), raw plus decoded forecast periods (wind, visibility, clouds, weather, change indicator).
{
"icao": "LIRF",
"raw": "TAF LIRF 191100Z 1912/2012 22010KT 9999 FEW040 …",
"issued_at": "2026-05-19T11:00:00Z",
"valid_from": "2026-05-19T12:00:00Z",
"valid_to": "2026-05-20T12:00:00Z",
"forecast": [
{ "from": "2026-05-19T12:00:00Z", "to": "2026-05-20T12:00:00Z",
"change_indicator": null, "wind": { "direction_deg": 220, "speed_kt": 10 },
"visibility": { "meters": 9999 }, "clouds": [ … ], "weather": [] }
]
}
GET /v1/sigmet
Active SIGMETs, parsed: canonical hazard tag plus the affected-area polygon as [lat, lon] rings. Optional hazard query parameter to filter (TS, TURB, ICE, MTW, VA).
{
"count": 2,
"sigmets": [
{ "id": "…", "hazard": "TS", "raw_text": "…",
"valid_from": "…", "valid_to": "…",
"coordinates": [ [45.1, 9.2], [45.6, 10.1], … ] }
]
}
GET /v1/metar/{icao}/history
Every decoded METAR observed for the station across a UTC date range (max 60 days per request). The 60-day cap is per call, not the depth of the archive: history reaches back roughly 20 years — to go further back, request consecutive 60-day windows by shifting the from/to dates. Served from the durable archive; missing days are backfilled on demand from Iowa State ASOS (open data) and cached.
Query parameters
- from
- string UTC start day
YYYY-MM-DD. - to
- string UTC end day
YYYY-MM-DD(inclusive).
{
"icao": "LIRF", "from": "2026-05-01", "to": "2026-05-07",
"count": 336, "sources": ["iowa"],
"observations": [ { "observed_at": "…", "raw": "…", "flight_category": "VFR", "wind": { … }, … } ]
}
GET /v1/usage
Returns remaining monthly quota for the calling key. Does not decrement the counter.
{
"tier": "pro",
"quota": 100000,
"used": 12483,
"remaining": 87517,
"reset_iso": "2026-06-01T00:00:00Z",
"rate_limit_rps": 30
}
Data sources & attribution
Current observations and forecasts are sourced from the NOAA Aviation Weather Center / National Weather Service (USA); historic METARs from the Iowa Environmental Mesonet (Iowa State University) ASOS archive. Both are public-domain / open-data sources. Applications redistributing this data must credit the original source — e.g. "Weather data via AvioWeather (NOAA AWC / Iowa State ASOS)". Use of the API is also subject to the Terms & Conditions and Acceptable Use Policy. Weather data is provided "as is" for situational awareness and is not a substitute for an official pre-flight briefing.
© 2026 Savaresi Aviation · billing@savaresi.aero · last updated 2026-05-20