app.fitsky.workout
{
"$type": "com.atproto.lexicon.schema",
"defs": {
"cardioDetails": {
"properties": {
"calories": {
"type": "integer"
},
"cardioZones": {
"ref": "#cardioZoneData",
"type": "ref"
},
"distanceMeters": {
"description": "Distance in meters",
"minimum": 0,
"type": "integer"
},
"elevationGainMeters": {
"description": "Elevation gain in meters",
"minimum": 0,
"type": "integer"
},
"heartRate": {
"ref": "#heartRateData",
"type": "ref"
},
"heartRateSamples": {
"items": {
"ref": "#heartRateSample",
"type": "ref"
},
"type": "array"
},
"paceSecondsPerKm": {
"description": "Pace in seconds per kilometer",
"minimum": 0,
"type": "integer"
},
"routePoints": {
"description": "GPS route points recorded during the workout",
"items": {
"ref": "#routePoint",
"type": "ref"
},
"type": "array"
},
"steps": {
"type": "integer"
}
},
"type": "object"
},
"cardioZoneData": {
"description": "Time in seconds spent in each heart rate zone",
"properties": {
"zone1Rest": {
"type": "integer"
},
"zone2Easy": {
"type": "integer"
},
"zone3Aerobic": {
"type": "integer"
},
"zone4Threshold": {
"type": "integer"
},
"zone5Max": {
"type": "integer"
}
},
"type": "object"
},
"exercise": {
"properties": {
"name": {
"maxLength": 128,
"type": "string"
},
"sets": {
"items": {
"ref": "#exerciseSet",
"type": "ref"
},
"type": "array"
}
},
"required": [
"name",
"sets"
],
"type": "object"
},
"exerciseSet": {
"properties": {
"reps": {
"type": "integer"
},
"weightGrams": {
"description": "Weight in grams",
"minimum": 0,
"type": "integer"
}
},
"type": "object"
},
"flexibilityDetails": {
"properties": {
"calories": {
"type": "integer"
},
"cardioZones": {
"ref": "#cardioZoneData",
"type": "ref"
},
"heartRate": {
"ref": "#heartRateData",
"type": "ref"
},
"heartRateSamples": {
"items": {
"ref": "#heartRateSample",
"type": "ref"
},
"type": "array"
},
"intensity": {
"knownValues": [
"light",
"moderate",
"intense"
],
"maxLength": 64,
"type": "string"
},
"movements": {
"type": "integer"
},
"steps": {
"type": "integer"
}
},
"type": "object"
},
"heartRateData": {
"properties": {
"avg": {
"type": "integer"
},
"max": {
"type": "integer"
},
"min": {
"type": "integer"
},
"resting": {
"type": "integer"
}
},
"type": "object"
},
"heartRateSample": {
"properties": {
"bpm": {
"type": "integer"
},
"timestamp": {
"format": "datetime",
"type": "string"
}
},
"required": [
"timestamp",
"bpm"
],
"type": "object"
},
"hiitSportsDetails": {
"properties": {
"calories": {
"type": "integer"
},
"cardioZones": {
"ref": "#cardioZoneData",
"type": "ref"
},
"distanceMeters": {
"description": "Distance in meters",
"minimum": 0,
"type": "integer"
},
"heartRate": {
"ref": "#heartRateData",
"type": "ref"
},
"heartRateSamples": {
"items": {
"ref": "#heartRateSample",
"type": "ref"
},
"type": "array"
},
"intensity": {
"knownValues": [
"light",
"moderate",
"intense"
],
"maxLength": 64,
"type": "string"
},
"paceSecondsPerKm": {
"description": "Pace in seconds per kilometer",
"minimum": 0,
"type": "integer"
},
"rounds": {
"type": "integer"
},
"routePoints": {
"description": "GPS route points recorded during the workout",
"items": {
"ref": "#routePoint",
"type": "ref"
},
"type": "array"
},
"sport": {
"maxLength": 128,
"type": "string"
},
"steps": {
"type": "integer"
}
},
"type": "object"
},
"main": {
"description": "A fitness workout record",
"key": "tid",
"record": {
"properties": {
"createdAt": {
"format": "datetime",
"type": "string"
},
"details": {
"refs": [
"#cardioDetails",
"#strengthDetails",
"#flexibilityDetails",
"#hiitSportsDetails"
],
"type": "union"
},
"duration": {
"description": "Duration in seconds",
"minimum": 0,
"type": "integer"
},
"endedAt": {
"format": "datetime",
"type": "string"
},
"milestones": {
"description": "Progress milestones for linear workouts",
"items": {
"ref": "#milestone",
"type": "ref"
},
"type": "array"
},
"notes": {
"maxLength": 2048,
"type": "string"
},
"ogImage": {
"accept": [
"image/png",
"image/jpeg",
"image/webp"
],
"description": "Open Graph preview image for social sharing",
"maxSize": 1000000,
"type": "blob"
},
"planUri": {
"description": "Reference to the workoutPlan used, if any",
"format": "at-uri",
"type": "string"
},
"startedAt": {
"format": "datetime",
"type": "string"
},
"status": {
"description": "Whether the workout is in progress or finished. Omitted for legacy workouts (treat as completed).",
"knownValues": [
"active",
"completed"
],
"maxLength": 64,
"type": "string"
},
"title": {
"maxLength": 256,
"type": "string"
},
"type": {
"knownValues": [
"running",
"cycling",
"swimming",
"walking",
"weightlifting",
"bodyweight",
"yoga",
"hiit",
"sports",
"stretching",
"hiking"
],
"maxLength": 64,
"type": "string"
},
"visibility": {
"ref": "#visibilitySettings",
"type": "ref"
}
},
"required": [
"type",
"title",
"startedAt",
"duration",
"createdAt"
],
"type": "object"
},
"type": "record"
},
"milestone": {
"properties": {
"note": {
"maxLength": 512,
"type": "string"
},
"timestamp": {
"format": "datetime",
"type": "string"
},
"type": {
"knownValues": [
"distance",
"lap",
"note"
],
"maxLength": 64,
"type": "string"
},
"valueMeters": {
"description": "Milestone value in meters",
"minimum": 0,
"type": "integer"
}
},
"required": [
"type",
"timestamp"
],
"type": "object"
},
"routePoint": {
"properties": {
"latE6": {
"description": "Latitude in microdegrees (degrees * 1,000,000)",
"type": "integer"
},
"lngE6": {
"description": "Longitude in microdegrees (degrees * 1,000,000)",
"type": "integer"
},
"timestamp": {
"format": "datetime",
"type": "string"
}
},
"required": [
"latE6",
"lngE6",
"timestamp"
],
"type": "object"
},
"strengthDetails": {
"properties": {
"calories": {
"type": "integer"
},
"cardioZones": {
"ref": "#cardioZoneData",
"type": "ref"
},
"exercises": {
"items": {
"ref": "#exercise",
"type": "ref"
},
"type": "array"
},
"heartRate": {
"ref": "#heartRateData",
"type": "ref"
},
"heartRateSamples": {
"items": {
"ref": "#heartRateSample",
"type": "ref"
},
"type": "array"
},
"steps": {
"type": "integer"
}
},
"type": "object"
},
"visibilitySettings": {
"description": "Controls which fields are visible to other users in the Fitsky UI. Note: ATProto repos are public — this is UI-level privacy only.",
"properties": {
"calories": {
"default": "public",
"knownValues": [
"public",
"private"
],
"maxLength": 64,
"type": "string"
},
"cardioZones": {
"default": "private",
"knownValues": [
"public",
"private"
],
"maxLength": 64,
"type": "string"
},
"details": {
"default": "public",
"knownValues": [
"public",
"private"
],
"maxLength": 64,
"type": "string"
},
"heartRate": {
"default": "private",
"knownValues": [
"public",
"private"
],
"maxLength": 64,
"type": "string"
},
"notes": {
"default": "public",
"knownValues": [
"public",
"private"
],
"maxLength": 64,
"type": "string"
},
"steps": {
"default": "public",
"knownValues": [
"public",
"private"
],
"maxLength": 64,
"type": "string"
}
},
"type": "object"
}
},
"id": "app.fitsky.workout",
"lexicon": 1
}
Metadata
- DID
-
did:plc:tr7zlhacx3fete5s7cx5tyjd - CID
-
bafyreieqy3x3qkobegvcdg5bwsm35krmxbtlfxrqx27uteubhasfrvgwxy - Indexed At
- 2026-03-10 00:36 UTC
- AT-URI
-
at://did:plc:tr7zlhacx3fete5s7cx5tyjd/com.atproto.lexicon.schema/app.fitsky.workout
Version History (2 versions)
- 2026-03-10 00:36 UTC (current)
- 2026-02-22 23:01 UTC diff
Similar Lexicons
Lexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.
-
A sports activity or outdoor adventure record logged on Treeline.
-
app.fitsky.workoutPlan record
A reusable workout plan template
-
app.thedistance.activity record
A recorded physical activity such as a bike ride.
-
app.kimbia.activity record
PROVISIONAL: activities are generic enough that they belong in a community-driven lexicon rather than an app namespace. When a community schema stabilizes, Kimbia will migrate to it and deprecate this one in its favor.