Maintained fork of paladini/node-intervals-icu with a vendored spec snapshot and CI-enforced coverage — all 149 spec operations covered, 0 phantom routes; 3 verified-but-undocumented routes allowlisted (see spec/undocumented-routes.json and AUDIT.md). See CHANGELOG for what changed in v3.
The most comprehensive TypeScript client for the Intervals.icu API — the training platform used by cyclists, runners, triathletes, and coaches worldwide.
130+ typed methods across 16 service groups. Dual auth (API key + OAuth), file uploads, auto-retry with jitter, and rate-limit tracking. One dependency (axios), ~27 KB minified.
Documentation: 0x3639.github.io/node-intervals-icu — guides, every method, and live-verified API behaviour.
npm install @0x3639/intervals-icu
export INTERVALS_API_KEY=your-api-key # Settings → Developer settings on intervals.icu
import { IntervalsClient } from '@0x3639/intervals-icu';
const client = new IntervalsClient({ apiKey: process.env.INTERVALS_API_KEY! });
const athlete = await client.athletes.getAthlete();
console.log(`${athlete.name} — FTP: ${athlete.ftp}`);
const activities = await client.activities.listActivities({ oldest: '2024-01-01', newest: '2024-01-31' });
console.log(`${activities.length} activities in January`);
| Service | Accessor | Key Methods |
|---|---|---|
| Athletes | client.athletes |
getAthlete, updateAthlete, getTrainingPlan, updateTrainingPlan, getProfile, getSummary, listAthletes, getConnections, getSettings, disconnectApp |
| Activities | client.activities |
listActivities, getActivity, updateActivity, deleteActivity, uploadActivity, getStreams, getIntervals, getWeatherSummary, getPowerCurve, listMessages, getActivities, listActivitiesAround, searchActivitiesFull, searchIntervals, listActivityTags, downloadActivitiesCSV, downloadGPX, deleteTombstone |
| Events | client.events |
listEvents, getEvent, createEvent, updateEvent, deleteEvent, createEventsBulk, markEventAsDone, duplicateEvents, downloadWorkout, listEventTags, listFitnessModelEvents, downloadWorkoutsZip |
| Wellness | client.wellness |
listWellness, getWellnessByDate, createWellness, updateWellness, updateWellnessBulk |
| Workouts | client.workouts |
listWorkouts, getWorkout, createWorkout, updateWorkout, deleteWorkout, createWorkoutsBulk, duplicateWorkouts, convertWorkout, listWorkoutTags |
| Sport Settings | client.sportSettings |
list, get, create, update, delete, applyToActivities, listMatchingActivities, getPaceDistances |
| Folders | client.folders |
list, create, update, delete, getSharedWith, importWorkout, applyPlanChanges |
| Gear | client.gear |
list, downloadCSV, calc, create, update, delete, replace, createReminder, updateReminder, deleteReminder |
| Chats | client.chats |
listChats, listMessages, sendMessage, markSeen, getChat, listGroups, blockChat, updateMessage, deleteMessage |
| Weather | client.weather |
getForecast, getWeatherConfig, updateWeatherConfig |
| Routes | client.routes |
list, get, update, getSimilarity |
| Custom Items | client.customItems |
list, get, create, update, delete, reorder, uploadImage |
| Shared Events | client.sharedEvents |
get, create, update, delete |
| Performance | client.performance |
getPowerCurves, getPaceCurves, getHRCurves, getPowerHRCurve, getActivityPowerCurves, getActivityPaceCurves, getActivityPaceCurvesCSV |
| Analytics | client.analytics |
getPowerHistogram, getHRHistogram, getPaceHistogram, getGAPHistogram, getTimeAtHR, getIntervalStats, getPowerSpikeModel, getCurves, getCurvesCSV, getMMPModel |
| Search | client.search |
searchActivities |
The TypeScript/Node.js ecosystem has a few Intervals.icu API clients worth knowing about:
| Library | npm | Approach | Coverage | Error handling |
|---|---|---|---|---|
| @0x3639/intervals-icu (this library) | @0x3639/intervals-icu |
axios, TypeScript types | 16 services, 149 spec operations | throws IntervalsAPIError |
| @kuranov/intervals-client | @kuranov/intervals-client |
ky + Valibot runtime validation | 6 resources (~64 endpoints) | Result<T, E> — never throws |
When to use @0x3639/intervals-icu (this library):
try/catch error handlingWhen to use @kuranov/intervals-client:
Result<T, E> pattern (no exceptions thrown)onRequest, onResponse, onRetry)ky which is runtime-agnostic)Both libraries serve the same core purpose and share similar design goals (TypeScript-first, dual ESM+CJS output, auto-retry, OAuth + API key auth). They differ mainly in HTTP client choice, error-handling philosophy, validation strategy, and endpoint coverage.
MIT © 0x3639. Original library © Fernando Paladini.
Special thanks to Filipe for the inspiration and the initial idea that led to the creation of this library. Your project was the spark that made this happen!