Scale a cocktail recipe to any batch size
Turn a cocktail built for one glass into a practical batch recipe without repeating calculator work for every bottle, juice, syrup, or garnish.
Run — free
Enter each ingredient with its single-serving amount and unit, then choose the number of drinks you need. The calculator applies the same proportion to every row, preserves the units you supplied, and returns both the original and scaled amounts in a clear structure suitable for a prep sheet, party plan, bar service checklist, or automated workflow.
Start with a true single-serving recipe
Use the quantities that make exactly one finished drink. Add one row for every measured component, including base spirits, modifiers, citrus, syrup, bitters, dilution water, or a countable garnish when you want it included in purchasing. Give each row a clear name, a non-negative numeric amount, and a unit such as fluid ounces, milliliters, dashes, teaspoons, or pieces. The calculator does not convert units because preserving the source unit avoids hidden assumptions about density, regional measure sizes, and bar technique. For example, two fluid ounces of gin remain fluid ounces after scaling, while one dash of bitters remains dashes. Keep all rows internally consistent, especially when similar ingredients use different systems. If your source recipe describes a pitcher or several drinks already, divide it into a one-drink recipe before using this capability. That single-serving baseline is what makes the requested serving count equal to the scale factor and keeps the result straightforward to audit. Zero is accepted for an intentionally listed component, but negative, missing, or non-numeric amounts are rejected rather than silently producing a misleading batch.
Choose the batch serving count and read the result
Set target_servings to the number of cocktails you intend to produce. The value must be positive, and it may be fractional when testing a smaller pour or planning a partial yield. Because the submitted recipe represents one serving, the tool multiplies every ingredient amount by that target number. A recipe containing 2 ounces of spirit and 0.75 ounce of juice becomes 16 ounces and 6 ounces for eight servings. The response reports the target, the scale factor, and one result row per ingredient. Each row retains the cleaned ingredient name and unit and shows original_amount beside scaled_amount, which makes review easy before anyone starts pouring. Calculations use deterministic numeric handling and stable precision so identical inputs yield identical JSON outputs. Units are labels rather than conversion instructions: entering milliliters returns milliliters, and entering bottles returns bottles. If a scaled value is awkward for real equipment, round it only after deciding the operational tolerance appropriate to that ingredient. Small errors in bitters may be acceptable; the same rounding in a strong spirit or acid component can change balance across a large batch.
Plan batching without losing cocktail balance
Proportional scaling preserves the mathematical ratio of the original recipe, but good batch preparation still requires practical judgment. Use the output as the ingredient plan, then account separately for factors that are not ordinary recipe quantities. Ice added during shaking or stirring creates dilution, fresh citrus can vary in acidity, carbonated ingredients may need to be added near service, and fragile garnishes should often be prepared separately. For a make-ahead batch, many bartenders measure still ingredients together, chill the mixture, and reserve sparkling wine, soda, tonic, or foam for individual pours. Confirm the total container volume before mixing and leave headroom for safe transport and stirring. When purchasing, compare the scaled amount with actual package sizes and round purchases upward rather than changing the recipe ratio. Run separate calculations if you need multiple batch vessels; this avoids cumulative hand-copying errors. The API price is $0.002 per request, so the same calculation can be embedded in event-planning software, prep workflows, or a bar inventory tool. Save the original input with the result so staff can trace every batch quantity back to the single-drink specification.
What you can do with it
Prepare cocktails for a party
Convert a favorite one-glass recipe into measured quantities for the exact guest count.
Build a bar prep sheet
Generate consistent batch quantities that staff can review against the original recipe before service.
Estimate event purchasing
Scale ingredients first, then compare the required totals with bottle, carton, and garnish package sizes.
FAQ
What does it cost?
Each API request costs $0.002.
Does the original recipe have to make one serving?
Yes. Every submitted amount must describe one cocktail; the target serving count is then the multiplier.
Does it convert ounces to milliliters?
No. It preserves each unit exactly as supplied and scales only the numeric amount.
Can the target serving count be a decimal?
Yes, provided it is a finite positive number within the published limit.
Why is a zero or negative target rejected?
A batch must represent a positive number of servings. Zero and negative targets do not describe a usable cocktail batch.
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/cocktail-recipe-scale \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"ingredients":[{"name":"Gin","amount":2,"unit":"fl oz"},{"name":"Lemon juice","amount":0.75,"unit":"fl oz"},{"name":"Simple syrup","amount":0.5,"unit":"fl oz"}],"target_servings":8}'const res = await fetch("https://api.kit.forhosting.com/cook/cocktail-recipe-scale", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"ingredients": [
{
"name": "Gin",
"amount": 2,
"unit": "fl oz"
},
{
"name": "Lemon juice",
"amount": 0.75,
"unit": "fl oz"
},
{
"name": "Simple syrup",
"amount": 0.5,
"unit": "fl oz"
}
],
"target_servings": 8
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/cook/cocktail-recipe-scale",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"ingredients": [
{
"name": "Gin",
"amount": 2,
"unit": "fl oz"
},
{
"name": "Lemon juice",
"amount": 0.75,
"unit": "fl oz"
},
{
"name": "Simple syrup",
"amount": 0.5,
"unit": "fl oz"
}
],
"target_servings": 8
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/cook/cocktail-recipe-scale", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"ingredients":[{"name":"Gin","amount":2,"unit":"fl oz"},{"name":"Lemon juice","amount":0.75,"unit":"fl oz"},{"name":"Simple syrup","amount":0.5,"unit":"fl oz"}],"target_servings":8}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"ingredients":[{"name":"Gin","amount":2,"unit":"fl oz"},{"name":"Lemon juice","amount":0.75,"unit":"fl oz"},{"name":"Simple syrup","amount":0.5,"unit":"fl oz"}],"target_servings":8}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/cook/cocktail-recipe-scale", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"ingredients": [
{
"name": "Gin",
"amount": 2,
"unit": "fl oz"
},
{
"name": "Lemon juice",
"amount": 0.75,
"unit": "fl oz"
},
{
"name": "Simple syrup",
"amount": 0.5,
"unit": "fl oz"
}
],
"target_servings": 8
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "cook.cocktail_recipe_scale",
"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.
Limits
max_ingredients | 200 |
max_amount | 1000000000 |
max_servings | 1000000 |
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. |