Combine forecast variables with arithmetic, functions, and aggregations. Select one or more forecast hours, or omit forecast_hours to calculate every available hour. The result uses the forecast's native grid. See About Custom Calculations for calculation syntax and examples.
| Name | Type | Description |
|---|---|---|
| model Required | string | Weather model to use. Allowed: wm-6, wm-6-3km |
| initialization_time Optional | string (ISO 8601) | The initialization time for the forecast. Default: latest complete run |
| calculation Required | string | Calculation text describing the operation to run at each grid cell. See About Custom Calculations for syntax and examples. |
| forecast_hours Optional | integer | integer[] | One nonnegative forecast hour or a nonempty list of nonnegative forecast hours. Omit to evaluate every available forecast hour. Unit: hours |
| bounds Optional | object | Geographic bounds for wm-6; omit for wm-6-3km. Supply both bounds for each selected axis. Omit an axis pair to return its full range. |
| min_latitude Optional | number | Southern edge of the bounding box. Requires max_latitude. Range: −90° to 90° |
| max_latitude Optional | number | Northern edge of the bounding box. Requires min_latitude. Range: −90° to 90° |
| min_longitude Optional | number | Western edge of the bounding box. Requires max_longitude. A value greater than max_longitude selects across the dateline. Range: −180° to 180° |
| max_longitude Optional | number | Eastern edge of the bounding box. Requires min_longitude. Range: −180° to 180° |
| as_url Optional | boolean | If true, returns a JSON response with a temporary download URL instead of the file directly. The URL points to the generated Zarr ZIP archive and remains active for 30 minutes after the ZIP file is generated. API default: false. The MCP requires true or omission and defaults this option to true. |
The output uses the same grid as the input data. Geographic subsetting may include extra cells around the requested area's edges.
| Selection | Example | Behavior |
|---|---|---|
| One hour | "forecast_hours": 6 | Evaluate the calculation at forecast hour 6. |
| Specific hours | "forecast_hours": [0, 6, 12] | Evaluate the calculation at the listed forecast hours. |
| All hours | Omit forecast_hours | Evaluate the calculation at every available forecast hour. |
Each selected forecast hour is calculated separately. Hours that do not have all required input data are skipped, and results for the remaining hours are returned. If no selected hour can be calculated, the request returns HTTP 400.
With as_url=false, a successful response downloads a .zarr.zip file. With as_url=true, the JSON response contains url, url_expires_at, content_type, and size_bytes. GET url without an additional API credential to download the ZIP before url_expires_at. The table below describes the arrays and metadata inside the ZIP.
| Name | Type | Description |
|---|---|---|
| result | float32 array | The calculated values. See the dimensions below. |
| forecast_hour | integer[] | The forecast hours included in result. Unit: hours |
| ensemble_member | integer[] | The ensemble member numbers represented by the separate calculated grids in the result. Present when: members stay separate |
| latitude , longitude | number[] | number[][] | The location of the grid cells in result. Global grids use one-dimensional coordinate arrays; the 3 km grid uses two-dimensional coordinate arrays. Unit: degrees |
| (root attributes) | object | The model, initialization time, calculation text, and exact forecast inputs used. |
| forecast_zero | string (ISO 8601) | Valid time of forecast hour 0. It can differ from initialization_time. |
| output_calculations | string[] | The calculation for each output grid. |
| evaluations | object[] | One entry for each successful forecast hour. Each entry contains forecast_hour and metadata describing the times, pressure levels, and ensemble members represented by that result. |
| forecast_hour_errors | object[] | A list of skipped forecast hours. Each entry contains forecast_hour, code, and message. |
| Model | Dimensions |
|---|---|
wm-6 | forecast_hour × time_index × level_index × latitude × longitude |
wm-6-3km | forecast_hour × time_index × level_index × y × x |
When all ensemble members remain separate, ensemble_member replaces level_index. All five dimensions remain present, including dimensions of length one. time_index and level_index identify positions in the time and level metadata under evaluations; they are not separate arrays in the archive.
Forecast inputs keep their native units. The unit of the calculated values depends on the calculation’s inputs and operations.
Open the downloaded ZIP as a Zarr store, then read result together with its named dimensions and the root evaluations metadata.