Vapor pressure deficit calculator
At 25 °C and 60% relative humidity the vapor pressure deficit is just above 1.2 kPa: the pull with which the air draws water out of leaves. You also get saturation and actual vapor pressure from the FAO-56 formula. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Creativity
- 25
- Relative humidity
- 60
- Temperature c
- 25 kPa
- Temperature unit
- Celsius
- Saturation vapor pressure kpa
- 3.16777772
- Actual vapor pressure kpa
- 1.90066663
A vapor pressure deficit calculator turns air temperature and relative humidity into the drying power of the air that actually drives plant transpiration. Saturation vapor pressure is the maximum water-vapor pressure the air can hold at that temperature; actual vapor pressure is that saturation value scaled by relative humidity. Their difference is VPD, the gap a leaf feels when stomata open and water leaves the mesophyll. Enter temperature and relative humidity; the tool returns saturation and actual vapor pressures in kilopascals plus VPD via the FAO-56 Magnus–Tetens formula used in reference evapotranspiration.
What vapor pressure deficit is and how es minus ea is formed
Vapor pressure deficit is the difference between how much water vapor the air could hold at the current temperature and how much it actually holds. Actual vapor pressure ea is saturation scaled by relative humidity as a fraction, ea equals es times RH over one hundred. Their difference VPD equals es minus ea, which is also es times one minus RH over one hundred.
Growers and plant physiologists use that gap because transpiration is driven by the vapor-pressure gradient from the leaf interior, which sits near saturation at leaf temperature, to the bulk air around the canopy. A small VPD means moist air and slow water loss; a large VPD means dry air that pulls water through stomata faster than roots may replace it, which is why greenhouse controllers and irrigation models treat VPD as a first-class climate number rather than a curiosity derived from humidity.
This calculator uses the FAO-56 Magnus–Tetens expression for saturation vapor pressure over liquid water: es in kilopascals equals 0.6108 times the exponential of 17.27 times T divided by T plus 237.3, with T in degrees Celsius. That is the same expression used in the FAO Penman–Monteith reference-evapotranspiration standard, so classroom, greenhouse, and research notebooks can compare results without a hidden constant set. Relative humidity above one hundred percent would imply actual vapor pressure larger than saturation; this model treats that as invalid input rather than reporting a negative deficit.
Zero percent humidity is allowed and yields VPD equal to es: completely dry air at that temperature. Pressures are always returned in kilopascals, with an extra hectopascal field for weather-station conventions.
Greenhouse use, limits, and searches this page is not answering
Typical greenhouse setpoints sit near 0.8 to 1.2 kilopascals during lights-on fruiting and somewhat lower for seedlings, because young tissue wilts when the air pulls too hard. Compute VPD from the same dry-bulb and humidity sensors you already log, then compare the result against your crop protocol instead of staring at relative humidity alone: sixty percent RH at twenty degrees Celsius is a milder deficit than sixty percent RH at thirty degrees Celsius, even though the humidity reading is identical.
Pair this calculator with a leaf-temperature correction if you have infrared canopy data; the FAO-56 air-temperature form here is the standard first step and matches most published VPD charts that assume leaf and air are close. Keep relative humidity inside the published zero-to-one-hundred band and keep air temperature above absolute zero so the exponential stays finite. Prefer this capability when you already have air temperature and relative humidity and only need es, ea, and their difference.
What you can do with it
Greenhouse and indoor-farm climate setpoints
Convert dry-bulb temperature and relative humidity from a grow-room controller into VPD in kilopascals and compare the result with crop-stage targets for seedlings, vegetative growth, or fruiting.
Plant-physiology homework and lab notebooks
Students enter air temperature and RH from a textbook problem or a chamber log and check that es minus ea matches the FAO-56 Magnus–Tetens arithmetic before they submit.
Irrigation and evapotranspiration model inputs
Produce deterministic VPD time series from weather-station temperature and humidity for Penman–Monteith, stomatal-conductance, or irrigation-trigger scripts without standing up a climate-model stack.
FAQ
How is vapor pressure deficit calculated from temperature and humidity?
Actual vapor pressure is ea = es·RH/100. VPD is es minus ea.
Is this the same as a relative humidity calculator?
No. A relative humidity calculator turns two vapor pressures into a percentage. This tool starts from temperature and RH and returns the saturation–actual pressure gap that drives transpiration.
What does the vapor pressure deficit calculator cost?
The browser tool is free and runs locally.
What happens if relative humidity is above 100%?
It is rejected. Above 100% the actual vapor pressure would exceed saturation and the deficit would turn negative, so the reading is flagged instead. Zero humidity is fine and gives the full saturation pressure as the deficit.
What is a good VPD for greenhouse plants?
Many growers aim for about 0.8 to 1.2 kPa while plants fruit under lights, and somewhat lower for seedlings, whose young tissue wilts when the air pulls too hard. Compare your result with your own crop protocol.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/earth/vapor-pressure-deficit \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"temperature":25,"relative_humidity":60}'const res = await fetch("https://api.kit.forhosting.com/earth/vapor-pressure-deficit", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"temperature": 25,
"relative_humidity": 60
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/earth/vapor-pressure-deficit",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"temperature": 25,
"relative_humidity": 60
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/earth/vapor-pressure-deficit", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"temperature":25,"relative_humidity":60}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"temperature":25,"relative_humidity":60}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/earth/vapor-pressure-deficit", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"temperature": 25,
"relative_humidity": 60
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "earth.vapor_pressure_deficit",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical notes
Relative humidity above one hundred percent is rejected with invalid_input because this model treats the air as already saturated.
What vapor pressure deficit is and how es minus ea is formed
Saturation vapor pressure es rises steeply with temperature: warmer air has a larger capacity, so the same relative humidity produces a larger deficit on a hot day than on a cool one.
How to call the API and what the response contains
Relative humidity must lie between zero and one hundred inclusive. Missing fields, non-finite numbers, temperatures at or below absolute zero, and a temperature that would zero the Magnus–Tetens denominator are also rejected by name. Send a JSON body with two required finite numbers: temperature (aliases temp, temp_c, t, and air_temperature) and relative_humidity (aliases humidity, rh, and humidity_percent). An optional temperature_unit field accepts the closed set celsius, fahrenheit, or kelvin and defaults to celsius, which is the native unit of the FAO-56 formula. Fahrenheit and Kelvin values are converted to Celsius before es is evaluated; the echoed temperature_c field always reports that converted air temperature so a client can audit the conversion without reimplementing it. A value above one hundred percent fails with invalid_input and is never charged, because a supersaturated reading would make actual vapor pressure exceed saturation and produce a negative deficit that this landing does not advertise. On success the body echoes the submitted temperature, the Celsius air temperature, the resolved temperature_unit, and relative_humidity; it then publishes saturation_vapor_pressure_kpa, actual_vapor_pressure_kpa, vapor_pressure_deficit_kpa, vapor_pressure_deficit_hpa, unit set to kPa, method set to magnus_tetens_fao56, a formula string restating es and ea, and an equation string filled with the rounded numbers. Pricing is a flat $0.002 per successful request with unit item; failed validation does not consume prepaid balance.
Greenhouse use, limits, and searches this page is not answering
Prefer sending JSON numbers rather than pre-formatted strings when you control the client; numeric strings are accepted only when they match a strict finite pattern. This page targets people searching for a vapor pressure deficit calculator, VPD from temperature and humidity, or plant transpiration VPD online. It is not a dew-point solver, not a relative-humidity-from-two-pressures ratio, and not a full Penman–Monteith evapotranspiration stack. Round-trip checks are easy: recompute 0.6108 times exp of 17.27 T over T plus 237.3, scale by RH over one hundred, subtract, and confirm vapor_pressure_deficit_kpa matches within the same eight-decimal rounding.
Technical questions
What happens when relative humidity exceeds one hundred percent?
The task fails with invalid_input. This model does not report a negative deficit for supersaturated air; failed validation is not billed.
Which temperature units can I send?
Celsius (default), Fahrenheit, or Kelvin via temperature_unit. The response always includes temperature_c so you can audit the conversion used for es(T).