TrainingPeaks

TrainingPeaks is an endurance-athlete training platform for cyclists, runners, triathletes, and their coaches - used to plan structured workouts, track completed activities, analyze fitness with TSS/CTL/ATL and power/heart-rate/pace zones, log metrics, and manage coach-athlete relationships. The TrainingPeaks Partners API (Public API) is an OAuth 2.0, JSON/HTTPS REST API at api.trainingpeaks.com (sandbox at api.sandbox.trainingpeaks.com) that lets approved third parties read and write athlete profiles, planned and completed workouts, structured workout files, metrics, nutrition, events, routes, and coach data on behalf of a user. API access is partner-gated - developers must apply for credentials and are not accepting requests for personal use - but the API surface is publicly documented on the PartnersAPI GitHub wiki.

10 APIs 0 Features
FitnessEndurance TrainingWorkoutsCoachingSportsHealthWearables

APIs

TrainingPeaks Athlete API

Retrieve the authenticated athlete's profile (athlete:profile scope) and their (deprecated) heart-rate, power, and speed training zones. The profile identifies the athlete and w...

TrainingPeaks Workouts API

Read planned and completed workouts by date range, create and update planned workouts (workouts:plan), fetch a workout by id, delete workouts, and poll for changes since a date....

TrainingPeaks Workout Details API

Premium-only analytics for completed workouts - sample-level details (workouts:details), mean-max power/pace/HR curves (meanmaxes), and time-in-zones breakdowns. Also posts a co...

TrainingPeaks Workout of the Day API

Retrieve the athlete's Workout of the Day (upcoming planned workouts for a date) and download the structured workout file for a planned workout in fit, erg, mrc, zwo, or json fo...

TrainingPeaks Metrics API

Read and write athlete wellness/body metrics (weight, HRV, resting heart rate, sleep, and more) by metric id, by date range, or per athlete id for coaches, and create new metric...

TrainingPeaks Nutrition API

Get, create, update, and delete an athlete's nutrition log entries (nutrition:read and nutrition:write). Nutrition reads by date range are a premium-athlete restricted endpoint.

TrainingPeaks Coach API

For coach-authorized tokens (coach:athletes scope) - list the coach's athletes, read the coach profile, manage assistant coaches and their athlete rosters, and read athletes' tr...

TrainingPeaks File Upload API

Upload a completed device/activity file (.FIT, .TCX, or .PWX) to an athlete's account via the asynchronous POST v3/file endpoint (file:write). Synchronous upload was deprecated ...

TrainingPeaks Events and Routes API

Read the athlete's next event and events by date, create new events (events:read and events:write), and read or create GPS routes for an athlete (routes:read and routes:write) t...

TrainingPeaks Webhooks API

Early Access CRUD for webhook subscriptions (webhook:read-subscriptions and webhook:write-subscriptions). Subscribe to workout-created, workout-updated, and workout-deleted even...

Collections

Pricing Plans

Rate Limits

Trainingpeaks Rate Limits

4 limits

RATE LIMITS

FinOps

Resources

🔗
DomainSecurity
DomainSecurity
🔑
Authentication
Authentication
🔑
OAuthScopes
OAuthScopes
👥
GitHubOrganization
GitHubOrganization
🔗
LinkedIn
LinkedIn
🔗
Website
Website
🔗
Documentation
Documentation
🔗
Plans
Plans
🔗
RateLimits
RateLimits
🔗
FinOps
FinOps
📰
Blog
Blog

Sources

Raw ↑
opencollection: 1.0.0
info:
  name: TrainingPeaks Partners API
  version: '2.0'
request:
  auth:
    type: bearer
    token: '{{accessToken}}'
items:
- info:
    name: Info
    type: folder
  items:
  - info:
      name: Get API version.
      type: http
    http:
      method: GET
      url: https://api.trainingpeaks.com/v1/info/version
    docs: Returns API build and version. No OAuth scope required.
