Ag-Weather Forecast API

Agriculture-focused forecast API with weather and soil-related fields used for field operations and crop planning.

API Guide

Ag-Weather Forecast API

Agriculture-focused forecast API with weather and soil-related fields used for field operations and crop planning.

Includes evapotranspiration and other ag-relevant metrics.

  • Forecast fields tailored for agriculture applications.
  • 8-day ag-focused weather context.
  • Supports model inputs and farm operations.

Frequently Asked Questions

How is reference evapotranspiration calculated?

Our API uses an updated Penman-Monteith calculation based on the FAO56 methodology, with improvements that better estimate ET0 in hot and humid conditions.

Allen et al. (1998), FAO Irrigation and Drainage Paper No. 56

Request Parameters

Field Optional/Required Type Data Type Description
lat Required query number Latitude component of location.
lon Required query number Longitude component of location.
units Optional query string Convert to units. Default Metric. Options (I = Imperial, M = Metric, S = Scientific) Options: S, I, M
key Required query string Your registered API key.

Example Request

Geolocation options: lat/lon (recommended)

Enter API key

lat/lon (recommended)

https://api.weatherbit.io/v2.0/forecast/agweather?key=API_KEY&lat=35.7796&lon=-78.6382
curl -s "https://api.weatherbit.io/v2.0/forecast/agweather?key=API_KEY&lat=35.7796&lon=-78.6382"
require 'uri'
require 'net/http'
require 'json'

uri = URI("https://api.weatherbit.io/v2.0/forecast/agweather?key=API_KEY&lat=35.7796&lon=-78.6382")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = (uri.scheme == "https")
request = Net::HTTP::Get.new(uri)
response = http.request(request)
json = JSON.parse(response.body)
puts JSON.pretty_generate(json)
const https = require("https");

https.get("https://api.weatherbit.io/v2.0/forecast/agweather?key=API_KEY&lat=35.7796&lon=-78.6382", (res) => {
  let raw = "";
  res.on("data", (chunk) => { raw += chunk; });
  res.on("end", () => {
    const json = JSON.parse(raw);
    console.log(JSON.stringify(json, null, 2));
  });
}).on("error", (err) => {
  console.error(err.message);
});
# pip install python-weatherbit
# https://pypi.org/project/pyweatherbit/

from weatherbit.api import Api

api = Api("YOUR_API_KEY")
response = api.get_forecast(lat='35.7796', lon='-78.6382', days=8, source='agweather', tp='daily').get()
print(response)
Estimated quota: 1 requeststandard

Example Response HTTP 200

