Wahoo Fitness website screenshot

Wahoo Fitness

Wahoo Fitness is an Atlanta, Georgia endurance-training hardware and software company building cycling and run-training products: the ELEMNT family of GPS bike computers (ACE, ROAM, BOLT), the KICKR family of smart trainers and bikes (KICKR BIKE PRO/SHIFT, KICKR MOVE, KICKR CORE, KICKR ROLLR, KICKR RUN treadmill), TICKR and TRACKR heart-rate monitors and sensors (including TRACKR RADAR rear-facing radar), and SPEEDPLAY road and power pedals. Wahoo publishes a public Cloud API at api.wahooligan.com that allows third-party applications to authenticate Wahoo users via OAuth 2.0 and read/write user profiles, workouts, workout summaries, FIT-file uploads, structured workout plans, GPS routes, and cycling power zones. The Cloud API delivers workout_summary webhook events when the offline_data scope is granted. Companion AppleHealth / native iOS and Android APIs round out the developer surface; access is gated by the Wahoo API Agreement and an app-approval workflow that promotes integrations from sandbox to production.

3 APIs 0 Features
FitnessCyclingEndurance TrainingBike ComputersSmart TrainersIndoor CyclingHeart RatePower MetersGPSWearablesHardwareFIT FilesWebhooksOAuth

APIs

Wahoo Cloud API

OAuth 2.0 REST API that connects Wahoo users to third-party mobile and web applications. Manages user profiles, workouts, workout summaries, FIT-file uploads, structured workout...

Wahoo iOS API

Native iOS SDK for interacting with Wahoo devices directly over BLE/ANT+ and integrating with the Wahoo Cloud. Documented at the Wahoo developer portal under the iOS product. Ac...

Wahoo Android API

Native Android SDK for interacting with Wahoo devices over BLE/ANT+ and integrating with the Wahoo Cloud. Documented at the Wahoo developer portal under the Android product. Acc...

Collections

Pricing Plans

Wahoo Plans Pricing

2 plans

PLANS

Rate Limits

Wahoo Rate Limits

6 limits

RATE LIMITS

Event Specifications

Wahoo Cloud Webhooks

Wahoo Cloud delivers `workout_summary` webhook events to a callback URL registered against a developer application. Webhooks require the `offline_data` OAuth scope. Failed deliv...

ASYNCAPI

Semantic Vocabularies

Wahoo Context

0 classes · 6 properties

JSON-LD

Example Payloads

Wahoo Power Zones Example

13 fields

EXAMPLE

Resources

🔗
Website
Website
🌐
DeveloperPortal
DeveloperPortal
🔗
APIReference
APIReference
🔗
APIAgreement
APIAgreement
👥
GitHub
GitHub
💬
Support
Support
🎓
TrainingApp
TrainingApp
🔗
WahooX
WahooX
📰
Blog
Blog
🔗
Twitter
Twitter
🔗
Instagram
Instagram
👥
YouTube
YouTube
🔗
LinkedIn
LinkedIn

Sources

Raw ↑
opencollection: 1.0.0
info:
  name: Wahoo Cloud API
  version: v1
request:
  auth:
    type: oauth2
    flow: authorization_code
    authorizationUrl: https://api.wahooligan.com/oauth/authorize
    accessTokenUrl: https://api.wahooligan.com/oauth/token
    credentials:
      clientId: '{{clientId}}'
      clientSecret: '{{clientSecret}}'
items:
- info:
    name: Users
    type: folder
  items:
  - info:
      name: Get Authenticated User
      type: http
    http:
      method: GET
      url: https://api.wahooligan.com/v1/user
      auth:
        type: oauth2
        flow: authorization_code
        authorizationUrl: https://api.wahooligan.com/oauth/authorize
        accessTokenUrl: https://api.wahooligan.com/oauth/token
        credentials:
          clientId: '{{clientId}}'
          clientSecret: '{{clientSecret}}'
    docs: Get Authenticated User
  - info:
      name: Update Authenticated User
      type: http
    http:
      method: PUT
      url: https://api.wahooligan.com/v1/user
      body:
        type: json
        data: '{}'
      auth:
        type: oauth2
        flow: authorization_code
        authorizationUrl: https://api.wahooligan.com/oauth/authorize
        accessTokenUrl: https://api.wahooligan.com/oauth/token
        credentials:
          clientId: '{{clientId}}'
          clientSecret: '{{clientSecret}}'
    docs: Update Authenticated User
