Candle Container Wax Weight Calculator
A container's fluid capacity is not the same as the weight of candle wax it will hold.
Run — free
This calculator converts the usable volume of a jar, tin, or vessel into a practical wax weight by applying the poured density of soy, paraffin, beeswax, coconut, palm, gel, or a custom formulation. Enter the volume, choose its unit and wax, and optionally reduce the fill percentage for headspace. The result includes grams, ounces, kilograms, and pounds for convenient workshop planning.
Measure the usable container volume
Start with the volume that wax can actually occupy, rather than relying blindly on a container's retail label. A jar described as eight ounces may be marketed by fluid capacity, may have a brimful capacity that leaves no safe headspace, or may use a nominal size rather than an exact measurement. For a workshop measurement, fill the clean container with water to the intended wax line and measure that water in a graduated vessel. Enter the resulting volume and select the matching unit. The calculator accepts milliliters, liters, US fluid ounces, UK fluid ounces, US cups, and cubic inches. Keep US and UK fluid ounces distinct because they are not equal. If your measurement reaches the exact intended pour line, leave fill percentage at 100. If the value represents total brimful capacity, reduce the percentage to preserve the headspace required by your vessel design, wick setup, and safety testing. The normalized milliliter value shown in the result makes the conversion transparent and easy to check against your notes.
Choose a realistic poured wax density
Weight comes from multiplying occupied volume by density, so wax choice matters. The presets provide practical planning densities in grams per milliliter for common wax families: soy, paraffin, beeswax, coconut, palm, and gel. They are useful when estimating an early test batch, but they cannot represent every proprietary blend, additive package, dye concentration, or pour condition. Wax expands and contracts with temperature, and suppliers may publish a density or specific-gravity figure for a particular product. When reliable technical data is available, choose custom and enter that poured density instead of using a family preset. The custom field expects grams per milliliter and accepts a positive value no greater than two. Do not enter grams per cubic centimeter as a different unit: numerically it is equivalent to grams per milliliter. Likewise, do not substitute the density of water or assume that one fluid ounce of capacity holds one ounce by weight. The output repeats the density applied, allowing a maker to record the assumption alongside each formula and reproduce the estimate later.
Use the result for batches and test pours
The calculated wax weight is the amount of wax occupying the selected fill volume before fragrance, dye, production loss, or the number of containers is considered. Use grams for the cleanest formulation math, especially when a fragrance load is expressed as a percentage of wax weight. Decide separately whether your recipe defines fragrance percentage against wax weight or total finished weight, because those conventions produce different batch calculations. For several identical containers, multiply the displayed wax weight by the vessel count, then add an allowance appropriate to your pouring equipment and process. A small test pour can reveal whether wax remains in the pitcher, contracts below the target line, or requires a second pour. Record the actual filled weight and revise the custom density or working allowance for the next batch. The ounce and pound values are convenient for purchasing and familiar shop scales, while kilograms help with larger production runs. This calculator is a planning tool, not a substitute for burn testing, thermal testing, supplier instructions, or verifying the safe fill line of a specific candle vessel.
What you can do with it
Plan a single test candle
Convert a measured jar capacity into the approximate wax weight needed for an initial wick and fragrance test.
Compare wax formulations
See how soy, paraffin, beeswax, coconut, palm, gel, or a supplier-specific density changes the fill weight for one vessel.
Standardize workshop records
Record normalized volume, applied density, fill percentage, and weight in consistent metric and imperial units.
FAQ
What does the calculator cost?
It runs free in your browser. API automation costs $0.002 per request.
Why is fluid volume different from wax weight?
Fluid volume measures occupied space, while weight depends on density. Most candle waxes have a different density from water, so equal volumes do not have equal weights.
Should I use US or UK fluid ounces?
Use the system in which the container was measured. A US fluid ounce and a UK fluid ounce have different volumes, and selecting the wrong one changes the result.
When should I enter a custom density?
Use custom density when your wax supplier publishes a value for the exact formulation or when you have established a reliable workshop measurement for your blend.
Does the wax weight include fragrance oil?
No. The result is wax weight only. Add fragrance according to the calculation convention and safe usage rate specified for your wax and fragrance.
Does this replace candle safety testing?
No. Container compatibility, wick selection, fill line, fragrance load, and burn performance must still be tested for the finished candle.
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/hobby/craft-candle-container-wax \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"container_volume":8,"volume_unit":"us_fl_oz","wax_type":"soy"}'const res = await fetch("https://api.kit.forhosting.com/hobby/craft-candle-container-wax", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"container_volume": 8,
"volume_unit": "us_fl_oz",
"wax_type": "soy"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/hobby/craft-candle-container-wax",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"container_volume": 8,
"volume_unit": "us_fl_oz",
"wax_type": "soy"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/hobby/craft-candle-container-wax", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"container_volume":8,"volume_unit":"us_fl_oz","wax_type":"soy"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"container_volume":8,"volume_unit":"us_fl_oz","wax_type":"soy"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/hobby/craft-candle-container-wax", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"container_volume": 8,
"volume_unit": "us_fl_oz",
"wax_type": "soy"
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "hobby.craft_candle_container_wax",
"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. |