Intervals.icu

Intervals.icu

integration

Direct access to your intervals.icu training data

Tier-1 integration with intervals.icu. Provides composable tools for fetching athlete profile, activities, wellness, and calendar events, plus creating and deleting workout events and completed activities. Designed to be composed by coaching agents, but also chattable directly for ad-hoc data lookups.

Source: Intervals.icu

Tools (17)

Get athlete profile

Fetch the athlete's profile from intervals.icu. Returns FTP, weight, max HR, resting HR, power/HR zones, and sport settings.

Get recent activities

Fetch the athlete's recent activities/rides. Returns date, type, name, duration, distance, load, IF, average power (icu_average_watts), NP (icu_weighted_avg_watts), EF (icu_efficiency_factor), variability (icu_variability_index), Pw:Hr ratio (icu_power_hr), aerobic decoupling, and average/max HR for each. Use this to understand recent training load and patterns. For historical lookups across a long window (e.g. 'all my TT races back to 2024'), always pass a filter โ€” `name_contains` and/or `type` โ€” rather than a huge `limit`. Filtering happens after the fetch, so it returns only the matching activities and keeps the response small. An unfiltered broad request is capped and may be truncated.

Get activity intervals

Get detected intervals for a completed activity. Returns per-interval metrics: duration, distance, avg/max power, normalized power (NP), avg/max HR, avg cadence, avg speed (km/h), w/hr (power-to-HR ratio), EF (efficiency factor, NP/avg HR), and interval type (work/rest/warmup/cooldown). Use this to analyze structured workouts rep-by-rep โ€” power fade across sets, HR ceiling drift, aerobic decoupling, recovery quality, etc.

Get activity streams

Get second-by-second time-series data for a completed activity. Returns arrays of values for requested stream types (power, HR, cadence, etc.). Use for power curve analysis, HR recovery kinetics, or building custom visualizations. Can be large โ€” prefer get_activity_intervals for structured workout analysis.

Fix activity data

Correct the recorded sensor streams of a completed activity, mirroring intervals.icu's 'Fix Data' dialog. For each stream you name in `fixes` you can apply value = value * scale + offset (e.g. scale 0.72 to deflate an over-reading power meter), and optionally replace dropouts by carrying the preceding value forward (replace_missing / replace_zeros, limited to runs no longer than max_dropout_secs). Streams: power, cadence, heartrate, altitude (metres), speed (metres/second). WARNING: this OVERWRITES the activity's recorded data and triggers a recalculation of its summary metrics (average/normalized power, TSS). Only run it when the user has explicitly asked to fix or rescale the data, and confirm the activity_id and scale/offset with them first.

Get power curve

Get the athlete's best power for a range of durations over a date range, scoped to a sport โ€” the aggregated power curve / best-efforts table from intervals.icu's power page. Use to answer 'what's my best 5-minute power this season', to find the current ceiling at a duration before designing a test, or to read peak efforts. Returns watts (and w/kg when weight is known) at each duration, plus an eFTP estimate computed from this range's curve. For the authoritative current eFTP/CP/W' use get_power_model.

Get hr curve

Get the athlete's best (highest sustained) heart rate for a range of durations over a date range, scoped to a sport. Returns bpm at each duration โ€” useful for estimating max HR, checking HR ceilings, and interpreting effort. Mirrors intervals.icu's HR curve.

Get pace curve

Get the athlete's best pace for a range of distances over a date range, scoped to a sport (Run, Swim, etc.). Returns best speed and pace per distance. Set gap=true for gradient-adjusted pace on hilly runs. Mirrors intervals.icu's pace curve.

Get power model

Get the athlete's current authoritative power model from intervals.icu for a sport: eFTP, critical power (CP), W' (anaerobic capacity), and Pmax. This is the value intervals.icu itself uses and displays. Use it to answer 'what's my eFTP/CP/W' right now'. For a curve over a custom timeframe use get_power_curve (which also returns a date-range eFTP estimate).

Get wellness data

