API Reference
The Last Set Mindset API gives you programmatic access to 15 years of CrossFit Open workouts, an intelligent scaling engine, and AI-powered workout generation — all in one clean REST API.
Overview
The API is designed around three core capabilities:
Workout Library — Query, filter, and retrieve all CrossFit Open workouts from 2011 to present. Filter by year, scoring type, movements, time domain, and more.
Scaling Engine — Instantly scale any workout to beginner, scaled, Rx, or Rx+ intensity for men or women. Returns movement substitutions and adjusted weights.
AI Generator — Describe a workout in plain English and receive a complete, Open-inspired workout with Rx/scaled weights, coaching notes, and programming context.
Authentication
All API requests require an API key passed via the X-API-Key header.
X-API-Key: lsm_your_api_key_here
To get an API key, contact us. A demo key is available for testing with a 50 request/month limit.
Base URL
https://api.lastsetmindset.com/v1
Response Format
All responses are JSON and follow this envelope format:
{
"data": { ... }, // The response payload
"meta": {
"usage": 42, // Calls used this month
"limit": 500, // Monthly call limit
"remaining": 458 // Remaining calls
}
}
List Workouts
Query Parameters
| Param | Type | Description |
|---|---|---|
| year | integer | Filter by year (2011–2026) optional |
| type | string | amrap for_time max_weight optional |
| max_time | integer | Max time cap in minutes optional |
| min_time | integer | Min time cap in minutes optional |
| movement | string | Must include movement (repeatable) optional |
| exclude | string | Must exclude movement (repeatable) optional |
| keyword | string | Keyword search in description optional |
| limit | integer | Max results (default 50, max 100) optional |
curl https://api.lastsetmindset.com/v1/workouts?type=amrap&max_time=12&movement=thruster \
-H "X-API-Key: lsm_your_key"
Get Workout
curl https://api.lastsetmindset.com/v1/workouts/24.3 \
-H "X-API-Key: lsm_your_key"
Scale Workout
| Param | Type | Description |
|---|---|---|
| level | string | beginner scaled rx rx+ — default: scaled optional |
| gender | string | men women — default: men optional |
{
"data": {
"workout": { "workout_number": "24.3", "description": "...", ... },
"scaled": {
"level": "scaled",
"rep_percent": 80,
"movement_substitutions": {
"bar muscle-up": "chest-to-bar pull-up",
"overhead squat": "front squat"
},
"weights": {
"weights": "70 lb"
}
}
}
}
Random Workout
Accepts the same type, max_time, movement, and exclude params as the list endpoint.
curl "https://api.lastsetmindset.com/v1/workouts/random?type=for_time&exclude=muscle-up" \
-H "X-API-Key: lsm_your_key"
Generate Workout (AI)
Describe a workout in plain English. The AI generates a complete, Open-inspired workout including Rx/scaled weights for men and women, coaching notes, and programming context.
| Body Field | Type | Description |
|---|---|---|
| prompt | string | Plain English workout description required |
curl -X POST https://api.lastsetmindset.com/v1/generate \
-H "X-API-Key: lsm_your_key" \
-H "Content-Type: application/json" \
-d '{"prompt": "A 12-minute AMRAP with dumbbell snatches and box jumps, moderate intensity"}'
{
"data": {
"workout": {
"name": "Box Snatch",
"description": "Complete as many rounds and reps as possible in 12 minutes of:\n12 Dumbbell snatches (50/35 lb)\n9 Box jump overs (24/20 in)\n6 Burpees",
"scoring_type": "amrap",
"time_cap": 12,
"movements": ["dumbbell snatch", "box jump over", "burpee"],
"rx_men": {"db": "50 lb", "box": "24 in"},
"rx_women": {"db": "35 lb", "box": "20 in"},
"scaled_men": {"db": "35 lb", "box": "20 in"},
"scaled_women": {"db": "20 lb", "box": "20 in"},
"coaching_notes": "Break the snatches early. Aim for unbroken box jump overs.",
"open_inspiration": "Inspired by 17.1 and 22.1 — dumbbell-heavy with monostructural cardio"
}
}
}
Scale Custom Workout
| Body Field | Type | Description |
|---|---|---|
| workout | object | Workout object with movements and rx_men/rx_women required |
| level | string | beginner scaled rx rx+ optional |
| gender | string | men women optional |
Usage Stats
{
"data": {
"total_calls": 142,
"this_month": 42,
"limit": 500,
"remaining": 458,
"by_endpoint": [
{"endpoint": "/v1/generate", "calls": 28},
{"endpoint": "/v1/workouts", "calls": 14}
]
}
}
Workout Object
| Field | Type | Description |
|---|---|---|
| workout_number | string | e.g. "24.3", "19.1" |
| year | integer | Year of the Open |
| name | string|null | Workout name if it has one |
| description | string | Full whiteboard-style description |
| scoring_type | string | amrap for_time max_weight |
| time_cap | integer|null | Time cap in minutes |
| movements | array | List of movement names |
| rx_men | object | Rx weights/heights for men |
| rx_women | object | Rx weights/heights for women |
| scaled_men | object | Standard scaled weights for men |
| scaled_women | object | Standard scaled weights for women |
| notes | string|null | Additional notes |
Scale Levels
| Level | Weight | Volume | Movements |
|---|---|---|---|
beginner | 50% of Rx | 60% of Rx | 2 steps easier |
scaled | 75% of Rx | 80% of Rx | 1 step easier |
rx | 100% | 100% | As prescribed |
rx+ | 120% of Rx | 110% of Rx | 1 step harder |
Pricing
All plans include a 14-day free trial. Contact us to get started.