ForHosting KIT · Health & fitness

Heart rate zones from reserve

Turns your resting pulse and maximum heart rate into five training zones: with 60 and 190 bpm, recovery runs from 125 to 138 bpm and the top zone from 177 to 190. Each band follows your own reserve, not a flat share of maximum. 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
Hr rest
60
Hr max
190
You get
Hrr
130 bpm
Zone count
5
Zone1 name
recovery
Zone1 pct lo
50

The percent heart-rate-reserve method builds five training zones from the gap between your resting pulse and your maximum heart rate, not from a flat slice of maximum alone. Coaches, PE teachers, and endurance athletes use this percent-HRR layout when both a true resting pulse and a measured or predicted maximum are already known.

How the zones are built from your reserve

Heart rate reserve is the gap between the pulse you sit at and the pulse you reach at a true maximum effort. The calculator subtracts your resting rate from your maximum, takes a share of that reserve for each zone and adds the resting rate back, so every bound is a real pulse you can see on a watch. The five bands are recovery at 50 to 60 percent of reserve, endurance at 60 to 70, tempo at 70 to 80, threshold at 80 to 90 and maximum at 90 to 100. With a resting pulse of 60 and a maximum of 190, the reserve is 130 bpm and recovery begins at 125 bpm.

When to use it and what to check first

Coaches, PE teachers and endurance athletes use this layout when a real resting pulse and a measured or predicted maximum are already known. Because it starts from the resting rate, two athletes who share the same maximum but not the same baseline get different bands, which a flat percentage of maximum would hide. Teachers can print the bpm windows on zone cards after recording a sitting pulse and a field-test peak. The maximum must be higher than the resting pulse, and missing or non-positive values are rejected.

PE classes and club fitness screening days

Teachers record sitting pulse and a field-test peak, then print recovery through maximum bpm windows on zone cards without estimating maximum from age inside this calculator.

Wearable backends and session planners

Server pipelines that already know both heart-rate ends request structured zone1 through zone5 bounds so watches can flag when a session leaves the programmed percent-reserve band.

What is the percent heart-rate-reserve method?

Heart-rate reserve is maximum minus resting pulse. Each zone bound is resting pulse plus a percent of that reserve. The five bands are 50–60%, 60–70%, 70–80%, 80–90%, and 90–100% of reserve, returned as bpm windows.

How is this different from a percentage-of-max zone chart?

A percent-of-max chart ignores resting rate. Percent reserve first subtracts rest from max, so two people with the same ceiling and different baselines receive different training pulses at the same zone label.

Is the heart rate zones from reserve calculator free?

The browser tool runs free on your device.

What are my five zones with a resting pulse of 60 and a maximum of 190?

Recovery is 125 to 138 bpm, endurance 138 to 151, tempo 151 to 164, threshold 164 to 177 and maximum 177 to 190. They come from a reserve of 130 bpm split into 50 to 100 percent bands.

Which resting pulse and maximum should I use?

