ForHosting KIT · Health & fitness

Determine your cardio training zone from heart rate

A heart rate of 152 with a maximum of 190 is 80 % of max, which puts you at the start of zone 4, Threshold. Use the maximum you already trust; the calculator never guesses it from age. Free in your browser.

  • Free
  • Runs in your browser
  • No sign-up
  • Your data stays on your device
Use it from WebAPIEmailTelegramApp soon
If you enter
Current heart rate
152
Max heart rate
190
You get
Percent of max
80
Zone
4
Zone name
Threshold
Intensity range
80–<90%

This heart rate training zone calculator compares a current heart rate with an already computed maximum heart rate and identifies the matching level in the standard five-zone model. It reports the percentage of maximum, zone number, familiar zone name, intensity range, and whether the reading exceeds the supplied maximum. The calculation is deterministic and does not estimate maximum heart rate from age. Use the maximum value produced by your chosen method, test, clinician, coach, or device, then decide explicitly whether readings above that value should be accepted.

Provide the two heart-rate values in the same unit

Enter the current heart rate and the computed maximum heart rate in beats per minute. The current value may come from a chest strap, watch, exercise machine, or a manual pulse count, while the maximum should come from a method you have already chosen. This capability deliberately does not calculate maximum heart rate from age because formulas and measured values answer a different question and can produce different baselines.

Consistency matters more than the source: use the same maximum when comparing sessions or trends. The result includes the current and maximum values, the current rate as a percentage of maximum rounded to two decimal places, a zone number, a descriptive zone name, and the applicable intensity range. Both heart-rate inputs must be finite positive numbers no greater than 400.

A reading below 50% of maximum is returned as zone 0, labeled “Below zone 1,” because it does not fall inside any of the five standard training zones.

Understand the five boundaries and exact cutoff behavior

The classifier uses a percentage-of-maximum model with clear half-open boundaries. Zone 1, Recovery, begins at 50% and continues up to but not including 60%. Zone 2, Endurance, begins at 60% and continues up to but not including 70%.

Zone 3, Aerobic, begins at 70% and continues up to but not including 80%. Zone 4, Threshold, begins at 80% and continues up to but not including 90%. Zone 5, Maximum, begins at 90% and includes 100%.

This means an exact boundary belongs to the higher zone: exactly 60% is zone 2, exactly 70% is zone 3, and exactly 90% is zone 5. Making those comparisons explicit prevents gaps or overlapping answers and keeps repeated calculations stable. These are percentage-of-maximum zones, not heart-rate-reserve or Karvonen zones.

If your training plan uses resting heart rate, lactate threshold, ventilatory threshold, or custom sport-specific bands, its labels and cutoffs may not match this result.

Handle readings above the computed maximum carefully

By default, a current heart rate above the supplied maximum is rejected as invalid input. That behavior catches reversed fields, transcription errors, outdated estimates, and sensor spikes instead of silently presenting an impossible-looking percentage as ordinary training data. An above-maximum result does not prove that the reading is safe or that either number is medically accurate.

A computed maximum is an estimate unless established by an appropriate supervised test, and consumer sensors can misread. Treat the output as classification rather than medical advice. Stop exercising and seek qualified medical guidance when symptoms such as chest pain, faintness, unusual shortness of breath, or palpitations occur, regardless of the zone shown.

Label a live workout reading

Convert a heart-rate sample from a wearable into a consistent zone label for a workout display or training log.

Check interval intensity

Determine whether a measured interval reached the intended percentage-of-maximum zone without recalculating boundaries manually.

Validate imported exercise data

Flag samples above the stored maximum by default, or retain them with an explicit over-max marker during data review.

What does one calculation cost?

The same deterministic calculation can also run in the browser.

Does this calculate my maximum heart rate?

No. Supply a maximum heart rate computed or measured elsewhere; this capability only classifies the current reading against it.

What happens below 50% of maximum?

The result uses zone 0 with the label “Below zone 1,” making it clear that the reading is outside the five standard training zones.

Which zone gets an exact boundary value?

The higher zone gets the boundary. For example, exactly 60% is zone 2 and exactly 90% is zone 5.

Is this medical advice?

No. It is a mathematical classification of supplied values and cannot assess health, sensor accuracy, or whether an exercise intensity is safe for an individual.

Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.

POSThttps://api.kit.forhosting.com/fitness2/cardio-zone-from-hr

Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.

curl -X POST https://api.kit.forhosting.com/fitness2/cardio-zone-from-hr \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"current_heart_rate":152,"max_heart_rate":190}'
{
  "current_heart_rate": 152,
  "max_heart_rate": 190
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "fitness2.cardio_zone_from_hr",
  "status": "queued",
  "_links": {
    "result": "/tasks/tsk_…/result"
  }
}

The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.

Per request$0.002

Published price — no tokens, no invented credits. A failed task is never charged.

HTTPCodeMeaning
401unauthorizedMissing or invalid API key.
402insufficient_balanceYour balance doesn't cover the task price.
404unknown_typeThat task type doesn't exist.
429rate_limitedToo many requests. Use the webhook instead of polling.

Handle readings above the computed maximum carefully

If the reading is intentional, set allow_over_max to true. The result will then use zone 5, show an intensity range of “Above 100%,” preserve the calculated percentage, and set over_max to true so downstream software can distinguish it from an ordinary zone-5 effort.

Can the current heart rate exceed the maximum?

Only when allow_over_max is true. Otherwise the request returns invalid_input; when allowed, the result is zone 5 and over_max is true.

Read the full KIT documentation →