{"openapi":"3.1.0","info":{"title":"Strength Training API","version":"1.0.0","description":"Strength-training maths as an API. The one-rep-max endpoint estimates your one-rep max from a set of a given weight and reps using five established formulas — Epley, Brzycki, Lander, Lombardi and O'Conner — with their average, and returns a rep-max table showing the estimated weight (and percentage of 1RM) for 1 to 12 reps. The plates endpoint works out exactly which plates to load on each side of a barbell for a target weight, given the bar weight and the plate denominations you have, and tells you whether the target is achievable exactly. The wilks endpoint computes the Wilks (classic) and DOTS relative-strength scores from bodyweight and total lifted, so lifters of different sizes can be compared fairly. Everything is computed locally and deterministically, so it is instant and private. Ideal for gym and lifting apps, powerlifting and strength coaching, workout planners and progression trackers, and fitness wearables. Pure local computation — no key, no third-party service, instant. Live, nothing stored. 4 endpoints. This is strength maths; for BMI, BMR and calories use a health-calculator API and for heart-rate training zones use a heart-rate API.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/strength-api","description":"oanor gateway"}],"tags":[{"name":"Strength"},{"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/one-rep-max":{"get":{"operationId":"get_v1_one_rep_max","tags":["Strength"],"summary":"Estimate 1RM + rep-max table","description":"","parameters":[{"name":"weight","in":"query","required":true,"description":"Weight lifted","schema":{"type":"string"},"example":"100"},{"name":"reps","in":"query","required":true,"description":"Reps performed (1-36)","schema":{"type":"string"},"example":"5"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"input":{"reps":5,"weight":100},"formulas":{"epley":116.67,"lander":113.71,"brzycki":112.5,"oconner":112.5,"lombardi":117.46},"estimated_1rm":114.57,"rep_max_table":[{"reps":1,"weight":110.87,"percent_1rm":97},{"reps":2,"weight":107.41,"percent_1rm":94},{"reps":3,"weight":104.15,"percent_1rm":91},{"reps":4,"weight":101.09,"percent_1rm":88},{"reps":5,"weight":98.2,"percent_1rm":86},{"reps":6,"weight":95.48,"percent_1rm":83},{"reps":7,"weight":92.89,"percent_1rm":81},{"reps":8,"weight":90.45,"percent_1rm":79},{"reps":9,"weight":88.13,"percent_1rm":77},{"reps":10,"weight":85.93,"percent_1rm":75},{"reps":11,"weight":83.83,"percent_1rm":73},{"reps":12,"weight":81.84,"percent_1rm":71}]},"meta":{"timestamp":"2026-06-03T17:42:07.735Z","request_id":"cfced97b-de25-4a19-9074-2c3377e30a4c"},"status":"ok","message":"One-rep max","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/plates":{"get":{"operationId":"get_v1_plates","tags":["Strength"],"summary":"Barbell plate loading","description":"","parameters":[{"name":"weight","in":"query","required":true,"description":"Target total weight","schema":{"type":"string"},"example":"100"},{"name":"bar","in":"query","required":false,"description":"Bar weight (default 20)","schema":{"type":"string"},"example":"20"},{"name":"plates","in":"query","required":false,"description":"Available plates","schema":{"type":"string"},"example":"25,20,15,10,5,2.5,1.25"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"exact":true,"per_side":40,"bar_weight":20,"target_weight":100,"plates_per_side":[{"count":1,"plate":25},{"count":1,"plate":15}],"achievable_weight":100,"leftover_per_side":0},"meta":{"timestamp":"2026-06-03T17:42:07.840Z","request_id":"70c48a8d-80a7-4bfa-adf9-f1a2ff944c56"},"status":"ok","message":"Plate loading","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/wilks":{"get":{"operationId":"get_v1_wilks","tags":["Strength"],"summary":"Wilks & DOTS score","description":"","parameters":[{"name":"bodyweight","in":"query","required":true,"description":"Bodyweight (kg)","schema":{"type":"string"},"example":"100"},{"name":"lifted","in":"query","required":true,"description":"Total lifted (kg)","schema":{"type":"string"},"example":"500"},{"name":"sex","in":"query","required":false,"description":"male|female","schema":{"type":"string"},"example":"male"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"sex":"male","note":"Wilks (classic) and DOTS relative-strength scores; bodyweight and lifted in kilograms","lifted":500,"bodyweight":100,"dots_score":307.76,"wilks_score":304.29,"dots_coefficient":0.615516,"wilks_coefficient":0.608589},"meta":{"timestamp":"2026-06-03T17:42:07.917Z","request_id":"ef2536be-ef83-40e0-b7b0-1edf673c306b"},"status":"ok","message":"Wilks / DOTS","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":"Strength Training API","notes":"1RM uses Epley/Brzycki/Lander/Lombardi/O'Conner. Plates are loaded greedily, largest first. Wilks/DOTS expect kilograms. Nothing is stored.","version":"v1","endpoints":[{"path":"/v1/one-rep-max","params":{"reps":"reps performed (1-36)","weight":"weight lifted"},"returns":"estimated 1RM by five formulas, plus a rep-max table"},{"path":"/v1/plates","params":{"bar":"bar weight (default 20)","plates":"available plate denominations (optional)","weight":"target total weight"},"returns":"the plates to load per side"},{"path":"/v1/wilks","params":{"sex":"male|female","lifted":"kg total","bodyweight":"kg"},"returns":"the Wilks and DOTS scores"},{"path":"/v1/meta","params":[],"returns":"this document"}],"description":"Strength-training maths as an API. The one-rep-max endpoint estimates your one-rep max from a set of a given weight and reps using five established formulas — Epley, Brzycki, Lander, Lombardi and O'Conner — with their average, and returns a rep-max table showing the estimated weight (and % of 1RM) for 1 to 12 reps. The plates endpoint works out exactly which plates to load on each side of a barbell for a target weight, given the bar weight and the plate denominations you have, and tells you if the target is achievable exactly. The wilks endpoint computes the Wilks (classic) and DOTS relative-strength scores from bodyweight and total lifted, so lifters of different sizes can be compared fairly. Everything is computed locally and deterministically, so it is instant and private. Ideal for gym and lifting apps, powerlifting and strength coaching, workout planners, and fitness wearables. Pure local computation — no key, no third-party service, instant. Live, nothing stored. 4 endpoints. This is strength maths; for BMI, BMR and calories use a health-calculator API and for heart-rate zones use a heart-rate API."},"meta":{"timestamp":"2026-06-03T17:42:07.994Z","request_id":"17322cee-216c-4235-a923-b7cc8119de6f"},"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":7635,"rps_limit":2,"hard_limit":true},{"slug":"starter","name":"Starter","price_cents_month":915,"monthly_call_quota":17150,"rps_limit":8,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":2905,"monthly_call_quota":222500,"rps_limit":20,"hard_limit":true},{"slug":"mega","name":"Mega","price_cents_month":6705,"monthly_call_quota":1155000,"rps_limit":50,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/strength-api"}