Introduction

WeatherMesh is the world’s most accurate AI weather model, and is used operationally to guide the largest balloon constellation in the world.

WeatherMesh currently predicts surface temperature, pressure, winds, precipitation, and radiation; and then geopotential, temperature, winds, and moisture at 28 pressure levels. Outputs have a resolution of 0.25 degrees, and are best at a time horizon between <1 and 5 days out.

The WindBorne API is designed to be predictable, performant, and easy to use.

Need access?

Email data@windbornesystems.com
Base URL

Authentication

WindBorne uses API keys to authenticate API requests. If an API request is not properly authenticated, it will fail. To get an API key, email data@windbornesystems.com.

You should have an API key and a client id. Conceptually, you can think of your client id as a username and your API key as your password. You should make sure to keep your API key safe and secure.

To authenticate, pass HTTP basic auth headers in the GET request with username YOUR_CLIENT_ID and password YOUR_API_KEY. This follows RFC 7617; ie, as is standard, the credentials are colon-separated then base-64 encoded; many HTTP libraries will do this for you.

Using JWTs from a key server

Example

Point forecasts

This endpoint allows getting the forecast at a given point or set of points. This runs WindBorne's custom point forecasting model, making it more accurate than simple interpolation of the gridded output.

These forecasts are at hourly resolution out to 5 days and then 6-hourly beyond that.

It accepts the following query string parameters:

NameTypeDescription
coordinatesstringA semi-colon separated list of latitude,longitude tuples, eg 37,-121;40.3,-100
min_forecast_hourintegerOptional. The minimum forecast hour to calculate point forecasts for.
max_forecast_hourintegerOptional. The maximum forecast hour to calculate point forecasts for.
initialization_timestringOptional. An ISO 8601 date string, supporting formats YYYYMMDDHH, YYYY-MM-DDTHH, and YYYY-MM-DDTHH:mm:ss., representing the time at which the forecast was made. This looks solely at the date and the hour; minutes and seconds are discarded. If nothing is provided, the latest forecast is used.

It returns the following:

NameTypeDescription
forecasts[Forecast]An array of forecasts, in the same order as the input coordinates
initialization_timestringThe ISO 8601 date string of the forecast initialization time

A forecast is an array of the form:

NameTypeDescription
temperature_2mnumberThe temperature at 2m above ground level, in degrees Celsius
dewpoint_2mnumberThe dewpoint at 2m above ground level, in degrees Celsius
wind_u_10mnumberThe U component of wind speed at 10m above ground level, in m/s
wind_v_10mnumberThe V component of wind speed at 10m above ground level, in m/s
pressure_mslnumberThe pressure as converted to MSL pressure, in hPa
latitudenumberThe latitude of the point, between -90 and 90
longitudenumberThe longitude of the point, between -180 and 180
timestringThe ISO8601 timestamp of when this forecast point is valid

Endpoints
Sample Response

Example: Using the point forecasts API

Here is an example of making a request to the point forecasts API using Python and the wb_get_request function from the Authentication section above.

In this example, we request forecasts for two points: the Golden Gate Bridge and the Statue of Liberty. We request forecasts for 0-2 hours, starting from the latest initialization time.

In the returned response, forecasts are grouped first by point, then by forecast hour. Each forecast hour contains the forecasted values for various weather variables.

Example
Python
Example response

Initialization Times

This endpoint allows getting the available initialization times for point forecasts.

It doesn't accept any query string parameters.

It returns the following:

NameTypeDescription
available[string]An array of ISO8601 timestamps of available initialization times for point forecasts, ordered from newest to oldest.
lateststringThe ISO8601 timestamp of latest available initialization time for point forecasts.

Endpoints
Sample Response

Example: Using the initialization times forecasts API

Here is an example of making a request to the initialization times forecasts API using Python and the wb_get_request function from the Authentication section above.

In this example, we request to get the available initialization times for point forecasts.

The response includes a list of available initialization times formatted as ISO8601 timestamps. Initialization times are ordered from newest to oldest, with an additional entry indicating the latest initialization time.

Example
Python
Example response

2m temperature

This endpoint allows getting the gridded output of global 2m temperature forecasts. These outputs are returned as a netCDF (.nc) file.

This will generally be a redirect to a presigned URL on S3, so you will need to follow the redirect to get the file. Only in the short time it takes for the file to be uploaded will it be served directly.

It accepts the following query string parameters:

