> **Building with AI coding agents?** Install the authstack plugin with one command. This equips your agent with accurate Scalekit implementation patterns.
>
> **Recommended** (the `-y` flags skip prompts, so the command runs without an interactive terminal):
> ```bash
> npx -y @scalekit-inc/cli setup -y
> ```
>
> Global:
> ```bash
> npm install -g @scalekit-inc/cli
> scalekit setup -y
> ```
>
> Supports Claude Code, Cursor, GitHub Copilot, Codex + skills for other Agent Skills-compatible agents in `~/.agents/skills`.
> Skills: integrate-agentkit, implement-saaskit, add-mcp-oauth, implement-sso, implement-scim.
> [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Connect AI agents to Strava

The Strava connector lets your AI agent act in each user's Strava account. Each user signs in to Strava once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 28 tools.

**Authentication:** OAuth 2.0
**Categories:** Analytics, Media
**Tools:** 28: 24 read, 4 write, 0 destructive
**Users sign in with:** OAuth
**OAuth app:** Your own Strava app
**Built by:** Scalekit connector
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=STRAVA)

## Setup

1. ### Install the SDK

   **Node.js**

   ```bash
   npm install @scalekit-sdk/node dotenv
   ```

   **Python**

   ```bash
   pip install scalekit-sdk-python python-dotenv
   ```

2. ### Set your credentials

   Add your Scalekit credentials to your `.env` file. Find values in **[app.scalekit.com](https://app.scalekit.com)** > **Developers** > **API Credentials**.

   ```sh title=".env"
   SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
   SCALEKIT_CLIENT_ID=<your-client-id>
   SCALEKIT_CLIENT_SECRET=<your-client-secret>
   ```

3. ### Create the Strava connection

   In **AgentKit > Connections**, create a Strava connection and copy its redirect URI. The name you give it is the `connection_name` your code passes. See [Configure connections](/agentkit/connections/).

4. ### Register an OAuth app

   Strava connections use your own OAuth app. Register one with Strava and add the redirect URI you copied.

   Then enter the app's Client ID and Client Secret on the Strava connection.

5. ### Authorize a user and make your first call

   **Node.js** (`quickstart.mts`)

   ```typescript
   import { ScalekitClient } from '@scalekit-sdk/node'
   import 'dotenv/config'
   import { createInterface } from 'node:readline/promises'

   const scalekit = new ScalekitClient(
     process.env.SCALEKIT_ENVIRONMENT_URL,
     process.env.SCALEKIT_CLIENT_ID,
     process.env.SCALEKIT_CLIENT_SECRET,
   )
   const actions = scalekit.actions

   const connector = 'strava'
   const identifier = 'user_123'

   // Generate an authorization link for the user
   const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
   console.log('Authorize Strava:', link)
   const rl = createInterface({ input: process.stdin, output: process.stdout })
   await rl.question('Press Enter after authorizing...')
   rl.close()

   // Make your first call
   const result = await actions.executeTool({
     connector,
     identifier,
     toolName: 'strava_get_athlete',
     toolInput: {},
   })
   console.log(result)
   ```

   ```bash
   npx tsx quickstart.mts
   ```

   **Python** (`quickstart.py`)

   ```python
   import os
   from scalekit import ScalekitClient
   from dotenv import load_dotenv
   load_dotenv()

   scalekit_client = ScalekitClient(
       env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),
       client_id=os.getenv("SCALEKIT_CLIENT_ID"),
       client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
   )
   actions = scalekit_client.actions

   connection_name = "strava"
   identifier = "user_123"

   # Generate an authorization link for the user
   link_response = actions.get_authorization_link(
       connection_name=connection_name,
       identifier=identifier,
   )
   print("Authorize Strava:", link_response.link)
   input("Press Enter after authorizing...")

   # Make your first call
   result = actions.execute_tool(
       tool_input={},
       tool_name="strava_get_athlete",
       connection_name=connection_name,
       identifier=identifier,
   )
   print(result)
   ```

   ```bash
   python quickstart.py
   ```

   Each user signs in once. See [Authorize a user](/agentkit/tools/authorize/) for the full flow and statuses.

## Tools

Pass the exact name to `execute_tool`, with an input like each tool's example. To ask for a tool that's missing, use the [request form](https://scalekitsupport.portal.usepylon.com/forms/request-a-connector-tool).

**Node.js**

```typescript
const result = await actions.executeTool({
  toolName: 'strava_explore_segments',
  toolInput: {
    bounds: '<bounds>',
  },
  connector: 'strava',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="strava_explore_segments",
    tool_input={
        "bounds": "<bounds>",
    },
    connection_name="strava",
    identifier="user_123",
)
```

`result.data` is the app's response as JSON, and `result.execution_id` (`executionId` in Node.js) is the ID of the call.

### `strava_explore_segments`

Explore Segments · Read-only

Find popular segments inside a rectangular map area.
Returns up to 10 segments with id, name, climb category, distance, grade and start and end coordinates.
Use this to discover segments; use strava_get_segment for one segment's detail.
Strava limits this endpoint to apps with Extended Access Tier permission.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `bounds` (`string`, required): Rectangle to search as four comma-separated numbers: south-west latitude, south-west longitude, north-east latitude, north-east longitude. Example: 37.821362,-122.505373,37.842038,-122.465977.
- `activity_type` (`string`, optional): Limit results to segments for this activity type. Example: running. One of: `running`, `riding`.
- `max_cat` (`integer`, optional): Maximum climb category to include, from 0 to 5; only applies to riding. Example: 4.
- `min_cat` (`integer`, optional): Minimum climb category to include, from 0 to 5; only applies to riding. Example: 1.

Example input: `{"bounds":"<bounds>"}`

### `strava_get_activity`

Get Activity · Read-only

Retrieve one activity by id.
Returns the detailed activity: name, sport type, distance, times, elevation, calories, gear, splits, laps and segment efforts.
Use strava_list_activities to find the id. Use strava_get_activity_streams for raw time-series data.
Requires activity:read, or activity:read_all for private activities.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): Numeric ID of the activity. Example: 12345678901.
- `include_all_efforts` (`boolean`, optional): Set to true to include every segment effort for the activity, not only the best ones. Example: true.

Example input: `{"id":12345678901}`

### `strava_get_activity_streams`

Get Activity Streams · Read-only

Retrieve raw time-series streams for an activity, such as heart rate, power, GPS and altitude.
Returns one object per requested stream type with its data array, series type and resolution.
Use strava_get_activity for summary fields; use this for per-sample data.
Requires activity:read, or activity:read_all for private activities.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): Numeric ID of the activity. Example: 12345678901.
- `keys` (`string`, required): Comma-separated list of stream types to return, from: time, distance, latlng, altitude, velocity_smooth, heartrate, cadence, watts, temp, moving, grade_smooth. Example: time,heartrate,watts.

