{"openapi":"3.1.0","info":{"title":"Dilution Calculator API","version":"1.0.0","description":"Laboratory dilution and molarity maths as an API, computed locally and deterministically. The dilution endpoint solves the standard C1·V1 = C2·V2 relation: give any three of the stock concentration, stock volume, final concentration and final volume and it returns the fourth, plus the volume of stock needed, the diluent to add (V2 − V1) and the dilution factor — and it warns you if the numbers would concentrate rather than dilute. The molarity endpoint ties together moles, molarity, volume, mass and molar mass via moles = molarity × volume(L) and mass = moles × molar mass: pass any sufficient subset (for example a target molarity, volume and molar mass) and it returns how much solute you need, with volumes in litres and millilitres and mass in grams and milligrams. The serial endpoint builds a serial-dilution series from a stock concentration, a dilution factor and a number of steps, giving the concentration at each tube and — if you pass a per-tube total volume — the transfer and diluent volumes for each step. Volumes accept litres, millilitres, centilitres, decilitres and microlitres; mass accepts grams, kilograms, milligrams and micrograms. Everything is computed locally and deterministically, so it is instant and private. Ideal for chemistry and biology lab tools, LIMS and bench apps, education and homework helpers, and pharmacy and pipetting calculators. Pure local computation — no key, no third-party service, instant. Live, nothing stored. 3 endpoints. This is a dilution and molarity calculator; for chemical-compound data and properties use a chemistry API and for the ideal gas law use a gas-law API.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/dilution-api","description":"oanor gateway"}],"tags":[{"name":"Dilution"},{"name":"Meta"}],"components":{"securitySchemes":{"oanorKey":{"type":"apiKey","in":"header","name":"x-oanor-key","description":"Get your key at https://www.oanor.com/developer/keys"}}},"security":[{"oanorKey":[]}],"paths":{"/v1/dilution":{"get":{"operationId":"get_v1_dilution","tags":["Dilution"],"summary":"C1·V1 = C2·V2 solver","description":"","parameters":[{"name":"c1","in":"query","required":false,"description":"Stock concentration","schema":{"type":"string"},"example":"10"},{"name":"v1","in":"query","required":false,"description":"Stock volume","schema":{"type":"string"}},{"name":"c2","in":"query","required":false,"description":"Final concentration","schema":{"type":"string"},"example":"1"},{"name":"v2","in":"query","required":false,"description":"Final volume","schema":{"type":"string"},"example":"100"},{"name":"_","in":"query","required":false,"description":"Provide exactly three to solve the fourth","schema":{"type":"string"}}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"c1":10,"c2":1,"v1":10,"v2":100,"note":"C1·V1 = C2·V2. Concentrations share one unit; volumes share another. Diluent to add = V2 − V1.","solved_for":"v1","diluent_to_add":90,"dilution_factor":10,"stock_volume_needed":10},"meta":{"timestamp":"2026-06-04T01:59:10.812Z","request_id":"ba6a5d1d-90dc-4eed-acd4-c46b4f3b309a"},"status":"ok","message":"C1·V1 = C2·V2 solver","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/molarity":{"get":{"operationId":"get_v1_molarity","tags":["Dilution"],"summary":"Molarity / moles / mass","description":"","parameters":[{"name":"molarity","in":"query","required":false,"description":"Molarity (mol/L)","schema":{"type":"string"},"example":"0.5"},{"name":"volume","in":"query","required":false,"description":"Volume","schema":{"type":"string"},"example":"2"},{"name":"volume_unit","in":"query","required":false,"description":"l|ml|cl|dl|ul","schema":{"type":"string"},"example":"l"},{"name":"molar_mass","in":"query","required":false,"description":"Molar mass (g/mol)","schema":{"type":"string"},"example":"58.44"},{"name":"mass","in":"query","required":false,"description":"Mass","schema":{"type":"string"}},{"name":"mass_unit","in":"query","required":false,"description":"g|kg|mg|ug","schema":{"type":"string"},"example":"g"},{"name":"moles","in":"query","required":false,"description":"Moles","schema":{"type":"string"}}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"moles = molarity × volume(L); mass = moles × molar mass. Provide any sufficient subset.","moles":1,"mass_mg":58440,"molarity":0.5,"volume_ml":2000,"mass_grams":58.44,"molar_mass":58.44,"volume_litres":2},"meta":{"timestamp":"2026-06-04T01:59:10.910Z","request_id":"b8b677af-2b7b-46e5-a42f-d0cc4398e886"},"status":"ok","message":"Molarity / moles / mass relations","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/serial":{"get":{"operationId":"get_v1_serial","tags":["Dilution"],"summary":"Serial dilution series","description":"","parameters":[{"name":"stock_concentration","in":"query","required":true,"description":"Stock concentration (c0)","schema":{"type":"string"},"example":"1000"},{"name":"dilution_factor","in":"query","required":true,"description":"Factor per step (e.g. 10)","schema":{"type":"string"},"example":"10"},{"name":"steps","in":"query","required":false,"description":"Number of steps (default 5)","schema":{"type":"string"},"example":"3"},{"name":"total_volume","in":"query","required":false,"description":"Per-tube volume (for transfer/diluent)","schema":{"type":"string"},"example":"1000"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"Each step divides the concentration by the dilution factor. With total_volume, transfer = total/factor and diluent = total − transfer per tube.","steps":3,"series":[{"step":1,"dilution":"1:10","concentration":100},{"step":2,"dilution":"1:100","concentration":10},{"step":3,"dilution":"1:1000","concentration":1}],"dilution_factor":10,"per_step_volumes":{"total_volume":1000,"diluent_volume":900,"transfer_volume":100},"final_concentration":1,"stock_concentration":1000},"meta":{"timestamp":"2026-06-04T01:59:10.999Z","request_id":"afcf0d82-7209-49dd-a7c1-6aa9831fa287"},"status":"ok","message":"Serial dilution series","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/meta":{"get":{"operationId":"get_v1_meta","tags":["Meta"],"summary":"Spec","description":"","parameters":[],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"api":"dilution","note":"Laboratory dilution & molarity maths — computed locally and deterministically, no key, no third-party service.","endpoints":["/v1/dilution","/v1/molarity","/v1/serial","/v1/meta"],"mass_units":["g","kg","mg","ug","µg"],"volume_units":["l","litre","liter","ml","cl","dl","ul","µl","microlitre"]},"meta":{"timestamp":"2026-06-04T01:59:11.092Z","request_id":"9a355b27-87be-440d-947b-387298e28bd4"},"status":"ok","message":"Meta","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}}},"x-oanor-pricing":[{"slug":"free","name":"Free","price_cents_month":0,"monthly_call_quota":13135,"rps_limit":2,"hard_limit":true},{"slug":"starter","name":"Starter","price_cents_month":1465,"monthly_call_quota":22750,"rps_limit":8,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":3455,"monthly_call_quota":277500,"rps_limit":20,"hard_limit":true},{"slug":"mega","name":"Mega","price_cents_month":7255,"monthly_call_quota":1430000,"rps_limit":50,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/dilution-api"}