Repscroll Public API
Read-only endpoints for agent discovery and tool use
These routes expose the same public data and calculators already used by the website. All endpoints are unauthenticated and read-only.
Machine-readable
OpenAPI document
Use the OpenAPI 3.1 document for structured client generation and tool integration.
Discovery
API catalog
Discover the same API surface through the RFC 9727 API catalog entry point.
/api/statusCheck public API reachability
Returns the current health of the same-origin Repscroll public API and the upstream challenge preview dependency.
Authentication: none
Success example
{
"status": "ok",
"api": "repscroll-public",
"checkedAt": "2026-04-19T09:15:00.000Z",
"previewUpstream": {
"url": "https://us-central1-repsforreels.cloudfunctions.net/getChallengeInvitePreview?challengeId=__healthcheck__",
"reachable": true,
"upstreamStatus": 404
}
}/api/challenge-preview/{challengeId}Preview a public friend challenge invite
Loads the public invite preview used by the website and normalizes it under a same-origin endpoint.
Authentication: none
Parameters
| Name | In | Required | Description |
|---|---|---|---|
| challengeId | path | yes | The Repscroll challenge invite identifier. |
Success example
{
"challengeId": "abc123",
"status": "pending",
"creatorName": "Jake",
"exerciseType": "pushups",
"goalValue": 25,
"goalUnit": "reps",
"inviteExpiresAt": "2026-04-19T18:00:00.000Z",
"startsAt": null,
"endsAt": null
}Error cases
404 The challenge invite does not exist or is not public.
{
"error": "not_found",
"challengeId": "missing-id"
}/api/push-up-levelEvaluate push-up level by age and gender
Computes the rating and reference ranges used by the public push-up standards tool.
Authentication: none
Parameters
| Name | In | Required | Description |
|---|---|---|---|
| age | query | yes | Age in years, from 13 through 70. |
| gender | query | yes | Supported values: male or female. |
| count | query | yes | The number of push-ups completed with good form. |
Success example
{
"age": 25,
"gender": "male",
"count": 32,
"rating": "average",
"ranges": {
"belowAverage": {
"min": 0,
"max": 19
},
"average": {
"min": 20,
"max": 34
},
"aboveAverage": {
"min": 35,
"max": 49
},
"elite": {
"min": 50,
"max": null
}
}
}Error cases
400 One or more query parameters are missing or invalid.
{
"error": "invalid_query",
"field": "gender"
}/api/push-up-challenge-recommendationRecommend a push-up challenge plan
Returns the recommended plan and a small set of alternatives from the public push-up challenge recommender.
Authentication: none
Parameters
| Name | In | Required | Description |
|---|---|---|---|
| maxReps | query | yes | The user's current maximum consecutive push-up count. |
Success example
{
"maxReps": 18,
"recommended": {
"slug": "50-push-ups-challenge-plan",
"title": "50 Push-Ups Challenge Plan",
"shortTitle": "50 Push-Ups Plan",
"description": "Build up to 50 consecutive push-ups in 30 days. Structured plan with progressive overload, rest days, and form tips. Start today with our free day-by-day program.",
"level": "intermediate",
"duration": "30 days",
"targetAudience": "Anyone who can do 15-25 push-ups and wants to reach the 50-rep milestone",
"startingMax": {
"min": 15,
"max": 25
},
"goalDescription": "Complete 50 consecutive push-ups"
},
"alternatives": [
{
"slug": "30-day-push-up-challenge-for-beginners",
"title": "30-Day Push-Up Challenge for Beginners",
"shortTitle": "Beginner 30-Day",
"description": "Start your push-up journey with this beginner-friendly 30-day challenge. Build from 5 to 30 push-ups with proper form. Free day-by-day plan with rest days included.",
"level": "beginner",
"duration": "30 days",
"targetAudience": "Complete beginners or those returning to fitness after a long break",
"startingMax": {
"min": 5,
"max": 10
},
"goalDescription": "Complete 30 consecutive push-ups with proper form"
},
{
"slug": "30-day-push-up-challenge-advanced",
"title": "30-Day Push-Up Challenge: Advanced",
"shortTitle": "Advanced 30-Day",
"description": "Elite 30-day push-up challenge for advanced athletes. Build from 50 to 100+ push-ups with intense progressive overload. Full day-by-day training plan.",
"level": "advanced",
"duration": "30 days",
"targetAudience": "Advanced athletes who can do 50+ push-ups and want to reach 100",
"startingMax": {
"min": 50,
"max": 70
},
"goalDescription": "Complete 100+ consecutive push-ups"
}
]
}Error cases
400 The maxReps query parameter is missing or invalid.
{
"error": "invalid_query",
"field": "maxReps"
}/api/unlock-costEstimate the exercise cost of scroll time
Returns the same push-up, squat, and plank conversion used by the homepage unlock calculator.
Authentication: none
Parameters
| Name | In | Required | Description |
|---|---|---|---|
| minutes | query | yes | Requested screen time duration in minutes. |
Success example
{
"minutes": 15,
"pushups": 30,
"squats": 45,
"plankSeconds": 75,
"formattedPlank": "01:15"
}Error cases
400 The minutes query parameter is missing or invalid.
{
"error": "invalid_query",
"field": "minutes"
}