Changelog¶
What's new on the SweatStack platform.
2026-04-22¶
Team listing endpoints. GET /api/v1/teams/ lists teams you own or are a member of. GET /api/v1/teams/authorized lists teams you've authorized to access your data.
2026-03-27¶
Dailies. Daily health measures (body mass, resting heart rate, HRV, sleep) now have a dedicated API.
Tests. Structured performance evaluations (lactate, VO2max, FTP) are now a first-class entity.
Application metadata. Apps can attach per-app JSON to activities, traces, and users via PUT /api/v1/{entity}/app-metadata. Lets you store app-specific annotations without running your own database. Limits: 1 KB on activities and traces, 4 KB on users.
Roller skiing is now a sub-sport of cross-country skiing.
Breaking change. Trace.vo2 is now mL/min absolute (previously L/min). Relative VO2 (mL/kg/min) can be derived from body mass via dailies.
2026-03-13¶
Date-range queries on longitudinal endpoints. /api/v1/activities/longitudinal-mean-max and /api/v1/activities/longitudinal-accumulated-work-duration accept start and end query parameters.
Multi-sport longitudinal queries. Both endpoints support repeated sport parameters (e.g. ?sport=cycling.road&sport=cycling.tt).
Deprecation: date and window_days on the longitudinal endpoints. Use start and end instead. The old parameters still work.
Deprecation: plural sports query parameter. Use repeated singular sport instead. The old parameter still works on every endpoint.
2026-03-12¶
CSV upload. The activity upload endpoint accepts .csv alongside .fit. Required: timestamp column (ISO 8601), sport form parameter, internal metric names for the data columns.
Team-delegated tokens. POST /oauth/delegated-token accepts an optional team_id, letting team members obtain delegated tokens for users authorized to the team. The issued token includes an org claim.
Team user listing. GET /api/v1/teams/{team_id}/users returns users authorized to a team. Available to any team member.
Managed users get full history regardless of subscription plan. Previously they inherited the FREE plan's 10-day cap.
2026-02-25¶
App publishing flow. /applications/{id}/publish walks you through publishing your app to the App Directory. Client-side apps hosted on SweatStack Pages get a one-click publish path with sensible defaults.
2026-02-24¶
List your applications. GET /api/v1/applications returns the applications owned by the authenticated user.
2026-02-13¶
You can now manage and delete your own applications from the /apps page.
2026-02-12¶
Refresh tokens for public clients. Add the offline_access scope to your authorization request to get a refresh token.
Create applications via API. POST /api/v1/applications creates applications, primarily for local development workflows.
2026-02-11¶
SweatStack Pages static assets. Upload static assets directly for your application's hosted page.
2026-02-10¶
Faster timeseries queries. Activity Parquet files are now 50–70% smaller, with optimized dtypes and zstd compression. Reads are noticeably faster.
2026-01-23¶
Passwordless authentication. SweatStack uses magic links via email exclusively. Passwords are gone. Verification emails now include the name of the third-party app that triggered registration.
2026-01-07¶
Custom durations on mean-max endpoints. Optional durations query parameter to request specific durations.
Private applications. You can now create applications that aren't publicly listed in the App Directory.
2026-01-05¶
Managed users. Create and manage users on behalf of someone else (e.g. a coach managing an athlete's account). Useful for team and delegated-access scenarios.
2025-12-23¶
Teams. Group users and applications, manage permissions across multiple parties.
2025-12-12¶
Profile status. GET /api/v1/profile/status returns the health of an account's data connections (Garmin, Intervals.icu, etc.).
2025-12-09¶
Garmin Connect permissions. Integration responses now include the user's Garmin permission set. The app warns when the historical-data-export permission is missing, which is what enables backfill.
For the Python client release history, see PyPI.