ECMWF Weather Forecast API

Full Resolution 1-hourly IFS HRES at 9 km

Location and Time

Location:
Time:

By default, we provide forecasts for 7 days, but you can access forecasts for up to 16 days. If you're interested in past weather data, you can use the Past Days feature to access archived forecasts.

Hourly Weather Variables

Settings

Usage license:

API Response

Preview:
API URL (Open in new tab or copy this URL into your application)

Data Sources

This API provides access to both real-time IFS HRES 9 km forecasts and open-data ECMWF IFS and AIFS 0.25°. Different weather models may use different temporal resolutions. The Open-Meteo API dynamically interpolates all data to a consistent 1-hourly time-series for up to 15 days.

  • The ECMWF IFS model runs every 6 hours at a 9 km resolution. Open-Meteo delivers the full native 9 km IFS forecasts on the reduced Gaussian grid O1280, ensuring direct, original ECMWF outputs at the highest resolution. The first 90 forecast hours use 1-hourly data, switching to 3-hourly after 90 hours and 6 hourly after 144 hours.
  • The open-data IFS 0.25 updates every 6 hours, but only offers 0.25° resolution and 3- and 6-hourly data. The open-data distribution has an additional delay of 2 hours compared to the real-time IFS dissemination.
  • AIFS is ECMWF’s artificial intelligence weather model, delivering improved performance compared to GraphCast and other AI-based models. Currently, only 6-hourly time steps are available. More details about AIFS can be found here. As ECMWF expands its data offering, new AIFS products will also be integrated into this API.

For higher-resolution local forecasts, we recommend the Generic Weather Forecast API, which integrates models down to 1 km resolution. ECMWF ensemble forecasts are available via the Ensemble API, ECMWF WAM wave forecasts can be accessed through the Marine Forecast API, and HRES IFS data are archived in the Historical Weather API.

You can find the update timings in the model updates documentation.
Weather ModelRegionSpatial ResolutionTemporal ResolutionForecast LengthUpdate frequency
IFS HRESGlobal9 km (O1280 grid)1-Hourly (3-hourly after 90 hours, 6-hourly after 144 hours)15 daysEvery 6 hours
IFS 0.25 Open-DataGlobal0.25° (~25 km)3-Hourly (6-hourly after 144 hours)15 daysEvery 6 hours
AIFS SingleGlobal0.25° (~28 km)6-Hourly15 daysEvery 6 hours

API Documentation

The API endpoint /v1/ecmwf accepts a geographical coordinate, a list of weather variables and responds with a JSON hourly weather forecast for 10 days. Time always starts at 0:00 today. All URL parameters are listed below:

ParameterFormatRequiredDefaultDescription
latitude, longitudeFloating pointYesGeographical WGS84 coordinates of the location. Multiple coordinates can be comma separated. E.g. &latitude=52.52,48.85&longitude=13.41,2.35. To return data for multiple locations the JSON output changes to a list of structures. CSV and XLSX formats add a column location_id.
elevationFloating pointNoThe elevation used for statistical downscaling. Per default, a 90 meter digital elevation model is used. You can manually set the elevation to correctly match mountain peaks. If &elevation=nan is specified, downscaling will be disabled and the API uses the average grid-cell height. For multiple locations, elevation can also be comma separated.
hourlyString arrayNoA list of weather variables which should be returned. Values can be comma separated, or multiple &hourly= parameter in the URL can be used.
temperature_unitStringNocelsiusIf fahrenheit is set, all temperature values are converted to Fahrenheit.
wind_speed_unitStringNokmhOther wind speed speed units: ms, mph and kn
precipitation_unitStringNommOther precipitation amount units: inch
timeformatStringNoiso8601If format unixtime is selected, all time values are returned in UNIX epoch time in seconds. Please note that all time is then in GMT+0! For daily values with unix timestamp, please apply utc_offset_seconds again to get the correct date.
past_daysInteger (0-92)No0If past_days is set, yesterday or the day before yesterday data are also returned.
start_date
end_date
String (yyyy-mm-dd)NoThe time interval to get weather data. A day must be specified as an ISO8601 date (e.g. 2022-06-30).
cell_selectionStringNolandSet a preference how grid-cells are selected. The default land finds a suitable grid-cell on land with similar elevation to the requested coordinates using a 90-meter digital elevation model. sea prefers grid-cells on sea. nearest selects the nearest possible grid-cell.
apikeyStringNoOnly required to commercial use to access reserved API resources for customers. The server URL requires the prefix customer-. See pricing for more information.

