Point forecasts
GET https://api.vertexmaps.com/v1/forecastAlias: /v1/point. One credit per location, per block of ten hourly variables, per model.
Parameters
Section titled “Parameters”| Parameter | Values | Default |
|---|---|---|
latitude, longitude |
Comma lists of equal length, WGS84. Up to 50 locations; the response is an array when there are several. | required |
hourly |
Comma list of hourly fields. | |
current |
Comma list of hourly field names. Returns the value at the current hour. | |
daily |
Comma list of daily fields. | |
models |
Comma list of hrrr, rrfs, gfs, ecmwf (nam until 2026-10-14). Several models suffix every field with _model. |
hrrr |
temperature_unit |
celsius, fahrenheit |
celsius |
wind_speed_unit |
kmh, ms, mph, kn |
kmh |
precipitation_unit |
mm, inch. Also drives snowfall (cm → inch) and snow_depth (m → inch). |
mm |
timezone |
An IANA name, GMT, or auto. auto picks the CONUS zone from the coordinates. |
GMT |
timeformat |
iso8601, unixtime |
iso8601 |
format |
json, csv, flatbuffers |
json |
forecast_days |
1–16, counted from today in the response timezone. | all |
forecast_hours |
1–384, counted from the current hour. | all |
start_hour, end_hour |
YYYY-MM-DDTHH:MM in the response timezone. |
|
elevation |
Metres. Overrides the DEM sample for the lapse correction. | DEM |
dry_run |
1 returns {product, credits} without executing. |
past_days, past_hours, start_date and end_date return 400 until history ships.
At least one of hourly, current or daily is required.
Hourly fields
Section titled “Hourly fields”Standard (Open-Meteo names, Open-Meteo units):
temperature_2m dew_point_2m relative_humidity_2m cloud_cover cloud_cover_low cloud_cover_mid cloud_cover_high precipitation wind_speed_10m wind_direction_10m wind_gusts_10m cape surface_pressure pressure_msl boundary_layer_height snowfall snowfall_water_equivalent snow_depth snow_water_equivalent
Vertex:
| Field | Unit | Meaning |
|---|---|---|
wstar |
m/s | Deardorff convective velocity scale: the strength of thermals. |
hcrit |
m MSL | Height where updraft falls below a usable climb rate. |
top_of_lift |
m MSL | Usable lift top: hcrit capped by cloud base when cumulus form. null when there is no usable lift. |
top_of_lift_agl |
m AGL | The same, above the model’s terrain. |
cloud_base |
m MSL | Cumulus base. null when the lifted parcel never saturates inside the mixed layer (a blue day). |
cloud_base_agl |
m AGL | |
cu_depth |
m | Cumulus depth. Large values mean overdevelopment. |
smoke |
µg/m³ | Near-surface smoke (HRRR only). |
us_aqi |
AQI | EPA PM2.5 AQI from the smoke field (HRRR only). |
wind_speed_{1000..18000}ft, wind_direction_{1000..18000}ft |
Winds aloft at every 1,000 ft MSL step, earth-relative. Each level counts as one variable. |
Availability by model: the soaring fields need boundary-layer fluxes, so they are HRRR, RRFS, NAM and GFS only. snowfall is HRRR and RRFS. smoke and us_aqi are HRRR. Asking a model for a field it lacks returns 400 naming both.
Older spellings (windspeed_10m, cloudcover, dewpoint_2m, thermal_velocity, cloudbase, …) are accepted and echoed back under the spelling you used.
Current
Section titled “Current”current=temperature_2m,wind_speed_10m returns a current block at the most recent model hour plus current_units, with interval: 3600. On its own it costs half a credit.
"current": { "time": "2026-09-19T15:00", "interval": 3600, "temperature_2m": 24.1, "wind_speed_10m": 11.2 }Daily fields
Section titled “Daily fields”Aggregated over local calendar days of the response timezone, including partial days at either end:
temperature_2m_max temperature_2m_min precipitation_sum snowfall_sum wind_speed_10m_max wind_gusts_10m_max cloud_cover_mean relative_humidity_2m_mean cape_max wstar_max top_of_lift_max cloud_base_min smoke_max us_aqi_max
Several models
Section titled “Several models”models=hrrr,gfs returns one object with every field suffixed by model on a shared hourly axis; hours a model does not cover are null. model, model_run and model_elevation become per-model maps.
{ "model": ["hrrr", "gfs"], "model_run": { "hrrr": "2026-09-19T12:00Z", "gfs": "2026-09-19T06:00Z" }, "hourly": { "time": ["…"], "temperature_2m_hrrr": [18.8, 16.1, "…"], "temperature_2m_gfs": [15.3, 14.5, "…"] }}Each model bills separately.
format=csv returns one table per location: a comment line with the location, a header with units, then a row per hour.
# latitude=46.87 longitude=-113.99 elevation=976 timezone=America/Denvertime,temperature_2m (°C),wstar (m/s)2026-09-19T09:00,14.2,0.6FlatBuffers and the Open-Meteo SDKs
Section titled “FlatBuffers and the Open-Meteo SDKs”format=flatbuffers returns the binary the official Open-Meteo SDKs decode (openmeteo-requests for Python, @openmeteo/sdk for TypeScript, and the Swift, Kotlin, Go and Rust clients): size-prefixed WeatherApiResponse messages, one per location and model. Times are unix seconds with the response’s UTC offset; several models come back as separate messages tagged with the model rather than as suffixed fields.
Variables are identified by the schema’s enums. Open-Meteo names map exactly (temperature_2m is Variable.temperature at altitude 2, temperature_2m_max adds Aggregation.maximum, winds aloft carry their level in metres). The Vertex fields (wstar, top_of_lift, cu_depth, smoke, …) have no enum entry and arrive as Variable.undefined; read them by position, which matches the order of your hourly= list.
import openmeteo_requests
om = openmeteo_requests.Client()responses = om.weather_api("https://api.vertexmaps.com/v1/forecast", params={ "latitude": 46.87, "longitude": -113.99, "hourly": ["temperature_2m", "wstar", "top_of_lift"], "timezone": "auto", "apikey": "vtx_live_…",})hourly = responses[0].Hourly()wstar = hourly.Variables(1).ValuesAsNumpy() # m/s, by positionModel runs and stitching
Section titled “Model runs and stitching”model_run is the run the values come from. When the current run’s horizon is shorter than the retained synoptic run’s, later hours come from that run and model_run_extended names it. Hours not yet published by NOAA are null, never fabricated.