- info:
    name: Athlete
    type: folder
  items:
  - info:
      name: Get athlete profile.
      type: http
    http:
      method: GET
      url: https://api.trainingpeaks.com/v1/athlete/profile
    docs: Scope athlete:profile. The authenticated athlete's profile, including premium/basic status.
  - info:
      name: Get athlete zones (deprecated).
      type: http
    http:
      method: GET
      url: https://api.trainingpeaks.com/v1/athlete/zones
    docs: Deprecated. Scope athlete:profile.
- info:
    name: Coach
    type: folder
  items:
  - info:
      name: Get coach profile.
      type: http
    http:
      method: GET
      url: https://api.trainingpeaks.com/v1/coach/profile
    docs: Scope coach:athletes.
  - info:
      name: List coach athletes.
      type: http
    http:
      method: GET
      url: https://api.trainingpeaks.com/v1/coach/athletes
    docs: Scope coach:athletes. Athletes attached to the authenticated coach.
  - info:
      name: List assistants.
      type: http
    http:
      method: GET
      url: https://api.trainingpeaks.com/v1/coach/assistants
    docs: Scope coach:athletes.
  - info:
      name: List assistant athletes.
      type: http
    http:
      method: GET
      url: https://api.trainingpeaks.com/v1/coach/assistants/:assistantId/athletes
      params:
      - name: assistantId
        value: ''
        type: path
        description: The assistant coach id.
    docs: Scope coach:athletes.
- info:
    name: Workouts
    type: folder
  items:
  - info:
      name: Get workouts by date range.
      type: http
    http:
      method: GET
      url: https://api.trainingpeaks.com/v2/workouts/:startDate/:endDate
      params:
      - name: startDate
        value: '2026-07-01'
        type: path
        description: Range start date.
      - name: endDate
        value: '2026-07-07'
        type: path
        description: Range end date.
      - name: includeDescription
        value: 'true'
        type: query
        description: Include the description field.
    docs: Scope workouts:read. Planned and completed workouts for the authenticated athlete.
  - info:
      name: Get athlete workouts by date range.
      type: http
    http:
      method: GET
      url: https://api.trainingpeaks.com/v2/workouts/:athleteId/:startDate/:endDate
      params:
      - name: athleteId
        value: ''
        type: path
        description: The athlete id.
      - name: startDate
        value: '2026-07-01'
        type: path
        description: Range start date.
      - name: endDate
        value: '2026-07-07'
        type: path
        description: Range end date.
    docs: Scope workouts:read. Coach access to an athlete's workouts.
  - info:
      name: Get changed workouts.
      type: http
    http:
      method: GET
      url: https://api.trainingpeaks.com/v2/workouts/changed
      params:
      - name: date
        value: '2026-07-01T00:00:00Z'
        type: query
        description: Changed-since timestamp.
    docs: Scope workouts:read. Incremental sync of changed workouts.
  - info:
      name: Get Workout of the Day.
      type: http
    http:
      method: GET
      url: https://api.trainingpeaks.com/v2/workouts/wod/:date
      params:
      - name: date
        value: '2026-07-03'
        type: path
        description: The WOD date.
    docs: Scope workouts:wod.
  - info:
      name: Get structured workout file.
      type: http
    http:
      method: GET
      url: https://api.trainingpeaks.com/v2/workouts/wod/file/:workoutId/
      params:
      - name: workoutId
        value: ''
        type: path
        description: The planned workout id.
      - name: format
        value: zwo
        type: query
        description: One of fit, erg, mrc, zwo, json.
    docs: Scope workouts:wod.
  - info:
      name: Create planned workout.
      type: http
    http:
      method: POST
      url: https://api.trainingpeaks.com/v2/workouts/plan
      body:
        type: json
        data: "{\n  \"AthleteId\": 54321,\n  \"Title\": \"Threshold Intervals\",\n  \"WorkoutType\": \"Bike\",\n  \"WorkoutDay\"\
          : \"2026-07-05T00:00:00Z\",\n  \"TotalTimePlanned\": 1.5\n}"
    docs: Scope workouts:plan. Coach or premium athlete.
  - info:
      name: Update planned workout.
      type: http
    http:
      method: PUT
      url: https://api.trainingpeaks.com/v2/workouts/plan/:id
      params:
      - name: id
        value: ''
        type: path
        description: The workout id.
      body:
        type: json
        data: "{\n  \"Title\": \"Threshold Intervals (updated)\"\n}"
    docs: Scope workouts:plan.
  - info:
      name: Get workout by id.
      type: http
    http:
      method: GET
      url: https://api.trainingpeaks.com/v2/workouts/id/:id
      params:
      - name: id
        value: ''
        type: path
        description: The workout id.
    docs: Scope workouts:read.
  - info:
      name: Delete workout by id.
      type: http
    http:
      method: DELETE
      url: https://api.trainingpeaks.com/v2/workouts/id/:id
      params:
      - name: id
        value: ''
        type: path
        description: The workout id.
    docs: Scope workouts:plan.
  - info:
      name: Get workout mean-max data (premium).
      type: http
    http:
      method: GET
      url: https://api.trainingpeaks.com/v2/workouts/id/:id/meanmaxes
      params:
      - name: id
        value: ''
        type: path
        description: The workout id.
    docs: Scope workouts:read. Premium athlete required.
  - info:
      name: Get workout time in zones (premium).
      type: http
    http:
      method: GET
      url: https://api.trainingpeaks.com/v2/workouts/id/:id/timeinzones
      params:
      - name: id
        value: ''
        type: path
        description: The workout id.
    docs: Scope workouts:read. Premium athlete required.
  - info:
      name: Get workout details (premium).
      type: http
    http:
      method: GET
      url: https://api.trainingpeaks.com/v2/workouts/id/:id/details
      params:
      - name: id
        value: ''
        type: path
        description: The workout id.
    docs: Scope workouts:details. Premium athlete, completed workout, uploaded file required.
  - info:
      name: Create workout comment.
      type: http
    http:
      method: POST
      url: https://api.trainingpeaks.com/v2/workouts/:athleteId/id/:workoutId/comment
      params:
      - name: athleteId
        value: ''
        type: path
        description: The athlete id.
      - name: workoutId
        value: ''
        type: path
        description: The workout id.
      body:
        type: json
        data: "{\n  \"Comment\": \"Great session, nail the recovery.\"\n}"
    docs: Scope workouts:details. Premium athlete required.
  - info:
      name: Get strength workouts.
      type: http
    http:
      method: GET
      url: https://api.trainingpeaks.com/v2/athletes/:athleteId/strength-workouts
      params:
      - name: athleteId
        value: ''
        type: path
        description: The athlete id.
    docs: Scope workouts:read.
