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.

GET/api/status

Check 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
  }
}
GET/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

NameInRequiredDescription
challengeIdpathyesThe 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"
}
GET/api/push-up-level

Evaluate push-up level by age and gender

Computes the rating and reference ranges used by the public push-up standards tool.

Authentication: none

Parameters

NameInRequiredDescription
agequeryyesAge in years, from 13 through 70.
genderqueryyesSupported values: male or female.
countqueryyesThe 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"
}
GET/api/push-up-challenge-recommendation

Recommend 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

NameInRequiredDescription
maxRepsqueryyesThe 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"
}
GET/api/unlock-cost

Estimate the exercise cost of scroll time

Returns the same push-up, squat, and plank conversion used by the homepage unlock calculator.

Authentication: none

Parameters

NameInRequiredDescription
minutesqueryyesRequested 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"
}