{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://developers.strava.com/schemas/activity.json",
  "title": "Strava Activity",
  "description": "Represents a workout activity recorded on Strava. Activities capture workout data including GPS routes, performance metrics, and social interactions for running, cycling, and 200+ other sport types.",
  "type": "object",
  "required": ["id", "name", "type"],
  "properties": {
    "id": {
      "type": "integer",
      "description": "The unique identifier of the activity"
    },
    "name": {
      "type": "string",
      "description": "The name of the activity"
    },
    "description": {
      "type": ["string", "null"],
      "description": "The description of the activity"
    },
    "distance": {
      "type": "number",
      "description": "The distance of the activity in meters"
    },
    "moving_time": {
      "type": "integer",
      "description": "The activity's moving time in seconds"
    },
    "elapsed_time": {
      "type": "integer",
      "description": "The activity's elapsed time in seconds"
    },
    "total_elevation_gain": {
      "type": "number",
      "description": "The activity's total elevation gain in meters"
    },
    "type": {
      "type": "string",
      "description": "The type of activity (e.g., Run, Ride, Swim, Walk, Hike, VirtualRide)"
    },
    "sport_type": {
      "type": "string",
      "description": "The sport type of the activity (Strava v3.5+)"
    },
    "start_date": {
      "type": "string",
      "format": "date-time",
      "description": "The time at which the activity was started (UTC ISO 8601)"
    },
    "start_date_local": {
      "type": "string",
      "format": "date-time",
      "description": "The time at which the activity was started in local time"
    },
    "timezone": {
      "type": "string",
      "description": "The timezone of the activity (e.g., America/New_York)"
    },
    "start_latlng": {
      "type": "array",
      "items": {"type": "number"},
      "minItems": 2,
      "maxItems": 2,
      "description": "The start latitude/longitude as [lat, lng]"
    },
    "end_latlng": {
      "type": "array",
      "items": {"type": "number"},
      "minItems": 2,
      "maxItems": 2,
      "description": "The end latitude/longitude as [lat, lng]"
    },
    "achievement_count": {
      "type": "integer",
      "description": "The number of achievements gained during the activity"
    },
    "kudos_count": {
      "type": "integer",
      "description": "The number of kudos given to the activity"
    },
    "comment_count": {
      "type": "integer",
      "description": "The number of comments for the activity"
    },
    "trainer": {
      "type": "boolean",
      "description": "Whether the activity was recorded on a stationary trainer"
    },
    "commute": {
      "type": "boolean",
      "description": "Whether the activity was a commute"
    },
    "manual": {
      "type": "boolean",
      "description": "Whether the activity was manually entered"
    },
    "private": {
      "type": "boolean",
      "description": "Whether the activity is private"
    },
    "average_speed": {
      "type": "number",
      "description": "The activity's average speed in meters per second"
    },
    "max_speed": {
      "type": "number",
      "description": "The activity's max speed in meters per second"
    },
    "average_cadence": {
      "type": "number",
      "description": "The activity's average cadence in RPM"
    },
    "average_watts": {
      "type": "number",
      "description": "The activity's average wattage (cycling)"
    },
    "weighted_average_watts": {
      "type": "integer",
      "description": "The activity's normalized power in watts (cycling)"
    },
    "kilojoules": {
      "type": "number",
      "description": "The total work done in kilojoules (cycling)"
    },
    "average_heartrate": {
      "type": "number",
      "description": "The average heart rate in BPM"
    },
    "max_heartrate": {
      "type": "number",
      "description": "The maximum heart rate in BPM"
    },
    "suffer_score": {
      "type": ["integer", "null"],
      "description": "Strava's Relative Effort / Suffer Score (0-100+)"
    }
  }
}