{
  "data": [
    {
      "bulk_soil_density": 1370,
      "dlwrf_avg": 328.156,
      "dlwrf_max": 361.75,
      "dlwrf_net": 164.078,
      "dswrf_avg": 342.077,
      "dswrf_max": 894,
      "dswrf_net": -117.22,
      "evapotranspiration": 3.958,
      "pop": 0,
      "precip": 0,
      "pres_avg": 988.938,
      "skin_temp_avg": 19,
      "skin_temp_max": 25.9,
      "skin_temp_min": 12.8,
      "soilm_0_10cm": 27.249,
      "soilm_100_200cm": 319.824,
      "soilm_10_40cm": 84.045,
      "soilm_40_100cm": 173.071,
      "soilt_0_10cm": 18.5,
      "soilt_100_200cm": 8.4,
      "soilt_10_40cm": 13.7,
      "soilt_40_100cm": 10.9,
      "specific_humidity": 0.0087213516235352,
      "temp_2m_avg": 21.3,
      "v_soilm_0_10cm": 0.272,
      "v_soilm_100_200cm": 0.32,
      "v_soilm_10_40cm": 0.28,
      "v_soilm_40_100cm": 0.288,
      "valid_date": "2026-06-02",
      "wind_10m_spd_avg": 3.483
    },
    {
      "bulk_soil_density": 1370,
      "dlwrf_avg": 328.594,
      "dlwrf_max": 346.25,
      "dlwrf_net": 164.297,
      "dswrf_avg": 332.407,
      "dswrf_max": 872,
      "dswrf_net": -114.177,
      "evapotranspiration": 4.191,
      "pop": 0,
      "precip": 0,
      "pres_avg": 987.938,
      "skin_temp_avg": 18.4,
      "skin_temp_max": 25.4,
      "skin_temp_min": 12.6,
      "soilm_0_10cm": 25.842,
      "soilm_100_200cm": 318.97,
      "soilm_10_40cm": 82.581,
      "soilm_40_100cm": 170.325,
      "soilt_0_10cm": 17.8,
      "soilt_100_200cm": 8.4,
      "soilt_10_40cm": 13.8,
      "soilt_40_100cm": 10.9,
      "specific_humidity": 0.0089244842529297,
      "temp_2m_avg": 21.5,
      "v_soilm_0_10cm": 0.258,
      "v_soilm_100_200cm": 0.319,
      "v_soilm_10_40cm": 0.275,
      "v_soilm_40_100cm": 0.284,
      "valid_date": "2026-06-03",
      "wind_10m_spd_avg": 4.094
    },
    {
      "bulk_soil_density": 1370,
      "dlwrf_avg": 356.688,
      "dlwrf_max": 390.5,
      "dlwrf_net": 178.344,
      "dswrf_avg": 253.668,
      "dswrf_max": 643,
      "dswrf_net": -105.378,
      "evapotranspiration": 4.487,
      "pop": 20,
      "precip": 0.1,
      "pres_avg": 981.063,
      "skin_temp_avg": 19.6,
      "skin_temp_max": 26.6,
      "skin_temp_min": 14.3,
      "soilm_0_10cm": 24.971,
      "soilm_100_200cm": 318.848,
      "soilm_10_40cm": 81.116,
      "soilm_40_100cm": 167.651,
      "soilt_0_10cm": 17.9,
      "soilt_100_200cm": 8.5,
      "soilt_10_40cm": 13.8,
      "soilt_40_100cm": 11,
      "specific_humidity": 0.011224746704102,
      "temp_2m_avg": 23.3,
      "v_soilm_0_10cm": 0.25,
      "v_soilm_100_200cm": 0.319,
      "v_soilm_10_40cm": 0.27,
      "v_soilm_40_100cm": 0.279,
      "valid_date": "2026-06-04",
      "wind_10m_spd_avg": 4.337
    },
    {
      "bulk_soil_density": 1370,
      "dlwrf_avg": 391.469,
      "dlwrf_max": 413.5,
      "dlwrf_net": 195.734,
      "dswrf_avg": 164.085,
      "dswrf_max": 389.5,
      "dswrf_net": -92.019,
      "evapotranspiration": 3.98,
      "pop": 70,
      "precip": 6.8,
      "pres_avg": 974.688,
      "skin_temp_avg": 21.1,
      "skin_temp_max": 25.3,
      "skin_temp_min": 18.3,
      "soilm_0_10cm": 27.969,
      "soilm_100_200cm": 317.871,
      "soilm_10_40cm": 80.603,
      "soilm_40_100cm": 166.333,
      "soilt_0_10cm": 19.3,
      "soilt_100_200cm": 8.6,
      "soilt_10_40cm": 13.9,
      "soilt_40_100cm": 11.1,
      "specific_humidity": 0.014275550842285,
      "temp_2m_avg": 23.9,
      "v_soilm_0_10cm": 0.28,
      "v_soilm_100_200cm": 0.318,
      "v_soilm_10_40cm": 0.269,
      "v_soilm_40_100cm": 0.277,
      "valid_date": "2026-06-05",
      "wind_10m_spd_avg": 4.463
    },
    {
      "bulk_soil_density": 1370,
      "dlwrf_avg": 390.281,
      "dlwrf_max": 410.5,
      "dlwrf_net": 195.141,
      "dswrf_avg": 240.477,
      "dswrf_max": 816,
      "dswrf_net": -91.707,
      "evapotranspiration": 3.639,
      "pop": 85,
      "precip": 15,
      "pres_avg": 973.063,
      "skin_temp_avg": 20.7,
      "skin_temp_max": 26.7,
      "skin_temp_min": 17.4,
      "soilm_0_10cm": 30.942,
      "soilm_100_200cm": 317.871,
      "soilm_10_40cm": 84.86,
      "soilm_40_100cm": 165.601,
      "soilt_0_10cm": 19.3,
      "soilt_100_200cm": 8.6,
      "soilt_10_40cm": 14,
      "soilt_40_100cm": 11.1,
      "specific_humidity": 0.012678146362305,
      "temp_2m_avg": 24.5,
      "v_soilm_0_10cm": 0.309,
      "v_soilm_100_200cm": 0.318,
      "v_soilm_10_40cm": 0.283,
      "v_soilm_40_100cm": 0.276,
      "valid_date": "2026-06-06",
      "wind_10m_spd_avg": 3.097
    },
    {
      "bulk_soil_density": 1370,
      "dlwrf_avg": 342.094,
      "dlwrf_max": 366,
      "dlwrf_net": 171.047,
      "dswrf_avg": 350.523,
      "dswrf_max": 906,
      "dswrf_net": -119.928,
      "evapotranspiration": 2.589,
      "pop": 0,
      "precip": 0,
      "pres_avg": 977.625,
      "skin_temp_avg": 21.4,
      "skin_temp_max": 31.9,
      "skin_temp_min": 13.3,
      "soilm_0_10cm": 28.351,
      "soilm_100_200cm": 317.017,
      "soilm_10_40cm": 85.162,
      "soilm_40_100cm": 164.282,
      "soilt_0_10cm": 19.1,
      "soilt_100_200cm": 8.6,
      "soilt_10_40cm": 14.1,
      "soilt_40_100cm": 11.4,
      "specific_humidity": 0.011048316955566,
      "temp_2m_avg": 23.4,
      "v_soilm_0_10cm": 0.284,
      "v_soilm_100_200cm": 0.317,
      "v_soilm_10_40cm": 0.284,
      "v_soilm_40_100cm": 0.274,
      "valid_date": "2026-06-07",
      "wind_10m_spd_avg": 3.246
    },
    {
      "bulk_soil_density": 1370,
      "dlwrf_avg": 351.5,
      "dlwrf_max": 370.75,
      "dlwrf_net": 175.75,
      "dswrf_avg": 346.993,
      "dswrf_max": 894.5,
      "dswrf_net": -119.517,
      "evapotranspiration": 2.687,
      "pop": 30,
      "precip": 1.4,
      "pres_avg": 982.313,
      "skin_temp_avg": 21.8,
      "skin_temp_max": 28.8,
      "skin_temp_min": 14.9,
      "soilm_0_10cm": 26.88,
      "soilm_100_200cm": 316.895,
      "soilm_10_40cm": 83.167,
      "soilm_40_100cm": 162.396,
      "soilt_0_10cm": 19.9,
      "soilt_100_200cm": 8.7,
      "soilt_10_40cm": 14.2,
      "soilt_40_100cm": 11.4,
      "specific_humidity": 0.01219654083252,
      "temp_2m_avg": 21.3,
      "v_soilm_0_10cm": 0.269,
      "v_soilm_100_200cm": 0.317,
      "v_soilm_10_40cm": 0.277,
      "v_soilm_40_100cm": 0.271,
      "valid_date": "2026-06-08",
      "wind_10m_spd_avg": 3.182
    },
    {
      "bulk_soil_density": 1370,
      "dlwrf_avg": 353.531,
      "dlwrf_max": 376.5,
      "dlwrf_net": 176.766,
      "dswrf_avg": 347.813,
      "dswrf_max": 894.5,
      "dswrf_net": -119.846,
      "evapotranspiration": 2.152,
      "pop": 15,
      "precip": 0.6,
      "pres_avg": 983.25,
      "skin_temp_avg": 22.7,
      "skin_temp_max": 32.2,
      "skin_temp_min": 15.1,
      "soilm_0_10cm": 25.705,
      "soilm_100_200cm": 316.162,
      "soilm_10_40cm": 81.235,
      "soilm_40_100cm": 160.254,
      "soilt_0_10cm": 20.3,
      "soilt_100_200cm": 8.9,
      "soilt_10_40cm": 14.4,
      "soilt_40_100cm": 11.5,
      "specific_humidity": 0.012125968933105,
      "temp_2m_avg": 22,
      "v_soilm_0_10cm": 0.257,
      "v_soilm_100_200cm": 0.316,
      "v_soilm_10_40cm": 0.271,
      "v_soilm_40_100cm": 0.267,
      "valid_date": "2026-06-09",
      "wind_10m_spd_avg": 1.634
    },
    {
      "bulk_soil_density": 1370,
      "dlwrf_avg": 367.929,
      "dlwrf_max": 385.25,
      "dlwrf_net": 183.964,
      "dswrf_avg": 386.9,
      "dswrf_max": 887.5,
      "dswrf_net": -130.193,
      "evapotranspiration": 2.416,
      "pop": 0,
      "precip": 0,
      "pres_avg": 981,
      "skin_temp_avg": 25,
      "skin_temp_max": 31.8,
      "skin_temp_min": 16.6,
      "soilm_0_10cm": 24.782,
      "soilm_100_200cm": 315.918,
      "soilm_10_40cm": 79.677,
      "soilm_40_100cm": 158.182,
      "soilt_0_10cm": 21.3,
      "soilt_100_200cm": 8.9,
      "soilt_10_40cm": 14.4,
      "soilt_40_100cm": 11.6,
      "specific_humidity": 0.013023376464844,
      "temp_2m_avg": 23.6,
      "v_soilm_0_10cm": 0.248,
      "v_soilm_100_200cm": 0.316,
      "v_soilm_10_40cm": 0.266,
      "v_soilm_40_100cm": 0.264,
      "valid_date": "2026-06-10",
      "wind_10m_spd_avg": 2.178
    }
  ],
  "lat": 41.8781,
  "lon": -93.0977
}

