Reference

Can Oxynet read our files?

23 format ids, detected from the file's content. 20 are exports from metabolimeter software or from a laboratory's own profile of it; 3 are Oxynet's own file shapes. This list is generated from the parser that runs in production, so it cannot say more than the parser does.

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

Formats

23 of 23 format ids

VendorExportFileEvidenceFormat id
CORTEXCORTEX export opening with a 'CPET Results' banner.Vendor namedcortex
CORTEXCORTEX export with German headers ('Messzeit').Vendor namedcortex_bruce
CORTEXCORTEX export, 'Patient' header variant.Vendor namedcortex_bruce_2
CORTEXCORTEX export with French headers ('Marqueur').Vendor namedcortex_bruce_3
CORTEXMetaSoft Studio export.Excel-2003 SpreadsheetML (.xml)Vendor namedcortex_metasoft
CORTEX'Metabolic Edit' workbook with its tables side by side.WorkbookVendor namedcortex_periodico
COSMEDCOSMED Omnia export, exercise phase only, with the subject block stripped.A site-specific export profile of Omnia.Vendor namedbrescia
COSMEDCOSMED Omnia export, subject block in the leading columns.Vendor namedcosmed
PNOEPNOE ramp-test export from a rowing ergometer.Semicolon-delimited textVendor namedrowing_ben
VO2 MasterVO2 Master portable analyser export.Vendor namedVO2Master
UnconfirmedStacked named tables (5 s averaged, blood pressure, breath by breath), V′E-style channel names, gases in kPa.Tab-delimited textVendor unconfirmedsectioned_bxb
Vyaire (probable)Tab-delimited text with a Height / Weight / Gender banner.Tab-delimited .txtVendor unconfirmedvyiare
Vyntus / VyaireExport with Italian headers ('Polso O2').Vendor unconfirmedvintus
Not recordedA hospital laboratory export profile.No example file in the corpus to verify the parser against. Send one before relying on it.Lab exportcentro-monzino
Not recordedTime / Load export with a units row and V'E / V'O2 channel names.CSVLab exportlow
Not recordedLaboratory export with a 'Temps' clock column.Lab exportmourot
Not recordedLaboratory export with a French subject banner ('NOM :').Lab exportmourot_cardiac
Not recordedLaboratory export with a 'TEMPS' clock column.Lab exportmourot_COPD
Not recordedGerman-headed export with Zeit / Watt / V_E channels.CSVLab exportunisbz
Not recordedBreath-by-breath workbook with a two-row header.WorkbookLab exportvcu
OxynetOxynet canonical JSON: an id and a list of samples {t, VO2, VCO2, VE, ...}. The format to convert into when nothing else reads a file.JSONOxynet formatexercise_threshold_app
OxynetA synthetic recording generated by Oxynet.Oxynet formatgenerated_pyoxynet
OxynetAn Oxynet-derived research file: one subject per file, split from a cohort workbook.Oxynet formatmonzino_eob

Vendor named: the parser was built on exports from that vendor's software. Vendor unconfirmed: the export's structure is known, its origin is not. Lab export: a laboratory's export profile whose metabolimeter the repository does not record. The authenticated GET /v1/formats returns the same ids with the parser's own labels.

What “supported” means

DetectionAutomatic, from content. Every candidate parser scores the file; one must clear a threshold and beat the runner-up clearly, or the upload is refused rather than guessed.
Units and clocksEach parser knows its format’s units, per-phase clock resets and decimal conventions. Send the export unchanged.
Absent channelsReported as absent, with the reason. Nothing is back-calculated: no work rate from oxygen uptake, for example.
SamplingBreath by breath or interval averaged. The interval the file arrived at is reported.
VersionsA parser was built on example files from specific software versions. Another version of the same vendor’s software may export differently.

The reliable test

One de-identified export from your system. We run it and return what parsed, what did not and why. Send a representative file, or upload it yourself with a key and read the upload summary.

When nothing reads a file

The refusal (UNSUPPORTED_FORMAT) returns the shape to convert into, and that is the one case where converting a file yourself is correct. It is Oxynet's canonical JSON (format id exercise_threshold_app), the same shape as the synthetic samples. At least 40 rows, and t, VO2, VCO2, VE are required.

canonical.json
{
  "id": "a label of your choosing",
  "data": [
    { "t": 0.0, "VO2": 800.0, "VCO2": 700.0, "VE": 15.0,
      "RF": 22.0, "PetO2": 100.0, "PetCO2": 38.0, "HR": 70.0 }
  ]
}
tseconds from the start of the recording
VO2mL/min (not L/min)
VCO2mL/min
VEL/min
RFbreaths/min (optional)
PetO2mmHg (optional)
PetCO2mmHg (optional; required for oscillation analysis)
HRbpm (optional)

Read this

VO2 and VCO2 are in mL/min. A column in L/min copied across unchanged is wrong by a factor of a thousand and nothing downstream will notice. State the mapping and units you assumed wherever the result is used.

Not yet documented

A downloadable example export per vendor. Real exports are health data and none is cleared for publication; the synthetic samples are the only files offered.