Fetch the athlete's daily wellness/readiness data. Returns CTL (fitness), ATL (fatigue), TSB (form), resting HR, HRV, sleep hours, sleep quality, soreness, fatigue, mood, and weight for each day.

Get calendar events

Fetch events (workouts, races, notes, targets) on the athlete's intervals.icu calendar. Defaults to the upcoming window, but it can look into the past too: pass `days_back` (or an explicit `oldest` date) to find an existing, ongoing, or past entry โ€” e.g. an injury note that started earlier โ€” so you can update or delete it. Use this to avoid scheduling conflicts and to find event IDs for update/delete. Optionally filter by category or by a substring of the event name (`name_contains`). intervals.icu matches events by their start date, so to catch an ongoing multi-day entry that began a while ago, widen `days_back`.

Create calendar event

Create a calendar event on the athlete's intervals.icu calendar. Supports WORKOUT (structured workout text), RACE (with A/B/C priority), NOTE (freeform), TARGET (season goal), and FITNESS (manual CTL).

Update calendar event

Update an existing intervals.icu calendar event by id. Use to promote a WORKOUT placeholder to a RACE (category=RACE, priority=A/B/C), change date/time, rename, or rewrite description. Only provided fields are changed; omitted fields stay as-is. Get event_id from get_calendar_events.

Delete calendar event

Delete a planned calendar event by id. Works for any category (WORKOUT, RACE, NOTE, TARGET, FITNESS). Deleting a RACE or TARGET event requires confirm=true โ€” these are high-stakes entries (A-race, season goal) and should only be removed after explicit user confirmation.

Create manual activity

Log a completed activity on intervals.icu by hand, for a session the athlete never recorded with a device (a pickup soccer game, a gym session, a ride whose computer died). Unlike a calendar NOTE, this is a real completed activity that counts toward training load and shows on the fitness chart. Required: name, type (sport, e.g. 'Ride', 'Run', 'Soccer', 'WeightTraining'), start_date_local (ISO 8601 without timezone, e.g. '2026-04-13T08:00:00'), duration_seconds. Optional: description, distance_meters, training_load (TSS โ€” set this for sports intervals.icu can't derive load for, like soccer or strength), average_heartrate, average_watts, trainer (indoor), feel (1-5). Confirm the payload in chat before calling. Use create_calendar_event instead for a *planned* future workout or a freeform NOTE.

Update activity

Update the metadata of a completed activity on intervals.icu: assign or clear its gear (bike/shoes), set tags, change the sport type or sub_type, flag it as a race or commute, recolour it, or rewrite its name/description. Only the fields you pass are changed. Get the activity_id from get_recent_activities. Use this to organise or classify existing rides (e.g. tag the last few rides 'group' or 'TT', or set the gear to match another platform). GEAR: gear_id is the intervals.icu gear id, which is the SAME id Strava uses (intervals.icu syncs gear straight from Strava), so a Strava bike/shoe id can be assigned directly. Pass 'none' to clear the gear. TAGS: to add a tag without losing existing ones, use `add_tags` (merged with the ride's current tags); `remove_tags` drops tags. Only use `tags` to overwrite the whole list outright. LIMITATION: intervals.icu cannot update activities imported from Strava through the API. For a Strava-sourced ride, the field has to be changed in Strava (where it syncs back) or edited on the intervals.icu site. This tool detects that case and tells you. It does NOT touch recorded sensor data โ€” use fix_activity_data for power/HR/cadence streams. This is for *completed* activities; for a *planned* calendar entry use update_calendar_event.

Delete activity

Permanently DELETE a completed activity (a recorded ride/run, or a manually logged session) by id. DESTRUCTIVE and unrecoverable: the activity and its recorded streams are gone, and the deletion removes it from the athlete's training load and fitness chart. This is for *completed activities*; to remove a *planned* calendar entry use delete_calendar_event instead. Only call when the athlete explicitly asks to delete the activity. The `confirm` argument must exactly match the activity's current name: get the id and name from get_recent_activities and read the name back to the athlete before they confirm. For a nameless activity the label is '{type} on {date}' (e.g. 'Ride on 2026-06-19').

Chat with Intervals.icu

Open chat