API Documentation

Complete reference for integrating with Long Game Lifting. Use these endpoints from the mobile app or any HTTP client to manage workouts, personal records, and training groups.

Base URL

https://longgamelifting.com

All endpoint paths are relative to this base URL.

Authentication

Step 1: Register via POST /api/signup or log in via POST /api/auth/login. Both return an apiToken.

Step 2: Store the token securely on the device (e.g., React Native\'s AsyncStorage or iOS Keychain).

Step 3: Include the token in all authenticated requests:

Authorization: Bearer <your-api-token>

The token is a 64-character hex string that does not expire. If you need a new token, re-register or log in again.

Quick Start Example

Register a new user and submit a workout — all from the command line or your app:

# 1. Register
curl -X POST https://longgamelifting.com/api/signup \
  -H "Content-Type: application/json" \
  -d '{"name": "Jane Doe", "email": "[email protected]", "password": "mypassword123"}'

# Response includes apiToken — save it!

# 2. Submit a workout
curl -X POST https://longgamelifting.com/api/workouts \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -d '{
    "title": "Push Day",
    "notes": "Felt strong today",
    "duration": 65,
    "exercises": [
      {
        "exerciseName": "Bench Press",
        "sets": [
          { "reps": 5, "weight": 225, "unit": "lbs", "rpe": 7 },
          { "reps": 5, "weight": 225, "unit": "lbs", "rpe": 8 },
          { "reps": 3, "weight": 245, "unit": "lbs", "rpe": 9 }
        ]
      },
      {
        "exerciseName": "Incline DB Press",
        "sets": [
          { "reps": 10, "weight": 75, "unit": "lbs" },
          { "reps": 8, "weight": 80, "unit": "lbs" }
        ]
      }
    ]
  }'

Authentication

Register and sign in to get your API token. Store the token securely on the device and include it as a Bearer token in all authenticated requests.

Workouts

Submit completed workouts and browse the public Town Square feed. Workouts contain nested exercises, each with ordered sets.

Personal Records (Wall of Fame)

Submit your personal records (1RMs) and browse the Wall of Fame leaderboard. Top 10 heaviest lifts per exercise.

Video Upload

Get a presigned upload URL for PR verification videos. Upload the video directly to cloud storage, then use the returned public URL when submitting your record.

Groups

Create private training groups, join via invite code, and view your group memberships.

Error Responses

All errors return a JSON object with an error field:

{ "error": "Description of what went wrong" }
StatusMeaning
400Bad Request — missing or invalid fields
401Unauthorized — missing or invalid API token
403Forbidden — not a member of the target group
404Not Found — invalid invite code or resource
409Conflict — email/account/membership already exists
500Server Error — something unexpected happened

Video Verification Flow

To submit a video-verified personal record, follow this 3-step process:

1
Get presigned URL

POST to /api/records/upload-video with fileName and contentType

2
Upload the video

PUT the file bytes to the returned uploadUrl with the matching Content-Type header

3
Submit the record

POST to /api/records with the publicUrl in the videoUrl field

Notes

  • • All request/response bodies are JSON. Always set Content-Type: application/json on POST requests.
  • • Timestamps are in ISO 8601 format (UTC).
  • • The API token does not expire. Store it once after signup/login and reuse it for all requests.
  • • Weight units default to "lbs" if not specified. Valid values are "lbs" and "kg".
  • • Google SSO users who sign in via the website can also use these API endpoints — they just need to log in once via email/password to get an API token.