ForHosting KIT · Health & fitness

One rep max calculator

Turn a hard set into a one-rep max estimate without testing a true max: 100 for 5 reps gives 116.67 with Epley and 112.5 with Brzycki. Works in kg or lb, for sets of 1 to 12 reps. 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
Weight
100
Repetitions
5
You get
Epley estimate
116.67
Brzycki estimate
112.5

Estimates your one-rep max (1RM) from a lifted weight and the number of reps performed, returning the Epley estimate, the Brzycki estimate, or both.

The two formulas it computes

This calculator estimates a one-rep max from a submaximal set using two classic equations. The Epley estimate is weight * (1 + reps / 30), so lifting 100 for 5 reps gives 100 * (1 + 5/30) = 116.67. The Brzycki estimate is weight * 36 / (37 - reps), which for the same set gives 100 * 36 / 32 = 112.5.

You choose which to return with the formula field: "epley", "brzycki", or "both" (the default). Because Brzycki divides by (37 - reps), it is only defined for reps up to 12, which is exactly the upper bound the tool enforces. Both formulas assume a genuine near-maximal effort at the reps you enter; estimates diverge more as reps climb, which is why serious lifters keep the rep count low.

The output object echoes your weight, reps and formula alongside the numeric estimates so a result is always self-describing.

Fields, ranges and rounding

Two inputs are required: weight (a positive finite number in whatever unit you lift, kg or lb, since the math is unit-agnostic) and reps (an integer from 1 to 12). Two optional fields tune the output: formula, an enum limited to "epley", "brzycki" or "both"; and decimals, an integer from 0 to 4 that defaults to 2. Weight must be strictly greater than zero, and reps below 1 or above 12 are refused.

Program your training loads

Turn a 5-rep working set into a 1RM estimate, then derive percentage-based loads (e.g. 80% of 1RM) for your next block.

Compare two estimation methods

Return both Epley and Brzycki at once to see how far the estimates diverge for higher-rep sets before you trust a number.

Which formulas are used?

Two: Epley, weight * (1 + reps/30), and Brzycki, weight * 36 / (37 - reps). Pick one or return both.

Why is reps capped at 12?

Both formulas lose accuracy at high reps, and Brzycki's denominator (37 - reps) breaks down as reps approach 37, so the tool enforces an integer from 1 to 12.

Does the unit matter, kg or lb?

No. The math is unit-agnostic; the estimate comes back in whatever unit you entered the weight in.

How is the result rounded?

Half-up to the decimals you request (0 to 4, default 2), applied to the exact computed value.

Why do Epley and Brzycki give different results?

They are two different equations fitted to the same idea. For 100 lifted 5 times, Epley says 116.67 and Brzycki 112.5, and the gap widens as the reps go up, so a low-rep set gives the most trustworthy estimate.

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/dev/one-rep-max

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/dev/one-rep-max \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"weight":100,"reps":5}'
{
  "weight": 100,
  "reps": 5
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "dev.one_rep_max",
  "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.

Fields, ranges and rounding

Rounding uses an explicit half-up rule applied to the exact IEEE value, so 116.665 rounds to 116.67 rather than drifting through a locale-sensitive shortcut. Any field that is out of range, the wrong type, or non-finite is rejected before arithmetic runs and returns a typed invalid_input error naming the offending field, for example "reps inválido" when reps is 0, 13, or not an integer.

Determinism and the free widget

The engine is pure arithmetic with no clock, randomness, network call, or locale dependency, so the same input always yields the same 1RM estimate. Failed API tasks are never charged; prepaid balance is spent only on successful calls at $0.002.

Score a whole training log

Feed each logged set through the API to chart estimated 1RM progression over weeks without recomputing formulas by hand.

What happens with bad input?

A typed invalid_input error naming the field, for example non-positive weight or a non-integer rep count. The API at $0.002 charges only successful calls.

Read the full KIT documentation →