Wahoo Fitness Cloud API
Access Wahoo Fitness Cloud API to fetch workouts, download FIT files, and analyze training data (power, HR, cadence, GPS).
Rank
62
Safety
84
Downloads
1.2k
Updated
Oct 11, 2026
Version
0.2.1
Source
CLAWHUB
About
What it does, and when to use it.
Capability contract not published. No trust telemetry is available yet. 1.2K downloads reported by the source. Last updated 10/11/2026.
Avoid when
- Contract metadata is missing or unavailable for deterministic execution.
Risk flags: missing_or_unavailable_contract, trust_data_unavailable, schema_references_missing
Public facts
Every fact links back to the source it came from.
- Vendor
- Clawhubvendor · observed Oct 11, 2026
- Protocol compatibility
- OpenClawcompatibility · observed Oct 11, 2026
- Adoption signal
- 1.2K downloadsadoption · observed Oct 11, 2026
- Latest release
- 0.2.1release · observed May 26, 2026
- Handshake status
- UNKNOWNsecurity
Install and run
Setup complexity: low.
clawhub skill install s1755sfb9q331dk6dwfxy0qsen86093e:wahoo-cloud- Install using `clawhub skill install s1755sfb9q331dk6dwfxy0qsen86093e:wahoo-cloud` in an isolated environment before connecting it to live workloads.
- No published capability contract is available yet, so validate auth and request/response behavior manually.
- Review the upstream CLAWHUB listing at https://clawhub.ai/tgmerritt/wahoo-cloud before using production credentials.
Contract: missing
curl -s "https://www.xpersona.co/api/v1/agents/clawhub-tgmerritt-wahoo-cloud/snapshot"
Documentation
CLAWHUB
146,504 characters of source documentation, loaded on request.
Extracted files
5 files captured from the source.
SKILL.md
---
name: wahoo-cloud
description: Access Wahoo Fitness Cloud API to fetch workouts, download FIT files, and analyze training data (power, HR, cadence, GPS).
homepage: https://cloud-api.wahooligan.com/
metadata: {"clawdbot":{"emoji":"🚴","requires":{"bins":["python3"],"env":["WAHOO_CLIENT_ID","WAHOO_CLIENT_SECRET"]},"primaryEnv":"WAHOO_CLIENT_ID"}}
---
# Wahoo Cloud Skill
Provides programmatic access to Wahoo Fitness Cloud data. This skill manages OAuth2 authentication, workout synchronization, and FIT file processing.
## 🚀 Agent Quickstart
When a user asks about their Wahoo workouts, training, or fitness data, use these workflows:
| User Intent | Action / Command |
| :--- | :--- |
| **"Sync my Wahoo workouts"** | `python3 {baseDir}/scripts/fetch_workouts.py` |
| **"Show my recent rides"** | Query the local SQLite DB: `$WAHOO_BASE_DIR/wahoo.db (default: ~/.wahoo/wahoo.db)` — schema below |
| **"Parse this FIT file"** | `python3 {baseDir}/scripts/parse_fit.py <PATH_TO_FIT>` |
| **"Connect/Set up Wahoo"** | 1. Verify `WAHOO_CLIENT_ID` and `WAHOO_CLIENT_SECRET` exist.<br>2. If missing, ask user to provide them.<br>3. Run `python3 {baseDir}/scripts/oauth_setup.py` |
| **"Token expired / persistent 401 errors"** | Run python3 {baseDir}/scripts/oauth_setup.py to re-authorize. Force-refresh without browser: python3 -c "import sys; sys.path.insert(0,'lib'); import wahoo_auth; wahoo_auth.refresh()" |
## 🛠 Key Workflows
### 1. Authentication & Setup
This skill requires a Wahoo Developer App.
- **Credentials:** Must be provided as `WAHOO_CLIENT_ID` and `WAHOO_CLIENT_SECRET`.
- **OAuth Flow:** If tokens are missing or expired, run `scripts/oauth_setup.py`. This is an **interactive** process. You must present the URL to the user, wait for them to authenticate, and then ask them to paste the resulting redirect URL/code back into the terminal.
- **Token Storage:** Tokens are stored at $WAHOO_BASE_DIR/secrets/wahoo_tokens.json (controlled by WAHOO_BASE_DIR env var, default ~/.wahoo).
### 2. Data Synchronization
- **Command:** `python3 scripts/fetch_workouts.py`
- **Behavior:** Idempotent. It fetches new workouts, downloads FIT files, and populates the local SQLite database.
- **Database Path:** `$WAHOO_BASE_DIR/wahoo.db (default: ~/.wahoo/wahoo.db)`
- **Rate Limits:** The script automatically handles Wahoo's sandbox rate limits (25 req / 5 min) using exponential backoff.
### 3. Querying Training Data
Once synced, use the following SQL patterns to answer user questions:
- **Recent Workouts:** `SELECT * FROM workouts ORDER BY starts DESC LIMIT 10;`
- **Power/HR Series:** `SELECT timestamp, power_w, heart_rate, cadence FROM records WHERE workout_id = <id> ORDER BY timestamp;`
- **Elevation/GPS:** `SELECT timestamp, position_lat_deg, position_long_deg, enhanced_altitude_m FROM records WHERE workout_id = <id>;`
## ⚠️ Critical Constraints & Pitfalls
- **Rate Limiting:** Wahoo Sandbox is strict. Do not attempt to loop calls rapidly; rely on the `wahoo_apREADME.md
# Wahoo Skill An agentic skill for synchronizing Wahoo fitness data into a local SQLite database. Designed to be high-signal for LLM agents and comprehensive for human developers. ## 🚀 Agent Quickstart (High-Signal) Use these commands to interact with Wahoo data. ### Core Capabilities - **Sync Data**: `python3 scripts/fetch_workouts.py [--limit N]` - Fetches workout metadata and downloads/parses FIT files. - `--limit N`: Only process the N most recent workouts (useful for testing/rate-limit avoidance). - **Auth Setup**: `python3 scripts/oauth_setup.py` - Interactive OAuth2 flow to generate access and refresh tokens. ### Environment Variables | Variable | Description | Default | | :--- | :--- | :--- | | `WAHOO_BASE_DIR` | Base directory for all Wahoo files (secrets, DB, FITs) | `~/.wahoo` | | `WAHOO_CLIENT_ID` | Wahoo API Client ID | *Required* | | `WAHOO_CLIENT_SECRET` | Wahoo API Client Secret | *Required* | ### Data Schema (SQLite) The data is stored in `[WAHOO_BASE_DIR]/wahoo.db`. **Key Tables:** - `workouts`: Metadata (name, starts, distance, duration, power, heart rate, etc.) - `laps`: Detailed lap-by-lap breakdown of each workout. - `records`: High-resolution sensor data (power, heart rate, cadence, GPS). - `device_info`: Hardware details used during the workout. - `zones`: Heart rate and power zone data. - `sync_log`: History of synchronization runs. --- ## 🛠 Developer Guide (Human-Centric) ## Overview This skill provides a bridge between the Wahoo API and a local, structured SQLite database. It handles the complexities of OAuth2 token refreshing, paginated API requests, FIT file downloading, and intensive data parsing. ## Architecture ### 1. Authentication Flow The skill uses the OAuth2 Authorization Code flow. - **Tokens Location**: `[WAHOO_BASE_DIR]/secrets/wahoo_tokens.json` - **Environment File**: `[WAHOO_BASE_DIR]/secrets/wahoo.env` (Optional, used to load credentials). ### 2. Sync Workflow The `fetch_workouts.py` script follows this pipeline: 1. **Auth**: Ensures a valid access token is available (refreshes if necessary). 2. **Discovery**: Iterates through `/v1/workouts` to find new or updated metadata. 3. **Metadata Upsert**: Updates the `workouts` table with the latest summary data. 4. **FIT Processing**: - If a workout lacks a local FIT file or parsed data: - Downloads the `.fit` file from the `fit_url` provided by Wahoo. - Uses `fit_parser` to extract high-resolution metrics. - Populates `laps`, `records`, `device_info`, and `zones` tables. ### 3. Database Schema The schema is managed via `schema/wahoo_db_schema.sql` and incremental migrations defined in `scripts/fetch_workouts.py`. ## Installation & Setup 1. **Clone the repository.** 2. **Install dependencies**: ```bash pip install -r requirements.txt ``` 3. **Configure Credentials**: Create a `.env` file in your `WAHOO_BASE_DIR` or set them in your shell: ```bash export WAHOO_CLIENT_ID='your_id' export WAHOO_CLIENT_SECR
_meta.json
{
"ownerId": "kn705nhwfhwpf3p7cras3v44wd861fwr",
"slug": "wahoo-cloud",
"version": "0.2.1",
"publishedAt": 1779828331856
}LICENSE.md
MIT License Copyright (c) 2026 Tyler Merritt Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
skill-card.md
## Description: Access Wahoo Fitness Cloud API to fetch workouts, download FIT files, and analyze training data (power, HR, cadence, GPS). This skill is ready for commercial/non-commercial use. ## Publisher: [tgmerritt](https://clawhub.ai/user/tgmerritt) ### License/Terms of Use: MIT ## Use Case: Developers and agents use this skill to connect to Wahoo Fitness Cloud, synchronize workout data, parse FIT files, and answer training questions from a local SQLite database. ### Deployment Geography for Use: Global ## Known Risks and Mitigations: Risk: OAuth tokens and detailed workout or GPS data may be exposed on shared machines, synced folders, or agent workspaces. Mitigation: Use a private WAHOO_BASE_DIR with restrictive permissions and avoid placing the database, FIT files, or token files in shared locations. Risk: OAuth setup output and logs can reveal sensitive authentication details. Mitigation: Avoid logging OAuth setup sessions or sharing terminal output from authorization and token setup. Risk: The default OAuth scopes may be broader than a user's immediate task requires. Mitigation: Reduce WAHOO_SCOPES where possible before authorizing the skill. Risk: Dependency installation may be fragile because the dependency name and version are not pinned in requirements.txt. Mitigation: Fix and pin the FIT parsing dependency before running pip install in a production or shared environment. ## Reference(s): - [Wahoo Fitness Cloud API](https://cloud-api.wahooligan.com/) - [ClawHub Skill Page](https://clawhub.ai/tgmerritt/skills/wahoo-cloud) ## Skill Output: **Output Type(s):** [text, markdown, code, shell commands, configuration, guidance] **Output Format:** [Markdown with shell commands, SQL examples, configuration guidance, and local file paths] **Output Parameters:** [1D] **Other Properties Related to Output:** [May create or update local OAuth token files, FIT downloads, and a SQLite workout database when the documented commands are run.] ## Skill Version(s): 0.2.1 (source: server-resolved release evidence) ## Ethical Considerations: Users should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.
AionUi
Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!
activepieces
AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents
cherry-studio
AI productivity studio with smart chat, autonomous agents, and 300+ assistants.
CopilotKit
The Frontend for Agents & Generative UI. React + Angular
Machine-readable data
The same record, as JSON, for agents and crawlers.
{
"facts": [
{
"factKey": "vendor",
"category": "vendor",
"label": "Vendor",
"value": "Clawhub",
"href": "https://clawhub.ai/tgmerritt/skills/wahoo-cloud",
"sourceUrl": "https://clawhub.ai/tgmerritt/skills/wahoo-cloud",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-10-11T02:53:13.526Z",
"isPublic": true
},
{
"factKey": "protocols",
"category": "compatibility",
"label": "Protocol compatibility",
"value": "OpenClaw",
"href": "https://www.xpersona.co/api/v1/agents/clawhub-tgmerritt-wahoo-cloud/contract",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-tgmerritt-wahoo-cloud/contract",
"sourceType": "contract",
"confidence": "medium",
"observedAt": "2026-10-11T02:53:13.526Z",
"isPublic": true
},
{
"factKey": "traction",
"category": "adoption",
"label": "Adoption signal",
"value": "1.2K downloads",
"href": "https://clawhub.ai/tgmerritt/wahoo-cloud",
"sourceUrl": "https://clawhub.ai/tgmerritt/wahoo-cloud",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-10-11T02:53:13.526Z",
"isPublic": true
},
{
"factKey": "latest_release",
"category": "release",
"label": "Latest release",
"value": "0.2.1",
"href": "https://clawhub.ai/tgmerritt/wahoo-cloud",
"sourceUrl": "https://clawhub.ai/tgmerritt/wahoo-cloud",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-05-26T20:45:31.856Z",
"isPublic": true
},
{
"factKey": "handshake_status",
"category": "security",
"label": "Handshake status",
"value": "UNKNOWN",
"href": "https://www.xpersona.co/api/v1/agents/clawhub-tgmerritt-wahoo-cloud/trust",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-tgmerritt-wahoo-cloud/trust",
"sourceType": "trust",
"confidence": "medium",
"observedAt": null,
"isPublic": true
}
],
"events": [
{
"eventType": "release",
"title": "Release 0.2.1",
"description": "Make skill runtime-agnostic: align WAHOO_BASE_DIR defaults, remove OpenClaw-specific refs from published libs, add --limit flag, restore error reference table, fix SKILL.md doc errors, add requirements.txt",
"href": "https://clawhub.ai/tgmerritt/wahoo-cloud",
"sourceUrl": "https://clawhub.ai/tgmerritt/wahoo-cloud",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-05-26T20:45:31.856Z",
"isPublic": true
}
]
}Record generated Oct 11, 2026.
