Serial dilution volumes calculator
A 1:10 series in 1000 µL tubes takes 100 µL of sample and 900 µL of diluent per tube; the calculator lists every tube with its source, both pipette volumes and the cumulative fold. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Dilution factor
- 10
- Tube volume
- 1,000
- Sample volume
- 100
- Diluent volume
- 900
- Stock volume
- 100
- Remaining volume
- 900
A serial dilution volumes calculator tells you how many microlitres of sample to transfer and how much diluent to add in every tube so each step multiplies the dilution by a chosen fold. Bench scientists, ELISA plate setters, microbiology teaching labs, and assay-prep scripts all need the same identity: sample volume equals tube volume divided by the per-step factor, and diluent volume equals the remainder. A 1:10 series in 1 000 µL tubes is therefore 100 µL of sample plus 900 µL of diluent, repeated down the rack; a 2-fold ELISA curve in 200 µL wells is 100 µL plus 100 µL. Optional stock concentration, when supplied, annotates each tube with C0 divided by factor to the tube index so a lab notebook can print both pipette volumes and expected titres from one call.
How sample and diluent volumes are computed for each tube
A serial dilution is a chain of identical mix-and-transfer steps. You fill every tube to the same finished volume V, you take the same aliquot from the previous tube (or from the stock for tube 1), and you top up with diluent so that the aliquot is exactly one part in f of the finished mix. A 10-fold series in 1 000 microlitre tubes therefore uses 100 microlitres of sample and 900 microlitres of diluent in every tube; a 2-fold ELISA curve in 200 microlitre wells uses 100 plus 100.
After you mix tube i you transfer the same sample volume into tube i plus 1, so each intermediate tube is left with remaining volume V minus the aliquot, which is numerically the same as the diluent volume. The last tube is not a source for a further transfer, so it keeps the full tube volume. Cumulative fold at tube i is f to the power i, so four 10-fold steps reach 10 000-fold from the stock and eight 2-fold steps reach 256-fold.
This calculator applies that identity for any finite factor greater than one and any positive tube volume, and it lists every tube with its source, the two pipette volumes, the transfer out, the leftover, and the cumulative fold. It does not choose a pipette size, a mixing time, or a buffer recipe; those belong to your SOP. It also does not invert the problem into a concentration-only series: that is a different search, answered by a sibling that starts from a stock titre rather than from a tube volume.
Where a serial dilution volumes calculator earns its keep
Teaching labs and microbiology courses use a serial dilution volumes calculator so students stop guessing 100 plus 900 and can show the identity for an arbitrary factor and tube volume, including leftover volume after the transfer to the next tube. ELISA and potency-assay notebooks keep the same 2-fold well arithmetic next to a plate map when a 200 microlitre well needs 100 microlitres of sample and 100 microlitres of diluent for eight steps, reaching 256-fold at the last well.
High-throughput assay scripts, CFU counting racks, qPCR standard-curve sheets, and LMS homework oracles need a deterministic parse that rejects a factor of one or a missing tube volume instead of dividing by zero or silently returning Infinity. Failed validation does not consume balance.
What you can do with it
Microbiology 1:10 counting rack
A bench scientist enters factor 10, tube volume 1000, and four steps, then pipettes 100 µL of sample plus 900 µL of diluent into each tube of a CFU series.
ELISA 2-fold standard curve
An assay tech enters factor 2, well volume 200, eight steps, and a stock concentration, and uses sample 100 plus diluent 100 in every well down to 256-fold.
FAQ
How do I calculate sample and diluent volumes for a serial dilution?
A 10-fold series in 1000 µL tubes uses 100 µL of sample and 900 µL of diluent; four steps reach a 10 000-fold last tube.
Is the transfer volume the same in every tube?
Yes. A constant-factor serial dilution uses the same sample aliquot and the same diluent in every tube. Tube 1 takes that aliquot from the stock; later tubes take it from the previous tube. Only the last tube skips a transfer out, so it keeps the full finished volume.
How is this different from a serial dilution concentration calculator?
This page answers how much to pipette. A concentration-at-each-step calculator answers what titre sits in tube i given a stock concentration.
What leftover volume remains after I transfer to the next tube?
For 1000 µL at 10-fold that leftover is 900 µL.
How much diluent do I need in total for the whole series?
Multiply the diluent per tube by the number of tubes. Four 1:10 steps in 1000 µL tubes use 900 µL each, so the series needs 3600 µL of diluent in total and reaches a 10000-fold dilution.
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/bio/serial-dilution-volumes \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"dilution_factor":10,"tube_volume":1000,"steps":4}'const res = await fetch("https://api.kit.forhosting.com/bio/serial-dilution-volumes", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"dilution_factor": 10,
"tube_volume": 1000,
"steps": 4
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/bio/serial-dilution-volumes",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"dilution_factor": 10,
"tube_volume": 1000,
"steps": 4
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/bio/serial-dilution-volumes", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"dilution_factor":10,"tube_volume":1000,"steps":4}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"dilution_factor":10,"tube_volume":1000,"steps":4}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/bio/serial-dilution-volumes", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"dilution_factor": 10,
"tube_volume": 1000,
"steps": 4
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "bio.serial_dilution_volumes",
"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_steps | 64 |
max_volume | 1000000000000000 |
max_factor | 1000000000000 |
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
This endpoint applies that identity for any finite factor greater than one, any positive tube volume, and one to sixty-four steps, and it lists every tube with the source of the aliquot, the transfer out to the next tube, the leftover volume after that transfer, and the cumulative fold from the stock.
How sample and diluent volumes are computed for each tube
That is the per-step dilution factor: sample volume equals V divided by f, and diluent volume equals V times (f minus 1) divided by f.
Input contract, response shape, and error behaviour
POST a JSON body with three required numbers. dilution_factor is the per-step fold f, for example 10 for a 1:10 series or 2 for a doubling curve (aliases factor, fold, df, dilution). It must be finite and strictly greater than one; a factor of one or below does not dilute and fails with invalid_input that names the field. tube_volume is the finished volume of each dilution tube in any consistent unit such as microlitres or millilitres (aliases final_volume, volume, v_tube, v). steps is the integer count of dilution tubes after the stock, from 1 through 64 (aliases n, tubes, n_steps). Optional stock_concentration is the stock titre C0 in any consistent concentration unit (aliases c0, concentration, starting_concentration); omit it when you only need pipette volumes. Each numeric field may arrive as a JSON number or a decimal or scientific string. Missing required fields, empty strings, non-finite values, non-positive volumes, non-integer or out-of-range steps, and a factor that does not dilute fail with invalid_input. Those failures are not billed. On success the body echoes the inputs, returns sample_volume and diluent_volume (the two numbers you pipette into every tube), stock_volume (the aliquot taken from the stock, equal to sample_volume), remaining_volume after an intermediate transfer, last_tube_volume, total_diluent across all tubes, total_fold as f to the power of steps, and ratio_label such as 1:9 for a 10-fold mix. tubes is an array of records, one per tube, with source (stock or tube_k), transfer_out, remaining_volume, and fold_dilution. When C0 is supplied, each row also carries concentration and the body includes final_concentration. formula restates sample = tube_volume / dilution_factor and diluent = tube_volume × (dilution_factor − 1) / dilution_factor; formula_applied substitutes this call's numbers. Pair the volumes with your own pipette and buffer table; this endpoint does not choose tip size or mix time.
Where a serial dilution volumes calculator earns its keep
Keep factors, volumes, and step counts inside the declared ceilings, pin sample_volume, diluent_volume, and total_fold in tests, and you get reproducible 100-plus-900 answers for the textbook 10-fold, 1 000 microlitre, four-step case across a lab notebook, an LMS plugin, and a plate-prep pipeline.
Integration use cases
SOP and LMS oracles
Automation pins sample_volume and total_fold for the textbook 10-fold case and invalid_input when the dilution factor is missing or not greater than one.
Technical questions
What does the serial dilution volumes calculator cost?
The browser tool is free. API requests use prepaid balance at $0.002 per successful call; invalid input is not billed.