Reference

Analysis catalogue

What Oxynet measures in a CPET, and how much weight each measurement will bear. Every entry states what it needs, what it returns, the evidence behind it and where it stops.

API v1 · docs 1.0 · updated 2026-09-22

Read with every row

Nothing here is calibrated against clinical outcomes, and no output carries a confidence score. What has been measured is agreement with expert labelling, which is a different claim. Oxynet is research software, not a medical device, and its output is not a diagnosis.

Production

Answering on the live API, with the evaluation that let each model ship stored beside it.

Ventilatory thresholds (VT1, VT2)

Production

The first and second ventilatory thresholds, located by a convolutional network over the breath series.

Needs
Time, V̇O₂, V̇CO₂, V̇E, PetO₂, PetCO₂. The channels a given model needs are checked before it runs.
Returns
vt1_time_s, vt2_time_s, vt1_vo2_ml_min, vt2_vo2_ml_min, with the model and version that produced them.
Evidence
Agreement with expert labelling across cohorts that differ in population, protocol, ergometer and metabolimeter, in peer-reviewed work. The longest record of any capability.
Limits
Agreement with expert raters, not calibration against outcomes: no confidence score is returned. A missing gas channel is refused, not substituted.
Call
POST /v1/cpet/{id}/analyze {"analyses": ["vt"]}

Exercise intensity domains

Production

Moderate, heavy and severe domain probabilities per second, from the same network as the thresholds.

Needs
As for thresholds.
Returns
Three class probabilities per second; the thresholds are where they cross.
Evidence
As for thresholds: the same model.
Limits
Not returned by /v1/analyze, which returns the thresholds only.
Where
Shown in the web application at app.oxynet.net.

Substrate use and FATMAX

Production

Fat and carbohydrate oxidation by indirect calorimetry, FATMAX, the crossover to carbohydrate, and gross efficiency.

Needs
V̇O₂ and V̇CO₂. A work-rate channel adds a wattage axis and gross efficiency; without one it runs against %V̇O₂peak.
Returns
Windowed oxidation rates, FATMAX (a fitted turning point, not a measured sample), crossover, efficiency, and flags.
Evidence
Standard stoichiometry (Frayn 1983; Jeukendrup and Wallis 2001), with the equations returned in the response.
Limits
Above RER 1.0 the fat rate is an upper bound, not a measurement. A ramp never reaches steady state, so FATMAX reads high and is not comparable with a graded test. Both are flagged.
Call
POST /v1/cpet/{id}/analyze {"analyses": ["substrate"]} (or the substrate_summary metric)

Derived CPET quantities

Production

Peak values, O₂ pulse, the V̇E/V̇CO₂ slope profile, rest / warm-up / exercise / recovery phases, and classical landmarks.

Needs
Per metric; GET /v1/metrics states each one’s required channels and minimum duration.
Returns
vo2max, vemax, rermax, o2_pulse, ve_vco2_slope (over 25/50/75/100 % of exercise, with intervals), phases, landmarks, substrate_summary.
Evidence
Deterministic computations on the recording’s own signal.
Limits
Landmarks (V-slope, respiratory compensation, V̇E/V̇CO₂ nadir, PetCO₂ peak) corroborate and never override a model. Phase boundaries carry an error of tens of seconds.
Call
POST /v1/cpet/{id}/compute {"metrics": [...]}

Signal integrity

Production

Whether the recording can support a measurement at all: cross-channel agreement of the gas analysis, the band the sampling can resolve, and clock repair.

Needs
Any parsed recording.
Returns
gas_quality, sampling_adequacy, clock_integrity; channel presence, coverage and parser flags in the upload summary.
Evidence
Physiological consistency checks: CO₂ output against ventilation, end-tidal O₂ against CO₂.
Limits
An absent check is not a passed one: n_checks says how many were runnable.
Call
GET /v1/cpet/{id} and POST /v1/cpet/{id}/compute

Vendor format parsing

Production

Reads the export as the cart wrote it, with each format’s units, clock resets and decimal conventions.

Needs
The unchanged export file.
Returns
A cpet_id, and a summary of what was parsed and what is absent, with reasons.
Evidence
Detection is scored from content and refuses when no candidate is clearly best.
Limits
Some formats rest on few example files; the formats page says which. A different software version may not parse.
Call
POST /v1/cpet

Research

Running, and not yet shown to transport to a new population. Treat outputs as research findings.

Oscillatory ventilation (EOV) and the ventilatory control loop

Research

A continuous wavelet detector for oscillatory breathing, its grade and burden, and the loop gain of the chemoreflex behind it.

Needs
V̇E and PetCO₂ (at least 80 % coverage) over at least 128 s. Breathing frequency separates rate from volume drive.
Returns
Grade and burden, events with period and amplitude, CO₂ coupling, the loop-gain margin, gas quality.
Evidence
Developed on a single heart-failure cohort of 44 patients.
Limits
Beta. Transportability to any other population is untested. Treat every output as a research finding.
Call
POST /v1/cpet/{id}/analyze {"analyses": ["eov"]}

Alternative threshold engine

Research

A second threshold model offered as a second opinion.

Needs
As for thresholds.
Returns
VT1 and VT2.
Evidence
Built and checked on a single group of 100 clinical tests.
Limits
Not tested anywhere else. Deliberately not on the API or MCP.
Where
In the web application only, marked beta.

Self-supervised pretraining

Research

Pretraining on unlabelled recordings.

Needs
Not applicable.
Returns
None exposed.
Evidence
In development.
Limits
In no promoted model, and not reachable from any interface.

How a model reaches production

A threshold model is promoted only after evaluation on a cohort it never saw, on both axes, clearing all four of: V̇O₂ bias ≤ 120 mL/min, V̇O₂ correlation ≥ 0.80, time bias ≤ 60 s, time correlation ≥ 0.80. Every promoted model ships with the evaluation that let it through, and its name and version are in the provenance of every result it produces.