Open Meteo
When to use
- You need weather forecasts (hourly/daily/current) for coordinates.
- You need air quality / pollen forecasts (hourly/current) for coordinates.
- You need to resolve a user-provided place name to coordinates and timezone (geocoding).
- You need to support multi-location batching (comma-separated lat/lon lists).
- You need a deterministic checklist for Open-Meteo query parameters, response parsing, and error handling.
Goal
Provide a reliable, production-friendly way to call Open-Meteo APIs (Forecast, Air Quality, Geocoding), choose variables, control time/units/timezone, and parse responses consistently.
Steps
-
Pick the correct API and base URL
- Forecast:
https://api.open-meteo.com/v1/forecast - Air Quality:
https://air-quality-api.open-meteo.com/v1/air-quality - Geocoding:
https://geocoding-api.open-meteo.com/v1/search
- Forecast:
-
Resolve coordinates (if you only have a name)
- Call Geocoding with
nameand optionallanguage,countryCode,count. - Use the returned
latitude,longitude, andtimezonefor subsequent calls.
- Call Geocoding with
-
Design your time axis (timezone, timeformat, and range)
- Prefer
timezone=autowhen results must align to local midnight. - If you request
daily=..., settimezone(docs: daily requires timezone). - Choose
timeformat=iso8601for readability, ortimeformat=unixtimefor compactness.- If using
unixtime, remember timestamps are GMT+0 and you must applyutc_offset_secondsfor correct local dates.
- If using
- Choose range controls:
forecast_daysand optionalpast_days, or- explicit
start_date/end_date(YYYY-MM-DD), and for sub-dailystart_hour/end_hour.
- Prefer
-
Choose variables minimally (avoid "download everything")
- Forecast: request only the variables you need via
hourly=...,daily=...,current=.... - Air Quality: request only the variables you need via
hourly=...,current=.... - Keep variable names exact; typos return a JSON error with
error: true.
- Forecast: request only the variables you need via
-
Choose units and model selection deliberately
- Forecast units:
temperature_unit(celsius/fahrenheit)wind_speed_unit(kmh/ms/mph/kn)precipitation_unit(mm/inch)
- Forecast model selection:
- default
models=auto/ “Best match” combines the best models. - you can explicitly request models via
models=.... - provider-specific forecast endpoints also exist (provider implied by path). See
references/models.md(section "Endpoints vsmodels=") for examples and doc links. - for provider/model-specific selection tradeoffs, see
references/models.md.
- default
- Air Quality domain selection:
domains=auto(default) orcams_europe/cams_global.
- Forecast units:
-
Implement robust request/response handling
- Treat HTTP errors and JSON-level errors separately.
- JSON error format is:
{"error": true, "reason": "..."}
- When requesting multiple locations (comma-separated coordinates), expect the JSON output shape to change to a list of structures.
- Optionally use
format=csvorformat=xlsxwhen you need data export.
-
Validate correctness with a “known city” check
- Geocode “Berlin” → Forecast
hourly=temperature_2mfor 1–2 days → verify timezone and array lengths. - Air Quality
hourly=pm10,pm2_5,european_aqi→ verify units and presence ofhourly_units.
- Geocode “Berlin” → Forecast
Critical prohibitions
- Do not include out-of-scope APIs in this skill’s implementation guidance: Historical Weather, Ensemble Models, Seasonal Forecast, Climate Change, Marine, Satellite Radiation, Elevation, Flood.
- Do not omit
timezonewhen requestingdailyvariables (per docs). - Do not assume
unixtimetimestamps are local time; they are GMT+0 and requireutc_offset_secondsadjustment. - Do not silently ignore
{"error": true}responses; fail fast with the providedreason. - Do not request huge variable sets by default; keep queries minimal to reduce payload and avoid accidental overuse.
Definition of done
- You can geocode a place name and obtain coordinates/timezone.
- You can fetch Forecast data with at least one
hourly, onedaily(with timezone), and onecurrentvariable. - You can fetch Air Quality data for at least one pollutant and one AQI metric.
- Your client code handles both HTTP-level failures and JSON-level
error: truewith clear messages. - Attribution requirements from the docs are captured for Air Quality (CAMS) and Geocoding (GeoNames).