{"openapi":"3.1.0","info":{"title":"Heart Rate Zone API","version":"1.0.0","description":"Heart-rate training maths as an API. The max-heart-rate endpoint estimates maximum heart rate from age by the three common formulas — Fox (220 − age), Tanaka (208 − 0.7 × age) and Gulati (206 − 0.88 × age, validated for women). The zones endpoint returns the five training zones (recovery, endurance, aerobic, threshold and maximal) as beats-per-minute ranges, computed either as a simple percentage of the maximum heart rate or, when you give a resting heart rate, by the more accurate Karvonen heart-rate-reserve method. The target endpoint computes the target heart rate for any intensity, by percentage of max or by Karvonen. You can pass an age (and choose a formula) or give your own measured max heart rate. Everything is computed locally and deterministically, so it is instant and private. Ideal for fitness and running apps, wearables and gym equipment, coaching tools, and cardio training programmes. Informational only — not medical advice. Pure local computation — no key, no third-party service, instant. Live, nothing stored. 4 endpoints. This is heart-rate maths; for BMI, BMR and calories use a health-calculator API and for running pace use a pace API.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/heartrate-api","description":"oanor gateway"}],"tags":[{"name":"Heart Rate"},{"name":"Meta"}],"components":{"securitySchemes":{"oanorKey":{"type":"apiKey","in":"header","name":"x-oanor-key","description":"Get your key at https://www.oanor.com/developer/keys"}}},"security":[{"oanorKey":[]}],"paths":{"/v1/max-heart-rate":{"get":{"operationId":"get_v1_max_heart_rate","tags":["Heart Rate"],"summary":"Estimate max heart rate","description":"","parameters":[{"name":"age","in":"query","required":true,"description":"Age in years","schema":{"type":"string"},"example":"30"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"age":30,"formulas":{"fox":{"note":"220 − age (classic, most common)","value":190},"gulati":{"note":"206 − 0.88 × age (validated for women)","value":180},"tanaka":{"note":"208 − 0.7 × age","value":187}},"max_heart_rate_bpm":190},"meta":{"timestamp":"2026-06-03T17:42:08.651Z","request_id":"3de82ff3-b609-4f06-a86e-e481ab32fb88"},"status":"ok","message":"Max heart rate","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/target":{"get":{"operationId":"get_v1_target","tags":["Heart Rate"],"summary":"Target heart rate","description":"","parameters":[{"name":"age","in":"query","required":false,"description":"Age (or max_hr)","schema":{"type":"string"},"example":"30"},{"name":"intensity","in":"query","required":true,"description":"Percent, e.g. 70","schema":{"type":"string"},"example":"70"},{"name":"resting_hr","in":"query","required":false,"description":"For Karvonen (optional)","schema":{"type":"string"},"example":"60"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"hrmax":190,"method":"Karvonen (% heart-rate reserve)","resting_hr":60,"hrmax_source":"fox (age 30)","intensity_percent":70,"target_heart_rate_bpm":151},"meta":{"timestamp":"2026-06-03T17:42:08.764Z","request_id":"ee8933a1-6d94-4360-a7cf-91027bf6d8d0"},"status":"ok","message":"Target HR","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/zones":{"get":{"operationId":"get_v1_zones","tags":["Heart Rate"],"summary":"Five training zones","description":"","parameters":[{"name":"age","in":"query","required":false,"description":"Age (or max_hr)","schema":{"type":"string"},"example":"30"},{"name":"formula","in":"query","required":false,"description":"fox|tanaka|gulati","schema":{"type":"string"},"example":"fox"},{"name":"resting_hr","in":"query","required":false,"description":"For Karvonen (optional)","schema":{"type":"string"},"example":"60"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"hrmax":190,"zones":[{"name":"Recovery","zone":1,"max_bpm":138,"min_bpm":125,"intensity":"50–60%"},{"name":"Endurance / fat burn","zone":2,"max_bpm":151,"min_bpm":138,"intensity":"60–70%"},{"name":"Aerobic","zone":3,"max_bpm":164,"min_bpm":151,"intensity":"70–80%"},{"name":"Threshold / anaerobic","zone":4,"max_bpm":177,"min_bpm":164,"intensity":"80–90%"},{"name":"Maximal / VO2 max","zone":5,"max_bpm":190,"min_bpm":177,"intensity":"90–100%"}],"method":"Karvonen (% heart-rate reserve)","resting_hr":60,"hrmax_source":"fox (age 30)"},"meta":{"timestamp":"2026-06-03T17:42:08.856Z","request_id":"9c8bb944-71c8-4926-81bc-923b656898c6"},"status":"ok","message":"Zones","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/meta":{"get":{"operationId":"get_v1_meta","tags":["Meta"],"summary":"Spec","description":"","parameters":[],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"name":"Heart Rate Zone API","notes":"HRmax from age by Fox/Tanaka/Gulati, or pass max_hr. With resting_hr the Karvonen (heart-rate-reserve) method is used. Informational, not medical advice. Nothing is stored.","version":"v1","endpoints":[{"path":"/v1/max-heart-rate","params":{"age":"years"},"returns":"estimated HRmax by the Fox, Tanaka and Gulati formulas"},{"path":"/v1/zones","params":{"age":"years (or max_hr)","formula":"fox|tanaka|gulati (default fox)","resting_hr":"for Karvonen (optional)"},"returns":"the five training zones in bpm"},{"path":"/v1/target","params":{"age":"years (or max_hr)","intensity":"percent, e.g. 70","resting_hr":"for Karvonen (optional)"},"returns":"the target heart rate"},{"path":"/v1/meta","params":[],"returns":"this document"}],"description":"Heart-rate training maths as an API. The max-heart-rate endpoint estimates maximum heart rate from age by the three common formulas — Fox (220 − age), Tanaka (208 − 0.7 × age) and Gulati (206 − 0.88 × age, validated for women). The zones endpoint returns the five training zones (recovery, endurance, aerobic, threshold and maximal) as beats-per-minute ranges, computed either as a simple percentage of the maximum heart rate or, when you give a resting heart rate, by the more accurate Karvonen heart-rate-reserve method. The target endpoint computes the target heart rate for any intensity, by percentage of max or by Karvonen. You can pass an age (and pick a formula) or give your own measured max heart rate. Everything is computed locally and deterministically, so it is instant and private. Ideal for fitness and running apps, wearables and gym equipment, coaching tools, and cardio training. Informational only — not medical advice. Pure local computation — no key, no third-party service, instant. Live, nothing stored. 4 endpoints. This is heart-rate maths; for BMI/BMR/calories use a health-calculator API and for running pace use a pace API."},"meta":{"timestamp":"2026-06-03T17:42:08.962Z","request_id":"8d10ae78-259e-4af7-bed3-2667a568d71d"},"status":"ok","message":"Meta","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}}},"x-oanor-pricing":[{"slug":"free","name":"Free","price_cents_month":0,"monthly_call_quota":7435,"rps_limit":2,"hard_limit":true},{"slug":"starter","name":"Starter","price_cents_month":895,"monthly_call_quota":16950,"rps_limit":8,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":2885,"monthly_call_quota":220500,"rps_limit":20,"hard_limit":true},{"slug":"mega","name":"Mega","price_cents_month":6685,"monthly_call_quota":1145000,"rps_limit":50,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/heartrate-api"}