NameTypeDescription
timestringAn ISO 8601 date string, supporting formats YYYYMMDDHH, YYYY-MM-DDTHH, and YYYY-MM-DDTHH:mm:ss., representing the time for which to get the forecast. This looks solely at the date and the hour; minutes and seconds are discarded. If there is no forecast available within an hour of the requested time, it will return a 404.

Endpoints

10m u-component of wind

This endpoint allows getting the gridded output of global 10m u-component of wind forecasts. These outputs are returned as a netCDF (.nc) file.

This will generally be a redirect to a presigned URL on S3, so you will need to follow the redirect to get the file. Only in the short time it takes for the file to be uploaded will it be served directly.

It accepts the following query string parameters:

NameTypeDescription
timestringAn ISO 8601 date string, supporting formats YYYYMMDDHH, YYYY-MM-DDTHH, and YYYY-MM-DDTHH:mm:ss., representing the time for which to get the forecast. This looks solely at the date and the hour; minutes and seconds are discarded. If there is no forecast available within an hour of the requested time, it will return a 404.

Endpoints

10m v-component of wind

This endpoint allows getting the gridded output of global 10m v-component of wind forecasts. These outputs are returned as a netCDF (.nc) file.

This will generally be a redirect to a presigned URL on S3, so you will need to follow the redirect to get the file. Only in the short time it takes for the file to be uploaded will it be served directly.

It accepts the following query string parameters:

NameTypeDescription
timestringAn ISO 8601 date string, supporting formats YYYYMMDDHH, YYYY-MM-DDTHH, and YYYY-MM-DDTHH:mm:ss., representing the time for which to get the forecast. This looks solely at the date and the hour; minutes and seconds are discarded. If there is no forecast available within an hour of the requested time, it will return a 404.

Endpoints

Mean sea level pressure

This endpoint allows getting the gridded output of global mean sea level pressure forecasts. These outputs are returned as a netCDF (.nc) file.

This will generally be a redirect to a presigned URL on S3, so you will need to follow the redirect to get the file. Only in the short time it takes for the file to be uploaded will it be served directly.

It accepts the following query string parameters:

NameTypeDescription
timestringAn ISO 8601 date string, supporting formats YYYYMMDDHH, YYYY-MM-DDTHH, and YYYY-MM-DDTHH:mm:ss., representing the time for which to get the forecast. This looks solely at the date and the hour; minutes and seconds are discarded. If there is no forecast available within an hour of the requested time, it will return a 404.

Endpoints

500hPa geopotential

This endpoint allows getting the gridded output of global 500hPa geopotential forecasts. These outputs are returned as a netCDF (.nc) file.

This will generally be a redirect to a presigned URL on S3, so you will need to follow the redirect to get the file. Only in the short time it takes for the file to be uploaded will it be served directly.

It accepts the following query string parameters:

NameTypeDescription
timestringAn ISO 8601 date string, supporting formats YYYYMMDDHH, YYYY-MM-DDTHH, and YYYY-MM-DDTHH:mm:ss., representing the time for which to get the forecast. This looks solely at the date and the hour; minutes and seconds are discarded. If there is no forecast available within an hour of the requested time, it will return a 404.

Endpoints

850hPa temperature

This endpoint allows getting the gridded output of global 850hPa temperature forecasts. These outputs are returned as a netCDF (.nc) file.

This will generally be a redirect to a presigned URL on S3, so you will need to follow the redirect to get the file. Only in the short time it takes for the file to be uploaded will it be served directly.

It accepts the following query string parameters:

NameTypeDescription
timestringAn ISO 8601 date string, supporting formats YYYYMMDDHH, YYYY-MM-DDTHH, and YYYY-MM-DDTHH:mm:ss., representing the time for which to get the forecast. This looks solely at the date and the hour; minutes and seconds are discarded. If there is no forecast available within an hour of the requested time, it will return a 404.

Endpoints

Example: Using the gridded forecast API

Here is an example of making a request to the gridded forecast API using Python, again using the wb_get_request function from the Authentication section above. This example queries for 2m temperature and uses the io and xarray libraries to process the response into an xarray dataset.

In this example, we request the 2m temperature forecast one week from the time that the script is run, at 00:00 UTC.

The returned dataset has three variables: latitude, longitude, and temperature_2m. The latitude and longitude variables are 1D arrays of the latitudes and longitudes of the grid points, respectively. The temperature_2m variable is a 2D array of the forecasted 2 meter temperatures at each grid point. The dataset contains additional metadata in the form of attributes.

