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"
Key safety: the plaintext key is shown once at generation time. We only store its SHA-256 hash — we cannot recover a lost key, only revoke it and issue a new one.

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.

PlanDaily requestsRate limitEndpoints
free1,0002 req/sMETAR, station
pro — €7.99/mo50,00020 req/sAll endpoints
business — €15.99/mo250,00050 req/sAll + priority support
enterprise — €37.99/mo500,000100 req/sAll + 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.

StatusCodeMeaning
401NO_KEYX-API-Key header missing
401BAD_KEYKey not recognized
401REVOKEDKey revoked by admin or self-service
400BAD_REQUESTMalformed parameters (e.g. bad date format)
400RANGE_TOO_LARGEHistory range exceeds 60 days
403TIER_INSUFFICIENTEndpoint requires a higher plan
404NOT_FOUNDNo data for that ICAO (e.g. closed aerodrome)
429RATE_LIMITEDPer-second rate limit exceeded — retry after 1 s
429QUOTA_EXCEEDEDMonthly quota exhausted — retry after reset_iso
502UPSTREAM_ERRORUpstream source (NOAA/Iowa) failed; retry with backoff
5xxInternal failure; safe to retry with exponential backoff

GET /v1/metar/{icao}

GET /v1/metar/{icao} free+

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=…

GET /v1/metar?icao=A,B,C free+

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}

GET /v1/station/{icao} free+

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}

GET /v1/taf/{icao} pro+

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

GET /v1/sigmet pro+

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

GET /v1/metar/{icao}/history?from=YYYY-MM-DD&to=YYYY-MM-DD pro+

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

GET /v1/usage all plans · free of quota

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