HTTP Statuses

Code Description Example
200 An AGWeather Forecast Data Object. -
204 No Data Found -
400 Client Error
{
  "error": "Some relevant message"
}
403 Unauthorized/No Access for current plan level
{
  "error": "Some relevant message"
}
429 Daily or Velocity limit exceeded See rate limit guidance.
{
  "error": "Rate limit exceeded.",
  "status_code": 429,
  "status_message": "Rate limit exceeded. Try again later."
}
500 Internal Server Error
{
  "error": "Server Error"
}

Return Fields

Field Data Type Description
lat number Latitude
lon number Longitude
data array<ForecastAGObj>
data[].bulk_soil_density number Bulk Soil Density
data[].dlwrf_avg number Average Downward Longwave Radiation Flux (W/m^2)
data[].dlwrf_max number Maximum Downward Longwave Radiation Flux (W/m^2)
data[].dlwrf_net number Net Downward Longwave Radiation Flux (W/m^2)
data[].dswrf_avg number Average Downward Shortwave Radiation Flux (W/m^2)
data[].dswrf_max number Maximum Downward Shortwave Radiation Flux (W/m^2)
data[].dswrf_net number Net Downward Shortwave Radiation Flux (W/m^2)
data[].evapotranspiration number Evapotranspiration (default mm)
data[].precip number Accumulated liquid equivalent precipitation (default mm)
data[].pop number Probability of Precipitation (%)
data[].pres_avg number Average Pressure (default mb)
data[].revision_status string Data revision status (interim or final). interim = Data subject to change.
data[].revision_version string Final data revision version.
data[].skin_temp_avg number Average Skin (Surface) Temperature (default Celsius)
data[].skin_temp_max number Maximum Skin (Surface) Temperature (default Celsius)
data[].skin_temp_min number Minimum Skin (Surface) Temperature (default Celsius)
data[].soilm_0_10cm number Soil Moisture (0-10cm depth) (default mm)
data[].soilm_100_200cm number Soil Moisture (100-200cm depth) (default mm)
data[].soilm_10_40cm number Soil Moisture (10-40cm depth) (default mm)
data[].soilm_40_100cm number Soil Moisture (40-100cm depth) (default mm)
data[].soilt_0_10cm number Soil Temperature (0-10cm depth) (default Celsius)
data[].soilt_100_200cm number Soil Temperature (100-200cm depth) (default Celsius)
data[].soilt_10_40cm number Soil Temperature (10-40cm depth) (default Celsius)
data[].soilt_40_100cm number Soil Temperature (40-100cm depth) (default Celsius)
data[].specific_humidity number Specific Humidity (kg/kg)
data[].temp_2m_avg number Average Temperature at 2 meters (default Celsius)
data[].v_soilm_0_10cm number Volumetric Soil Moisture (0-10cm depth) (fraction)
data[].v_soilm_100_200cm number Volumetric Soil Moisture (100-200cm depth) (fraction)
data[].v_soilm_10_40cm number Volumetric Soil Moisture (10-40cm depth) (fraction)
data[].v_soilm_40_100cm number Volumetric Soil Moisture (40-100cm depth) (fraction)
data[].valid_date string Valid Date
data[].wind_10m_spd_avg number Average Wind Speed at 10 meters (default m/s)