- info:
    name: Workouts
    type: folder
  items:
  - info:
      name: List Workouts
      type: http
    http:
      method: GET
      url: https://api.wahooligan.com/v1/workouts
      params:
      - name: page
        value: ''
        type: query
      - name: per_page
        value: ''
        type: query
      auth:
        type: oauth2
        flow: authorization_code
        authorizationUrl: https://api.wahooligan.com/oauth/authorize
        accessTokenUrl: https://api.wahooligan.com/oauth/token
        credentials:
          clientId: '{{clientId}}'
          clientSecret: '{{clientSecret}}'
    docs: List Workouts
  - info:
      name: Create Workout
      type: http
    http:
      method: POST
      url: https://api.wahooligan.com/v1/workouts
      body:
        type: json
        data: '{}'
      auth:
        type: oauth2
        flow: authorization_code
        authorizationUrl: https://api.wahooligan.com/oauth/authorize
        accessTokenUrl: https://api.wahooligan.com/oauth/token
        credentials:
          clientId: '{{clientId}}'
          clientSecret: '{{clientSecret}}'
    docs: Create Workout
  - info:
      name: Get Workout
      type: http
    http:
      method: GET
      url: https://api.wahooligan.com/v1/workouts/:id
      params:
      - name: id
        value: ''
        type: path
      auth:
        type: oauth2
        flow: authorization_code
        authorizationUrl: https://api.wahooligan.com/oauth/authorize
        accessTokenUrl: https://api.wahooligan.com/oauth/token
        credentials:
          clientId: '{{clientId}}'
          clientSecret: '{{clientSecret}}'
    docs: Get Workout
  - info:
      name: Update Workout
      type: http
    http:
      method: PUT
      url: https://api.wahooligan.com/v1/workouts/:id
      params:
      - name: id
        value: ''
        type: path
      body:
        type: json
        data: '{}'
      auth:
        type: oauth2
        flow: authorization_code
        authorizationUrl: https://api.wahooligan.com/oauth/authorize
        accessTokenUrl: https://api.wahooligan.com/oauth/token
        credentials:
          clientId: '{{clientId}}'
          clientSecret: '{{clientSecret}}'
    docs: Update Workout
  - info:
      name: Delete Workout
      type: http
    http:
      method: DELETE
      url: https://api.wahooligan.com/v1/workouts/:id
      params:
      - name: id
        value: ''
        type: path
      auth:
        type: oauth2
        flow: authorization_code
        authorizationUrl: https://api.wahooligan.com/oauth/authorize
        accessTokenUrl: https://api.wahooligan.com/oauth/token
        credentials:
          clientId: '{{clientId}}'
          clientSecret: '{{clientSecret}}'
    docs: Delete Workout
- info:
    name: Workout Summaries
    type: folder
  items:
  - info:
      name: Get Workout Summary
      type: http
    http:
      method: GET
      url: https://api.wahooligan.com/v1/workouts/:id/workout_summary
      params:
      - name: id
        value: ''
        type: path
      auth:
        type: oauth2
        flow: authorization_code
        authorizationUrl: https://api.wahooligan.com/oauth/authorize
        accessTokenUrl: https://api.wahooligan.com/oauth/token
        credentials:
          clientId: '{{clientId}}'
          clientSecret: '{{clientSecret}}'
    docs: Get Workout Summary
  - info:
      name: Create Workout Summary (Deprecated)
      type: http
    http:
      method: POST
      url: https://api.wahooligan.com/v1/workouts/:id/workout_summary
      params:
      - name: id
        value: ''
        type: path
      body:
        type: json
        data: '{}'
      auth:
        type: oauth2
        flow: authorization_code
        authorizationUrl: https://api.wahooligan.com/oauth/authorize
        accessTokenUrl: https://api.wahooligan.com/oauth/token
        credentials:
          clientId: '{{clientId}}'
          clientSecret: '{{clientSecret}}'
    docs: Create Workout Summary (Deprecated)
- info:
    name: Workout File Uploads
    type: folder
  items:
  - info:
      name: Upload Workout FIT File
      type: http
    http:
      method: POST
      url: https://api.wahooligan.com/v1/workout_file_uploads
      body:
        type: multipart-form
        data:
        - name: file
          type: text
          value: ''
      auth:
        type: oauth2
        flow: authorization_code
        authorizationUrl: https://api.wahooligan.com/oauth/authorize
        accessTokenUrl: https://api.wahooligan.com/oauth/token
        credentials:
          clientId: '{{clientId}}'
          clientSecret: '{{clientSecret}}'
    docs: Upload Workout FIT File
  - info:
      name: Get Workout File Upload Status
      type: http
    http:
      method: GET
      url: https://api.wahooligan.com/v1/workout_file_uploads/:token
      params:
      - name: token
        value: ''
        type: path
      auth:
        type: oauth2
        flow: authorization_code
        authorizationUrl: https://api.wahooligan.com/oauth/authorize
        accessTokenUrl: https://api.wahooligan.com/oauth/token
        credentials:
          clientId: '{{clientId}}'
          clientSecret: '{{clientSecret}}'
    docs: Get Workout File Upload Status