- info:
    name: Metrics
    type: folder
  items:
  - info:
      name: Get metrics by date range (premium).
      type: http
    http:
      method: GET
      url: https://api.trainingpeaks.com/v2/metrics/:startDate/:endDate
      params:
      - name: startDate
        value: '2026-07-01'
        type: path
        description: Range start date.
      - name: endDate
        value: '2026-07-07'
        type: path
        description: Range end date.
    docs: Scope metrics:read. Premium athlete required.
  - info:
      name: Create metric.
      type: http
    http:
      method: POST
      url: https://api.trainingpeaks.com/v2/metrics
      body:
        type: json
        data: "{\n  \"AthleteId\": 54321,\n  \"Timestamp\": \"2026-07-03T06:30:00Z\",\n  \"WeightInKilograms\": 72.5,\n  \"\
          RestingHeartRate\": 48\n}"
    docs: Scope metrics:write.
- info:
    name: Nutrition
    type: folder
  items:
  - info:
      name: Get athlete nutrition.
      type: http
    http:
      method: GET
      url: https://api.trainingpeaks.com/v1/athletes/:athleteId/nutrition
      params:
      - name: athleteId
        value: ''
        type: path
        description: The athlete id.
      - name: startDate
        value: '2026-07-01'
        type: query
        description: Range start date.
      - name: endDate
        value: '2026-07-07'
        type: query
        description: Range end date.
    docs: Scope nutrition:read. Date-range reads require a premium athlete.
  - info:
      name: Create athlete nutrition.
      type: http
    http:
      method: POST
      url: https://api.trainingpeaks.com/v1/athletes/:athleteId/nutrition
      params:
      - name: athleteId
        value: ''
        type: path
        description: The athlete id.
      body:
        type: json
        data: "{\n  \"Date\": \"2026-07-03\",\n  \"Calories\": 2600,\n  \"CarbohydratesInGrams\": 380\n}"
    docs: Scope nutrition:write.
