# Weather Ensemble Forecast with Model Disagreement

> Weather Ensemble Forecast with Model Disagreement is a paid API for AI agents from wetter.halowerk.com, paid per call via x402, $0.005/call, status unknown (last checked 2026-09-15).

Returns per-hour multi-model ensemble statistics (median, p15/p85 band, min/max, model count, agreement score, rain probability, frost assessment) plus active DWD warnings for a given lat/lon point.

## Facts

- Endpoint: POST https://wetter.halowerk.com/ensemble
- Price: $0.005/call
- Payment: x402
- Status: unknown
- Last checked: 2026-09-15
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/weather-ensemble-forecast-with-model-disagreement-b643b041
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_ESjmr2IsrsPLysdPLNkID

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability weather-ensemble-forecast-with-model-disagreement-b643b041 -d '<json body>'
```

Example prompt: What do the ensemble models say about temperature and precipitation uncertainty in Munich over the next 48 hours — give me the median, the p15/p85 spread, and flag any active DWD warnings, using the ICON D2, ECMWF IFS, and GFS seamless models.

## When to prefer this

Choose this endpoint when uncertainty quantification matters — not just a single-model point forecast, but the spread and disagreement between 12 major NWP models. Ideal for risk-sensitive decisions (agriculture, events, aviation, offshore operations) where knowing how much models agree is as important as the forecast itself. Prefer this over single-model forecast APIs when you need probabilistic rain estimates, frost risk flags, or official DWD warnings alongside the statistical ensemble envelope.

## Known failure modes

- Fewer than 2 models specified — API requires at least 2 models for a meaningful ensemble
- Coordinates out of range (lat > 90, lon > 180) — validation error
- More than 8 variables requested — maxItems constraint violation
- Hours exceeding 168 — beyond 7-day maximum horizon
- Short-range models (e.g. ICON D2) dropping out beyond their own forecast horizon, reducing model count in later hours
- DWD warnings unavailable for locations outside Germany — may return empty warnings array
- Slow or unavailable upstream model feeds causing incomplete ensemble data

## How this service works

Single models are everywhere. This is the disagreement between them: per hour a median with a p15/p85 band, the full min/max spread, how many models still carry that hour, an agreement score, rain probability derived from pooled ensemble members rather than one deterministic run, a frost assessment, and the official DWD warnings in force for the point.

## Output

A structured hourly time-series for each requested variable containing: median value, p15 and p85 percentile band, minimum and maximum across all active models, the number of models contributing at that hour, a model agreement score (0–1), ensemble-derived rain probability, a frost flag, and a list of any active official DWD meteorological warnings for the grid cell containing the requested coordinates.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "lat": {
   "type": "number",
   "maximum": 90,
   "minimum": -90,
   "description": "Latitude in decimal degrees."
  },
  "lon": {
   "type": "number",
   "maximum": 180,
   "minimum": -180,
   "description": "Longitude in decimal degrees."
  },
  "hours": {
   "type": "integer",
   "default": 24,
   "maximum": 168,
   "minimum": 1,
   "description": "Forecast hours, up to 168 (seven days). Short range models drop out beyond their own horizon; the per hour \"models\" count shows it."
  },
  "models": {
   "type": "array",
   "items": {
    "enum": [
     "icon_d2",
     "icon_eu",
     "knmi_harmonie_arome_netherlands",
     "dmi_seamless",
     "meteofrance_seamless",
     "ukmo_seamless",
     "ecmwf_ifs025",
     "ecmwf_aifs025_single",
     "gfs_seamless",
     "gem_seamless",
     "jma_seamless",
     "cma_grapes_global"
    ],
    "type": "string"
   },
   "default": [
    "icon_d2",
    "icon_eu",
    "knmi_harmonie_arome_netherlands",
    "dmi_seamless",
    "meteofrance_seamless",
    "ukmo_seamless",
    "ecmwf_ifs025",
    "ecmwf_aifs025_single",
    "gfs_seamless",
    "gem_seamless",
    "jma_seamless",
    "cma_grapes_global"
   ],
   "minItems": 2,
   "description": "Restrict the comparison to a subset of the twelve models. At least two, because a comparison of one model is just a forecast."
  },
  "timezone": {
   "type": "string",
   "default": "UTC",
   "description": "IANA zone name for the returned timestamps, for example Europe/Berlin."
  },
  "variables": {
   "type": "array",
   "items": {
    "enum": [
     "temperature_2m",
     "apparent_temperature",
     "dew_point_2m",
     "relative_humidity_2m",
     "precipitation",
     "snowfall",
     "cloud_cover",
     "wind_speed_10m",
     "wind_gusts_10m",
     "surface_pressure",
     "pressure_msl",
     "shortwave_radiation",
     "cape",
     "wind_direction_10m",
     "weather_code"
    ],
    "type": "string"
   },
   "default": [
    "temperature_2m",
    "precipitation",
    "wind_speed_10m"
   ],
   "maxItems": 8,
   "description": "Which variables to compare. wind_direction_10m is aggregated as a circular mean with a directional consensus, weather_code as a majority vote; every other variable gets median, p15, p85, min, max and spread."
  }
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/weather-ensemble-forecast-with-model-disagreement-b643b041/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from wetter.halowerk.com](https://www.zero.xyz/host/wetter.halowerk.com/llms.txt)
