world.treeline.activity.record
{
"$type": "com.atproto.lexicon.schema",
"defs": {
"deviceMetadata": {
"description": "Metadata about the recording hardware or sensor device.",
"properties": {
"manufacturer": {
"description": "Manufacturer name (e.g. Garmin, Wahoo, COROS, Apple).",
"maxLength": 100,
"type": "string"
},
"model": {
"description": "Device model name (e.g. Forerunner 965, ELEMNT BOLT, Apple Watch Ultra).",
"maxLength": 100,
"type": "string"
}
},
"type": "object"
},
"geometry": {
"description": "Simplified GeoJSON LineString geometry representing the activity path.",
"properties": {
"coordinates": {
"description": "RDP-simplified array of coordinate tuples [lon, lat, ele?].",
"items": {
"type": "unknown"
},
"maxLength": 500,
"type": "array"
},
"type": {
"const": "LineString",
"description": "GeoJSON geometry type specifier.",
"type": "string"
}
},
"required": [
"type",
"coordinates"
],
"type": "object"
},
"main": {
"description": "A sports activity or outdoor adventure record logged on Treeline.",
"key": "tid",
"record": {
"properties": {
"coAthletes": {
"description": "DIDs of athletes who participated in this activity together.",
"items": {
"format": "did",
"type": "string"
},
"maxLength": 50,
"type": "array"
},
"createdAt": {
"description": "Record creation timestamp on client/PDS (ISO 8601 UTC format).",
"format": "datetime",
"type": "string"
},
"description": {
"description": "Detailed notes, trip report, weather observations, or gear notes.",
"maxGraphemes": 3000,
"maxLength": 30000,
"type": "string"
},
"deviceInfo": {
"description": "Recording hardware or sensor device metadata.",
"ref": "#deviceMetadata",
"type": "ref"
},
"endedAt": {
"description": "Timestamp when the activity finished (ISO 8601 UTC format).",
"format": "datetime",
"type": "string"
},
"gearRef": {
"description": "Optional reference to a world.treeline.gear.item used in this activity.",
"ref": "com.atproto.repo.strongRef",
"type": "ref"
},
"geometry": {
"description": "Simplified GeoJSON LineString path (recommended <= 250 points) for lightweight relay and feed distribution.",
"ref": "#geometry",
"type": "ref"
},
"hideStartEndMeters": {
"description": "Distance trimmed from each end of the public preview only. The original telemetry blob remains untrimmed and publicly retrievable.",
"maximum": 100000,
"minimum": 0,
"type": "integer"
},
"privacy": {
"default": "public",
"description": "AppView visibility, not confidentiality of the public repository or original blob. New clients publish public or unlisted; unsupported restricted values must fail closed.",
"knownValues": [
"public",
"unlisted",
"followers",
"private",
"permissioned"
],
"type": "string"
},
"rawBlob": {
"accept": [
"application/gpx+xml",
"application/vnd.ant.fit",
"application/vnd.garmin.tcx+xml",
"application/octet-stream",
"application/xml",
"text/xml"
],
"description": "Full-resolution original raw telemetry file (.fit, .gpx, .tcx) stored directly as an ATProto blob on the athlete's PDS.",
"maxSize": 52428800,
"type": "blob"
},
"route": {
"description": "Optional reference to a world.treeline.route.record course or trail guide followed.",
"ref": "com.atproto.repo.strongRef",
"type": "ref"
},
"routeRef": {
"description": "Optional reference to a world.treeline.route.record followed.",
"ref": "com.atproto.repo.strongRef",
"type": "ref"
},
"sport": {
"description": "Sport or activity type category.",
"knownValues": [
"run",
"trail_run",
"walk",
"hike",
"ride",
"mountain_bike",
"gravel_ride",
"e_bike",
"road_bike",
"handcycle",
"ski",
"snowboard",
"backcountry_ski",
"nordic_ski",
"roller_ski",
"swim",
"open_water_swim",
"kayak",
"canoe",
"rowing",
"paddleboard",
"surf",
"kitesurf",
"windsurf",
"sail",
"climb",
"boulder",
"mountaineering",
"wheelchair",
"workout",
"yoga",
"crossfit",
"weight_training",
"pilates",
"hiit",
"other"
],
"type": "string"
},
"startedAt": {
"description": "Timestamp when the activity started (ISO 8601 UTC format).",
"format": "datetime",
"type": "string"
},
"stats": {
"description": "Summary metrics and telemetry statistics for the activity.",
"ref": "#stats",
"type": "ref"
},
"tags": {
"description": "Categorization tags (e.g. race, commute, intervals, summits).",
"items": {
"maxLength": 64,
"type": "string"
},
"maxLength": 20,
"type": "array"
},
"title": {
"description": "Display title of the activity (e.g., Morning Trail Run, Grand Canyon R2R2R).",
"maxGraphemes": 300,
"maxLength": 3000,
"type": "string"
}
},
"required": [
"title",
"sport",
"startedAt",
"createdAt"
],
"type": "object"
},
"type": "record"
},
"stats": {
"description": "Summary telemetry metrics calculated from the raw activity dataset.",
"properties": {
"averageCadenceRpm": {
"description": "[Deprecated: use avgCadence] Average cadence in rpm or spm.",
"minimum": 0,
"type": "integer"
},
"averageHeartRateBpm": {
"description": "[Deprecated: use avgHeartRateBpm] Average heart rate in beats per minute.",
"maximum": 300,
"minimum": 0,
"type": "integer"
},
"averagePowerWatts": {
"description": "[Deprecated: use avgPowerWatts] Average power output in watts.",
"minimum": 0,
"type": "integer"
},
"averageSpeedMps": {
"description": "[Deprecated: use avgSpeedMps] Average moving speed in meters per second.",
"type": "unknown"
},
"avgCadence": {
"description": "Mean cadence (rpm or spm).",
"minimum": 0,
"type": "integer"
},
"avgCadenceRpm": {
"description": "Mean cadence in revolutions or steps per minute.",
"minimum": 0,
"type": "integer"
},
"avgHeartRateBpm": {
"description": "Mean heart rate in beats per minute.",
"maximum": 300,
"minimum": 0,
"type": "integer"
},
"avgPowerWatts": {
"description": "Mean power output in watts from a recorded sensor.",
"minimum": 0,
"type": "integer"
},
"avgSpeedMps": {
"description": "Calculated mean moving speed in meters per second.",
"type": "unknown"
},
"calories": {
"description": "Estimated energy expenditure in kilocalories.",
"minimum": 0,
"type": "integer"
},
"distanceMeters": {
"description": "Total distance traveled in meters.",
"minimum": 0,
"type": "integer"
},
"durationSeconds": {
"description": "[Deprecated: use elapsedDurationSeconds] Total elapsed time in seconds.",
"minimum": 0,
"type": "integer"
},
"elapsedDurationSeconds": {
"description": "Total elapsed time including pauses in seconds.",
"minimum": 0,
"type": "integer"
},
"elevationGainMeters": {
"description": "Cumulative elevation gain in meters.",
"minimum": 0,
"type": "integer"
},
"elevationLossMeters": {
"description": "Cumulative elevation loss in meters.",
"minimum": 0,
"type": "integer"
},
"energyKilojoules": {
"description": "Total mechanical work in kilojoules (session.total_work or avgPowerWatts * movingDurationSeconds / 1000).",
"minimum": 0,
"type": "integer"
},
"maxHeartRateBpm": {
"description": "Maximum recorded heart rate in beats per minute.",
"maximum": 300,
"minimum": 0,
"type": "integer"
},
"maxPowerWatts": {
"description": "Maximum power output in watts.",
"minimum": 0,
"type": "integer"
},
"maxSpeedMps": {
"description": "Maximum recorded speed in meters per second.",
"type": "unknown"
},
"movingDurationSeconds": {
"description": "Active moving duration excluding pauses in seconds.",
"minimum": 0,
"type": "integer"
},
"movingTimeSeconds": {
"description": "[Deprecated: use movingDurationSeconds] Total moving time excluding pauses in seconds.",
"minimum": 0,
"type": "integer"
},
"temperatureCelsius": {
"description": "Average ambient temperature in degrees Celsius.",
"type": "integer"
}
},
"type": "object"
}
},
"id": "world.treeline.activity.record",
"lexicon": 1
}
Metadata
- DID
-
did:plc:sjejpugpajgvxweilujzjcmq - CID
-
bafyreigorvbwt34jctsshbkecjpbccdq2vvpa3xm54ebt3xmrensk2bkfm - Indexed At
- 2026-10-03 15:08 UTC
- AT-URI
-
at://did:plc:sjejpugpajgvxweilujzjcmq/com.atproto.lexicon.schema/world.treeline.activity.record
Version History (3 versions)
Similar Lexicons
Lexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.
-
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.
-
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
-
world.treeline.route.record record
A curated trail guide, course, or route record published on Treeline.