Pour-over coffee ratio calculator
This pour-over coffee ratio calculator turns a target cup volume and a chosen water-to-coffee ratio into practical gram measurements.
Run — free
Enter the water volume you plan to pour and the ratio denominator you prefer, such as 16 for a 1:16 recipe. The result gives both the coffee dose and water weight, rounded to two decimal places. It is useful for scaling a familiar recipe to a different mug, brewer, or batch without changing the balance that made the original cup work.
Choose a ratio that matches the cup you want
A pour-over ratio describes how many parts of water are used for one part of dry coffee. A 1:16 ratio means sixteen grams of water for every gram of coffee. Lower denominators use more coffee for the same water amount and usually produce a more concentrated brew, while higher denominators use less coffee and usually taste lighter. Ratio is only a starting point: roast level, grinder, dripper, filter, water chemistry, and pouring technique all affect the cup. If you already have a recipe you enjoy, use its ratio and change only the target volume. If you are starting fresh, 1:16 is a practical middle point for many pour-over methods. Taste the result, then move the denominator in small steps. Try 15 for a stronger dose or 17 for a lighter dose while keeping grind, temperature, and pouring pattern steady. Changing one variable at a time makes the next cup informative instead of turning it into an unrelated experiment.
Enter volume and read the calculated weights
Enter your target water volume in millilitres and the denominator of the ratio you chose. The calculator treats one millilitre of brewing water as one gram, which is the convenient kitchen approximation used when a kettle or scale reports either unit. It then divides the water weight by the ratio to calculate the dry coffee dose. For example, the same method works whether you are preparing a small single cup or scaling a recipe for a larger brewer. The returned coffee and water amounts are rounded to two decimal places so the result remains deterministic and easy to copy. Most household coffee scales measure to one tenth of a gram, so you can round the coffee dose to the nearest value your scale supports. The target refers to water poured into the brewer, not the final beverage left in the cup. Coffee grounds retain some water, and evaporation also creates a small difference between input water and served drink volume.
Use the result as a repeatable brewing baseline
Weigh the calculated coffee dose, place the brewer and vessel on the scale, tare it, and pour until the displayed water weight reaches the calculated amount. Keep a note of the ratio alongside grind setting, water temperature, total brew time, and any staged pours. Those details turn a pleasant accident into a recipe you can reproduce. If the coffee tastes weak but extraction otherwise seems even, use a slightly lower ratio denominator on the next attempt. If it feels overly concentrated, try a slightly higher denominator. Sourness, bitterness, stalling, or a very fast drawdown may point to grind size or technique rather than dose alone, so avoid treating ratio as the answer to every brewing problem. This calculator performs only the arithmetic and does not claim to predict extraction yield or flavour. It runs without network access or randomness, so identical numeric inputs always return identical amounts. Browser use is free, while an automated API request uses the published base price of $0.002.
What you can do with it
Scale a favourite recipe
Keep the same brew ratio when moving from a small cup to a larger mug or multi-cup brewer.
Prepare a consistent morning dose
Convert the kettle target into a repeatable coffee weight before grinding and pouring.
Compare nearby ratios
Calculate doses for two ratios while holding water volume steady during a controlled taste test.
FAQ
What does a 1:16 coffee ratio mean?
It means one gram of dry coffee for every sixteen grams of brewing water. Enter 16 in the ratio field.
Is target volume the final drink in the cup?
No. It is the volume of water poured into the brewer. The served drink will be smaller because the grounds retain water.
Why are millilitres treated as grams?
For normal coffee preparation, one millilitre of water is close enough to one gram for practical recipe calculations.
Does a lower ratio number make stronger coffee?
For the same water amount, a lower denominator calculates a larger coffee dose and therefore a more concentrated recipe.
What happens if the target volume is zero or negative?
The calculation returns an invalid-input error because a pour-over recipe requires a positive water volume.
What does the API calculation cost?
The API costs $0.002 per request. The browser calculator can be used for free.
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/cook/pourover-ratio \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"target_volume_ml":350,"ratio":16}'const res = await fetch("https://api.kit.forhosting.com/cook/pourover-ratio", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"target_volume_ml": 350,
"ratio": 16
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/cook/pourover-ratio",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"target_volume_ml": 350,
"ratio": 16
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/cook/pourover-ratio", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"target_volume_ml":350,"ratio":16}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"target_volume_ml":350,"ratio":16}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/cook/pourover-ratio", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"target_volume_ml": 350,
"ratio": 16
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "cook.pourover_ratio",
"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. |