Agent skill
intervals-icu
Intervals.icu API for fitness data. Use when user mentions "Intervals.icu", "cycling data", "fitness tracking", or workout analytics.
Install this agent skill to your Project
npx add-skill https://github.com/vm0-ai/vm0-skills/tree/main/intervals-icu
SKILL.md
Intervals.icu API
Use the Intervals.icu API via direct curl calls to access activities, wellness, workouts, calendar events, and athlete profiles.
Official docs:
https://intervals.icu/api/v1/docs
When to Use
Use this skill when you need to:
- View athlete profile - get athlete info and settings
- List and manage activities - view rides, runs, and other activities with streams data
- Track wellness - access daily wellness records (sleep, fatigue, soreness, etc.)
- Manage workouts - list, create, and modify workout library entries
- Calendar events - view and create planned workouts and events
Prerequisites
Verify authentication and get your athlete ID:
curl -s "https://intervals.icu/api/v1/athlete/0/activities?oldest=2025-01-01&newest=2025-12-31" --header "Authorization: Bearer $(printenv INTERVALS_ICU_TOKEN)" | jq '.[0] | {icu_athlete_id}'
Save the
icu_athlete_idvalue (e.g.,i230851) for use in other endpoints that require an athlete ID.
Placeholders: Values in
<angle-brackets>like<athlete-id>are placeholders. Replace them with actual values when executing.
How to Use
All examples below assume INTERVALS_ICU_TOKEN is set.
Base URL: https://intervals.icu
1. Get Athlete Profile
Get the authenticated athlete's profile and settings:
curl -s "https://intervals.icu/api/v1/athlete/0" --header "Authorization: Bearer $(printenv INTERVALS_ICU_TOKEN)" | jq '{id, name, firstname, lastname, email, locale, weight, icu_weight, icu_resting_hr, sex, country, city, timezone}'
2. List Activities
Get activities for a date range:
Note: Replace
<athlete-id>with your athlete ID. Dates are inYYYY-MM-DDformat.
curl -s "https://intervals.icu/api/v1/athlete/<athlete-id>/activities?oldest=2025-01-01&newest=2025-01-31" --header "Authorization: Bearer $(printenv INTERVALS_ICU_TOKEN)" | jq '.[] | {id, name, type, start_date_local, moving_time, distance, total_elevation_gain, icu_training_load}'
3. Get Activity Details
Get details for a specific activity:
Note: Replace
<activity-id>with an actual activity ID from the "List Activities" output. Activities imported from Strava may have limited data.
curl -s "https://intervals.icu/api/v1/activity/<activity-id>" --header "Authorization: Bearer $(printenv INTERVALS_ICU_TOKEN)" | jq '{id, name, type, start_date_local, moving_time, distance, average_speed, average_watts, average_heartrate, icu_training_load}'
4. Get Activity Streams
Get detailed data streams (GPS, heart rate, power, etc.) for an activity:
Note: Replace
<activity-id>with an actual activity ID. Available stream types:time,watts,heartrate,cadence,distance,altitude,latlng,velocity_smooth,temp. Only activities with recorded sensor data will have streams.
curl -s "https://intervals.icu/api/v1/activity/<activity-id>/streams?types=watts,heartrate,cadence" --header "Authorization: Bearer $(printenv INTERVALS_ICU_TOKEN)" | jq 'keys'
5. Get Activity Power Curve
Get the power curve for an activity:
Note: Replace
<activity-id>with an actual activity ID. Only activities with power data will have a power curve.
curl -s "https://intervals.icu/api/v1/activity/<activity-id>/power-curve" --header "Authorization: Bearer $(printenv INTERVALS_ICU_TOKEN)" | jq '.[0:10]'
6. Get Wellness Data
Get wellness record for a specific date:
Note: Replace
<athlete-id>with your athlete ID and<date>withYYYY-MM-DD.
curl -s "https://intervals.icu/api/v1/athlete/<athlete-id>/wellness/<date>" --header "Authorization: Bearer $(printenv INTERVALS_ICU_TOKEN)" | jq '{id, ctl, atl, rampRate, sleepTime, sleepScore, fatigue, soreness, stress, mood, motivation, weight, restingHR, hrv}'
7. Update Wellness Data
Update wellness record for a date:
Note: Replace
<athlete-id>with your athlete ID and<date>withYYYY-MM-DD.
Write to /tmp/intervals_wellness.json:
{
"weight": 72.5,
"restingHR": 52
}
curl -s -X PUT "https://intervals.icu/api/v1/athlete/<athlete-id>/wellness/<date>" --header "Authorization: Bearer $(printenv INTERVALS_ICU_TOKEN)" --header "Content-Type: application/json" -d @/tmp/intervals_wellness.json | jq '{id, weight, restingHR}'
8. List Calendar Events
Get planned workouts and events for a date range:
Note: Replace
<athlete-id>with your athlete ID.
curl -s "https://intervals.icu/api/v1/athlete/<athlete-id>/events?oldest=2025-01-01&newest=2025-12-31" --header "Authorization: Bearer $(printenv INTERVALS_ICU_TOKEN)" | jq '.[] | {id, start_date_local, name, category, type, description}'
9. Create Calendar Event
Create a planned workout or event:
Note: Replace
<athlete-id>with your athlete ID.start_date_localmust include a time component.
Write to /tmp/intervals_event.json:
{
"category": "WORKOUT",
"start_date_local": "2025-02-01T09:00:00",
"name": "Easy Run",
"description": "30 min easy run",
"type": "Run"
}
curl -s -X POST "https://intervals.icu/api/v1/athlete/<athlete-id>/events" --header "Authorization: Bearer $(printenv INTERVALS_ICU_TOKEN)" --header "Content-Type: application/json" -d @/tmp/intervals_event.json | jq '{id, name, start_date_local, category, type}'
10. List Workouts
Get workouts from the workout library:
Note: Replace
<athlete-id>with your athlete ID.
curl -s "https://intervals.icu/api/v1/athlete/<athlete-id>/workouts" --header "Authorization: Bearer $(printenv INTERVALS_ICU_TOKEN)" | jq '.[] | {id, name, type, description}' | head -40
11. Create Manual Activity
Create a manual activity entry:
Note: Replace
<athlete-id>with your athlete ID.start_date_localmust include a time component.
Write to /tmp/intervals_activity.json:
{
"type": "Run",
"name": "Morning Run",
"start_date_local": "2025-02-01T07:00:00",
"moving_time": 1800,
"distance": 5000,
"description": "Easy morning run"
}
curl -s -X POST "https://intervals.icu/api/v1/athlete/<athlete-id>/activities/manual" --header "Authorization: Bearer $(printenv INTERVALS_ICU_TOKEN)" --header "Content-Type: application/json" -d @/tmp/intervals_activity.json | jq '{id, name, type, start_date_local, moving_time, distance}'
12. Delete Activity
Delete an activity:
Note: Replace
<activity-id>with the activity ID.
curl -s -X DELETE "https://intervals.icu/api/v1/activity/<activity-id>" --header "Authorization: Bearer $(printenv INTERVALS_ICU_TOKEN)" -w "\nHTTP Status: %{http_code}\n"
Guidelines
- Athlete ID: Use
0as a shortcut for the authenticated athlete in the/athlete/{id}endpoint only. For all other endpoints, use the actual athlete ID (e.g.,i230851). - Date ranges: Most list endpoints require
oldestandnewestquery parameters inYYYY-MM-DDformat. - Datetime fields: When creating activities or events,
start_date_localmust include a time component (e.g.,2025-02-01T09:00:00), not just a date. - Rate limits: Be mindful of API rate limits. Avoid rapid successive calls.
- Activity types: Common types include
Ride,Run,Swim,WeightTraining,Yoga,Walk,Hike. - Strava activities: Activities imported from Strava may have limited data and show a note that they are not fully available via the API.
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
brave-search
Brave Search API for web search. Use when user says "search web", "Brave search", or asks to "find on web" without specifying Google.
supadata
Supadata API for YouTube/web data. Use when user mentions "Supadata", "YouTube data", "channel stats", or web scraping data.
roadmap-planning
Build and prioritize product roadmaps using scoring models like RICE, ICE, and value-effort matrices. Activate when creating a product roadmap, prioritizing features, sequencing initiatives, mapping dependencies, balancing team capacity, choosing between Now/Next/Later or quarterly planning, or communicating roadmap tradeoffs to executives and stakeholders.
qdrant
Qdrant API for vector search. Use when user mentions "Qdrant", "vector database", "semantic search", or embeddings storage.
calendly
Calendly scheduling API. Use when user mentions "Calendly", "calendly.com", "schedule a meeting", "booking link", "event types", or asks about interview scheduling.
stripe
Stripe API for payments. Use when user mentions "Stripe", "payment", "subscription", "billing", "invoice", or asks about payment processing.
Didn't find tool you were looking for?