Example input: `{"id":12345678901,"keys":"<keys>"}`

### `strava_get_activity_zones`

Get Activity Zones · Read-only

Retrieve heart rate and power zone distribution for an activity.
Returns time spent in each zone as buckets with min, max and seconds.
Use strava_get_athlete_zones for the athlete's zone boundaries instead.
This is a Strava subscriber feature. Requires activity:read, or activity:read_all for private activities.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): Numeric ID of the activity. Example: 12345678901.

Example input: `{"id":12345678901}`

### `strava_get_athlete`

Get Authenticated Athlete · Read-only

Retrieve the profile of the authenticated athlete.
Returns id, name, location, sex, premium flag, weight, FTP and, with profile:read_all, clubs, bikes and shoes.
Use this to learn the athlete id before calling strava_get_athlete_stats. Use strava_get_athlete_zones for heart rate and power zones.
The profile:read_all scope returns the detailed profile; other tokens get a summary.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `strava_get_athlete_stats`

Get Athlete Stats · Read-only

Retrieve activity totals for an athlete: recent, year-to-date and all-time figures for runs, rides and swims.
Returns distance, moving time, elevation gain and counts per sport, plus biggest ride and climb distances.
Use strava_get_athlete first to find the athlete id. Totals only include activities visible to Everyone.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): Numeric ID of the athlete (must be the authenticated athlete). Example: 12345678.

Example input: `{"id":12345678}`

### `strava_get_athlete_zones`

Get Athlete Zones · Read-only

Retrieve the heart rate and power zones configured for the authenticated athlete.
Returns zone boundaries (min and max) for heart rate and, when set, power.
Use strava_get_activity_zones for the time spent in each zone during one activity.
Requires the profile:read_all scope.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `strava_get_club`

Get Club · Read-only

Retrieve one club by id.
Returns the detailed club: name, sport type, location, member count, description and membership status of the authenticated athlete.
Use strava_list_athlete_clubs to find the club ids the athlete belongs to.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): Numeric ID of the club. Example: 231407.

Example input: `{"id":231407}`

### `strava_get_gear`

Get Gear · Read-only

Retrieve one piece of gear, a bike or a pair of shoes, by id.
Returns the detailed gear: name, brand, model, distance and primary flag.
Gear ids appear on activities (gear_id) and on the athlete profile.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`string`, required): Numeric ID of the gear item; bikes start with b and shoes with g. Example: b12345678.

