Maximum Operating Depth Calculator for Nitrox and Trimix
The maximum operating depth calculator converts a breathing gas oxygen fraction and an oxygen partial-pressure limit into a depth in metres or feet.
Run — free
It works for nitrox and trimix because MOD depends on the oxygen fraction; helium and nitrogen proportions do not change this specific calculation. Enter oxygen as a decimal such as 0.32 or a percentage such as 32, choose a ppO2 limit, and receive both the exact mathematical depth and a conservative whole-unit result rounded down. This arithmetic aid does not replace gas analysis, training, dive planning, or independent verification.
Understand what maximum operating depth means
Maximum operating depth, usually shortened to MOD, is the depth at which the oxygen in a breathing mix reaches a selected partial pressure. As ambient pressure rises during descent, the partial pressure of every gas in the blend rises with it. A mix containing 32 percent oxygen therefore reaches a given oxygen exposure limit shallower than air, while a lower-oxygen trimix reaches the same limit deeper. The calculation answers one narrow question: where does this blend meet the ppO2 value you supplied? It does not determine whether that ppO2 limit is appropriate for you, the planned workload, exposure time, emergency procedures, or the rules of your training organization. Treat the result as one independently checked number within a complete dive plan. Analyze the cylinder, confirm that its label and planned gas switch match the actual blend, and make sure every team member uses the same units and assumptions. The helium fraction is not requested because MOD is governed by oxygen fraction, although helium remains crucial to other parts of trimix planning such as narcotic depth, decompression, thermal stress, and gas density.
Enter the blend and pressure limit correctly
Supply the analyzed oxygen content as either a decimal fraction or a percentage. For EAN32, both 0.32 and 32 produce the same normalized oxygen fraction. The ppO2 limit is entered in bar and must be an explicit choice made outside this calculator according to suitable training and procedures. Do not copy a value merely because it appears in an example: operational and contingency limits may differ, and acceptable choices can depend on workload, exposure duration, environment, agency guidance, and the dive plan. Select metres or feet for the output. The calculator uses the familiar seawater approximation of 10 metres or 33 feet for each additional bar of ambient pressure. It first divides the ppO2 limit by the oxygen fraction to find absolute ambient pressure, subtracts the surface atmosphere, and converts the remaining pressure to depth. For transparency, the response includes normalized oxygen fraction, oxygen percentage, ambient pressure, exact depth, rounded-down MOD, and the substituted formula. Check that the normalized percentage matches the cylinder analysis before using the depth anywhere else. A unit mistake or misplaced decimal can create a plausible-looking but dangerously incorrect result.
Interpret and verify the result conservatively
The exact depth is the direct arithmetic result rounded only for readable output. The maximum_operating_depth field is floored to a whole metre or foot, rather than rounded to the nearest unit, so it does not display a depth beyond the selected oxygen partial-pressure boundary. That convention is useful for labels, tables, software checks, and planning notes, but it is not permission to descend to that number under all conditions. Verify the answer independently with the method taught by your instructor or organization, and apply any more conservative rounding, depth increments, altitude corrections, or operational margins required by the actual plan. The standard conversion here is a seawater approximation; fresh water, altitude, and pressure conventions can require different treatment. MOD also says nothing about decompression obligation, central nervous system oxygen exposure over time, pulmonary oxygen exposure, gas density, work of breathing, narcosis, carbon dioxide retention, reserves, ascent strategy, or whether a switch can be executed safely. Use analyzed gas, correct regulators and markings, a team cross-check, and a complete plan. Via the API, each deterministic calculation costs $0.002; the browser version uses the same pure calculation logic for immediate checks.
What you can do with it
Label an analyzed nitrox cylinder
Calculate a conservative whole-unit MOD from the measured oxygen percentage and the explicitly selected ppO2 limit before applying the label.
Cross-check a trimix plan
Verify the oxygen-based depth boundary for a trimix blend while handling decompression, density, narcosis, and reserves separately.
Add MOD checks to planning software
Use the deterministic API response to compare a planned depth or switch depth with the blend's calculated oxygen boundary.
FAQ
What formula does the calculator use?
It uses MOD = (ppO2 limit / oxygen fraction - 1) × 10 for metres, or × 33 for feet, using the common seawater approximation.
Should oxygen be entered as 0.32 or 32?
Either format works. Values up to 1 are treated as fractions, while values above 1 are treated as percentages; the output shows the normalized percentage for checking.
Why does trimix not require a helium fraction?
Only oxygen fraction determines MOD for a chosen ppO2. Helium still matters to decompression, density, narcosis, thermal considerations, and the wider dive plan.
Why is the whole-unit result rounded down?
Rounding down avoids presenting a whole metre or foot deeper than the exact ppO2 boundary. Apply any additional conservative convention required by your training or plan.
Does this calculator choose a safe ppO2 limit?
No. You supply the limit. Choosing it requires appropriate training and consideration of workload, time, conditions, procedures, and applicable guidance.
How much does the API calculation cost?
Each API calculation costs $0.002. The calculation is also available in the browser using the same deterministic logic.
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/hobby/sport-dive-mod \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"oxygen_fraction":0.32,"ppo2_limit":1.4}'const res = await fetch("https://api.kit.forhosting.com/hobby/sport-dive-mod", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"oxygen_fraction": 0.32,
"ppo2_limit": 1.4
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/hobby/sport-dive-mod",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"oxygen_fraction": 0.32,
"ppo2_limit": 1.4
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/hobby/sport-dive-mod", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"oxygen_fraction":0.32,"ppo2_limit":1.4}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"oxygen_fraction":0.32,"ppo2_limit":1.4}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/hobby/sport-dive-mod", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"oxygen_fraction": 0.32,
"ppo2_limit": 1.4
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "hobby.sport_dive_mod",
"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. |