GET /api/v2/weather/forecast returns hourly and daily rows for any coordinate worldwide. Request the window you plan against; wind_speed_unit=ms keeps gusts in the unit most equipment limits use.{
"data": {
"latitude": 51.934, "longitude": 4.147, "timezone": "Europe/Amsterdam",
"units": {"hourly": {"wind_gusts_10m": "m/s", "precipitation_probability": "%", "visibility": "m"}},
"hourly": [{"time": "2026-07-19T12:00", "temperature_2m": 19.5, "precipitation_probability": 4,
"wind_speed_10m": 6.4, "wind_gusts_10m": 11.4, "visibility": 31800.0, "cape": 20.0}],
"daily": [{"date": "2026-07-19", "precipitation_probability_max": 75, "wind_gusts_10m_max": 11.5}]
},
"meta": {"endpoint": "/api/v2/weather/forecast", "source": "openmeteo", "cached": false}
}timezone is resolved automatically). The midday row is calm, but precipitation_probability_max for the same day is 75 percent: scan every hourly row inside your work window rather than sampling one, and take the window maximum of wind_gusts_10m and precipitation_probability.GET /api/v2/hazards/lightning serves flash detections from the EUMETSAT Meteosat Third Generation Lightning Imager, filtered by bounding box. Each response carries the newest complete 10-minute granule, so polling once per cycle is enough.{
"data": {
"query": {"min_lat": 51.0, "max_lat": 53.0, "min_lon": 3.0, "max_lon": 5.5, "limit": 3},
"total_matched": 0, "count": 0, "events": [],
"upstream": {"coverage_start": "2026-07-19T08:50:02Z", "coverage_end": "2026-07-19T09:00:02Z", "flash_count": 3062}
},
"meta": {"endpoint": "/api/v2/hazards/lightning", "source": "eumetsat_mtg_li"}
}total_matched: 0 is a clean negative, not an outage: the full-disc granule held 3,062 flashes in the same 10 minutes, none inside the box. upstream.coverage_start and coverage_end date the granule, so the rule can also verify freshness. Coverage is the Meteosat 0-degree field of view (Europe, Africa, the Atlantic and eastern South America); outside it, use the forecast's cape field as a convective proxy instead.GET /api/v2/hazards/alerts returns GDACS multi-hazard alerts (earthquake, tropical cyclone, flood, drought, volcano, wildfire) with a Green/Orange/Red level. Use a wider box here: regional events can affect site logistics.{
"data": {
"total_matched": 1, "count": 1,
"events": [{"event_id": "gdacs-WF-1029489-3", "event_type": "wildfire",
"geometry": {"lat": 48.375, "lon": 2.5494}, "place": "Forest fires in France",
"metrics": {"alert_level": "Orange", "country": "France", "is_current": false},
"source": {"institution": "GDACS (European Commission JRC + UN OCHA/UNOSAT)", "tier": "I"}}]
},
"meta": {"endpoint": "/api/v2/hazards/alerts", "source": "gdacs"}
}metrics.is_current is false, so it does not trigger. Gate on alert_level in Orange or Red combined with is_current: true. The overlay is automated and not human-reviewed; treat a hit as a signal to escalate to official channels, never as the official warning itself.GET /api/v2/transport/marine samples the NOAA GFS-Wave global model at the nearest ocean grid node. Query a point in open water off the site; a node over land or inland water returns nulls with a coverage_note.{
"data": {
"location": {"requested": {"lat": 52.0, "lon": 3.9}, "node": {"lat": 52.0, "lon": 4.0}},
"valid_time": "2026-07-19T00:00:00Z",
"values": {"wave_height": 1.39, "wave_period": 6.64, "wave_direction": 343.5},
"units": {"wave_height": "m", "wave_period": "s", "wave_direction": "deg"},
"provenance": {"institution": "noaa", "model": "gfs-wave", "run_kind": "analysis"}
},
"meta": {"endpoint": "/api/v2/transport/marine", "source": "noaa_gfs_wave"}
}GET /api/v2/transport/aviation/metar returns decoded current aerodrome observations worldwide from the NOAA Aviation Weather Center. Query the ICAO ids nearest your site; Rotterdam is EHRD.{
"data": {
"total_matched": 2, "count": 2,
"stations": [{"station": "EHRD", "obs_time": "2026-07-19T08:55:00Z", "wind_dir_deg": 340,
"wind_speed_kt": 10, "visibility_mi": "6+", "flight_category": "VFR",
"raw": "METAR EHRD 190855Z AUTO 34010KT 270V040 9999 SCT034 19/10 Q1020 NOSIG"}]
},
"meta": {"endpoint": "/api/v2/transport/aviation/metar", "source": "awc_aviation"}
}flight_category compresses visibility and ceiling into one gate word (VFR, MVFR, IFR, LIFR), and the raw report is preserved. Consultative only; it does not replace an official preflight briefing.NO-GO if any of:
lightning total_matched > 0 flash inside the box in the newest granule
max(hourly wind_gusts_10m) >= 15 m/s over the next work window
max(hourly precipitation_probability) >= 60 for precipitation-sensitive tasks
marine wave_height >= 2.5 m pilot boarding, small-craft transfer
metar flight_category != VFR helicopter operations
ESCALATE TO A HUMAN if:
any alerts event with alert_level in (Orange, Red) and is_current = true
otherwise GO, and re-evaluate on the next cycle.