WHOOP · Schema
WorkoutV2
A WHOOP workout activity with full details and scoring information
FitnessWearablesHealthRecoverySleepWorkoutStrainHeart RatePerformance
Properties
| Name | Type | Description |
|---|---|---|
| id | string | Unique identifier for the workout activity |
| v1_id | integer | Previous generation identifier for the activity. Will not exist past 09/01/2025 |
| user_id | integer | The WHOOP User who performed the workout |
| created_at | string | The time the workout activity was recorded in WHOOP |
| updated_at | string | The time the workout activity was last updated in WHOOP |
| start | string | Start time bound of the workout |
| end | string | End time bound of the workout |
| timezone_offset | string | The user's timezone offset at the time the workout was recorded. Follows format for Time Zone Designator (TZD) - '+hh:mm', '-hh:mm', or 'Z'. |
| sport_name | string | Name of the WHOOP Sport performed during the workout |
| score_state | string | `SCORED` means the workout activity was scored and the measurement values will be present. `PENDING_SCORE` means WHOOP is currently evaluating the workout activity. `UNSCORABLE` means this activity co |
| score | object | |
| sport_id | integer | ID of the WHOOP Sport performed during the workout. Will not exist past 09/01/2025 |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://raw.githubusercontent.com/api-evangelist/whoop/main/json-schema/whoop-workoutv2-schema.json",
"title": "WorkoutV2",
"description": "A WHOOP workout activity with full details and scoring information",
"required": [
"created_at",
"end",
"id",
"score_state",
"sport_name",
"start",
"timezone_offset",
"updated_at",
"user_id"
],
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Unique identifier for the workout activity",
"format": "uuid",
"example": "ecfc6a15-4661-442f-a9a4-f160dd7afae8"
},
"v1_id": {
"type": "integer",
"description": "Previous generation identifier for the activity. Will not exist past 09/01/2025",
"format": "int64",
"example": 1043
},
"user_id": {
"type": "integer",
"description": "The WHOOP User who performed the workout",
"format": "int64",
"example": 9012
},
"created_at": {
"type": "string",
"description": "The time the workout activity was recorded in WHOOP",
"format": "date-time",
"example": "2022-04-24T11:25:44.774Z"
},
"updated_at": {
"type": "string",
"description": "The time the workout activity was last updated in WHOOP",
"format": "date-time",
"example": "2022-04-24T14:25:44.774Z"
},
"start": {
"type": "string",
"description": "Start time bound of the workout",
"format": "date-time",
"example": "2022-04-24T02:25:44.774Z"
},
"end": {
"type": "string",
"description": "End time bound of the workout",
"format": "date-time",
"example": "2022-04-24T10:25:44.774Z"
},
"timezone_offset": {
"type": "string",
"description": "The user's timezone offset at the time the workout was recorded. Follows format for Time Zone Designator (TZD) - '+hh:mm', '-hh:mm', or 'Z'.",
"example": "-05:00",
"externalDocs": {
"description": "Learn more about the Time Zone Designator from the W3C Standard",
"url": "https://www.w3.org/TR/NOTE-datetime"
}
},
"sport_name": {
"type": "string",
"description": "Name of the WHOOP Sport performed during the workout",
"example": "running"
},
"score_state": {
"type": "string",
"description": "`SCORED` means the workout activity was scored and the measurement values will be present. `PENDING_SCORE` means WHOOP is currently evaluating the workout activity. `UNSCORABLE` means this activity could not be scored for some reason - commonly because there is not enough user metric data for the time range.",
"example": "SCORED",
"enum": [
"SCORED",
"PENDING_SCORE",
"UNSCORABLE"
]
},
"score": {
"$ref": "#/components/schemas/WorkoutScore"
},
"sport_id": {
"type": "integer",
"description": "ID of the WHOOP Sport performed during the workout. Will not exist past 09/01/2025",
"format": "int32",
"example": 1
}
}
}