- info:
    name: Plans
    type: folder
  items:
  - info:
      name: List Plans
      type: http
    http:
      method: GET
      url: https://api.wahooligan.com/v1/plans
      params:
      - name: page
        value: ''
        type: query
      - name: per_page
        value: ''
        type: query
      auth:
        type: oauth2
        flow: authorization_code
        authorizationUrl: https://api.wahooligan.com/oauth/authorize
        accessTokenUrl: https://api.wahooligan.com/oauth/token
        credentials:
          clientId: '{{clientId}}'
          clientSecret: '{{clientSecret}}'
    docs: List Plans
  - info:
      name: Create Plan
      type: http
    http:
      method: POST
      url: https://api.wahooligan.com/v1/plans
      body:
        type: json
        data: '{}'
      auth:
        type: oauth2
        flow: authorization_code
        authorizationUrl: https://api.wahooligan.com/oauth/authorize
        accessTokenUrl: https://api.wahooligan.com/oauth/token
        credentials:
          clientId: '{{clientId}}'
          clientSecret: '{{clientSecret}}'
    docs: Create Plan
  - info:
      name: Get Plan
      type: http
    http:
      method: GET
      url: https://api.wahooligan.com/v1/plans/:id
      params:
      - name: id
        value: ''
        type: path
      auth:
        type: oauth2
        flow: authorization_code
        authorizationUrl: https://api.wahooligan.com/oauth/authorize
        accessTokenUrl: https://api.wahooligan.com/oauth/token
        credentials:
          clientId: '{{clientId}}'
          clientSecret: '{{clientSecret}}'
    docs: Get Plan
  - info:
      name: Update Plan
      type: http
    http:
      method: PUT
      url: https://api.wahooligan.com/v1/plans/:id
      params:
      - name: id
        value: ''
        type: path
      body:
        type: json
        data: '{}'
      auth:
        type: oauth2
        flow: authorization_code
        authorizationUrl: https://api.wahooligan.com/oauth/authorize
        accessTokenUrl: https://api.wahooligan.com/oauth/token
        credentials:
          clientId: '{{clientId}}'
          clientSecret: '{{clientSecret}}'
    docs: Update Plan
  - info:
      name: Delete Plan
      type: http
    http:
      method: DELETE
      url: https://api.wahooligan.com/v1/plans/:id
      params:
      - name: id
        value: ''
        type: path
      auth:
        type: oauth2
        flow: authorization_code
        authorizationUrl: https://api.wahooligan.com/oauth/authorize
        accessTokenUrl: https://api.wahooligan.com/oauth/token
        credentials:
          clientId: '{{clientId}}'
          clientSecret: '{{clientSecret}}'
    docs: Delete Plan
  - info:
      name: List Plans For Workout
      type: http
    http:
      method: GET
      url: https://api.wahooligan.com/v1/workouts/:workout_id/plans
      params:
      - name: workout_id
        value: ''
        type: path
      auth:
        type: oauth2
        flow: authorization_code
        authorizationUrl: https://api.wahooligan.com/oauth/authorize
        accessTokenUrl: https://api.wahooligan.com/oauth/token
        credentials:
          clientId: '{{clientId}}'
          clientSecret: '{{clientSecret}}'
    docs: List Plans For Workout
