Enthalpy of reaction calculator
Find whether a reaction releases or absorbs heat from formation enthalpies: methane burning in oxygen to carbon dioxide (−393.5 kJ/mol) and two moles of water (−241.8 each) gives −802.3 kJ/mol, exothermic. Each species' contribution is listed. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Runs in your browser. Free, unlimited — your data never leaves this page.
The standard enthalpy of reaction tells you whether a chemical change releases or absorbs heat under constant pressure when reactants become products. Given tabulated standard enthalpies of formation for every species on each side of a balanced equation, Hess's law states that ΔH_rxn equals the sum of stoichiometric coefficients times formation enthalpies for products minus the same sum for reactants. This capability applies that formula deterministically: you supply formation values and optional coefficients, and it returns the reaction enthalpy, the product and reactant sums, per-species contributions, and a simple exothermic, endothermic, or thermoneutral classification. Missing formation values fail with a clear invalid input error instead of inventing table data.
How formation enthalpies give a reaction enthalpy
Tables rarely list the enthalpy of every possible reaction, but they do list standard enthalpies of formation. Hess's law turns those into a reaction value: multiply each species' formation enthalpy by its coefficient in the balanced equation, add up the products, add up the reactants, and subtract the reactant total from the product total. Elements in their standard states count as zero. A negative result means the reaction releases heat as written and is exothermic, a positive one means it absorbs heat and is endothermic, and zero is labelled thermoneutral.
A worked example and the usual slips
For methane burning in oxygen, the products are one carbon dioxide at −393.5 kJ/mol and two water at −241.8 kJ/mol, so their sum is −877.1 kJ/mol. The reactants are methane at −74.8 and two oxygen at zero, which add up to −74.8. The difference, −802.3 kJ/mol, is the reaction enthalpy. The usual slips are forgetting to multiply by the coefficient, mixing units and starting from an equation that is not balanced; the coefficients you enter are used exactly as given, so check them first.
How Hess's law turns formation enthalpies into ΔH_rxn
Write a balanced chemical equation and collect a standard enthalpy of formation for every reactant and every product in the same energy unit, commonly kilojoules per mole. Elements in their standard states contribute zero by definition; compounds take the tabulated ΔH_f values from your textbook, lab sheet, or database. Send two arrays: reactants and products.
The engine multiplies each coefficient by its formation enthalpy, sums the product side, sums the reactant side, and subtracts: ΔH_rxn equals sum of ν ΔH_f for products minus sum of ν ΔH_f for reactants. Negative ΔH means the reaction is exothermic as written; positive means endothermic; zero is labeled thermoneutral.
What you can do with it
Homework and exam verification
Students enter formation enthalpies and coefficients for a balanced equation, compare the returned ΔH_rxn and side sums with hand work, and get a clear error when a formation value is missing.
FAQ
What happens if a formation enthalpy is missing?
The engine does not look up tables or invent values.
Is the enthalpy of reaction calculator free?
The browser tool runs free on your device.
What formation enthalpy do elements like O2 have?
Zero, by definition, for any element in its standard state. Enter it as 0 rather than leaving it out, so the species still appears in the list with its coefficient and simply contributes nothing to the sum.
Can I use fractional coefficients such as one half?
Yes. Coefficients should match the balanced equation, fractions included, such as one half for oxygen. They must be positive, and any coefficient you leave out counts as one.
Does the calculator convert kilojoules to joules?
No. The unit you type is only a label for the result, which defaults to kJ/mol. Enter every formation enthalpy in the same unit, because the values are multiplied and added exactly as given.
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/enthalpy-reaction \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"reactants":[{"name":"CH4","enthalpy_formation":-74.8,"coefficient":1},{"name":"O2","enthalpy_formation":0,"coefficient":2}],"products":[{"name":"CO2","enthalpy_formation":-393.5,"coefficient":1},{"name":"H2O","enthalpy_formation":-241.8,"coefficient":2}]}'const res = await fetch("https://api.kit.forhosting.com/chem/enthalpy-reaction", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"reactants": [
{
"name": "CH4",
"enthalpy_formation": -74.8,
"coefficient": 1
},
{
"name": "O2",
"enthalpy_formation": 0,
"coefficient": 2
}
],
"products": [
{
"name": "CO2",
"enthalpy_formation": -393.5,
"coefficient": 1
},
{
"name": "H2O",
"enthalpy_formation": -241.8,
"coefficient": 2
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/chem/enthalpy-reaction",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"reactants": [
{
"name": "CH4",
"enthalpy_formation": -74.8,
"coefficient": 1
},
{
"name": "O2",
"enthalpy_formation": 0,
"coefficient": 2
}
],
"products": [
{
"name": "CO2",
"enthalpy_formation": -393.5,
"coefficient": 1
},
{
"name": "H2O",
"enthalpy_formation": -241.8,
"coefficient": 2
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/chem/enthalpy-reaction", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"reactants":[{"name":"CH4","enthalpy_formation":-74.8,"coefficient":1},{"name":"O2","enthalpy_formation":0,"coefficient":2}],"products":[{"name":"CO2","enthalpy_formation":-393.5,"coefficient":1},{"name":"H2O","enthalpy_formation":-241.8,"coefficient":2}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"reactants":[{"name":"CH4","enthalpy_formation":-74.8,"coefficient":1},{"name":"O2","enthalpy_formation":0,"coefficient":2}],"products":[{"name":"CO2","enthalpy_formation":-393.5,"coefficient":1},{"name":"H2O","enthalpy_formation":-241.8,"coefficient":2}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/chem/enthalpy-reaction", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"reactants": [
{
"name": "CH4",
"enthalpy_formation": -74.8,
"coefficient": 1
},
{
"name": "O2",
"enthalpy_formation": 0,
"coefficient": 2
}
],
"products": [
{
"name": "CO2",
"enthalpy_formation": -393.5,
"coefficient": 1
},
{
"name": "H2O",
"enthalpy_formation": -241.8,
"coefficient": 2
}
]
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "chem.enthalpy_reaction",
"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. |
Technical notes
How Hess's law turns formation enthalpies into ΔH_rxn
Each species object must include enthalpy_formation as a finite number; optional coefficient defaults to one when omitted and should match the balanced stoichiometric coefficient (including fractions such as one half for oxygen). Optional name labels such as CH4 or H2O make the JSON readable in reports but do not change the math. Missing formation enthalpy on any species, empty arrays, non-positive coefficients, and non-finite numbers raise invalid_input and are not charged. Identical inputs always produce identical JSON because the path is pure arithmetic with no network call, no model, no random seed, and no wall clock.
Reading the response: sums, contributions, and classification
Validation messages that mention missing formation enthalpy name the species index so you can fix a blank cell without reading a stack trace. On success the response includes delta_h, the alias delta_H, and enthalpy_reaction—all equal to the computed reaction enthalpy—plus unit, defaulting to kJ/mol unless you send a display unit string. sum_products and sum_reactants expose the two intermediate Hess sums so students can check their scratch work term by term. The reactants and products arrays echo each species with name when provided, coefficient, enthalpy_formation, and contribution equal to coefficient times formation enthalpy. reactant_count and product_count give array lengths for UI tables. classification is exothermic when ΔH is negative, endothermic when positive, and thermoneutral when zero, which is enough for quick labels without re-deriving the sign in the client. formula restates the Hess identity in a short string, and method is always hess_formation_enthalpies so downstream code can branch without sniffing shapes. Use delta_h alone when a spreadsheet or gradebook needs a single number; use the contribution columns when a lab report must show how carbon dioxide and water each pull the methane combustion enthalpy downward. The engine never converts units: if you mix kJ and kcal you will get a wrong number, so keep one energy unit for the whole request.
API usage, pricing, classroom labs, and practical limits
Call the free in-browser enthalpy of reaction calculator for homework checks, lecture demos, and quick lab prep without installing a thermochemistry package. Authors shipping SDKs can map the contribution arrays into tables of name, coefficient, ΔH_f, and contribution—the same columns students fill by hand when they apply Hess's law from formation data. Send a JSON body with required arrays reactants and products; aliases reactant, left, product, and right are accepted when documented by the SDK. Per-species formation aliases include delta_hf, dhf, hf, formation_enthalpy, and Hf; coefficient aliases include coeff, nu, stoich, and n. Use the prepaid API when a tutoring platform, LIMS integration, process-safety worksheet, or curriculum generator needs a stable contract under KIT balance at $0.002 per successful item; validation failures never consume balance after the engine rejects the request. Species lists are capped for Worker isolate safety while still covering ordinary multi-reactant classroom and industrial teaching examples. Pair this endpoint with your own formation-table lookup when the next step is filling blanks from a periodic-style ΔH_f chart, or with stoichiometry helpers when you first balance the equation.
Integration use cases
Teaching apps and auto-graded drills
Curriculum tools generate Hess-law exercises with structured JSON for flashcards, rubrics, and step sheets without embedding a full thermochemical database.
Lab notebooks and process calculators
Scripts convert supplied ΔH_f tables into reaction enthalpies for safety sheets, energy balances, and teaching demos via a stable prepaid endpoint.
Technical questions
How do I calculate enthalpy of reaction from formation enthalpies?
Send JSON with reactants and products arrays. Each species needs enthalpy_formation and optional coefficient. The response includes delta_h equal to sum of product contributions minus sum of reactant contributions.
Are elements with ΔH_f = 0 allowed?
Yes. Send enthalpy_formation: 0 for elements in their standard states. Zero is a valid finite value; only missing or non-finite formation fields are rejected.
Does a negative ΔH mean the reaction is exothermic?
Yes as written: classification is exothermic when delta_h is negative, endothermic when positive, and thermoneutral when zero. Reverse the equation and the sign flips.