Example
Python
Example response

Historical 2m temperature

This endpoint allows getting the historical output of global 2m temperature forecasts. These outputs are returned as a netCDF (.nc) file. If the requested forecast is not available, a 404 status code will be returned.

It accepts the following query string parameters:

NameTypeDescription
initialization_timeISO stringAn ISO formatted date string representing the initialization time of the forecast.
forecast_hournumberHow many hours after the run time the forecast is valid at.

Endpoints

Historical 500hPa geopotential

This endpoint allows getting the historical output of global 500hPa geopotential forecasts. These outputs are returned as a netCDF (.nc) file. If the requested forecast is not available, a 404 status code will be returned.

This endpoint does not require authentication.

It accepts the following query string parameters:

NameTypeDescription
initialization_timeISO stringAn ISO formatted date string representing the initialization time of the forecast.
forecast_hournumberHow many hours after the run time the forecast is valid at. If unauthenticated, this must be a multiple of 24.

Endpoints

Historical 500hPa wind u

This endpoint allows getting the historical output of global 500hPa wind u forecasts. These outputs are returned as a netCDF (.nc) file. If the requested forecast is not available, a 404 status code will be returned.

It accepts the following query string parameters:

NameTypeDescription
initialization_timeISO stringAn ISO formatted date string representing the initialization time of the forecast.
forecast_hournumberHow many hours after the run time the forecast is valid at.

Endpoints

Historical 500hPa wind v

This endpoint allows getting the historical output of global 500hPa wind v forecasts. These outputs are returned as a netCDF (.nc) file. If the requested forecast is not available, a 404 status code will be returned.

It accepts the following query string parameters:

NameTypeDescription
initialization_timeISO stringAn ISO formatted date string representing the initialization time of the forecast.
forecast_hournumberHow many hours after the run time the forecast is valid at.

Endpoints

Tropical Cyclones

This endpoint allows getting the predicted ground track of active tropical cyclones.

It accepts the following query string parameters:

NameTypeDescription
initialization_timestringOptional. An ISO 8601 date string, supporting formats YYYYMMDDHH, YYYY-MM-DDTHH, and YYYY-MM-DDTHH:mm:ss., representing the time at which the forecast was made. This looks solely at the date and the hour; minutes and seconds are discarded. If nothing is provided, the latest forecast is used.
basinstringOptional. A string indicating the tropical cyclones basins to be filtered in the response. If not set, all tropical cyclones will be included.

The basin parameter defines specific geographical regions where tropical cyclones are present:

NameTypeDescription
NAstringNorth Atlantic Basin spanning from African Coast (20°E) to 140°W and Equator to 90°N.
EPstringEastern Pacific Basin spanning from 140°W to 180°W and Equator to 90°N.
WPstringWestern Pacific Basin spanning from 100°E to 180°E and Equator to 60°N.
NIstringNorth Indian Ocean Basin spanning from 45°E to 100°E and Equator to 90°N.
SIstringSouth-West Indian Ocean Basin spanning from 20°E to 90°E and 40°S to Equator.
AUstringAustralian Region Basin spanning from 90°E to 160°E and 36°S to Equator.
SPstringSouth Pacific Basin spanning from 160°E to 120°W and 40°S to Equator.

It returns an object (dictionary) with keys being tropical cyclone IDs and values being arrays of ground track points. Each ground track point is of the form:

NameTypeDescription
latitudenumberThe latitude where the tropical cyclone is predicted to be
longitudenumberThe longitude where the tropical cyclone is predicted to be
timestringThe ISO8601 timestamp of when this forecast point is valid

Endpoints
Sample Response

Example: Using the tropical cyclones forecast API

Here is an example of making a request to the tropical cyclones forecast API using Python, again using the wb_get_request function from the Authentication section above. This example queries for tropical cyclones and saves the response in a json file.

In this example, we request the tropical cyclones within Eastern Pacific basin for an initialization time .

The response is an object (dictionary) with keys being tropical cyclone IDs and values being arrays of ground track points.

Example
Python
Example response

Planned endpoints

The model produces a number of outputs that are not yet exposed in the API. These and other endpoints will eventually be added.

  • Precipitation forecasts
  • Cloud cover forecasts
  • Ceiling and visibility forecasts
  • Region forecasts, returning points for a large number of locations (eg population centers, METAR stations) in a single query
  • Historical forecasts