Skip to main content
Retrieve forecast and historical weather data either by Leaf field or by latitude/longitude. Use the field endpoints when you want Leaf to resolve the field centroid for you, and use the lat/lon endpoints when you already know the exact coordinates. For conceptual background, see Weather Overview.

Base URL

https://api.withleaf.io/services/weather/api

Endpoints

DescriptionMethodPath
Get daily forecast (field)GET/users/{leafUserId}/weather/forecast/field/{fieldId}/daily
Get hourly forecast (field)GET/users/{leafUserId}/weather/forecast/field/{fieldId}/hourly
Get daily forecast (lat/lon)GET/weather/forecast/daily/{lat},{lon}
Get hourly forecast (lat/lon)GET/weather/forecast/hourly/{lat},{lon}
Get daily historical (field)GET/users/{leafUserId}/weather/historical/field/{fieldId}/daily
Get hourly historical (field)GET/users/{leafUserId}/weather/historical/field/{fieldId}/hourly
Get daily historical (lat/lon)GET/weather/historical/daily/{lat},{lon}
Get hourly historical (lat/lon)GET/weather/historical/hourly/{lat},{lon}
Daily endpoints accept a maximum range of 366 days per request. Hourly endpoints accept a maximum of 30 days.
Historical data less than 5 days old is unavailable. Use the forecast endpoints for recent weather data.

Field-based endpoints

These endpoints retrieve weather data centered on a Leaf user’s field. The API uses the field’s centroid coordinates automatically.

Get daily forecast (field)

GET /users/{leafUserId}/weather/forecast/field/{fieldId}/daily Returns daily forecast weather data for a field.

Parameters

ParameterTypeLocationRequiredDescription
leafUserIdstringpathYesUUID of the Leaf user.
fieldIdstringpathYesUUID of the field.
startTimestringqueryNoStart date in YYYY-MM-DD format.
endTimestringqueryNoEnd date in YYYY-MM-DD format.
modelstringqueryNoForecast model: gfs (default), icon, ifs, metNordic, jma, gem, arpegeArome.
unitsstringqueryNoUnit system: metric (default) or imperial.

Request

curl -X GET \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  'https://api.withleaf.io/services/weather/api/users/{leafUserId}/weather/forecast/field/{fieldId}/daily?startTime=2026-03-09&endTime=2026-03-15'

Response

[
  {
    "date": "2026-03-09",
    "temperatureMax": 18.2,
    "temperatureMin": 6.4,
    ....
  },
  {
    "date": "2026-03-10",
    "temperatureMax": 20.1,
    "temperatureMin": 7.8,
    ....
  }
]

Get hourly forecast (field)

GET /users/{leafUserId}/weather/forecast/field/{fieldId}/hourly Returns hourly forecast weather data for a field.

Parameters

ParameterTypeLocationRequiredDescription
leafUserIdstringpathYesUUID of the Leaf user.
fieldIdstringpathYesUUID of the field.
startTimestringqueryNoStart date in YYYY-MM-DD format.
endTimestringqueryNoEnd date in YYYY-MM-DD format.
modelstringqueryNoForecast model: gfs (default), icon, ifs, metNordic, jma, gem, arpegeArome.
unitsstringqueryNoUnit system: metric (default) or imperial.

Request

curl -X GET \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  'https://api.withleaf.io/services/weather/api/users/{leafUserId}/weather/forecast/field/{fieldId}/hourly?startTime=2026-03-09&endTime=2026-03-10'

Response

[
  {
    "timestamp": "2026-03-09T00:00:00Z",
    "temperature": 12.3,
    "humidity": 65,
    ....
  },
  {
    "timestamp": "2026-03-09T01:00:00Z",
    "temperature": 11.8,
    "humidity": 68,
    ....
  }
]

Get daily historical (field)

GET /users/{leafUserId}/weather/historical/field/{fieldId}/daily Returns daily historical weather data for a field.

Parameters

ParameterTypeLocationRequiredDescription
leafUserIdstringpathYesUUID of the Leaf user.
fieldIdstringpathYesUUID of the field.
startTimestringqueryNoStart date in YYYY-MM-DD format.
endTimestringqueryNoEnd date in YYYY-MM-DD format.
modelstringqueryNoHistorical model: era5 (default) or era5Land.
unitsstringqueryNoUnit system: metric (default) or imperial.

Request

curl -X GET \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  'https://api.withleaf.io/services/weather/api/users/{leafUserId}/weather/historical/field/{fieldId}/daily?startTime=2025-06-01&endTime=2025-06-30'

Response

[
  {
    "date": "2025-06-01",
    "temperatureMax": 29.4,
    "temperatureMin": 17.1,
    ....
  },
  {
    "date": "2025-06-02",
    "temperatureMax": 31.0,
    "temperatureMin": 18.6,
    ....
  }
]

Get hourly historical (field)

GET /users/{leafUserId}/weather/historical/field/{fieldId}/hourly Returns hourly historical weather data for a field.

Parameters

ParameterTypeLocationRequiredDescription
leafUserIdstringpathYesUUID of the Leaf user.
fieldIdstringpathYesUUID of the field.
startTimestringqueryNoStart date in YYYY-MM-DD format.
endTimestringqueryNoEnd date in YYYY-MM-DD format.
modelstringqueryNoHistorical model: era5 (default) or era5Land.
unitsstringqueryNoUnit system: metric (default) or imperial.

Request