- info:
    name: Routes
    type: folder
  items:
  - info:
      name: List Routes
      type: http
    http:
      method: GET
      url: https://api.wahooligan.com/v1/routes
      params:
      - name: page
        value: ''
        type: query
      - name: per_page
        value: ''
        type: query
      auth:
        type: oauth2
        flow: authorization_code
        authorizationUrl: https://api.wahooligan.com/oauth/authorize
        accessTokenUrl: https://api.wahooligan.com/oauth/token
        credentials:
          clientId: '{{clientId}}'
          clientSecret: '{{clientSecret}}'
    docs: List Routes
  - info:
      name: Create Route
      type: http
    http:
      method: POST
      url: https://api.wahooligan.com/v1/routes
      body:
        type: multipart-form
        data: []
      auth:
        type: oauth2
        flow: authorization_code
        authorizationUrl: https://api.wahooligan.com/oauth/authorize
        accessTokenUrl: https://api.wahooligan.com/oauth/token
        credentials:
          clientId: '{{clientId}}'
          clientSecret: '{{clientSecret}}'
    docs: Create Route
  - info:
      name: Get Route
      type: http
    http:
      method: GET
      url: https://api.wahooligan.com/v1/routes/:id
      params:
      - name: id
        value: ''
        type: path
      auth:
        type: oauth2
        flow: authorization_code
        authorizationUrl: https://api.wahooligan.com/oauth/authorize
        accessTokenUrl: https://api.wahooligan.com/oauth/token
        credentials:
          clientId: '{{clientId}}'
          clientSecret: '{{clientSecret}}'
    docs: Get Route
  - info:
      name: Update Route
      type: http
    http:
      method: PUT
      url: https://api.wahooligan.com/v1/routes/:id
      params:
      - name: id
        value: ''
        type: path
      body:
        type: multipart-form
        data: []
      auth:
        type: oauth2
        flow: authorization_code
        authorizationUrl: https://api.wahooligan.com/oauth/authorize
        accessTokenUrl: https://api.wahooligan.com/oauth/token
        credentials:
          clientId: '{{clientId}}'
          clientSecret: '{{clientSecret}}'
    docs: Update Route
  - info:
      name: Delete Route
      type: http
    http:
      method: DELETE
      url: https://api.wahooligan.com/v1/routes/:id
      params:
      - name: id
        value: ''
        type: path
      auth:
        type: oauth2
        flow: authorization_code
        authorizationUrl: https://api.wahooligan.com/oauth/authorize
        accessTokenUrl: https://api.wahooligan.com/oauth/token
        credentials:
          clientId: '{{clientId}}'
          clientSecret: '{{clientSecret}}'
    docs: Delete Route
- info:
    name: Power Zones
    type: folder
  items:
  - info:
      name: List Power Zones
      type: http
    http:
      method: GET
      url: https://api.wahooligan.com/v1/power_zones
      auth:
        type: oauth2
        flow: authorization_code
        authorizationUrl: https://api.wahooligan.com/oauth/authorize
        accessTokenUrl: https://api.wahooligan.com/oauth/token
        credentials:
          clientId: '{{clientId}}'
          clientSecret: '{{clientSecret}}'
    docs: List Power Zones
  - info:
      name: Create Power Zones
      type: http
    http:
      method: POST
      url: https://api.wahooligan.com/v1/power_zones
      body:
        type: json
        data: '{}'
      auth:
        type: oauth2
        flow: authorization_code
        authorizationUrl: https://api.wahooligan.com/oauth/authorize
        accessTokenUrl: https://api.wahooligan.com/oauth/token
        credentials:
          clientId: '{{clientId}}'
          clientSecret: '{{clientSecret}}'
    docs: Create Power Zones
  - info:
      name: Get Power Zones
      type: http
    http:
      method: GET
      url: https://api.wahooligan.com/v1/power_zones/:id
      params:
      - name: id
        value: ''
        type: path
      auth:
        type: oauth2
        flow: authorization_code
        authorizationUrl: https://api.wahooligan.com/oauth/authorize
        accessTokenUrl: https://api.wahooligan.com/oauth/token
        credentials:
          clientId: '{{clientId}}'
          clientSecret: '{{clientSecret}}'
    docs: Get Power Zones
  - info:
      name: Update Power Zones
      type: http
    http:
      method: PUT
      url: https://api.wahooligan.com/v1/power_zones/:id
      params:
      - name: id
        value: ''
        type: path
      body:
        type: json
        data: '{}'
      auth:
        type: oauth2
        flow: authorization_code
        authorizationUrl: https://api.wahooligan.com/oauth/authorize
        accessTokenUrl: https://api.wahooligan.com/oauth/token
        credentials:
          clientId: '{{clientId}}'
          clientSecret: '{{clientSecret}}'
    docs: Update Power Zones
  - info:
      name: Delete Power Zones
      type: http
    http:
      method: DELETE
      url: https://api.wahooligan.com/v1/power_zones/:id
      params:
      - name: id
        value: ''
        type: path
      auth:
        type: oauth2
        flow: authorization_code
        authorizationUrl: https://api.wahooligan.com/oauth/authorize
        accessTokenUrl: https://api.wahooligan.com/oauth/token
        credentials:
          clientId: '{{clientId}}'
          clientSecret: '{{clientSecret}}'
    docs: Delete Power Zones
- info:
    name: Permissions
    type: folder
  items:
  - info:
      name: Revoke App Access
      type: http
    http:
      method: DELETE
      url: https://api.wahooligan.com/v1/permissions
      auth:
        type: oauth2
        flow: authorization_code
        authorizationUrl: https://api.wahooligan.com/oauth/authorize
        accessTokenUrl: https://api.wahooligan.com/oauth/token
        credentials:
          clientId: '{{clientId}}'
          clientSecret: '{{clientSecret}}'
    docs: Revoke App Access
bundled: true