app.thedistance.activity
{
"$type": "com.atproto.lexicon.schema",
"defs": {
"aspectRatio": {
"description": "Width and height of the image, used for layout before the image loads.",
"properties": {
"height": {
"minimum": 1,
"type": "integer"
},
"width": {
"minimum": 1,
"type": "integer"
}
},
"required": [
"width",
"height"
],
"type": "object"
},
"image": {
"properties": {
"alt": {
"description": "Alt text for the image.",
"maxLength": 3000,
"type": "string"
},
"aspectRatio": {
"ref": "#aspectRatio",
"type": "ref"
},
"image": {
"accept": [
"image/jpeg",
"image/png",
"image/webp"
],
"maxSize": 10000000,
"type": "blob"
}
},
"required": [
"image"
],
"type": "object"
},
"main": {
"description": "A recorded physical activity such as a bike ride.",
"key": "tid",
"record": {
"properties": {
"avgCadence": {
"description": "Average cadence in revolutions per minute.",
"minimum": 0,
"type": "integer"
},
"avgHeartRate": {
"description": "Average heart rate in beats per minute.",
"minimum": 0,
"type": "integer"
},
"avgPower": {
"description": "Average power output in watts.",
"minimum": 0,
"type": "integer"
},
"avgSpeed": {
"description": "Average speed in meters per second. String-encoded decimal number.",
"maxLength": 64,
"type": "string"
},
"calories": {
"description": "Estimated calories burned.",
"minimum": 0,
"type": "integer"
},
"createdAt": {
"description": "Timestamp of when this record was created.",
"format": "datetime",
"type": "string"
},
"description": {
"description": "User-provided description of the activity.",
"maxLength": 3000,
"type": "string"
},
"device": {
"description": "Name of the device that recorded the activity.",
"maxLength": 300,
"type": "string"
},
"distance": {
"description": "Total distance in meters. String-encoded decimal number, e.g. '51214.6'.",
"maxLength": 64,
"type": "string"
},
"elapsedTime": {
"description": "Total elapsed time in seconds, including stopped time.",
"minimum": 0,
"type": "integer"
},
"elevationGain": {
"description": "Total elevation gain in meters. String-encoded decimal number.",
"maxLength": 64,
"type": "string"
},
"elevationLoss": {
"description": "Total elevation loss in meters. String-encoded decimal number.",
"maxLength": 64,
"type": "string"
},
"images": {
"description": "Photos from the activity.",
"items": {
"ref": "#image",
"type": "ref"
},
"maxLength": 8,
"type": "array"
},
"maxCadence": {
"description": "Maximum cadence in revolutions per minute.",
"minimum": 0,
"type": "integer"
},
"maxHeartRate": {
"description": "Maximum heart rate in beats per minute.",
"minimum": 0,
"type": "integer"
},
"maxPower": {
"description": "Maximum power output in watts.",
"minimum": 0,
"type": "integer"
},
"maxSpeed": {
"description": "Maximum speed in meters per second. String-encoded decimal number.",
"maxLength": 64,
"type": "string"
},
"movingTime": {
"description": "Time spent in motion in seconds.",
"minimum": 0,
"type": "integer"
},
"perceivedExertion": {
"description": "Rate of perceived exertion (RPE), typically 1-10.",
"minimum": 0,
"type": "integer"
},
"polyline": {
"description": "Encoded polyline string representing a simplified, privacy-trimmed route for map display. Uses Google's encoded polyline algorithm format. Ingestion services should simplify polylines to fit within the 20,000 byte limit. This limit may be revisited if it proves insufficient.",
"maxLength": 20000,
"type": "string"
},
"source": {
"description": "Where the activity data was imported from.",
"knownValues": [
"garmin",
"strava",
"wahoo",
"manual",
"fit-file",
"gpx-file"
],
"maxLength": 128,
"type": "string"
},
"sourceId": {
"description": "Identifier for this activity in the source system, e.g. a Strava activity ID.",
"maxLength": 256,
"type": "string"
},
"sportType": {
"description": "The type of activity.",
"knownValues": [
"ride"
],
"maxLength": 128,
"type": "string"
},
"startedAt": {
"description": "When the activity started.",
"format": "datetime",
"type": "string"
},
"title": {
"description": "User-provided name for the activity.",
"maxLength": 300,
"type": "string"
},
"totalWork": {
"description": "Total mechanical work in kilojoules.",
"minimum": 0,
"type": "integer"
},
"weather": {
"description": "Weather conditions during the activity.",
"ref": "#weather",
"type": "ref"
},
"weightedAvgPower": {
"description": "Normalized/weighted average power in watts.",
"minimum": 0,
"type": "integer"
}
},
"required": [
"sportType",
"startedAt",
"elapsedTime",
"movingTime",
"distance",
"createdAt"
],
"type": "object"
},
"type": "record"
},
"weather": {
"description": "Weather conditions observed during the activity.",
"properties": {
"apparentTemperature": {
"description": "Feels-like temperature in degrees Celsius. String-encoded decimal.",
"maxLength": 64,
"type": "string"
},
"avgTemperature": {
"description": "Average device-measured temperature in degrees Celsius. String-encoded decimal.",
"maxLength": 64,
"type": "string"
},
"cloudCover": {
"description": "Cloud cover as a percentage. String-encoded decimal.",
"maxLength": 64,
"type": "string"
},
"condition": {
"description": "General weather condition, e.g. 'Clear', 'Cloudy', 'Rain'.",
"maxLength": 128,
"type": "string"
},
"dewpoint": {
"description": "Dewpoint in degrees Celsius. String-encoded decimal.",
"maxLength": 64,
"type": "string"
},
"humidity": {
"description": "Relative humidity as a percentage. String-encoded decimal.",
"maxLength": 64,
"type": "string"
},
"maxTemperature": {
"description": "Maximum device-measured temperature in degrees Celsius. String-encoded decimal.",
"maxLength": 64,
"type": "string"
},
"precipitationIntensity": {
"description": "Precipitation intensity in mm/hr. String-encoded decimal.",
"maxLength": 64,
"type": "string"
},
"precipitationProbability": {
"description": "Precipitation probability as a percentage. String-encoded decimal.",
"maxLength": 64,
"type": "string"
},
"precipitationType": {
"description": "Type of precipitation, e.g. 'rain', 'snow', 'sleet'.",
"maxLength": 64,
"type": "string"
},
"pressure": {
"description": "Atmospheric pressure in hPa/mbar. String-encoded decimal.",
"maxLength": 64,
"type": "string"
},
"temperature": {
"description": "Air temperature in degrees Celsius. String-encoded decimal.",
"maxLength": 64,
"type": "string"
},
"uvIndex": {
"description": "UV index. String-encoded decimal.",
"maxLength": 64,
"type": "string"
},
"visibility": {
"description": "Visibility distance in kilometers. String-encoded decimal.",
"maxLength": 64,
"type": "string"
},
"windBearing": {
"description": "Wind direction in degrees (0-360). String-encoded decimal.",
"maxLength": 64,
"type": "string"
},
"windGust": {
"description": "Wind gust speed in meters per second. String-encoded decimal.",
"maxLength": 64,
"type": "string"
},
"windSpeed": {
"description": "Wind speed in meters per second. String-encoded decimal.",
"maxLength": 64,
"type": "string"
}
},
"type": "object"
}
},
"id": "app.thedistance.activity",
"lexicon": 1
}
Metadata
- DID
-
did:plc:x52h4ttzfk5rxxdmzinoevgo - CID
-
bafyreichqq37dzvredfd6gnv7bphrx4h523x55rcdmqumt54fl6dntl22i - Indexed At
- 2026-05-30 19:51 UTC
- AT-URI
-
at://did:plc:x52h4ttzfk5rxxdmzinoevgo/com.atproto.lexicon.schema/app.thedistance.activity
Version History (3 versions)
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.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.
-
social.pace.feed.activity record
A recording of an activity. Like running, walking, lifting weights, etc. Helpful to create the rkey tid from the start time and clock id 23 so you can upsert easily.
-
app.fitsky.workout record
A fitness workout record