curl -X GET \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  'https://api.withleaf.io/services/weather/api/users/{leafUserId}/weather/historical/field/{fieldId}/hourly?startTime=2025-06-01&endTime=2025-06-02'

Response

[
  {
    "timestamp": "2025-06-01T00:00:00Z",
    "temperature": 22.1,
    "humidity": 55,
    ....
  },
  {
    "timestamp": "2025-06-01T01:00:00Z",
    "temperature": 21.5,
    "humidity": 58,
    ....
  }
]

Lat/lon endpoints

These endpoints retrieve weather data for an arbitrary latitude/longitude pair. They support additional model and units query parameters.

Get daily forecast (lat/lon)

GET /weather/forecast/daily/{lat},{lon} Returns daily forecast weather data for a coordinate pair.

Parameters

ParameterTypeLocationRequiredDescription
latnumberpathYesLatitude coordinate.
lonnumberpathYesLongitude coordinate.
startTimestringqueryNoStart date in YYYY-MM-DD format.
endTimestringqueryNoEnd date in YYYY-MM-DD format.
modelstringqueryNoForecast model: gfs (default), icon, ifs, metNordic, jma, gem, arpegeArome.
unitsstringqueryNoUnit system: metric (default) or imperial.

Request

curl -X GET \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  'https://api.withleaf.io/services/weather/api/weather/forecast/daily/39.7128,-86.1580?startTime=2026-03-09&endTime=2026-03-15&model=gfs&units=metric'

Response

[
  {
    "date": "2026-03-09",
    "temperatureMax": 15.6,
    "temperatureMin": 3.2,
    ....
  },
  {
    "date": "2026-03-10",
    "temperatureMax": 17.0,
    "temperatureMin": 4.8,
    ....
  }
]

Get hourly forecast (lat/lon)

GET /weather/forecast/hourly/{lat},{lon} Returns hourly forecast weather data for a coordinate pair.

Parameters

ParameterTypeLocationRequiredDescription
latnumberpathYesLatitude coordinate.
lonnumberpathYesLongitude coordinate.
startTimestringqueryNoStart date in YYYY-MM-DD format.
endTimestringqueryNoEnd date in YYYY-MM-DD format.
modelstringqueryNoForecast model: gfs (default), icon, ifs, metNordic, jma, gem, arpegeArome.
unitsstringqueryNoUnit system: metric (default) or imperial.

Request

curl -X GET \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  'https://api.withleaf.io/services/weather/api/weather/forecast/hourly/39.7128,-86.1580?startTime=2026-03-09&endTime=2026-03-10&model=gfs&units=metric'

Response

[
  {
    "timestamp": "2026-03-09T00:00:00Z",
    "temperature": 8.4,
    "humidity": 72,
    ....
  },
  {
    "timestamp": "2026-03-09T01:00:00Z",
    "temperature": 7.9,
    "humidity": 74,
    ....
  }
]

Get daily historical (lat/lon)

GET /weather/historical/daily/{lat},{lon} Returns daily historical weather data for a coordinate pair.

Parameters

ParameterTypeLocationRequiredDescription
latnumberpathYesLatitude coordinate.
lonnumberpathYesLongitude coordinate.
startTimestringqueryNoStart date in YYYY-MM-DD format.
endTimestringqueryNoEnd date in YYYY-MM-DD format.
modelstringqueryNoHistorical model: era5 (default) or era5Land.
unitsstringqueryNoUnit system: metric (default) or imperial.

Request

curl -X GET \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  'https://api.withleaf.io/services/weather/api/weather/historical/daily/39.7128,-86.1580?startTime=2025-06-01&endTime=2025-06-30&model=era5&units=metric'

Response

[
  {
    "date": "2025-06-01",
    "temperatureMax": 30.2,
    "temperatureMin": 18.4,
    ....
  },
  {
    "date": "2025-06-02",
    "temperatureMax": 28.7,
    "temperatureMin": 17.9,
    ....
  }
]

Get hourly historical (lat/lon)

GET /weather/historical/hourly/{lat},{lon} Returns hourly historical weather data for a coordinate pair.

Parameters

ParameterTypeLocationRequiredDescription
latnumberpathYesLatitude coordinate.
lonnumberpathYesLongitude coordinate.
startTimestringqueryNoStart date in YYYY-MM-DD format.
endTimestringqueryNoEnd date in YYYY-MM-DD format.
modelstringqueryNoHistorical model: era5 (default) or era5Land.
unitsstringqueryNoUnit system: metric (default) or imperial.

Request

curl -X GET \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  'https://api.withleaf.io/services/weather/api/weather/historical/hourly/39.7128,-86.1580?startTime=2025-06-01&endTime=2025-06-02&model=era5&units=metric'

Response

[
  {
    "timestamp": "2025-06-01T00:00:00Z",
    "temperature": 22.1,
    "humidity": 55,
    ....
  },
  {
    "timestamp": "2025-06-01T01:00:00Z",
    "temperature": 21.5,
    "humidity": 58,
    ....
  }
]

Models reference

Forecast models

ModelDescription
gfsGlobal Forecast System (default)
iconICON by DWD
ifsIFS by ECMWF
metNordicMET Nordic by MET Norway
jmaJMA by Japan Meteorological Agency
gemGEM by Environment Canada
arpegeAromeARPEGE/AROME by Meteo-France

Historical models

ModelDescription
era5ERA5 reanalysis (default)
era5LandERA5-Land reanalysis (higher resolution)
Use era5Land when you need finer spatial resolution for land-surface variables like soil temperature and soil moisture.
Last modified on March 24, 2026