Neutralization calculator
25 mL of 0.1 M hydrochloric acid needs 25 mL of 0.1 M sodium hydroxide to reach the equivalence point. Enter both concentrations and the volume you know, plus two equivalents for sulfuric acid or calcium hydroxide, and get the missing volume. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Calculate
- Base volume
- Acid concentration
- 0.1
- Base concentration
- 0.1
- Known volume
- 25
- Acid n
- 1
- Base n
- 1
- Acid volume
- 25
- Base volume
- 25
Acid–base neutralization at the equivalence point is the stoichiometry checkpoint where acidic equivalents equal basic equivalents, so neither reagent is in excess by the reaction bookkeeping. Lab notebooks, homework, and titrations ask the same question: given one solution's concentration and volume plus the other solution's concentration, what volume of the second reagent is required? This neutralization calculator applies na·Ca·Va = nb·Cb·Vb, solves for the missing acid or base volume, and returns that required volume with the echoed concentrations and the equivalent amounts used in the check.
What neutralization at equivalence means and how the missing volume appears
The equivalence point of an acid–base neutralization is the stoichiometry checkpoint where the number of acidic equivalents equals the number of basic equivalents, so the mixture is neither acid-rich nor base-rich by the reaction bookkeeping. Equivalents are concentration times volume times the number of protons or hydroxide ions the formula unit can donate or accept: hydrochloric acid and sodium hydroxide each contribute one equivalent per mole, sulfuric acid contributes two, and calcium hydroxide contributes two. That identity is written na · Ca · Va = nb · Cb · Vb.
Classroom problems almost always give both concentrations and one volume and ask for the other volume; that is exactly what this neutralization calculator computes. A classic check: twenty-five millilitres of 0.10 molar hydrochloric acid against 0.10 molar sodium hydroxide requires twenty-five millilitres of base. Diprotic sulfuric acid at the same concentration and volume against monobasic sodium hydroxide requires fifty millilitres of base because na is two.
Units stay consistent: if concentrations are mol/L and the known volume is millilitres, the required volume is millilitres. The engine does not convert mass percent to molarity, does not estimate pH, and does not plot a titration curve; it answers only the volume at equivalence from the concentrations, the known volume, and the optional n-factors.
Where a neutralization volume calculator earns its keep
Classrooms and tutoring platforms use a neutralization calculator so learners can check the volume of acid or base needed at equivalence without flipping a mole-ratio sign by hand. Exam-prep generators need a deterministic oracle that rejects a zero concentration instead of silently dividing by zero and returning infinity a buggy grader might treat as success. Failed validation does not consume balance.
Prefer this capability when one volume is unknown and you only need that missing volume; it is not a pH-at-equivalence solver, not an excess-reagent moles reporter, and not a heat-of-neutralization calculator.
What you can do with it
Exam and LMS auto-grading
Mark neutralization-volume items with a deterministic oracle that rejects zero or negative concentrations and volumes instead of returning infinity.
FAQ
What happens if a concentration or volume is zero or negative?
Equivalence volume is only defined for strictly positive concentrations and volumes, and invalid input is not billed.
How do I handle sulfuric acid or calcium hydroxide?
The n-factors scale the equivalents so a 1:2 neutralization returns twice the 1:1 volume.
Can I solve for the acid volume instead of the base volume?
Yes. Choose which volume you want: when you know the acid volume the calculator returns the base needed, and when you know the base volume it returns the acid needed. The known volume always belongs to the other solution.
What unit is the required volume given in?
The same unit as the volume you enter. If concentrations are in mol/L and the known volume is in millilitres, the answer is in millilitres too, so no conversion is needed as long as both concentrations share one unit.
Does it calculate the pH or the leftover reagent?
No. It only returns the volume needed at the equivalence point. It does not estimate pH, draw a titration curve, report excess moles of a reagent, give the heat of neutralization or convert mass percent into molarity.
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/neutralization \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"solve_for":"base_volume","acid_concentration":0.1,"base_concentration":0.1,"known_volume":25}'const res = await fetch("https://api.kit.forhosting.com/chem/neutralization", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"solve_for": "base_volume",
"acid_concentration": 0.1,
"base_concentration": 0.1,
"known_volume": 25
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/chem/neutralization",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"solve_for": "base_volume",
"acid_concentration": 0.1,
"base_concentration": 0.1,
"known_volume": 25
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/chem/neutralization", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"solve_for":"base_volume","acid_concentration":0.1,"base_concentration":0.1,"known_volume":25}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"solve_for":"base_volume","acid_concentration":0.1,"base_concentration":0.1,"known_volume":25}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/chem/neutralization", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"solve_for": "base_volume",
"acid_concentration": 0.1,
"base_concentration": 0.1,
"known_volume": 25
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "chem.neutralization",
"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
Any concentration or volume that is missing, zero, or negative fails with invalid_input and is not billed.
What neutralization at equivalence means and how the missing volume appears
Rearrangement gives the missing volume: the acid volume needed is nb · Cb · Vb divided by na · Ca, and the base volume needed is na · Ca · Va divided by nb · Cb.
Input contract, response shape, and error behaviour
Any concentration or volume that is zero or negative also fails, matching the product promise that every concentration or volume must be positive; those failures are not billed. POST a JSON body with solve_for set to acid_volume or base_volume, plus two strictly positive concentrations and one strictly positive known volume. When solve_for is base_volume, known_volume is the acid volume and the API returns the base volume required at equivalence. When solve_for is acid_volume, known_volume is the base volume and the API returns the acid volume required. Optional acid_n and base_n default to one for monoprotic and monobasic reagents; send two for sulfuric acid or calcium hydroxide. Aliases are accepted: ca, c_acid for acid_concentration; cb, c_base for base_concentration; volume or v for known_volume; find or target for solve_for. Each numeric field may arrive as a JSON number or as a numeric string. Missing fields, empty strings, non-numeric text, NaN, and infinities fail with invalid_input naming the field. On success the body echoes solve_for, both concentrations, known_volume, and the n-factors; reports acid_volume and base_volume as the resolved pair; returns required_volume as the missing volume; and includes moles_acid and moles_base, which match at equivalence, plus the equation string na·Ca·Va = nb·Cb·Vb. Example: acid_concentration 0.1, base_concentration 0.1, known_volume 25, solve_for base_volume yields required_volume 25. Pair the number with your own unit labels; this endpoint does not convert millilitres to litres.
Where a neutralization volume calculator earns its keep
Teaching-lab notebooks and quality-control worksheets often know one titrant concentration and the aliquot volume and must size the other burette delivery before the session; calling a tiny parse API avoids pulling a full chemistry suite for four numbers. Keep concentrations and volumes strictly positive, pin required_volume in tests, and you get reproducible equivalence volumes for homework, LMS plugins, and edge workers without standing up a chemistry library of your own.
Integration use cases
Classroom and homework checks
Let students submit both concentrations and one volume, choose acid_volume or base_volume, and verify the required volume against the na·Ca·Va = nb·Cb·Vb method from the textbook.
Teaching-lab aliquot planning
Size the acid or base delivery for a known aliquot and titrant concentration before the session, including diprotic acids via acid_n, without a spreadsheet mole-ratio error.
Technical questions
How do I find the volume of acid or base needed at equivalence?
Send both positive concentrations, the known volume of the other solution, and solve_for set to acid_volume or base_volume. The API returns required_volume from na·Ca·Va = nb·Cb·Vb (n defaults to 1).
When should solve_for be base_volume versus acid_volume?
Use base_volume when known_volume is the acid aliquot and you need the base. Use acid_volume when known_volume is the base and you need the acid.
What does the neutralization calculator cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.