Absolute humidity converter
10 g/m³ of water vapor is 4.36995724033 grains/ft³: the converter moves absolute humidity between six metric and imperial units through kg/m³, with exact factors for weather data, HVAC readings and lab reports. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Value
- 10
- From
- g/m3
- To
- grains/ft3
- Result
- 4.3699572403
- Converted
- 4.3699572403
- Value si
- 0.01
- Factor
- 0.436995724
An absolute humidity converter turns one mass-of-water-vapor-per-volume reading into another common meteorology, HVAC, or laboratory unit without hand-written tables or fragile spreadsheet constants. Enter a finite value plus a source unit and a target unit among grams per cubic metre, grains of moisture per cubic foot, kilograms per cubic metre, milligrams per cubic metre, grams per litre, and pounds per cubic foot; the tool returns the converted absolute humidity, the SI intermediate in kilograms per cubic metre, the exact unit factor applied, and step-by-step substitution lines you can paste into a field note, load calculation, or lab report. Weather stations reporting g/m³, HVAC technicians reading grains per cubic foot, students converting textbook examples, and firmware authors validating unit strings all need the same deterministic path.
Which absolute humidity units are supported and how conversion works
This capability converts among six everyday absolute-humidity units that dominate meteorology reports, HVAC diagnostics, and mixed SI–imperial datasheets. Absolute humidity is the mass concentration of water vapor in a volume of air—commonly grams of moisture per cubic metre of moist air—so unit conversion is exact arithmetic on fixed mass and length definitions rather than temperature-dependent psychrometric formulas.
The kilogram of vapor per cubic metre, written kg/m3, is the SI hub: every conversion multiplies the input by how many kg/m3 equal one source unit, then divides by how many kg/m3 equal one target unit. Grams per cubic metre scale by exactly one thousandth because one gram is one thousandth of a kilogram. Milligrams per cubic metre scale by one millionth.
Grams per litre equal the hub one-for-one because one litre is one thousandth of a cubic metre and one gram is one thousandth of a kilogram, so the factors cancel. Grains of moisture per cubic foot use the exact avoirdupois grain (one seven-thousandth of the international pound of zero point four five three five nine two three seven kilograms) divided by the exact international cubic foot of zero point three zero four eight metres cubed. Pounds per cubic foot divide the same international pound by that cubic foot.
Same-unit requests succeed and return the input magnitude with a short message that no change of unit was required.
Practical tips, limits, and when to use this landing
Round-trip checks are straightforward: convert A to B and B back to A and confirm you recover the original within the published twelve-decimal rounding. When teaching psychrometrics or building HVAC training material, pair classic examples such as ten grams per cubic metre to about four point three seven grains per cubic foot, one kilogram per cubic metre to one thousand grams per cubic metre, and one grain per cubic foot to its exact SI kilograms-per-cubic-metre value from the grain and foot definitions.
Conversions that touch milligrams per cubic metre produce large numeric magnitudes by design; stay inside the published result magnitude cap so extreme inputs do not overflow. Outdoor design absolute humidities are often a few to tens of grams per cubic metre—well inside limits—while process-air or error-injection scripts may probe the edges deliberately.
This landing targets people searching for an absolute humidity converter, g/m3 to grains per cubic foot, kg/m3 absolute humidity unit conversion, or grains/ft3 online; it is not a relative humidity calculator from dry-bulb and wet-bulb, not a humidity-ratio mixing-ratio tool in kg per kg dry air, not a dew-point solver, and not a general multi-quantity unit converter.
What you can do with it
Weather and climate reports
Meteorologists convert station absolute humidity in g/m³ into SI kg/m³ or imperial grains/ft³ with deterministic steps for intercomparison and documentation.
HVAC diagnostics and specs
Technicians map grains per cubic foot field readings onto SI mass-per-volume units for equipment schedules, dehumidification sizing, and cross-region datasheets.
FAQ
What is absolute humidity?
Absolute humidity is the mass of water vapor per volume of air, commonly reported in g/m³ or grains per cubic foot. It is a mass concentration, not a percentage of saturation.
How are grains per cubic foot converted exactly?
One avoirdupois pound equals 7000 grains and one international foot is 0.3048 m, so 1 grain/ft³ equals (0.45359237/7000)/0.3048³ kilograms per cubic metre exactly.
Is this the same as humidity ratio or relative humidity?
No. Humidity ratio is mass of vapor per mass of dry air (kg/kg). Relative humidity is a percentage of saturation vapor pressure. This tool only converts absolute humidity mass-per-volume units.
Is the absolute humidity converter free?
The browser tool is free and runs locally.
Why are grams per liter and kilograms per cubic meter the same number?
Because mass and volume both change by a factor of a thousand: a gram is a thousandth of a kilogram and a liter a thousandth of a cubic meter. The factors cancel, so 1 g/L equals 1 kg/m³.
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/conv/absolute-humidity \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"value":10,"from":"g/m3","to":"grains/ft3"}'const res = await fetch("https://api.kit.forhosting.com/conv/absolute-humidity", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"value": 10,
"from": "g/m3",
"to": "grains/ft3"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/conv/absolute-humidity",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"value": 10,
"from": "g/m3",
"to": "grains/ft3"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/conv/absolute-humidity", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"value":10,"from":"g/m3","to":"grains/ft3"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"value":10,"from":"g/m3","to":"grains/ft3"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/conv/absolute-humidity", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"value": 10,
"from": "g/m3",
"to": "grains/ft3"
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "conv.absolute_humidity",
"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
Unknown unit names fail with a clear invalid_input error instead of silent wrong factors.
Which absolute humidity units are supported and how conversion works
Common aliases are accepted case-insensitively: g/m³, grams per cubic meter, gr/ft3, grains per cubic foot, kg/m³, kilograms per cubic metre, mg/m3, g/L, grams per litre, lb/ft3, pounds per cubic foot, and related slash or word forms. If the name is not on that list the solver rejects the request with invalid_input naming the bad field and listing supported units, so clients never guess whether a typo produced a wrong number. Negative values are allowed for signed bookkeeping or delta-concentration contexts; absolute input magnitude must stay within the published one-trillion limit so intermediate products remain finite in IEEE double precision on the Worker and in the browser. This tool deliberately stays on the absolute-humidity mass-per-volume axis: it does not compute relative humidity from temperatures, humidity ratio in kg per kg dry air, dew point from partial pressures, or vapor pressure from saturation curves.
How to call the API and read the response
Value must be a finite number or a strict numeric string within absolute limits of one trillion. Wire this into dashboards, mobile clients, or batch jobs that already hold an absolute-humidity reading and only need a second unit for display, homework checking, or SI versus imperial comparison without shipping floating conversion tables in every app binary. Prefer bare numbers for value when you control the client; string numbers are accepted only when they match a strict finite numeric pattern without currency symbols or thousand separators. When integrating, treat result and converted as synonyms for the same magnitude so either field name works in legacy clients without branching logic. Send a JSON body with three required fields: value (aliases amount, humidity, absolute_humidity, ah, and density), from (aliases from_unit, unit_from, and source), and to (aliases to_unit, unit_to, and target). From and to must resolve to supported unit names after alias normalization. On success the response echoes the rounded input value, canonical from and to labels, result and converted set to the same rounded target magnitude, value_si as the SI intermediate in kilograms vapor per cubic metre, unit as the target label, factor as the from-to multiplier, formula as the short equation string, message as an English summary, steps as ordered substitution lines, and supported_units as the six canonical identifiers. Failed validation—missing fields, non-finite numbers, values outside absolute limits, or an unknown unit name—returns invalid_input and is never charged. Pricing is a flat $0.002 per successful request with unit item and zero marginal unit price beyond the base.
Practical tips, limits, and when to use this landing
Normalize display labels on your side if you need locale-specific spellings or superscript cubes—this API always returns the short ASCII canonical tokens kg/m3, g/m3, mg/m3, g/l, grains/ft3, and lb/ft3 so automated tests stay stable across runtimes. Prefer this capability when both endpoints are among the six supported absolute-humidity units and you need deterministic factors and step strings; if you need mass-of-vapor per mass-of-dry-air, use the humidity ratio converter instead. Failed tasks that return invalid_input do not consume prepaid balance, which keeps exploratory scripts cheap when clients deliberately probe unknown unit names before wiring production clients.
Integration use cases
Homework and unit-test fixtures
Students and developers generate known-good g/m³ ↔ grains/ft³ ↔ kg/m³ cases plus deliberate unknown-unit rejections for coding kata expected values.
Technical questions
What happens with an unknown unit name?
The API returns invalid_input listing supported units (kg/m3, g/m3, mg/m3, g/l, grains/ft3, lb/ft3). Failed tasks are never charged.