- info:
    name: File
    type: folder
  items:
  - info:
      name: Upload activity file (async).
      type: http
    http:
      method: POST
      url: https://api.trainingpeaks.com/v3/file
      body:
        type: json
        data: "{\n  \"AthleteId\": 54321,\n  \"FileName\": \"ride.fit\",\n  \"Data\": \"<base64-encoded FIT/TCX/PWX>\"\n}"
    docs: 'Scope file:write. Supported types: .FIT, .TCX, .PWX. Processed asynchronously.'
- info:
    name: Events
    type: folder
  items:
  - info:
      name: Get next event.
      type: http
    http:
      method: GET
      url: https://api.trainingpeaks.com/v2/events/next
    docs: Scope events:read.
  - info:
      name: Create event.
      type: http
    http:
      method: POST
      url: https://api.trainingpeaks.com/v2/events
      body:
        type: json
        data: "{\n  \"Name\": \"State Championship Road Race\",\n  \"Date\": \"2026-09-12\",\n  \"Priority\": \"A\"\n}"
    docs: Scope events:write.
- info:
    name: Routes
    type: folder
  items:
  - info:
      name: Get athlete routes.
      type: http
    http:
      method: GET
      url: https://api.trainingpeaks.com/v2/athletes/:athleteId/routes
      params:
      - name: athleteId
        value: ''
        type: path
        description: The athlete id.
    docs: Scope routes:read.
  - info:
      name: Create athlete route.
      type: http
    http:
      method: POST
      url: https://api.trainingpeaks.com/v2/athlete/:athleteId/routes
      params:
      - name: athleteId
        value: ''
        type: path
        description: The athlete id.
      body:
        type: json
        data: "{\n  \"Name\": \"Canyon Loop\",\n  \"Distance\": 42000,\n  \"ElevationGain\": 650\n}"
    docs: Scope routes:write.
- info:
    name: Webhooks (Early Access)
    type: folder
  items:
  - info:
      name: List webhook subscriptions.
      type: http
    http:
      method: GET
      url: https://api.trainingpeaks.com/v1/webhook/subscriptions
    docs: Scope webhook:read-subscriptions.
  - info:
      name: Create webhook subscription.
      type: http
    http:
      method: POST
      url: https://api.trainingpeaks.com/v1/webhook/subscriptions
      body:
        type: json
        data: "{\n  \"AthleteId\": 54321,\n  \"EventType\": \"workout-created\",\n  \"WebhookUrl\": \"https://api.mycompany.com/callback\"\
          \n}"
    docs: 'Scope webhook:write-subscriptions. EventType: workout-created, workout-updated, workout-deleted.'
  - info:
      name: Update webhook subscription.
      type: http
    http:
      method: PUT
      url: https://api.trainingpeaks.com/v1/webhook/subscriptions/:subscriptionId
      params:
      - name: subscriptionId
        value: ''
        type: path
        description: The subscription id (uuid).
      body:
        type: json
        data: "{\n  \"AthleteId\": 54321,\n  \"EventType\": \"workout-updated\",\n  \"WebhookUrl\": \"https://api.mycompany.com/callback\"\
          \n}"
    docs: Scope webhook:write-subscriptions.
  - info:
      name: Delete webhook subscription.
      type: http
    http:
      method: DELETE
      url: https://api.trainingpeaks.com/v1/webhook/subscriptions/:subscriptionId
      params:
      - name: subscriptionId
        value: ''
        type: path
        description: The subscription id (uuid).
    docs: Scope webhook:write-subscriptions.
bundled: true