Example input: `{"id":"<id>"}`

### `strava_get_route`

Get Route · Read-only

Retrieve one route by id.
Returns the route: name, description, distance, elevation gain, type, sub type, map polyline and segments.
Use strava_list_athlete_routes to find route ids.
Requires the read_all scope for private routes.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): Numeric ID of the route. Example: 3012345678901234567.

Example input: `{"id":3012345678901234700}`

### `strava_get_route_streams`

Get Route Streams · Read-only

Retrieve the geometry streams of a route: distance, coordinates and altitude.
Returns the route's stream set with data arrays, series type and resolution.
Use strava_get_route for route summary fields.
Requires the read_all scope for private routes.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): Numeric ID of the route. Example: 3012345678901234567.

Example input: `{"id":3012345678901234700}`

### `strava_get_segment`

Get Segment · Read-only

Retrieve one segment by id.
Returns the detailed segment: name, activity type, distance, grade, elevation, location, effort count and star count.
Use strava_explore_segments to find segments in an area; use strava_list_segment_efforts for the athlete's efforts on it.
The read_all scope is required for private segments and athlete-specific fields.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): Numeric ID of the segment. Example: 229781.

Example input: `{"id":229781}`

### `strava_get_segment_effort`

Get Segment Effort · Read-only

Retrieve one segment effort by id.
Returns the detailed effort: segment, activity, elapsed and moving time, start date, heart rate, power and achievements.
Use strava_list_segment_efforts to find effort ids.
Requires a Strava subscription.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): Numeric ID of the segment effort. Example: 67890123456.

Example input: `{"id":67890123456}`

### `strava_get_segment_effort_streams`

Get Segment Effort Streams · Read-only

Retrieve raw time-series streams for one segment effort.
Returns one object per requested stream type with its data array, series type and resolution.
Use strava_get_segment_streams for the segment's own geometry instead.
Requires the read_all scope.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): Numeric ID of the segment effort. Example: 67890123456.
- `keys` (`string`, required): Comma-separated list of stream types to return, from: time, distance, latlng, altitude, velocity_smooth, heartrate, cadence, watts, temp, moving, grade_smooth. Example: time,heartrate.

Example input: `{"id":67890123456,"keys":"<keys>"}`

### `strava_get_segment_streams`

Get Segment Streams · Read-only

Retrieve the geometry streams of a segment: distance, coordinates and altitude.
Returns one object per requested stream type with its data array, series type and resolution.
Use strava_get_segment_effort_streams for an athlete's effort data instead.
Requires the read_all scope for private segments.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): Numeric ID of the segment. Example: 229781.
- `keys` (`string`, required): Comma-separated list of stream types to return, from: distance, latlng, altitude. Example: distance,latlng,altitude.

Example input: `{"id":229781,"keys":"<keys>"}`

### `strava_get_upload`

Get Upload Status · Read-only

Check the processing status of an activity file upload.
Returns upload id, status text, error text and the resulting activity id once processing finishes.
Use this to poll an upload started outside this connector; it cannot start uploads itself.
Requires the activity:write scope.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): Numeric ID of the upload. Example: 1234567890.

Example input: `{"id":1234567890}`

### `strava_list_activities`

List Athlete Activities · Read-only

List activities of the authenticated athlete, newest first, optionally limited to a time window.
Returns summary activities with id, name, sport type, distance, moving time, elevation gain and start date.
Use this to find activity ids; use strava_get_activity for full detail on one activity.
Requires activity:read, or activity:read_all to include private activities.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `after` (`integer`, optional): Only return activities that started after this Unix epoch timestamp in seconds. Example: 1704067200.
- `before` (`integer`, optional): Only return activities that started before this Unix epoch timestamp in seconds. Example: 1735689600.
- `page` (`integer`, optional): Page number to fetch, starting at 1. Combine with per_page to walk through results. Example: 2.
- `per_page` (`integer`, optional): Number of items to return per page. Strava defaults to 30. Example: 50.

Example input: `{}`

### `strava_list_activity_comments`

List Activity Comments · Read-only

List comments on an activity.
Returns each comment with id, text, author and timestamp, plus a cursor for the next page when more exist.
Use strava_list_activity_kudos to see who gave kudos.
Requires activity:read, or activity:read_all for private activities.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): Numeric ID of the activity. Example: 12345678901.
- `after_cursor` (`string`, optional): Cursor of the last comment on the previous page; omit to fetch the first page. Example: eyJpZCI6MTIzfQ.
- `page_size` (`integer`, optional): Number of comments to return per page. Strava defaults to 30. Example: 30.