Additional optional URL parameters will be added. For API stability, no required parameters will be added in the future!

Hourly Parameter Definition

The parameter &hourly= accepts the following values. Most weather variables are given as an instantaneous value for the indicated hour. Some variables like precipitation are calculated from the preceding hour as and average or sum.

VariableValid timeUnitDescription
precipitationPreceding hour summm (inch)Total precipitation (rain, showers, snow) sum of the preceding hour
snowfallPreceding hour sumcm (inch)Snowfall amount of the preceding hour in centimeters. For the water equivalent in millimeter, divide by 7. E.g. 7 cm snow = 10 mm precipitation water equivalent. Snowfall amount is not provided by ECMWF directly, instead it is approximated based on total precipitation and temperature
precipitation_typeInstantaneousmm (inch)0 = No precipitation, 1 = Rain, 3 = Freezing rain (i.e. supercooled raindrops which freeze on contact with the ground and other surfaces), 5 = Snow, 6 = Wet snow (i.e. snow particles which are starting to melt), 7 = Mixture of rain and snow, 8 = Ice pellets, 12 = Freezing drizzle (i.e. supercooled drizzle which freezes on contact with the ground and other surfaces)
runoffPreceding hour summm (inch)Execess rain that is not absorbed by the soil
weather_codeInstantWMO codeWeather condition as a numeric code. Follow WMO weather interpretation codes. See table below for details. Weather code is calculated from cloud cover analysis, precipitation and snowfall. As ECMWF IFS has barely no information about atmospheric stability, estimation about thunderstorms is not possible.
cloud_coverInstant%Total cloud cover as an area fraction. Calculated as a weighted function from low, mid and high level clouds.
cloud_cover_lowInstant%Low level clouds and fog up to 3 km altitude. In case of ECMWF IFS it is based on relative humidity on pressure levels 1000, 925 and 850 hPa.
cloud_cover_midInstant%Mid level clouds from 3 to 8 km altitude. In case of ECMWF IFS it is based on relative humidity on pressure levels 700 and 500 hPa.
cloud_cover_highInstant%High level clouds from 8 km altitude. In case of ECMWF IFS it is based on relative humidity on pressure levels 300, 250 and 200 hPa.
pressure_msl
surface_pressure
InstanthPaAtmospheric air pressure reduced to sea level (Mean sea level) and actual pressure at surface level
surface_temperatureInstant°C (°F)Temperature of the the surface. Depending on the type of surface (e.g. concrete) this temperature can be significantly higher then the 2 meter air temperature
soil_temperature_0_7cm
soil_temperature_7_to_28cm
soil_temperature_28_to_100cm
soil_temperature_100_to_255cm
Instant°C (°F)Average temperature of different soil depths below ground.
soil_moisture_0_to_7cm
soil_moisture_7_to_28cm
soil_moisture_28_to_100cm
soil_moisture_100_to_255cm
Instantm³/m³Average soil water content as volumetric mixing ratio at 0-7, 7-28, 28-100 and 100-255 cm depths.
total_column_integrated_water_vapourInstantkg/m²Total amount of water in the atmosphere.
temperature_2m
temperature_1000hPa, ...
Instant°C (°F)Air temperature 2 meter above ground. Additional temperature in the atmopshere are given on different pressure levels.
temperature_2m_min
temperature_2m_max
Preceding 3-hour°C (°F)Minimum and maximum temperature of the preceding 3 hours.
geopotential_height_1000hPaInstantmeterGeopotential height on different atmospheric pressure levels
wind_speed_10m
wind_speed_1000hPa, ...
Instantkm/h (mph, m/s, knots)Wind speed at 10 meters above ground. Wind speed on 10 meters is the standard level. Additional wind speeds are given on atmospheric pressure levels.
wind_direction_10m
wind_direction_1000hPa, ...
Instant°Wind direction at 10 meters above ground and different pressure levels.
wind_gusts_10mPreceding 3-hour maxkm/h (mph, m/s, knots)Maximum 3 second wind at 10 m height above ground as a maximum of the preceding 3 hours
relative_humidity_1000hPa, ...Instant%Relative humidity at atmospheric pressure levels. Unfortunately, 2 meter relative humidity is unavailable.
cloud_cover_1000hPa, ...Instant%Cloud cover at the specified pressure level. Cloud cover is approximated based on relative humidity using Sundqvist et al. (1989)
shortwave_radiationPreceding hour meanW/m²Shortwave solar radiation as average of the preceding hour. This is equal to the total global horizontal irradiation
direct_radiation
direct_normal_irradiance
Preceding hour meanW/m²Direct solar radiation as average of the preceding hour on the horizontal plane and the normal plane (perpendicular to the sun). ECMWF IFS open-data does not provide direct and diffuse radiation. It is approximated based on Razo, Müller Witwer
diffuse_radiationPreceding hour meanW/m²Diffuse solar radiation as average of the preceding hour. Similar to direct radiation, it is approximated based on Razo, Müller Witwer
global_tilted_irradiancePreceding hour meanW/m²Total radiation received on a tilted pane as average of the preceding hour. The calculation is assuming a fixed albedo of 20% and in isotropic sky. Please specify tilt and azimuth parameter. Tilt ranges from 0° to 90° and is typically around 45°. Azimuth should be close to 0° (0° south, -90° east, 90° west, ±180 north). If azimuth is set to "nan", the calculation assumes a horizontal tracker. If tilt is set to "nan", it is assumed that the panel has a vertical tracker. If both are set to "nan", a bi-axial tracker is assumed.

