{
  "name": "HeartCalc API",
  "api_version": "1.0.0",
  "site": "https://heartcalc.doctorarichai.com",
  "openapi": "https://heartcalc.doctorarichai.com/openapi.json",
  "mcp": "https://heartcalc.doctorarichai.com/mcp",
  "developers": "https://heartcalc.doctorarichai.com/developers",
  "usage": "GET with query parameters or POST a JSON object. Parameter names equal the form ids on each page, so the same query string prefills the web calculator. state is ok, missing, not_applicable or invalid (all HTTP 200); HTTP 400 only for malformed requests (bad JSON, unknown enum value).",
  "tools": [
    {
      "id": "cath",
      "name": "Cath Hemodynamics",
      "status": "verified",
      "version": "1.0.0",
      "summary": "Fick flows and resistances from cath saturations and pressures: predicted or measured VO2, Qp, Qs, Qep, Qp:Qs, PVR/PVRi, SVR/SVRi, Rp:Rs, optional differential lung perfusion correction.",
      "description": "Pediatric and congenital cardiac catheterization Fick calculator (any age). Predicted VO2 by Seckeler (all ages; adjusts for single ventricle and ICU), Lundell (any age; separate under/over 3 y equations) or LaFarge (3 y and older), or a measured VO2 or a typed VO2 index. Computes Qs, Qp, Qep (L/min and indexed L/min/m2), Qp:Qs, TPG, PVR/PVRi and SVR/SVRi (Wood units, WU and WU·m2), Rp:Rs and, when requested, per-lung flow and PVRi for unequal right/left lung perfusion. Saturations are percent, pressures are MEAN pressures in mmHg, hemoglobin g/dL, height cm, weight kg. BSA is Mosteller unless bsaOv is given. Pulmonary vein saturation is assumed 98% when blank (flagged). Dissolved oxygen is ignored, so accuracy falls on supplemental oxygen. Predicted VO2 carries wide individual error (SD about 28 to 39 mL/min/m2); a measured VO2 is preferred and overrides everything. Qp:Qs does not depend on VO2; flows and resistances do.",
      "endpoint": "https://heartcalc.doctorarichai.com/api/v1/cath",
      "page": "https://heartcalc.doctorarichai.com/cath",
      "mcp_tool": "calculate_cath_hemodynamics",
      "parameters": [
        {
          "name": "dob",
          "type": "date",
          "label": "Date of birth",
          "description": "Date of birth (YYYY-MM-DD). Prefer ageY/ageM/ageD: AI assistants should not send dates of birth. With cathDate, age = days / 365.25 and overrides ageY/ageM/ageD.",
          "group": "Patient",
          "privacy": "Avoid: send an age instead."
        },
        {
          "name": "cathDate",
          "type": "date",
          "label": "Cath date",
          "description": "Cath date (YYYY-MM-DD), used only with dob. Defaults to today (UTC) when dob is given.",
          "group": "Patient"
        },
        {
          "name": "ageY",
          "type": "number",
          "label": "Age (years)",
          "description": "Age, whole years (decimals accepted). Age = ageY + ageM/12 + ageD/365.25. Needed for predicted VO2.",
          "group": "Patient",
          "unit": "years",
          "min": 0
        },
        {
          "name": "ageM",
          "type": "number",
          "label": "Age (months)",
          "description": "Additional months of age.",
          "group": "Patient",
          "unit": "months",
          "min": 0
        },
        {
          "name": "ageD",
          "type": "number",
          "label": "Age (days)",
          "description": "Additional days of age (useful for neonates).",
          "group": "Patient",
          "unit": "days",
          "min": 0
        },
        {
          "name": "sex",
          "type": "enum",
          "label": "Sex",
          "description": "M or F. Used by Lundell (3 y and older) and LaFarge.",
          "group": "Patient",
          "enum": [
            "M",
            "F"
          ]
        },
        {
          "name": "ht",
          "type": "number",
          "label": "Height",
          "description": "Height in cm (BSA by Mosteller; Lundell under 3 y).",
          "group": "Patient",
          "unit": "cm"
        },
        {
          "name": "wt",
          "type": "number",
          "label": "Weight",
          "description": "Weight in kg (BSA by Mosteller; Seckeler; Lundell under 3 y).",
          "group": "Patient",
          "unit": "kg"
        },
        {
          "name": "bsaOv",
          "type": "number",
          "label": "BSA override",
          "description": "Body surface area in m2; overrides the Mosteller BSA from height and weight.",
          "group": "Patient",
          "unit": "m²"
        },
        {
          "name": "hgb",
          "type": "number",
          "label": "Hemoglobin",
          "description": "Hemoglobin in g/dL. O2 capacity = 13.6 x Hgb mL O2/L. Required for flows.",
          "group": "Patient",
          "unit": "g/dL"
        },
        {
          "name": "vo2Method",
          "type": "enum",
          "label": "VO2 source",
          "description": "VO2 source when no measured VO2 is given: seckeler (default; all ages), auto (Lundell under 3 y, LaFarge from 3 y), lundell, lafarge (3 y and older only), or manual (use vo2i). If omitted: manual when vo2i is given, otherwise seckeler (as the page's prefill links do).",
          "group": "VO2",
          "enum": [
            "seckeler",
            "auto",
            "lundell",
            "lafarge",
            "manual"
          ],
          "default": "seckeler"
        },
        {
          "name": "sv",
          "type": "boolean",
          "label": "Single ventricle anatomy",
          "description": "Single ventricle anatomy (Seckeler: -9.6 mL/min/m2).",
          "group": "VO2"
        },
        {
          "name": "ci",
          "type": "boolean",
          "label": "Critically ill (ICU patient)",
          "description": "Critically ill / ICU patient (Seckeler: -11.2 mL/min/m2).",
          "group": "VO2"
        },
        {
          "name": "hr",
          "type": "number",
          "label": "Heart rate",
          "description": "Heart rate in beats/min (Lundell and LaFarge only).",
          "group": "VO2",
          "unit": "bpm"
        },
        {
          "name": "vo2i",
          "type": "number",
          "label": "VO2 index",
          "description": "VO2 index in mL/min/m2, used only when vo2Method = manual.",
          "group": "VO2",
          "unit": "mL/min/m²"
        },
        {
          "name": "vo2abs",
          "type": "number",
          "label": "Measured VO2",
          "description": "Measured VO2 in mL/min. Overrides every predicted or manual value.",
          "group": "VO2",
          "unit": "mL/min"
        },
        {
          "name": "sao2",
          "type": "number",
          "label": "Systemic arterial saturation",
          "description": "Systemic arterial O2 saturation, %.",
          "group": "Saturations",
          "unit": "%"
        },
        {
          "name": "mvDirect",
          "type": "number",
          "label": "Mixed venous saturation",
          "description": "Mixed venous O2 saturation, % (as entered; no SVC/IVC formula is applied).",
          "group": "Saturations",
          "unit": "%"
        },
        {
          "name": "pa",
          "type": "number",
          "label": "Pulmonary artery saturation",
          "description": "Pulmonary artery O2 saturation, %.",
          "group": "Saturations",
          "unit": "%"
        },
        {
          "name": "pv",
          "type": "number",
          "label": "Pulmonary vein saturation",
          "description": "Pulmonary vein O2 saturation, %. 98% is assumed when blank (reported as an assumption).",
          "group": "Saturations",
          "unit": "%"
        },
        {
          "name": "mAo",
          "type": "number",
          "label": "Mean aortic pressure",
          "description": "Mean aortic pressure, mmHg.",
          "group": "Mean pressures",
          "unit": "mmHg"
        },
        {
          "name": "mRA",
          "type": "number",
          "label": "Mean right atrial pressure",
          "description": "Mean right atrial pressure, mmHg.",
          "group": "Mean pressures",
          "unit": "mmHg"
        },
        {
          "name": "mPA",
          "type": "number",
          "label": "Mean pulmonary artery pressure",
          "description": "Mean pulmonary artery pressure, mmHg.",
          "group": "Mean pressures",
          "unit": "mmHg"
        },
        {
          "name": "mLA",
          "type": "number",
          "label": "Mean left atrial / PCWP pressure",
          "description": "Mean left atrial or pulmonary capillary wedge pressure, mmHg.",
          "group": "Mean pressures",
          "unit": "mmHg"
        },
        {
          "name": "diffOn",
          "type": "boolean",
          "label": "Differential lung perfusion correction",
          "description": "Correct for unequal right and left lung flow (lung perfusion scan or MRI flow split, branch PA stenosis, unilateral pulmonary vein disease). If omitted, it is turned on when any of pctR, mRPA, mLPA, rpv or lpv is given (as the page's prefill links do).",
          "group": "Differential lung perfusion"
        },
        {
          "name": "pctR",
          "type": "number",
          "label": "Right lung flow",
          "description": "Right lung share of pulmonary flow, % (strictly between 0 and 100). Left = 100 - right. Used only with diffOn.",
          "group": "Differential lung perfusion",
          "unit": "%",
          "min": 0,
          "max": 100
        },
        {
          "name": "mRPA",
          "type": "number",
          "label": "Mean RPA pressure",
          "description": "Mean right PA pressure, mmHg (main PA pressure if blank). Used only with diffOn.",
          "group": "Differential lung perfusion",
          "unit": "mmHg"
        },
        {
          "name": "mLPA",
          "type": "number",
          "label": "Mean LPA pressure",
          "description": "Mean left PA pressure, mmHg (main PA pressure if blank). Used only with diffOn.",
          "group": "Differential lung perfusion",
          "unit": "mmHg"
        },
        {
          "name": "rpv",
          "type": "number",
          "label": "Right pulmonary vein saturation",
          "description": "Right pulmonary vein saturation, % (PV sat if blank). Used only with diffOn.",
          "group": "Differential lung perfusion",
          "unit": "%"
        },
        {
          "name": "lpv",
          "type": "number",
          "label": "Left pulmonary vein saturation",
          "description": "Left pulmonary vein saturation, % (PV sat if blank). Used only with diffOn.",
          "group": "Differential lung perfusion",
          "unit": "%"
        }
      ]
    },
    {
      "id": "scd",
      "name": "Sudden Cardiac Death Risk (HCM)",
      "status": "verified",
      "version": "1.0.0",
      "summary": "Hypertrophic cardiomyopathy 5-year sudden cardiac death risk: HCM Risk-Kids (age 1-16) and HCM Risk-SCD (age 16-80), chosen by age, plus the 2024 AHA/ACC ICD recommendation rows.",
      "description": "For patients with hypertrophic cardiomyopathy (HCM), primary prevention, at baseline evaluation. Age in completed years chooses the model: under 1 none; 1-15 HCM Risk-Kids (Norrish 2019); 16 both; 17-80 HCM Risk-SCD (O'Mahony 2014, as in the AHA calculator); over 80 none. HCM Risk-Kids needs sex, weight (kg), maximal LV wall thickness and LA diameter in mm (converted to Z scores exactly as hcmriskkids.org) or PHN/Neilan Z scores (mode = z), maximal LVOT gradient (mmHg), unexplained syncope and NSVT. HCM Risk-SCD needs wall thickness (10-35 mm), LA diameter (28-67 mm), LVOT gradient (2-154 mmHg), family history of SCD, syncope and NSVT. Risk groups: low <4%, intermediate 4 to <6%, high >=6% (ESC 2023 thresholds). Neither model applies after prior VF/sustained VT/cardiac arrest (secondary prevention), in syndromic/metabolic/neuromuscular HCM, in infant-onset HCM (Risk-Kids) or in competitive athletes (Risk-SCD); the response then says not_applicable with the reason. The 2024 AHA/ACC rows additionally need fh50, massive (children) or the wall thickness (adults), aneur, lvef and lge. Prefer age (ageY) to a date of birth.",
      "endpoint": "https://heartcalc.doctorarichai.com/api/v1/scd",
      "page": "https://heartcalc.doctorarichai.com/scd",
      "mcp_tool": "calculate_hcm_scd_risk",
      "parameters": [
        {
          "name": "dob",
          "type": "date",
          "label": "Date of birth",
          "description": "Date of birth (YYYY-MM-DD). Prefer ageY: AI assistants should not send dates of birth. With evalDate it overrides ageY (completed years plus fraction).",
          "group": "Patient",
          "privacy": "Avoid: send an age instead."
        },
        {
          "name": "evalDate",
          "type": "date",
          "label": "Evaluation date",
          "description": "Evaluation date (YYYY-MM-DD), used only with dob. Defaults to today (UTC) when dob is given.",
          "group": "Patient"
        },
        {
          "name": "ageY",
          "type": "number",
          "label": "Age",
          "description": "Age in years (decimals allowed). Completed years choose the model: <1 none, 1-15 HCM Risk-Kids, 16 both, 17-80 HCM Risk-SCD, >80 none.",
          "group": "Patient",
          "unit": "years",
          "min": 0
        },
        {
          "name": "sex",
          "type": "enum",
          "label": "Sex",
          "description": "male or female. HCM Risk-Kids, mm mode only (LA diameter Z score is sex-specific).",
          "group": "Patient",
          "enum": [
            "male",
            "female"
          ]
        },
        {
          "name": "wt",
          "type": "number",
          "label": "Weight",
          "description": "Weight in kg (HCM Risk-Kids, mm mode; accepted 2-150 kg). BSA = 0.1023 x weight^0.68 (hcmriskkids.org formula, not Mosteller).",
          "group": "Patient",
          "unit": "kg"
        },
        {
          "name": "priorArrest",
          "type": "boolean",
          "label": "Prior VF, sustained VT, resuscitated cardiac arrest or appropriate ICD shock",
          "description": "Secondary prevention. Both models then do not apply; 2024 AHA/ACC: ICD recommended (Class 1).",
          "group": "Applicability"
        },
        {
          "name": "infantOnset",
          "type": "boolean",
          "label": "HCM diagnosed before 1 year of age",
          "description": "Infant-onset HCM: HCM Risk-Kids does not apply.",
          "group": "Applicability"
        },
        {
          "name": "syndromic",
          "type": "boolean",
          "label": "Syndromic, metabolic or neuromuscular cause",
          "description": "RASopathy (Noonan), Pompe, Anderson-Fabry, other inborn errors of metabolism, Friedreich ataxia: neither model applies.",
          "group": "Applicability"
        },
        {
          "name": "athlete",
          "type": "boolean",
          "label": "Elite or competitive athlete",
          "description": "HCM Risk-SCD does not apply to elite or competitive athletes.",
          "group": "Applicability"
        },
        {
          "name": "septal",
          "type": "boolean",
          "label": "Prior myectomy or alcohol septal ablation",
          "description": "Adds the AHA calculator caution for HCM Risk-SCD after septal reduction.",
          "group": "Applicability"
        },
        {
          "name": "mode",
          "type": "enum",
          "label": "HCM Risk-Kids input",
          "description": "HCM Risk-Kids input: mm (default; measurements converted to Z as hcmriskkids.org does) or z (Z scores entered in mwtZ/laZ). HCM Risk-SCD always uses mm. If omitted, z is used when mwtZ or laZ is given without mwtMm or laMm (as the page's prefill links do).",
          "group": "Echo",
          "enum": [
            "mm",
            "z"
          ],
          "default": "mm"
        },
        {
          "name": "mwtMm",
          "type": "number",
          "label": "Maximal LV wall thickness",
          "description": "Maximal LV wall thickness, mm (2D echo). Risk-Kids accepts 4-70; Risk-SCD 10-35. Adults: >=30 mm counts as massive LVH for the AHA rows.",
          "group": "Echo",
          "unit": "mm"
        },
        {
          "name": "laMm",
          "type": "number",
          "label": "Left atrial diameter",
          "description": "Left atrial diameter, mm (M-mode or 2D, parasternal long axis). Risk-Kids accepts 3-80; Risk-SCD 28-67.",
          "group": "Echo",
          "unit": "mm"
        },
        {
          "name": "mwtZ",
          "type": "number",
          "label": "MWT Z score",
          "description": "Maximal wall thickness Z score, BSA-adjusted PHN (Lopez 2017) reference only; mode = z. Accepted -5 to 60.",
          "group": "Echo",
          "unit": "Z (PHN)"
        },
        {
          "name": "laZ",
          "type": "number",
          "label": "LA diameter Z score",
          "description": "LA diameter Z score, Neilan 2009 reference only; mode = z. Accepted -6 to 20.",
          "group": "Echo",
          "unit": "Z (Neilan)"
        },
        {
          "name": "lvot",
          "type": "number",
          "label": "Maximal LVOT gradient",
          "description": "Maximal LVOT gradient at rest or Valsalva, mmHg. Risk-Kids accepts 0-200 (0 valid); Risk-SCD 2-154.",
          "group": "Echo",
          "unit": "mmHg"
        },
        {
          "name": "syncope",
          "type": "enum",
          "label": "Unexplained syncope",
          "description": "Unexplained syncope (yes/no). Used by both models and the AHA rows.",
          "group": "History",
          "enum": [
            "yes",
            "no"
          ]
        },
        {
          "name": "nsvt",
          "type": "enum",
          "label": "Non-sustained VT",
          "description": "Non-sustained VT on ambulatory ECG, >=3 beats at >=120 bpm, <30 s (yes/no). Used by both models and the AHA rows.",
          "group": "History",
          "enum": [
            "yes",
            "no"
          ]
        },
        {
          "name": "fh",
          "type": "enum",
          "label": "Family history of SCD (HCM Risk-SCD definition)",
          "description": "HCM Risk-SCD (ESC 2014) family history of SCD: >=1 first-degree relative under 40 y, or a first-degree relative with confirmed HCM at any age (yes/no). Adult model only.",
          "group": "History",
          "enum": [
            "yes",
            "no"
          ]
        },
        {
          "name": "fh50",
          "type": "enum",
          "label": "Family history of HCM-related sudden death (<=50 y)",
          "description": "2024 AHA/ACC: sudden death definitively or likely attributable to HCM in >=1 first-degree or close relatives aged <=50 (yes/no).",
          "group": "2024 AHA/ACC",
          "enum": [
            "yes",
            "no"
          ]
        },
        {
          "name": "massive",
          "type": "enum",
          "label": "Massive LVH (child)",
          "description": "2024 AHA/ACC, under 16 y only: massive LVH by clinician judgement (no fixed threshold; Z >=20, or >10 with other risk factors, appears reasonable). Adults derive it from mwtMm >= 30.",
          "group": "2024 AHA/ACC",
          "enum": [
            "yes",
            "no"
          ]
        },
        {
          "name": "aneur",
          "type": "enum",
          "label": "LV apical aneurysm",
          "description": "2024 AHA/ACC: LV apical aneurysm (yes/no).",
          "group": "2024 AHA/ACC",
          "enum": [
            "yes",
            "no"
          ]
        },
        {
          "name": "lvef",
          "type": "enum",
          "label": "LVEF <50%",
          "description": "2024 AHA/ACC: LV systolic dysfunction, EF <50% (yes/no).",
          "group": "2024 AHA/ACC",
          "enum": [
            "yes",
            "no"
          ]
        },
        {
          "name": "lge",
          "type": "enum",
          "label": "Extensive LGE on CMR",
          "description": "2024 AHA/ACC: extensive LGE on CMR, >=15% of LV mass: yes, no or notdone.",
          "group": "2024 AHA/ACC",
          "enum": [
            "yes",
            "no",
            "notdone"
          ]
        }
      ]
    },
    {
      "id": "neonatal-bp",
      "name": "Neonatal Blood Pressure",
      "status": "verified",
      "version": "1.0.0",
      "summary": "Systolic blood pressure centiles for babies born at 23+0 to 41+6 weeks, from birth through the first year (NNNI 1999 reconstruction), and the percentile of one systolic reading.",
      "description": "For newborn and preterm infants born at 23+0 to 41+6 weeks gestation, from birth (day 0) to 365 days of postnatal age. Give gestation at birth (gaW whole weeks + gaD days 0-6) and age, either as postnatal days (mode = pna, pna; day of birth = 0, fractions allowed) or as postmenstrual age (mode = pma, pmaW + pmaD). Returns the mean systolic BP, SD, coefficient of variation and the 3rd/10th/50th/75th/90th/95th/97th centiles in mm Hg; with sbp (systolic reading, mm Hg, accepted 10-200) also its z-score, percentile and band (below 3rd, 3rd-10th, 10th-90th, 90th-97th, above 97th). The reference is systolic only and was measured by Doppler; centiles are RECONSTRUCTED from the paper's stated values and figures (approximate). It does not diagnose hypotension or hypertension and does not cover diastolic or mean pressure. Older than one year is not applicable (use the AAP 2017 pediatric guideline). Gestation below 23 or 42 weeks and above is not applicable.",
      "endpoint": "https://heartcalc.doctorarichai.com/api/v1/neonatal-bp",
      "page": "https://heartcalc.doctorarichai.com/neonatal-bp",
      "mcp_tool": "calculate_neonatal_bp",
      "parameters": [
        {
          "name": "gaW",
          "type": "number",
          "label": "Gestational age at birth (weeks)",
          "description": "Gestational age at birth, completed weeks (whole number, 23-41).",
          "group": "Gestation at birth",
          "unit": "weeks",
          "min": 23,
          "max": 41
        },
        {
          "name": "gaD",
          "type": "number",
          "label": "Gestational age at birth (days)",
          "description": "Additional days of gestation at birth (whole number 0-6; blank = 0).",
          "group": "Gestation at birth",
          "unit": "days",
          "min": 0,
          "max": 6
        },
        {
          "name": "mode",
          "type": "enum",
          "label": "Enter age as",
          "description": "How age is given: pna (postnatal days, default) or pma (postmenstrual age in weeks + days). If omitted, pma is used when pmaW or pmaD is given without pna (as the page's prefill links do).",
          "group": "Age now",
          "enum": [
            "pna",
            "pma"
          ],
          "default": "pna"
        },
        {
          "name": "pna",
          "type": "number",
          "label": "Postnatal age (days)",
          "description": "Postnatal age in days; day of birth = 0; fractions allowed (0.5 = 12 hours). Used when mode = pna.",
          "group": "Age now",
          "unit": "days",
          "min": 0,
          "max": 365
        },
        {
          "name": "pmaW",
          "type": "number",
          "label": "Postmenstrual age (weeks)",
          "description": "Postmenstrual age, completed weeks (whole number). Used when mode = pma.",
          "group": "Age now",
          "unit": "weeks",
          "min": 23
        },
        {
          "name": "pmaD",
          "type": "number",
          "label": "Postmenstrual age (days)",
          "description": "Additional days of postmenstrual age (whole number 0-6; blank = 0). Used when mode = pma.",
          "group": "Age now",
          "unit": "days",
          "min": 0,
          "max": 6
        },
        {
          "name": "sbp",
          "type": "number",
          "label": "Systolic BP",
          "description": "Optional systolic blood pressure reading in mm Hg (10-200). Without it, only the reference centiles are returned.",
          "group": "Reading",
          "unit": "mm Hg",
          "min": 10,
          "max": 200
        }
      ]
    }
  ],
  "disclaimer": "Decision support only; verify against the primary references and clinical judgement. Inputs are not stored."
}