JustGains data for your site
Exercises with demo videos, and strength numbers from real training logs. Free to show on your site and to compare with your own users, as long as our logo goes with them.
Barbell Overhead Press
Barbell Deadlift
Pull-Up
Leg Press
Dumbbell Lunge
Wide-Grip Lat Pulldown
Chest Dip
Barbell Bent-Over Row
- Exercises ranked
- 166
- With strength numbers
- Times logged
- 11,446
- In finished workouts
- Price
- Free
- No key or sign-up
Quick start
Everything lives under https://justgains.com/api-proxy. Responses are JSON with the payload in data.
- 1Pick an exerciseEvery exercise has a code, like BARBELL.BENCH.PRESS. The public catalog lists them all with their names.
- 2Fetch it from your serverNo key or sign-up. Call from your backend and cache each response for at least an hour.
- 3Show it with our logoPut the JustGains logo beside anything that uses our data, and credit creators on their videos.
curl https://justgains.com/api-proxy/exercises/BARBELL.BENCH.PRESS/publicEndpoints
Public, read-only and cacheable. Weights are kilograms unless you ask for pounds.
- GET
/exercises/{exerciseCode}/publicName, instructions, muscles, equipment and demo videos with their creators. - GET
/strength-standards/exercises/{exerciseCode}Rep ranges, and one-rep max by sex and age at five percentiles. Add ?units=imperial for pounds. - POST
/strength-standards/compareRank one lift by sex, age and bodyweight: percentile, level and a histogram. - GET
/exercises/public-catalogEvery public exercise code and name, to map your exercises onto ours. - GET
/strength-standards/catalogWhich lifts have strength numbers, and how many lifters stand behind each.
Exercise details and media
One call gives you everything to show an exercise: its name, Markdown instructions, muscles, equipment and demo videos, each with the creator to credit. Only published exercises come back.
// A server component: fetched on your server, cached for an hour.
export async function ExerciseCard() {
const res = await fetch(
'https://justgains.com/api-proxy/exercises/BARBELL.BENCH.PRESS/public',
{ next: { revalidate: 3600 } },
)
const { data: exercise } = await res.json()
const video = exercise.videos[0]
return (
<figure>
<video src={video.videoUrl} poster={video.thumbnailUrl} controls />
<h3>{exercise.exerciseName}</h3>
<p>
Video by <a href={video.creator.profileUrl}>{video.creator.displayName}</a>
</p>
<a href={exercise.pageUrl}>
<img src="/justgains-lockup-ink.svg" alt="JustGains" height={20} />
</a>
</figure>
)
}Barbell Bench Press
- Pectoralis Major (Clavicular Head)
- Pectoralis Major (Sternal Head)
- Triceps Brachii
- Anterior Deltoid
- Serratus Anterior
Needs Barbell, Exercise Bench, Weight Plates
{
"exerciseCode": "BARBELL.BENCH.PRESS",
"exerciseName": "Barbell Bench Press",
"pageUrl": "https://justgains.com/e/barbell.bench.press",
"instructionsMarkdown": "[Max Bench Calculator](https://justgains.com/tools/max-bench-calculator)\n\n1. **Lie on a fl…",
"muscles": [
{
"muscleCode": "PECTORALIS_MAJOR_CLAVICULAR_HEAD",
"muscleName": "Pectoralis Major (Clavicular Head)",
"isPrimary": true,
"targetPercentage": 70
}
],
"equipment": [
{
"isRequired": true,
"options": [
{
"equipmentCode": "BARBELL",
"equipmentName": "Barbell"
}
]
}
],
"videos": [
{
"videoUrl": "https://m.justgains.com/just-exercise-videos/v2/chest-bench-press-butt-grey-female.mp4",
"thumbnailUrl": "https://m.justgains.com/just-exercise-videos/v2/chest-bench-press-butt-grey-female.webp",
"width": null,
"height": null,
"creator": {
"displayName": "Ms. Grey",
"userName": "JustGains_XX",
"profileUrl": "https://justgains.com/JustGains_XX"
}
}
]
}Strength and rep stats
For each exercise: the rep ranges lifters use, and their estimated one-rep max for men and women by age at five percentiles. Draw our lifters as a band and drop your own users onto it.
- All ages
- Under 30
- 30–39
const res = await fetch(
'https://justgains.com/api-proxy/strength-standards/exercises/BARBELL.BENCH.PRESS',
)
const { data } = await res.json()
// Men under 30 on JustGains. Missing when fewer than 5 lifters.
const ours = data.oneRepMax?.cohorts.find(
c => c.sex === 'male' && c.ageMin === null && c.ageMax === 29,
)
// Roughly where one of your users sits among them (10 to 90).
function percentileOf(value, c) {
const points = [[10, c.p10], [25, c.p25], [50, c.median], [75, c.p75], [90, c.p90]]
if (value <= points[0][1]) return 10
for (let i = 1; i < points.length; i++) {
const [p0, v0] = points[i - 1]
const [p1, v1] = points[i]
if (value <= v1) return p0 + ((value - v0) / (v1 - v0 || 1)) * (p1 - p0)
}
return 90
}Rank a lift
To place a single lift exactly, against lifters of the same sex, age and bodyweight, send it to compare. You get back a percentile, a level and histogram bins you can chart.
const res = await fetch('https://justgains.com/api-proxy/strength-standards/compare', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
gender: 'male',
age: 28,
bodyweightKg: 82,
lifts: [{ exerciseCode: 'BARBELL.BENCH.PRESS', weightKg: 90, reps: 5 }],
}),
})
const { data } = await res.json()
const lift = data.lifts[0]
lift.percentile // 0 to 100, against lifters like this one
lift.level // untrained, novice, intermediate, advanced or elite
lift.distribution // histogram bins, ready to chartPounds and kilograms
Strength stats default to half kilograms. Add ?units=imperial for whole pounds, converted from the exact values so nothing rounds twice. Compare works in kilograms both ways.
// Strength stats come back in whole pounds when you ask
await fetch('https://justgains.com/api-proxy/strength-standards/exercises/BARBELL.SQUAT?units=imperial')
// data.oneRepMax.unit === 'lb'
// Compare takes and returns kilograms, so convert at the edges
const LB_PER_KG = 2.2046226218
const weightKg = weightLb / LB_PER_KG
const oneRepMaxLb = Math.round(lift.oneRepMaxKg * LB_PER_KG)Attribution rules
Short and strict. Using the data means following all of them.
- 1Show the JustGains logo with every chart, table, figure or video that uses our data, in the same view.
- 2Use the logo files below unchanged, at least 20px tall with clear space around them: ink on light backgrounds, paper on dark.
- 3Link the logo to justgains.com, or to the exercise’s pageUrl.
- 4Credit the creator by name beside their video, linked to their profileUrl. Don’t re-upload or edit the videos.
- 5Label our numbers as JustGains data and keep them visibly apart from your own users’ numbers.
- 6Don’t imply we endorse your product, and don’t resell or republish the raw responses as a dataset.
- 7Call from your server and cache each response for at least an hour. Traffic that ignores these rules gets blocked.
Good to know
- Each lifter counts once per exercise, however often they train. Test accounts are left out.
- Anything with too few lifters behind it comes back as null rather than a thin number, and age groups under 5 lifters are left out. Draw what is there.
- Strength numbers are rebuilt every few hours; generatedAt says when. Exercise details refresh within an hour of an edit.
- Browsers on other domains are blocked from calling the API directly, so fetch from your server.