JSON Return Object

On success a JSON object will be returned.

{
    "latitude": 52.52,
    "longitude": 13.419,
    "elevation": 44.812,
    "generationtime_ms": 2.2119,
    "utc_offset_seconds": 0,
    "timezone": "Europe/Berlin",
    "timezone_abbreviation": "CEST",
    "hourly": {
        "time": ["2022-07-01T00:00", "2022-07-01T01:00", "2022-07-01T02:00", ...],
        "temperature_2m": [13, 12.7, 12.7, 12.5, 12.5, 12.8, 13, 12.9, 13.3, ...]
    },
    "hourly_units": {
        "temperature_2m": "°C"
    }
}
ParameterFormatDescription
latitude, longitudeFloating pointWGS84 of the center of the weather grid-cell which was used to generate this forecast. This coordinate might be a few kilometers away from the requested coordinate.
elevationFloating pointThe elevation from a 90 meter digital elevation model. This effects which grid-cell is selected (see parameter cell_selection). Statistical downscaling is used to adapt weather conditions for this elevation. This elevation can also be controlled with the query parameter elevation. If &elevation=nan is specified, all downscaling is disabled and the averge grid-cell elevation is used.
generationtime_msFloating pointGeneration time of the weather forecast in milliseconds. This is mainly used for performance monitoring and improvements.
utc_offset_secondsIntegerApplied timezone offset from the &timezone= parameter.
timezone
timezone_abbreviation
StringTimezone identifier (e.g. Europe/Berlin) and abbreviation (e.g. CEST)
hourlyObjectFor each selected weather variable, data will be returned as a floating point array. Additionally a time array will be returned with ISO8601 timestamps.
hourly_unitsObjectFor each selected weather variable, the unit will be listed here.
dailyObjectFor each selected daily weather variable, data will be returned as a floating point array. Additionally a time array will be returned with ISO8601 timestamps.
daily_unitsObjectFor each selected daily weather variable, the unit will be listed here.

Errors

In case an error occurs, for example a URL parameter is not correctly specified, a JSON error object is returned with a HTTP 400 status code.

{
    "error": true, 
    "reason": "Cannot initialize WeatherVariable from invalid String value
	    tempeture_2m for key hourly" 
}

Weather variable documentation

WMO Weather interpretation codes (WW)

CodeDescription
0Clear sky
1, 2, 3Mainly clear, partly cloudy, and overcast
45, 48Fog and depositing rime fog
51, 53, 55Drizzle: Light, moderate, and dense intensity
56, 57Freezing Drizzle: Light and dense intensity
61, 63, 65Rain: Slight, moderate and heavy intensity
66, 67Freezing Rain: Light and heavy intensity
71, 73, 75Snow fall: Slight, moderate, and heavy intensity
77Snow grains
80, 81, 82Rain showers: Slight, moderate, and violent
85, 86Snow showers slight and heavy
95 *Thunderstorm: Slight or moderate
96, 99 *Thunderstorm with slight and heavy hail

(*) Thunderstorm forecast with hail is only available in Central Europe