C1V1 = C2V2 calculator
Solve a dilution for whichever value is missing: 50 mL of a 2 mol/L stock diluted to 0.5 mol/L makes 200 mL, a fourfold dilution. Enter any three of the four quantities and get the fourth. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Initial
- 2
- Initial
- 50
- Final
- 0.5
- Initial concentration
- 2
- Initial volume
- 50
- Final concentration
- 0.5
- V2
- 200
A C1V1 equals C2V2 calculator rearranges the classic dilution equation so you can solve for whichever concentration or volume you do not already know. All quantities must be strictly positive so the dilution model stays physically meaningful for stock-to-working solutions. Concentration units of C1 and C2 must match each other, and volume units of V1 and V2 must match each other; the solver does not convert molarity to percent or millilitres to litres.
What the dilution equation C1V1 = C2V2 means
The dilution equation states that the amount of solute is conserved when solvent is added without removing solute: the product of the stock concentration and the aliquot volume equals the product of the final concentration and the final total volume, written compactly as C1 times V1 equals C2 times V2. Introductory general chemistry, analytical prep, and clinical laboratory protocols use this identity every day when a concentrated stock must be diluted to a working concentration for titration, spectrophotometry, cell culture media, or assay standards.
Exactly three of the four quantities must be known so the fourth is uniquely determined; providing all four or fewer than three is a validation error rather than a silent consistency residual or least-squares fit. Concentrations C1 and C2 must share the same unit—both molar, both mass percent, both parts per million—because the equation cancels concentration units only when they match. Volumes V1 and V2 likewise must share a volume unit, whether millilitres, litres, or microlitres.
The model assumes ideal volume additivity and no precipitation or evaporation of solute; dense acid dilutions and temperature-dependent density corrections are outside this calculator. The check path recomputes the rearranged expression with the same fixed rounding used for published fields, so a successful response always ships with steps you can assert in tests, lab reports, or chemistry worksheets.
Practical tips, limits, and related chemistry searches
Keep stock and working concentrations in the same unit family before you call the tool, and convert millilitres to litres only if both volumes use the same convention you chose. Keep inputs inside the published absolute range so products such as C1 times V1 cannot overflow into a non-finite result that the solver must reject. Prefer sending numbers rather than pre-formatted strings when you control the client; string numbers are accepted only when they match a strict finite numeric pattern.
Prefer this capability when you already have three consistent dilution quantities and only need the fourth under solute conservation; if volumes contract on mixing strong acids with water, apply density tables after you have the ideal C1V1 C2V2 estimate.
What you can do with it
Stock-to-working solution prep
Lab technicians enter stock concentration, desired final concentration, and final volume to get the aliquot volume V1 of concentrate to pipette into the volumetric flask.
Chemistry homework checks for C1V1 = C2V2
Students omit one of C1, V1, C2, or V2 from textbook dilution problems and compare hand-written answers against a deterministic result before submitting.
FAQ
What is the dilution equation C1V1 = C2V2?
It states that solute amount is conserved when you dilute a stock: initial concentration times initial volume equals final concentration times final volume. Rearrange for any one unknown when the other three are known.
Do C1 and C2 need the same units?
Yes. Both concentrations must use the same unit (both M, both %, both ppm, and so on). V1 and V2 must likewise share a volume unit.
Can I provide all four values to check consistency?
No. Provide exactly three and omit the unknown. Consistency checking of four known values is outside this calculator.
Is the C1V1 = C2V2 calculator free?
The browser tool is free and runs locally.
How much stock solution do I need for a dilution?
Leave the stock volume empty and enter the stock concentration, the target concentration and the final volume. To make 200 mL at 0.5 mol/L from a 2 mol/L stock, you need 50 mL of stock topped up to 200 mL.
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/chem/c1v1-c2v2 \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"c1":2,"C1":-1000000000000}'const res = await fetch("https://api.kit.forhosting.com/chem/c1v1-c2v2", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"c1": 2,
"C1": -1000000000000
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/chem/c1v1-c2v2",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"c1": 2,
"C1": -1000000000000
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/chem/c1v1-c2v2", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"c1":2,"C1":-1000000000000}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"c1":2,"C1":-1000000000000}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/chem/c1v1-c2v2", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"c1": 2,
"C1": -1000000000000
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "chem.c1v1_c2v2",
"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_abs | 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
When a rearrange would divide by zero—for example solving for C1 with V1 equal to zero, or solving for V2 with C2 equal to zero—the API returns a clear invalid_input error instead of inventing infinity.
What the dilution equation C1V1 = C2V2 means
Teachers and automated graders care about the zero-divisor rejection as much as the success path: a learner who sets final concentration to zero when solving for final volume should see an explicit invalid_input message instead of a non-finite number.
How to call the API and what comes back
Send a JSON body with exactly three of the four fields filled: c1 (aliases C1, initial_concentration, stock_concentration, and conc1), v1 (aliases V1, initial_volume, stock_volume, and vol1), c2 (aliases C2, final_concentration, diluted_concentration, and conc2), and v2 (aliases V2, final_volume, diluted_volume, and vol2). Absolute values must stay within the published limit of one trillion so intermediate products remain finite in IEEE double precision on the Worker and in the browser. Every provided quantity must be strictly positive; zero and negative values are rejected, and when the unknown rearrange would divide by a zero or near-zero divisor the tool fails with invalid_input naming that field. On success the response echoes rounded c1, v1, c2, and v2, mirrors them as initial_concentration, initial_volume, final_concentration, and final_volume, sets solved_for and unknown to the key of the omitted variable, formula and rearrange to the algebraic form used, equation to a filled C1 V1 equals C2 V2 string, product_c1v1 and product_c2v2 to the two sides after rounding, dilution_factor to C1 over C2 and dilution_factor_volume to V2 over V1 when defined, message to a short English summary, and steps to an ordered array of substitution lines. Failed validation—wrong count of fields, missing numbers, non-finite values, values outside absolute limits, non-positive quantities, or a zero divisor—returns invalid_input and is never charged. Pricing is a flat $0.002 per successful request with unit item and zero marginal unit price.
Practical tips, limits, and related chemistry searches
When teaching, pair examples: omit final volume with C1 equals two molar, V1 equals fifty millilitres, and C2 equals point five molar to recover two hundred millilitres of diluted solution; omit initial volume with the same concentrations and a known final volume to practice the pipette aliquot; omit C2 or C1 to reverse the usual dilution direction; and deliberately send a zero divisor such as c2 equals zero when solving for v2 to demonstrate the hard invalid_input path. This landing targets people searching for a C1V1 equals C2V2 calculator, dilution equation solver, or concentration-volume homework help online; it is not a serial multi-step dilution planner, not a molarity-from-mass converter, and not a density-aware volumetric correction tool. Failed tasks that return invalid_input do not consume prepaid balance, which keeps exploratory scripts cheap when learners deliberately send zero divisors. Round-trip checks are easy: recompute the rearranged expression by hand and confirm it equals the published unknown within the same twelve-decimal rounding, and confirm that product_c1v1 and product_c2v2 agree for a fully consistent rounded state after you solve for any one of C1, V1, C2, or V2.
Integration use cases
Unit tests for student dilution solvers
Generate known-good rearrangements for each unknown plus deliberate zero-divisor rejections for coding kata expected values in chemistry tools.
Technical questions
What happens if a divisor is zero?
The solver returns invalid_input. For example, solving for C1 with V1 = 0, or for V2 with C2 = 0, is division by zero and is never charged.