world.treeline.activity.record

treeline.world

Documentation

A sports activity or outdoor adventure record logged on Treeline.

main record

A sports activity or outdoor adventure record logged on Treeline.

Record Key tid Timestamp-based ID

Properties

clonedFrom ref com.atproto.repo.strongRef Optional

Optional reference to the activity this record was saved from (Save as My Activity). The AppView checks the source's reuse rules at index time and hides this record's geometry and co-athlete link when they are not met.

coAthletes array of string did Optional

DIDs of athletes who participated in this activity together.

maxLength: 50 items
createdAt string datetime Required

Record creation timestamp on client/PDS (ISO 8601 UTC format).

description string Optional

Detailed notes, trip report, weather observations, or gear notes.

maxLength: 30000 bytesmaxGraphemes: 3000 graphemes
deviceInfo ref #deviceMetadata Optional

Recording hardware or sensor device metadata.

endedAt string datetime Optional

Timestamp when the activity finished (ISO 8601 UTC format).

geometry ref #geometry Optional

Simplified GeoJSON LineString path (recommended <= 250 points) for lightweight relay and feed distribution.

hideStartEndMeters integer Optional

Distance trimmed from each end of the public preview only. The original telemetry blob remains untrimmed and publicly retrievable.

minimum: 0maximum: 100000
privacy string Optional

AppView visibility, not confidentiality of the public repository or original blob. New clients publish public or unlisted; unsupported restricted values must fail closed.

Known values: public, unlisted, followers, private, permissioned
Default: public
rawBlob blob Optional

Full-resolution original raw telemetry file (.fit, .gpx, .tcx) stored directly as an ATProto blob on the athlete's PDS.

maxSize: 52.4 MB
route ref com.atproto.repo.strongRef Optional

Optional reference to a world.treeline.route.record course or trail guide followed.

sport string Required

Sport or activity type category.

Known values: 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
startedAt string datetime Required

Timestamp when the activity started (ISO 8601 UTC format).

stats ref #stats Optional

Summary metrics and telemetry statistics for the activity.

tags array of string Optional

Categorization tags (e.g. race, commute, intervals, summits).

maxLength: 20 items
title string Required

Display title of the activity (e.g., Morning Trail Run, Grand Canyon R2R2R).

maxLength: 3000 bytesmaxGraphemes: 300 graphemes
View raw schema
{
  "description": "A sports activity or outdoor adventure record logged on Treeline.",
  "key": "tid",
  "record": {
    "properties": {
      "clonedFrom": {
        "description": "Optional reference to the activity this record was saved from (Save as My Activity). The AppView checks the source's reuse rules at index time and hides this record's geometry and co-athlete link when they are not met.",
        "ref": "com.atproto.repo.strongRef",
        "type": "ref"
      },
      "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"
}
deviceMetadata object

Metadata about the recording hardware or sensor device.

Properties

manufacturer string Optional

Manufacturer name (e.g. Garmin, Wahoo, COROS, Apple).

maxLength: 100 bytes
model string Optional

Device model name (e.g. Forerunner 965, ELEMNT BOLT, Apple Watch Ultra).

maxLength: 100 bytes
View raw schema
{
  "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 object

Simplified GeoJSON LineString geometry representing the activity path.

Properties

coordinates array of unknown Required

RDP-simplified array of coordinate tuples [lon, lat, ele?].

maxLength: 500 items
type string Required

GeoJSON geometry type specifier.

View raw schema
{
  "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"
}
stats object

Summary telemetry metrics calculated from the raw activity dataset.

Properties

averageCadenceRpm integer Optional

[Deprecated: use avgCadence] Average cadence in rpm or spm.

minimum: 0
averageHeartRateBpm integer Optional

[Deprecated: use avgHeartRateBpm] Average heart rate in beats per minute.

minimum: 0maximum: 300
averagePowerWatts integer Optional

[Deprecated: use avgPowerWatts] Average power output in watts.

minimum: 0
averageSpeedMps unknown Optional

[Deprecated: use avgSpeedMps] Average moving speed in meters per second.

avgCadence integer Optional

Mean cadence (rpm or spm).

minimum: 0
avgCadenceRpm integer Optional

Mean cadence in revolutions or steps per minute.

minimum: 0
avgHeartRateBpm integer Optional

Mean heart rate in beats per minute.

minimum: 0maximum: 300
avgPowerWatts integer Optional

Mean power output in watts from a recorded sensor.

minimum: 0
avgSpeedMps unknown Optional

Calculated mean moving speed in meters per second.

calories integer Optional

Estimated energy expenditure in kilocalories.

minimum: 0
distanceMeters integer Optional

Total distance traveled in meters.

minimum: 0
durationSeconds integer Optional

[Deprecated: use elapsedDurationSeconds] Total elapsed time in seconds.

minimum: 0
elapsedDurationSeconds integer Optional

Total elapsed time including pauses in seconds.

minimum: 0
elevationGainMeters integer Optional

Cumulative elevation gain in meters.

minimum: 0
elevationLossMeters integer Optional

Cumulative elevation loss in meters.

minimum: 0
energyKilojoules integer Optional

Total mechanical work in kilojoules (session.total_work or avgPowerWatts * movingDurationSeconds / 1000).

minimum: 0
maxHeartRateBpm integer Optional

Maximum recorded heart rate in beats per minute.

minimum: 0maximum: 300
maxPowerWatts integer Optional

Maximum power output in watts.

minimum: 0
maxSpeedMps unknown Optional

Maximum recorded speed in meters per second.

movingDurationSeconds integer Optional

Active moving duration excluding pauses in seconds.

minimum: 0
movingTimeSeconds integer Optional

[Deprecated: use movingDurationSeconds] Total moving time excluding pauses in seconds.

minimum: 0
temperatureCelsius integer Optional

Average ambient temperature in degrees Celsius.

View raw schema
{
  "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"
}

Lexicon Garden

@