Example input: `{"id":12345678901}`

### `strava_list_activity_kudos`

List Activity Kudoers · Read-only

List the athletes who gave kudos to an activity.
Returns summary athletes with id, first name, last name and profile fields.
Use strava_list_activity_comments for comments instead.
Requires activity:read, or activity:read_all for private activities.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): Numeric ID of the activity. Example: 12345678901.
- `page` (`integer`, optional): Page number to fetch, starting at 1. Combine with per_page to walk through results. Example: 2.
- `per_page` (`integer`, optional): Number of items to return per page. Strava defaults to 30. Example: 50.

Example input: `{"id":12345678901}`

### `strava_list_activity_laps`

List Activity Laps · Read-only

List the laps recorded for an activity.
Returns each lap with name, elapsed and moving time, distance, start index and speed.
Use strava_get_activity for the whole activity; use this for per-lap splits.
Requires activity:read, or activity:read_all for private activities.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): Numeric ID of the activity. Example: 12345678901.

Example input: `{"id":12345678901}`

### `strava_list_athlete_clubs`

List Athlete Clubs · Read-only

List the clubs the authenticated athlete belongs to.
Returns summary clubs with id, name, sport type, member count and location.
Use strava_get_club for one club's full detail.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `page` (`integer`, optional): Page number to fetch, starting at 1. Combine with per_page to walk through results. Example: 2.
- `per_page` (`integer`, optional): Number of items to return per page. Strava defaults to 30. Example: 50.

Example input: `{}`

### `strava_list_athlete_routes`

List Athlete Routes · Read-only

List routes created by an athlete.
Returns routes with id, name, distance, elevation gain, type and map summary.
Use strava_get_route for one route's full detail. Strava lists routes of the authenticated athlete; private routes need the read_all scope.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): Numeric ID of the athlete (must be the authenticated athlete). Example: 12345678.
- `page` (`integer`, optional): Page number to fetch, starting at 1. Combine with per_page to walk through results. Example: 2.
- `per_page` (`integer`, optional): Number of items to return per page. Strava defaults to 30. Example: 50.

Example input: `{"id":12345678}`

### `strava_list_segment_efforts`

List Segment Efforts · Read-only

List the authenticated athlete's efforts on one segment, optionally within a date range.
Returns each effort with id, elapsed time, moving time, start date, activity id and rank fields.
Use strava_get_segment_effort for one effort's detail.
Requires a Strava subscription.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `segment_id` (`integer`, required): Numeric ID of the segment to list efforts for. Example: 229781.
- `end_date_local` (`string`, optional): Only return efforts on or before this ISO 8601 date-time. Example: 2025-12-31T23:59:59Z.
- `per_page` (`integer`, optional): Number of items to return per page. Strava defaults to 30. Example: 50.
- `start_date_local` (`string`, optional): Only return efforts on or after this ISO 8601 date-time. Example: 2025-01-01T00:00:00Z.

Example input: `{"segment_id":229781}`

### `strava_list_starred_segments`

List Starred Segments · Read-only

List segments starred by the authenticated athlete.
Returns summary segments with id, name, distance, grade and location.
Use strava_star_segment to star or unstar one.
Requires the read scope, or read_all for private segments.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `page` (`integer`, optional): Page number to fetch, starting at 1. Combine with per_page to walk through results. Example: 2.
- `per_page` (`integer`, optional): Number of items to return per page. Strava defaults to 30. Example: 50.

Example input: `{}`

### `strava_create_activity`

Create Manual Activity · Write

Create a manual activity for the authenticated athlete.
Returns the created activity with its id.
Use this to log an activity by hand; it cannot attach GPS files.
Requires the activity:write scope.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `elapsed_time` (`integer`, required): Duration of the activity in seconds. Example: 1800.
- `name` (`string`, required): Title of the activity. Example: Morning Run.
- `sport_type` (`string`, required): Sport type of the activity, using Strava's sport type names such as Run, Ride, Swim, Walk, Hike or Workout. Example: Run. One of: `AlpineSki`, `BackcountrySki`, `Badminton`, `Basketball`, `Canoeing`, `Cricket`, `Crossfit`, `Dance`, `EBikeRide`, `Elliptical`, `EMountainBikeRide`, `Golf`, `GravelRide`, `Handcycle`, `HighIntensityIntervalTraining`, `Hike`, `IceSkate`, `InlineSkate`, `Kayaking`, `Kitesurf`, `MountainBikeRide`, `NordicSki`, `Padel`, `PhysicalTherapy`, `Pickleball`, `Pilates`, `Racquetball`, `Ride`, `RockClimbing`, `RollerSki`, `Rowing`, `Run`, `Sail`, `Skateboard`, `Snowboard`, `Snowshoe`, `Soccer`, `Squash`, `StairStepper`, `StandUpPaddling`, `Surfing`, `Swim`, `TableTennis`, `Tennis`, `TrailRun`, `Velomobile`, `VirtualRide`, `VirtualRow`, `VirtualRun`, `Volleyball`, `Walk`, `WeightTraining`, `Wheelchair`, `Windsurf`, `Workout`, `Yoga`.
- `start_date_local` (`string`, required): Start time of the activity as an ISO 8601 date-time in the athlete's local time. Example: 2025-06-15T07:30:00Z.
- `commute` (`integer`, optional): Set to 1 to mark the activity as a commute. Example: 1. One of: `0`, `1`.
- `description` (`string`, optional): Free-text description of the activity. Example: Easy run along the river.
- `distance` (`number`, optional): Distance covered in meters. Example: 5000.
- `trainer` (`integer`, optional): Set to 1 to mark the activity as done on a trainer or treadmill. Example: 1. One of: `0`, `1`.

