# Weather Ensemble – Multi-Model Probabilistic Forecast

> Weather Ensemble – Multi-Model Probabilistic Forecast is a paid API for AI agents from ensemble.netzhandwerker.de, paid per call via x402, $0.005/call, status unknown (last checked 2026-10-12).

Returns per-hour ensemble statistics (median, p15/p85 band, min/max, model count, agreement score, rain probability, frost assessment) plus DWD warnings for a geographic point, pooled across up to 12 NWP models.

## Facts

- Endpoint: POST https://ensemble.netzhandwerker.de/ensemble?utm_source=zero.xyz
- Price: $0.005/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-12
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/weather-ensemble-multi-model-probabilistic-forecast-91b5dda0
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_t36YFpVvF0l3RgoPP_Uwr

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-multi-model-probabilistic-forecast-91b5dda0 -d '<json body>'
```

Example prompt: Can you pull an ensemble weather forecast for the next 72 hours at latitude 48.137, longitude 11.576 (Munich), comparing all 12 models, and tell me where they disagree most — especially on temperature and precipitation?

## When to prefer this

Choose this endpoint when you need uncertainty quantification rather than a single deterministic forecast — especially for high-stakes decisions (events, agriculture, aviation, logistics) where knowing the spread and inter-model disagreement matters. Prefer this over single-model weather APIs when you want rain probability derived from ensemble pooling, frost risk assessment, official DWD warnings, or want to know how many models support a given forecast hour. Best for locations in Europe where ICON and regional models add resolution, but global models are also included.

## Known failure modes

- Invalid lat/lon outside valid ranges (-90 to 90, -180 to 180) returns validation error
- Fewer than 2 models selected returns error since single-model comparison is undefined
- Hours exceeding 168 rejected; short-range models (e.g. icon_d2) will have lower model counts beyond their native horizon
- Unknown timezone string causes parsing failure
- Requesting more than 8 variables simultaneously rejected
- Payment not sent or insufficient USDC triggers 402 response
- External NWP model API unavailability may reduce model count in results or cause timeout

## How this service works

Twelve weather models compared hour by hour. Spread, agreement score, ensemble rain probability, frost and DWD warnings. Pay per call in USDC over x402.

## Output

A JSON response with hourly arrays for each requested variable, including median, p15/p85 percentile band, min, max, spread, and model count per hour; an agreement score per hour; rain probability pooled from ensemble members; frost assessment flags; circular consensus for wind direction; majority-vote weather codes; and active DWD official warnings for the target point.

## 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-multi-model-probabilistic-forecast-91b5dda0/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from ensemble.netzhandwerker.de](https://www.zero.xyz/host/ensemble.netzhandwerker.de/llms.txt)
