{"calculator":{"slug":"vo2-max-estimator","math":{"href":"https://www.tracktoolspro.com/api/calculators/vo2-max-estimator","jsonPointer":"/calculator/math","version":"2026-10-21.1","implementationVersion":"b5a8aca7b85361476e0321a08b7fa5f516fc9535","scope":"Canonical HTTP function and documented corresponding mounted-form math. This is public inspectable documentation, not access control or independent empirical validation.","unitNotation":"Input paths use [] and *; output paths are JSON Pointers with * (one segment) and ** (descendants). Empty output path denotes scalar result. Units apply to numeric quantities or explicitly described numeric strings; labels/statuses/booleans are dimensionless. More specific units, including count/index exceptions, override broad patterns.","interfaceNotes":["HTTP input is described by the adjacent inputSchema. The original handlers may accept numeric strings; this metadata adds no validation.","Mounted forms accept displayed clock/unit strings and enforce their own limits. Mounted tools limit strings to 200 characters and numeric parts to magnitude 1000000. Do not assume mounted/API input interchangeability.","Some legacy extreme/invalid tuples can produce null/empty results or nonfinite numbers serialized as null. Those are unavailable answers, not exact numerical predictions. Per-calculator domain describes the intended mathematical inputs."],"kind":"empirical-model","implementationFiles":["lib/formulas/vdot.ts"],"equations":["t=timeSeconds/60 (minutes); v=distanceMeters/t (m/min).","fraction(t)=0.8+0.1894393*exp(-0.012778*t)+0.2989558*exp(-0.1932605*t); oxygen(v)=-4.6+0.182258*v+0.000104*v^2; VDOT=oxygen(v)/fraction(t).","vo2max=round(VDOT*10)/10; classification is selected from the canonical gender bands using UNROUNDED VDOT.","equivalentTimes[j].time=timeSeconds*(targetDistanceMeters/distanceMeters)^1.06 (separate Riegel predictions, not VDOT inversion)."],"inputUnits":{"distanceMeters":"m","timeSeconds":"s","gender":"enum/string (dimensionless)"},"outputUnits":{"/vo2max":"VDOT performance index (conventional oxygen-cost scale)","/classification/min":"VDOT index threshold","/equivalentTimes/*/value":"m","/equivalentTimes/*/time":"s"},"domain":["Positive race distance/time and 10<=rawVDOT<=100; otherwise null."],"rounding":["VDOT field rounds to 0.1; comparisons are raw seconds; classification uses pre-round value."],"assumptions":["Uses the entered values and the selected convention; this documentation does not strengthen existing validation."],"limitations":["Race-derived index, not measured VO2max. Classification ignores age and individual physiology. No personalized training paces are returned."],"mountedPageNotes":[],"workedExamples":[{"input":{"distanceMeters":5000,"timeSeconds":1200,"gender":"male"},"expected":{"/vo2max":49.8},"absoluteTolerance":1e-8,"note":"Illustrative canonical-handler result; not independent validation of an empirical model."}],"constantsAndTables":{"classificationBands":{"male":[{"min":60,"label":"Elite","color":"success"},{"min":52,"label":"Excellent","color":"primary"},{"min":47,"label":"Good","color":"info"},{"min":42,"label":"Above Average","color":"info"},{"min":37,"label":"Average","color":"warning"},{"min":30,"label":"Below Average","color":"warning"},{"min":0,"label":"Poor","color":"error"}],"female":[{"min":54,"label":"Elite","color":"success"},{"min":47,"label":"Excellent","color":"primary"},{"min":42,"label":"Good","color":"info"},{"min":37,"label":"Above Average","color":"info"},{"min":32,"label":"Average","color":"warning"},{"min":25,"label":"Below Average","color":"warning"},{"min":0,"label":"Poor","color":"error"}]},"riegelExponent":1.06},"sources":[{"title":"Canonical HTTP binding at the documented implementation revision","url":"https://github.com/wickthumb/track_tools_pro_marketing/blob/b5a8aca7b85361476e0321a08b7fa5f516fc9535/lib/calculator-functions.ts","note":"Existing calculation handler; math metadata is additive."},{"title":"lib/formulas/vdot.ts","url":"https://github.com/wickthumb/track_tools_pro_marketing/blob/b5a8aca7b85361476e0321a08b7fa5f516fc9535/lib/formulas/vdot.ts","note":"Primary implementation source for these equations/tables, not a claim of scientific calibration."},{"title":"VDOT creator’s FAQ","url":"https://support.vdoto2.com/v-o2-faq/","note":"First-party explanation distinguishes VDOT from measured VO2max. Equation coefficients are documented from the canonical implementation, not derived from this FAQ. FAQ rechecked 2026-10-21."},{"title":"Riegel, Athletic Records and Human Endurance,1981","url":"https://rrtc.net/Articles/ARHE.pdf","note":"Riegel 1981 primary article; fitted exponents vary. Product default 1.06 is an explicit convention, not a universal accuracy claim. Retained source reviewed 2026-10-16."}]},"annotations":{"readOnlyHint":true,"consequentialHint":false},"name":"VO2 Max Estimator","description":"Estimate a race-derived VDOT fitness index, read its fitness classification, and compare Riegel-predicted race times. This is not a measured VO2 max or a personalized training-pace prescription.","category":"Training & Fitness","method":"POST","endpoint":"/api/calculators/vo2-max-estimator","page":"/calculators/vo2-max-estimator","inputSchema":{"type":"object","required":["distanceMeters","timeSeconds"],"properties":{"distanceMeters":{"type":"number","description":"Race distance in meters.","minimum":0},"timeSeconds":{"type":"number","description":"Race time in seconds.","minimum":0},"gender":{"type":"string","description":"Classification table.","enum":["male","female"],"default":"male"}}},"example":{"distanceMeters":5000,"timeSeconds":1200,"gender":"male"}}}