Example input: `{"elapsed_time":1800,"name":"<name>","sport_type":"AlpineSki","start_date_local":"<start_date_local>"}`

### `strava_star_segment`

Star Segment · Write

Star or unstar a segment for the authenticated athlete.
Returns the updated detailed segment.
Use strava_list_starred_segments to see the current stars.
Requires the profile:write scope.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): Numeric ID of the segment to star or unstar. Example: 229781.
- `starred` (`boolean`, required): True to star the segment, false to remove the star. Example: true.

Example input: `{"id":229781,"starred":true}`

### `strava_update_activity`

Update Activity · Write

Update fields of an existing activity owned by the authenticated athlete.
Returns the updated detailed activity.
Use this to rename, re-describe, change sport type, set gear or toggle commute, trainer and hidden flags.
Requires the activity:write scope.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`integer`, required): Numeric ID of the activity to update. Example: 12345678901.
- `commute` (`boolean`, optional): Whether the activity is a commute. Example: true.
- `description` (`string`, optional): New description for the activity. Example: Windy but fun.
- `gear_id` (`string`, optional): ID of the bike or shoes to attach, for example b12345678. Use none to clear the gear. Example: b12345678.
- `hide_from_home` (`boolean`, optional): Whether to mute the activity so it does not appear in followers' home feeds. Example: true.
- `name` (`string`, optional): New title for the activity. Example: Evening Ride.
- `sport_type` (`string`, optional): New sport type, using Strava's sport type names. Example: GravelRide. One of: `AlpineSki`, `BackcountrySki`, `Badminton`, `Basketball`, `Canoeing`, `Cricket`, `Crossfit`, `Dance`, `EBikeRide`, `Elliptical`, `EMountainBikeRide`, `Golf`, `GravelRide`, `Handcycle`, `HighIntensityIntervalTraining`, `Hike`, `IceSkate`, `InlineSkate`, `Kayaking`, `Kitesurf`, `MountainBikeRide`, `NordicSki`, `Padel`, `PhysicalTherapy`, `Pickleball`, `Pilates`, `Racquetball`, `Ride`, `RockClimbing`, `RollerSki`, `Rowing`, `Run`, `Sail`, `Skateboard`, `Snowboard`, `Snowshoe`, `Soccer`, `Squash`, `StairStepper`, `StandUpPaddling`, `Surfing`, `Swim`, `TableTennis`, `Tennis`, `TrailRun`, `Velomobile`, `VirtualRide`, `VirtualRow`, `VirtualRun`, `Volleyball`, `Walk`, `WeightTraining`, `Wheelchair`, `Windsurf`, `Workout`, `Yoga`.
- `trainer` (`boolean`, optional): Whether the activity was recorded on a trainer. Example: false.

Example input: `{"id":12345678901}`

### `strava_update_athlete`

Update Athlete Weight · Write

Update the weight of the authenticated athlete.
Returns the updated athlete profile.
Use this only to change weight; Strava exposes no other editable profile field here.
Requires the profile:write scope.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `weight` (`number`, required): New weight of the athlete in kilograms. Example: 72.5.

Example input: `{"weight":72.5}`

## Related

Other Analytics connectors ([all 109](/agentkit/connectors/?category=analytics)):

- [Microsoft 365](/agentkit/connectors/microsoft365/): Scalekit connector, OAuth, 317 tools
- [HubSpot](/agentkit/connectors/hubspot/): Scalekit connector, OAuth, 457 tools
- [Snowflake](/agentkit/connectors/snowflake/): Scalekit connector, OAuth, 42 tools


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
