{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://askcalculators.com/calculator/target-heart-rate-calculator/schema.json",
  "title": "Target Heart Rate Calculator inputs",
  "description": "Estimate maximum heart rate and five training zones with percentage-of-maximum or Karvonen heart-rate-reserve calculations.",
  "type": "object",
  "properties": {
    "age": {
      "title": "Age",
      "type": "number",
      "default": 35,
      "minimum": 10,
      "maximum": 100,
      "x-step": 1,
      "multipleOf": 1,
      "x-suffix": "years"
    },
    "maxMethod": {
      "title": "Maximum heart-rate input",
      "type": "string",
      "default": "estimated",
      "enum": [
        "estimated",
        "tested"
      ],
      "x-optionLabels": {
        "estimated": "Estimate from age",
        "tested": "Use a tested maximum"
      }
    },
    "formula": {
      "title": "Age-based formula",
      "type": "string",
      "default": "tanaka",
      "enum": [
        "tanaka",
        "fox",
        "nes"
      ],
      "x-optionLabels": {
        "tanaka": "Tanaka: 208 − 0.7 × age",
        "fox": "Fox/Haskell: 220 − age",
        "nes": "Nes: 211 − 0.64 × age"
      },
      "x-showWhen": {
        "field": "maxMethod",
        "equals": "estimated"
      }
    },
    "testedMax": {
      "title": "Tested maximum heart rate",
      "type": "number",
      "default": 185,
      "minimum": 60,
      "maximum": 240,
      "x-step": 1,
      "multipleOf": 1,
      "x-suffix": "bpm",
      "x-showWhen": {
        "field": "maxMethod",
        "equals": "tested"
      }
    },
    "useKarvonen": {
      "title": "Use resting heart rate (Karvonen method)",
      "type": "boolean",
      "default": true
    },
    "restingHeartRate": {
      "title": "Resting heart rate",
      "type": "number",
      "default": 60,
      "minimum": 30,
      "maximum": 150,
      "x-step": 1,
      "multipleOf": 1,
      "x-suffix": "bpm",
      "x-showWhen": {
        "field": "useKarvonen",
        "equals": true
      }
    }
  },
  "required": [
    "age",
    "maxMethod"
  ],
  "allOf": [
    {
      "if": {
        "properties": {
          "maxMethod": {
            "const": "estimated"
          }
        },
        "required": [
          "maxMethod"
        ]
      },
      "then": {
        "required": [
          "formula"
        ]
      }
    },
    {
      "if": {
        "properties": {
          "maxMethod": {
            "const": "tested"
          }
        },
        "required": [
          "maxMethod"
        ]
      },
      "then": {
        "required": [
          "testedMax"
        ]
      }
    },
    {
      "if": {
        "properties": {
          "useKarvonen": {
            "const": true
          }
        },
        "required": [
          "useKarvonen"
        ]
      },
      "then": {
        "required": [
          "restingHeartRate"
        ]
      }
    }
  ],
  "additionalProperties": false,
  "x-askcalculators": {
    "version": "2.0.0",
    "calculatorUrl": "https://askcalculators.com/calculator/target-heart-rate-calculator/",
    "queryExample": "https://askcalculators.com/calculator/target-heart-rate-calculator/?age=35&maxMethod=estimated&formula=tanaka&useKarvonen=1&restingHeartRate=60",
    "migrationStatus": "migrated",
    "reviewStatus": "pending",
    "pageStatus": "live",
    "workStatus": "pending",
    "migratedDate": "2026-08-25",
    "formula": {
      "expression": "Age-based MHR uses the selected formula; percentage method = MHR×intensity; Karvonen = resting HR + (MHR−resting HR)×intensity."
    },
    "quality": {
      "availability": "live",
      "technicalReviewRecord": "/reviews/target-heart-rate-calculator.json",
      "qualifiedReview": "pending",
      "qualifiedReviewer": null,
      "qualifiedReviewDate": null,
      "formulaVersion": "2.0.0",
      "referenceCoverage": "references-listed",
      "releaseTestScope": "Catalog and regression checks are not a professional formula audit; consult release evidence.",
      "historicalMetadataDate": "2026-08-25",
      "historicalMetadataNotice": "The imported date is not evidence of a completed human review."
    },
    "outputs": {
      "maxHeartRate": {
        "title": "Maximum heart rate",
        "type": "number",
        "x-format": "integer",
        "x-suffix": " bpm",
        "x-primary": true
      },
      "zone2": {
        "title": "Moderate zone (60–70%)",
        "type": "string",
        "x-format": "text"
      },
      "vigorous": {
        "title": "Vigorous range (70–85%)",
        "type": "string",
        "x-format": "text"
      },
      "method": {
        "title": "Zone method",
        "type": "string",
        "x-format": "text"
      }
    }
  }
}
