Open Meteo
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
- Resolve coordinates (if you only have a name)
- Call Geocoding with name and optional language, countryCode, count. - Use the returned latitude, longitude, and timezone for subsequent calls.
- Design your time axis (timezone, timeformat, and range)
- Prefer timezone=auto when results must align to local midnight. - If you request daily=..., set timezone (docs: daily requires timezone). - Choose timeformat=iso8601 for readability, or timeformat=unixtime for compactness. - If using unixtime, remember timestamps are GMT+0 and you must apply utc_offset_seconds for correct local dates. - Choose range controls: - forecast_days and optional past_days, or - explicit start_date/end_date (YYYY-MM-DD), and for sub-daily start_hour/end_hour.
- 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.
- 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 vs models=") for examples and doc links. - for provider/model-specific selection tradeoffs, see references/models.md. - Air Quality domain selection: - domains=auto (default) or cams_europe / cams_global.
- 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=csv or format=xlsx when you need data export.
- Validate correctness with a “known city” check
- Geocode “Berlin” → Forecast hourly=temperature_2m for 1–2 days → verify timezone and array lengths. - Air Quality hourly=pm10,pm2_5,european_aqi → verify units and presence of hourly_units.
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).