home / skills / itechmeat / llm-code / open-meteo
npx playbooks add skill itechmeat/llm-code --skill open-meteoReview the files below or copy the command above to add this skill to your agents.
---
name: open-meteo
description: "Integrate Open-Meteo Weather Forecast, Air Quality, and Geocoding APIs: query design, variable selection, timezone/timeformat/units, multi-location batching, and robust error handling. Keywords: Open-Meteo, /v1/forecast, /v1/air-quality, geocoding-api, hourly, daily, current, timezone=auto, timeformat=unixtime, models, WMO weather_code, CAMS, GeoNames, httpx, FastAPI, pytest."
version: "1.4.17"
release_date: "2025-11-07"
---
# 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
1. 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`
2. 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.
3. 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`.
4. 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`.
5. 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`.
6. 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.
7. 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 `timezone` when requesting `daily` variables (per docs).
- Do not assume `unixtime` timestamps are local time; they are GMT+0 and require `utc_offset_seconds` adjustment.
- Do not silently ignore `{"error": true}` responses; fail fast with the provided `reason`.
- 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`, one `daily` (with timezone), and one `current` variable.
- 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: true` with clear messages.
- Attribution requirements from the docs are captured for Air Quality (CAMS) and Geocoding (GeoNames).
## Links
- Official docs (in-scope):
- https://open-meteo.com/en/docs
- https://open-meteo.com/en/docs/air-quality-api
- https://open-meteo.com/en/docs/geocoding-api
- Skill references:
- `references/forecast-api.md`
- `references/models.md`
- `references/weather-codes.md`
- `references/air-quality-api.md`
- `references/geocoding-api.md`
- `references/examples.md`