Changelog
2026-10-10
Section titled “2026-10-10”- Uptivo is now available as a public integration in the Zapier app marketplace. See Zapier overview and setup to connect your club and create your first automation.
2026-10-06
Section titled “2026-10-06”- Added
GET /Athletes/{userId}/MembershipSummaryandGET /Athletes/MembershipSummariesfor effective membership states and the underlying club assignments. Athletes without assignments are included withStatus: "None"and an emptyMembershipsarray. - Added
GET /BadgeAwards,GET /Athletes/{userId}/BadgeAwards, andGET /BadgeAwards/{achievedBadgeId}for visible challenge award history. Lists use award-ID pagination and default to the latest IDs first. - Engagement summaries now include
BrandLevelSource,CurrentLevel,MonthToDatePoints,MonthlyPointsGoal, andMonthlyPointsResetAtUtcfor level and monthly-goal progress.
Changed
Section titled “Changed”- Athlete attendance summaries now return lifetime first/last check-in and total
count, plus rolling/prior counts over two consecutive
dayswindows (default 30, range 1..366). Bulk pagination is byUserIdand includes Athletes with no check-ins. Zapier attendance searches use Window Days and the same check-in fields.
Compatibility
Section titled “Compatibility”- Attendance reads no longer accept
from/toClass date filters or return the former interval counters. Update clients to usedaysand the lifetime and rolling check-in fields. - Discard attendance cursors generated with the former Class date filters and
restart the
UserIdscan.
2026-09-29
Section titled “2026-09-29”Changed
Section titled “Changed”- Standardized every public resource path segment on PascalCase. Compound
segments now use names such as
ByEmail,ClientStage,IsGuest,EngagementSummary,AttendanceSummary,UserSubscriptions, andGeoPositions. - Consolidated Training reads into
GET /Trainings,GET /Trainings/{trainingId}, andGET /Athletes/{userId}/Trainings. Each operation now accepts independentwithTelemetryandwithUserflags and returns a flatClubTrainingDTO. The optionalTelemetryobject contains the five raw series; optionalUserusesClubAthleteDTO. - Training lists default to 10 items and accept at most 30 when
withTelemetry=true; otherwise they default to 30 and accept at most 100. The enrichment flags do not affect selection or cursor position and may change between pages.
Compatibility
Section titled “Compatibility”- Use the canonical paths shown in the API reference for every request. The previous hyphenated resource names are not aliases for the new paths.
- The former
/Trainings/WithTelemetry,/Trainings/{trainingId}/WithTelemetry, and/Athletes/{userId}/Trainings/WithTelemetrypaths are no longer available. Use the corresponding base operation withwithTelemetry=true.
2026-09-28
Section titled “2026-09-28”- Added recommended opaque pagination through the optional
cursorparameter and theNextCursorandPrevCursorresponse fields. Cursors preserve exact(Begin, ID)positions for temporal lists and coexist with the legacy range fields. - Added
GET /Challenges,GET /Challenges/{challengeId},GET /Challenges/{challengeId}/Results, andGET /Challenges/{challengeId}/Results/{userId}. - Added bulk Athlete summaries through
GET /Athletes/EngagementSummariesandGET /Athletes/AttendanceSummaries. - Added paginated booking reads through
GET /Classes/Bookings,GET /Classes/{classId}/Bookings, andGET /Athletes/{userId}/Bookings.
Changed
Section titled “Changed”GET /Classes/{classId}/Participantsnow returns the sameClubClassParticipationDTOrepresentation used by the individual and bulk booking reads. Existing fields, includingBookActorIdandBookActorName, remain available.
Compatibility
Section titled “Compatibility”- Existing pagination without
cursorremains supported. New integrations should use opaque cursors, especially for temporal lists, because the legacy one-millisecond continuation can skip rows.
2026-09-24
Section titled “2026-09-24”- Added a self-service Club API tab to the club profile when the club license enables Club API. The page displays the primary and secondary Subscription Keys.
- Added Club Token creation, rename, and revocation. New tokens support
ReadorReadWriteaccess, an explicit expiration day, and immediate revocation. - Added a read-only webhook overview with destinations, subscribed events, provisioning state, and aggregate delivery statistics for the last 24 hours, 7 days, and 30 days.
Changed
Section titled “Changed”- Subscription Keys can now be regenerated independently from the Club API page. Regeneration invalidates the previous value immediately, allowing safe rotation by alternating the primary and secondary keys.
- Tokens marked Legacy are identified in the Club API page. Because they do not support immediate revocation, integrations must replace them before removing them from the list.
2026-09-18
Section titled “2026-09-18”- Added
Athlete.LevelChangedfor Uptivo and brand level transitions, including the previous level, new level, change direction, and effective month. - Added
Badge.Awardedfor challenge badge assignments, including the award identity, badge, challenge, effective date, award type, and applicable goal or ranking fields.
2026-09-16
Section titled “2026-09-16”- Added
GET /Classes/{classId}to retrieve one published Class directly. - Added
GET /Classes/{classId}/Participants/{userId}andGET /Classes/Participants/Recentto read enriched booking snapshots with Class, trainer, cost, and UserSubscription context. - Added
GET /Athletes/{userId}/AttendanceSummaryfor attended, no-show, pending, and queued counts over a Class start interval of at most 366 days.
Changed
Section titled “Changed”ClassParticipant.Created,ClassParticipant.Updated, andClassParticipant.Deletednow include the same enriched booking context.TotalCredits, when provided, contains the resulting credit balance.
2026-09-15
Section titled “2026-09-15”- Added
GET /Contacts,GET /Contacts/ByEmail, andGET /Contacts/{userId}operations for non-demo contacts of the selected club. The list uses the same inclusive ID-range pagination as Athletes. - Added
Contact.Created,Contact.Updated, andContact.Deletedwebhook events.Contact.Deletedincludes aReasonofRemoved,ConvertedToAthlete, orUserDeleted. - Added
PUT /Athletes/{userId}/ClientStage,PUT /Athletes/{userId}/IsGuest, andPUT /Contacts/{userId}/ClientStagefor club-specific relationship state. Successful calls return the updated Athlete or Contact representation.
Changed
Section titled “Changed”- A non-
TrialUserSubscription assignment now sets the selected club’s Athlete commercial stage toClientwhen it differs. - Real commercial-stage and guest-flag changes use the existing
Athlete.UpdatedorContact.Updatedwebhook event. Repeating the current value does not send another state-change event.
2026-09-13
Section titled “2026-09-13”Changed
Section titled “Changed”- Training reads now expose the same public
ClubTrainingDTOfields.BeginDateLocalprovides the athlete-local start date.AlternateId,DataSource,RowVersion, andUploadingare no longer returned. Integrations using those removed fields must update their mapping. Training.Creatednow includes the same public Training fields plusContact,TrainingMonthTotals,LifetimeTotals, andAchievedGoals. Its formerAlternateId,DataSource,RowVersion, andUploadingfields are no longer included.
2026-09-12
Section titled “2026-09-12”- Added
GET /Athletes/{userId}/EngagementSummaryfor current-month and lifetime activity totals, current levels, and awards earned in the athlete’s current local month.
2026-09-09
Section titled “2026-09-09”Changed
Section titled “Changed”- Published the enforced Club API limits of 50 calls per minute and 25,000
calls per 30 days, the
X-Ratelimit-LimitandX-Ratelimit-Remainingresponse headers, and the429 Too Many Requestsresponse returned when a limit is exceeded.
2026-09-08
Section titled “2026-09-08”Changed
Section titled “Changed”GET /Profilenow returnsClubProfileDTO, containing the documented club identity, contact, location, and locale fields. Properties outside this public schema are no longer returned. This is a breaking response-contract change for clients that read a removed property.POST /Athletesnow correctly adds manager-only or trainer-only users as athletes without removing their existing roles. A pending staff invitation is extended with the athlete role.POST /Athletesno longer reports failed onboarding outcomes inside a200 OKresponse. Invalid data returns400; exhausted license capacity returns403; an email conflict returns409; an unexpected failure returns500. Application errors useApiErrorDTO. See failed onboarding outcomes for public error values and recovery actions.POST /Classes/{classId}/Participantsnow validatesUserIdas a required positive integer and returns400 Bad Requestwhen it is missing or invalid.
OpenAPI corrections
Section titled “OpenAPI corrections”- Published the effective default and maximum value of every paginated
countparameter, together with the defaults for training origin and optional request flags. - The
ApiErrorTypeschema now lists only errors returned by Club API operations.
2026-09-07
Section titled “2026-09-07”- Added
POST /UserSubscriptions/{userSubscriptionId}/Suspensionto start, schedule, or update a UserSubscription suspension. - Added
DELETE /UserSubscriptions/{userSubscriptionId}/Suspensionto cancel a scheduled suspension or reactivate an active one. The operation is idempotent. - Added
SuspensionStateandSuspensionStartUTCto UserSubscription responses.SuspendedAtUTCremains available as a legacy alias. - Added HIT samples to training responses that include telemetry, together with the public tuple order and units.
Changed
Section titled “Changed”GET /Athletes/{userId}/UserSubscriptionsnow returns a plain JSON array containing all matching UserSubscriptions instead of a pagination envelope.- Raw telemetry operations now require both
fromandtoand reject intervals longer than five hours. - Calendar operations now require both
fromandto, requirefromto be earlier thanto, and no longer impose the previous 2030 upper boundary. - Calendar operations accept only
Club,PT, andServices; other values return400 Bad Request. - A UserSubscription suspension that conflicts with an existing booking now
returns
409 ConflictwithErrorType: "SubscriptionInUse". - An athlete email conflict now returns
409 ConflictwithErrorType: "EmailAlreadyInUse".
OpenAPI corrections
Section titled “OpenAPI corrections”- Documented required, nullable, and optional properties for Club, Training, telemetry, and calendar Class responses.
2025-10-22
Section titled “2025-10-22”Added these properties to the Class resource:
CreditsCostLocalCreditsCostRemoteTicketsCostLocalTicketsCostRemoteMaxLocalParticipantsMaxRemoteParticipantsLocalSubscriptionIdsRemoteSubscriptionIds
Added these webhook events:
Class.UpdatedClass.DeletedClass.PublishedClass.UnpublishedSubscription.CreatedSubscription.UpdatedSubscription.DeletedSubscription.Plans.UpdatedSubscription.PublishedSubscription.Unpublished
2025-07-01
Section titled “2025-07-01”Added Club API operations for listing, adding, and removing Class participants.
2022-11-30
Section titled “2022-11-30”Added the calendar operation for retrieving Classes by date range.
Expanded the server-to-server integration guidance.