A true resting pulse, such as one taken while sitting quietly, and a maximum you have measured, for example in a field test, or one you already have from a prediction. The calculator does not estimate either value for you.

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/health/hr-zones-percent-hrr

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/health/hr-zones-percent-hrr \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"hr_rest":60,"hr_max":190}'
{
  "hr_rest": 60,
  "hr_max": 190
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "health.hr_zones_percent_hrr",
  "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.

This heart rate zones from reserve calculator accepts required hr_rest and hr_max in beats per minute, subtracts rest from max to obtain reserve, then maps the classic fifty-to-sixty, sixty-to-seventy, seventy-to-eighty, eighty-to-ninety, and ninety-to-one-hundred percent bands onto that reserve and adds resting rate back so every bound is a real training pulse. The path is pure arithmetic with no network and no random seed, so homework checkers, training logs, and prepaid API clients receive identical JSON every time. Missing required fields, non-finite values, non-positive bpm, or a maximum that is not strictly above rest all fail with invalid_input and are not charged.

What the percent-reserve method measures and which inputs you need

Heart-rate reserve is the gap between the pulse you sit at and the pulse you can reach at a true maximum effort. The percent-reserve method, widely taught as the Karvonen-style percent-HRR layout, does not take a flat percentage of maximum heart rate. It first subtracts resting rate from maximum to obtain reserve, multiplies that reserve by a zone fraction, and adds resting rate back so two athletes who share the same ceiling but not the same baseline get different training bands. The engine then places five adjacent coaching bands on that reserve: recovery at fifty to sixty percent, endurance at sixty to seventy, tempo at seventy to eighty, threshold at eighty to ninety, and maximum at ninety to one hundred percent of heart-rate reserve. Send required hr_rest as a positive finite resting pulse in beats per minute; aliases hrrest, rest_hr, resting_hr, resting_heart_rate, and rhr are accepted. Send required hr_max as a positive finite maximum pulse; aliases hrmax, max_hr, maximum_heart_rate, and hrm are accepted. Maximum must be strictly greater than rest—equal or inverted rates cannot describe a positive reserve and fail with invalid_input. Identical inputs always yield identical JSON because the algorithm never touches the network, a model, a clock, or a random generator. Missing fields, empty strings, non-finite values, non-positive bpm, unrealistic rates above the isolate ceiling, and inverted pairs all fail with invalid_input and are not charged.

Reading the five zones and how each bound is computed

Use a true morning resting pulse after several minutes of quiet sitting, not a mid-day walking average. On success the response echoes hr_rest and hr_max after normalisation, reports hrr as heart-rate reserve in beats per minute, and sets unit to bpm so UIs can label numbers without hard-coding strings. The method field is always percent_hrr and formula restates zone bpm equals resting rate plus percent times the gap between maximum and rest. zone_count is five. Each zone is also flattened for forms and dashboards: zone1_name through zone5_name hold recovery, endurance, tempo, threshold, and maximum; zoneN_pct_lo and zoneN_pct_hi hold the percent-of-reserve edges; zoneN_bpm_lo and zoneN_bpm_hi hold the matching pulses. The zones array repeats the same five records in order, each with zone, name, pct_lo, pct_hi, bpm_lo, and bpm_hi, so a table renderer can walk one list. Adjacent bands share a boundary by design: the top of recovery is the bottom of endurance, and so on up to maximum, which always ends at hr_max because one hundred percent of reserve plus rest is the ceiling you supplied. Prefer a measured peak from a maximal field or lab effort when you have one; if you only have an age-predicted ceiling, compute that client-side and pass the result as hr_max so this engine stays a pure reserve transform. Do not confuse this endpoint with a single Karvonen target at one intensity, with a percentage-of-max chart that ignores rest, or with age-only maximum estimators: those are different search intents and live in separate products.

API usage, pricing, coaching workflows, and practical limits

Call the free in-browser heart rate zones from reserve calculator for PE classes, club fitness days, and quick athlete checks without rebuilding the five-band percent-HRR table in a spreadsheet. Keep expectations educational: this is a planning and learning tool, not a diagnostic medical device, and people with cardiac conditions, medications that alter heart rate, or physician restrictions should follow professional advice rather than any single five-zone chart alone. Send a JSON body with required hr_rest and hr_max in beats per minute. Use the prepaid API when a coaching SaaS, wearable companion, school LMS, or training log needs a stable contract under KIT balance at $0.002 per successful item; validation failures never consume balance after the engine rejects the request. Pair this endpoint with your own resting-pulse protocol and an honest maximum source, then store the five bpm windows alongside date and conditions for session cards that say stay in endurance or climb into threshold. If your UI already collects resting_hr and max_hr under those names, send the documented aliases—the engine accepts them without a second mapping layer. Authors shipping SDKs can map zone1_bpm_lo through zone5_bpm_hi or the zones array into dashboards and export CSV columns labeled recovery, endurance, tempo, threshold, and maximum—the same numbers coaches compute by hand after recording rest and max bpm.

Coaching apps that already store rest and max HR

Training platforms that already hold a measured resting pulse and a peak heart rate call this endpoint for five percent-HRR bands instead of reimplementing reserve arithmetic in every client language.

Which inputs are required?

Required fields are hr_rest and hr_max, both positive finite bpm values, with maximum strictly greater than rest. Aliases such as rhr, resting_hr, max_hr, and hrm are accepted. Missing required fields fail with invalid_input.

Does this estimate maximum heart rate from age?

No. You supply hr_max yourself, measured or predicted elsewhere. This product only maps five percent-of-reserve bands onto the rest-to-max gap you provide.

Read the full KIT documentation →