Evapotranspiration (ET0/ETc)
Agriculture Math & Calculations Weather Credits / request: 3Reference evapotranspiration ET0 (FAO-56) over a date range, plus crop water use ETc when crop/Kc is given. Decision support.
GET
https://api.apikodu.com/api/v1/agriculture/evapotranspiration
Documentation
Overview
Reference evapotranspiration ET0 (FAO-56) over a date range. When crop or kc is given, crop water use ETc = ET0 × Kc is also returned. Decision support. Weather data © Copernicus ERA5 / ERA5-Land (contains modified Copernicus Climate Change Service information) / Open-Meteo / OpenWeather / MET Norway.
Authentication
Every request requires the x-api-key header. Credits used and remaining quota are returned in response headers (x-api-credits-used, x-api-remaining-credits, x-rate-limit-*).
Request
GET
https://api.apikodu.com/api/v1/agriculture/evapotranspiration?latitude=39.92&longitude=32.87&fromDate=2026-07-01&toDate=2026-07-31&crop=maize
GET query.
Parameters
| Name | Type | Required | Default | Options | Description |
|---|---|---|---|---|---|
latitude |
number | * Required | — | — | Point latitude -90..90. 0.1° cell. |
longitude |
number | * Required | — | — | Point longitude. |
fromDate |
string | * Required | 2026-07-01 |
— | Start YYYY-MM-DD. Range ≤ 366 days. |
toDate |
string | * Required | 2026-07-31 |
— | End YYYY-MM-DD. |
crop |
string | Optional | maize |
wheat barley maize sunflower cotton potato tomato rapeseed oats rye sugarbeet grape apple chickpea lentil |
Crop code. Kc is looked up from this (with stage) when kc is absent. |
kc |
number | Optional | — | — | Kc coefficient 0–2. Overrides crop/stage when given. |
stage |
string | Optional | mid |
initial mid late |
initial, mid or late. Default mid. Used with crop to pick Kc. |
Response
| Name | Type | Description |
|---|---|---|
et0Mm |
number | Total ET0 over the range, mm. |
et0MmPerDay |
number | Mean daily ET0 mm. |
kc |
number | Kc used. null when not found. |
stage |
string | Stage the Kc was taken from (when kc was not passed). |
etcMm |
number | Total ETc = ET0 × Kc mm. null without Kc. |
etcMmPerDay |
number | Mean daily ETc mm. |
crop |
string | Normalized crop code. |
fromDate |
string | Window start. |
toDate |
string | Window end. |
daysTotal |
integer | Calendar days in the window. |
daysWithData |
integer | Days ET0 was computed for. |
missingCount |
integer | Days without data. |
missingDates |
array | YYYY-MM-DD list of missing days (first 10). |
degradedCount |
integer | Days ET0 could not be computed because Tmax was missing. |
degradedDates |
array | YYYY-MM-DD list of degraded days (first 10). |
gridLatitude |
number | 0.1° cell latitude. |
gridLongitude |
number | 0.1° cell longitude. |
daily |
array | Daily ET0/ETc rows. |
daily[].date |
string | Day YYYY-MM-DD. |
daily[].et0Mm |
number | ET0 for that day, mm. |
daily[].etcMm |
number | ETc for that day, mm. null without Kc. |
method |
string | Calculation method: fao56-et0. |
source |
string | database: tarim_hava cell. |
disclaimer |
string | Decision-support disclaimer. |
Errors
| HTTP | code | Description |
|---|---|---|
400 |
-254 |
fromDate/toDate missing, not YYYY-MM-DD, or range exceeds 366 days. |
400 |
-255 |
latitude/longitude missing or out of range. |
400 |
-249 |
kc outside 0–2 or stage invalid. |
400 |
-250 |
Unknown crop. |
429 |
-316 |
Daily new location (cell) limit (50) reached. Previously requested locations keep working; new locations next day (UTC). Retry-After header gives seconds until end of day. |
503 |
-256 |
Cell created; Worker is filling history. Retry in a few minutes. |
400 |
-251 |
No weather for this location/date. |
401 |
-100 |
x-api-key is missing, empty, malformed, inactive, banned, expired, IP-restricted, or not allowed for this API. |
429 |
-221 |
Per-minute request limit exceeded. Response headers: x-rate-limit-limit, x-rate-limit-remaining, x-rate-limit-reset. |
429 |
— | Package credit quota cannot cover this request. Body may be { error, limit, currentUsage, requestCost } (no code field). |
500 |
-1 |
Unexpected server error. message is a generic error text without technical details. |
Notes
- Success body is { data: { ... } }. Error body is { code, message }. code is an ApiResponseCode enum value (negative integer).
Sample response
{
"data": {
"et0Mm": 168.4,
"et0MmPerDay": 5.61,
"kc": 1.15,
"stage": "mid",
"etcMm": 193.66,
"etcMmPerDay": 6.46,
"crop": "maize",
"fromDate": "2026-07-01",
"toDate": "2026-07-30",
"daysTotal": 30,
"daysWithData": 30,
"missingCount": 0,
"missingDates": [],
"degradedCount": 0,
"degradedDates": [],
"gridLatitude": 39.90,
"gridLongitude": 32.90,
"daily": [
{
"date": "2026-07-01",
"et0Mm": 5.20,
"etcMm": 5.98
},
{
"date": "2026-07-02",
"et0Mm": 6.63,
"etcMm": 7.62
}
],
"method": "fao56-et0",
"source": "database",
"disclaimer": "Decision support only. Not agronomic advice. Weather data: Copernicus ERA5 / ERA5-Land, Open-Meteo, OpenWeather, MET Norway. Contains modified Copernicus Climate Change Service information."
}
}
Code samples
const response = await fetch('https://api.apikodu.com/api/v1/agriculture/evapotranspiration', {
method: 'GET',
headers: {
'x-api-key': 'YOUR_API_KEY'
}
});
const data = await response.json();
console.log(data);
import requests
headers = {
'x-api-key': 'YOUR_API_KEY'
}
response = requests.get('https://api.apikodu.com/api/v1/agriculture/evapotranspiration', headers=headers)
print(response.json())
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("x-api-key", "YOUR_API_KEY");
var response = await client.GetStringAsync("https://api.apikodu.com/api/v1/agriculture/evapotranspiration");
Console.WriteLine(response);
$response = file_get_contents('https://api.apikodu.com/api/v1/agriculture/evapotranspiration', false, stream_context_create([
'http' => [
'header' => "x-api-key: YOUR_API_KEY"
]
]));
print_r(json_decode($response, true));
curl -X GET 'https://api.apikodu.com/api/v1/agriculture/evapotranspiration' \
-H 'x-api-key: YOUR_API_KEY'
Start building in minutes
Create a free account, get your API key and send your first request in minutes.