Subscription events
Subscription events concern products configured by the club. They are distinct from UserSubscription events, which concern products assigned to individual athletes.
| Event type | Meaning |
|---|---|
Subscription.Created |
A catalog product was created. |
Subscription.Updated |
Product data changed. |
Subscription.Deleted |
The product was deleted. |
Subscription.Plans.Updated |
Commercial plans were added, changed, or removed. |
Subscription.Published |
The product became published. |
Subscription.Unpublished |
The product became unpublished. |
See the Subscriptions guide for product fields, publication state, and optional plan expansion.
Subscription.Created
Section titled “Subscription.Created”The subject is Subscriptions/{classSubscriptionId} and data contains the
catalog representation:
[ { "id": "example-subscription-created-event", "topic": "club-100001-events", "subject": "Subscriptions/500001", "data": { "ClassSubscriptionId": 500001, "Name": "Beginners Boxing", "ShortDescription": "Beginners Boxing class - 1 month", "LongDescription": "A monthly course for beginners.", "MaxWeeklyBookings": 2, "MaxMonthlyBookings": 8, "AutoAssign": false, "PublishState": "Unpublished", "Type": "Other" }, "eventType": "Subscription.Created", "eventTime": "2026-09-07T11:48:53Z", "dataVersion": "1.0" }]Optional fields such as LongDescription, PublishState, Type, and Plans
can be omitted. Do not erase a previously stored optional value merely because
it is absent from one compact snapshot; reconcile with the catalog expansions
required by your integration.
Subscription.Updated
Section titled “Subscription.Updated”Subscription.Updated carries the same product shape. It is a snapshot, not a
patch:
[ { "id": "example-subscription-updated-event", "topic": "club-100001-events", "subject": "Subscriptions/500001", "data": { "ClassSubscriptionId": 500001, "Name": "Beginners Boxing", "ShortDescription": "Beginners Boxing class - 1 month", "MaxWeeklyBookings": 3, "MaxMonthlyBookings": 10, "AutoAssign": false, "PublishState": "Published", "Type": "Other" }, "eventType": "Subscription.Updated", "eventTime": "2026-09-07T11:55:00Z", "dataVersion": "1.0" }]The Club API has no direct GET /Subscriptions/{id} operation. Reload the
paginated catalog and match ClassSubscriptionId when authoritative current
state is required.
Subscription.Deleted
Section titled “Subscription.Deleted”The event carries the last available product snapshot. Treat it as a tombstone and remove or archive the local product idempotently.
[ { "id": "example-subscription-deleted-event", "topic": "club-100001-events", "subject": "Subscriptions/500001", "data": { "ClassSubscriptionId": 500001, "Name": "Beginners Boxing", "PublishState": "Published", "Type": "Other" }, "eventType": "Subscription.Deleted", "eventTime": "2026-09-07T12:10:00Z", "dataVersion": "1.0" }]Deleting a catalog product is distinct from deleting an athlete’s UserSubscription. Do not delete athlete assignments solely by interpreting this event unless that behavior is part of your own domain policy.
Subscription.Plans.Updated
Section titled “Subscription.Plans.Updated”This event uses subject Subscriptions/{id}/Plans. Its data contains the
product and the updated Plans array:
[ { "id": "example-subscription-plans-updated-event", "topic": "club-100001-events", "subject": "Subscriptions/500001/Plans", "data": { "ClassSubscriptionId": 500001, "Name": "Beginners Boxing", "ShortDescription": "Beginners Boxing class - 1 month", "MaxWeeklyBookings": 3, "MaxMonthlyBookings": 10, "AutoAssign": false, "PublishState": "Published", "Type": "Other", "Plans": [ { "UnitMultiplier": 100, "ClassSubscriptionPlanId": 510001, "DurationDays": 30, "MaxActivities": 8, "Amount": 12000, "Currency": "eur", "Interval": "None", "IntervalCount": 0, "Iterations": 0 } ] }, "eventType": "Subscription.Plans.Updated", "eventTime": "2026-09-07T12:15:00Z", "dataVersion": "1.0" }]Replace the locally stored plan set as a unit. An empty Plans array means the
product currently has no plans in that snapshot.
Subscription.Published
Section titled “Subscription.Published”This event uses the standard product payload with PublishState set to
Published. Publication means the product is offered through Uptivo’s public
product flows; payment configuration can still affect whether an athlete can
complete a purchase.
[ { "id": "example-subscription-published-event", "topic": "club-100001-events", "subject": "Subscriptions/500001", "data": { "ClassSubscriptionId": 500001, "Name": "Beginners Boxing", "PublishState": "Published", "Type": "Other" }, "eventType": "Subscription.Published", "eventTime": "2026-09-07T12:20:00Z", "dataVersion": "1.0" }]Subscription.Unpublished
Section titled “Subscription.Unpublished”This event has the same shape with PublishState set to Unpublished. Existing
UserSubscriptions are not deleted merely because their product is unpublished.
[ { "id": "example-subscription-unpublished-event", "topic": "club-100001-events", "subject": "Subscriptions/500001", "data": { "ClassSubscriptionId": 500001, "Name": "Beginners Boxing", "PublishState": "Unpublished", "Type": "Other" }, "eventType": "Subscription.Unpublished", "eventTime": "2026-09-07T12:25:00Z", "dataVersion": "1.0" }]Recommended consumer flow
Section titled “Recommended consumer flow”- Deduplicate by envelope
id. - Upsert product snapshots by
ClassSubscriptionId. - Replace plans as a set for
Subscription.Plans.Updated. - Update visibility without deleting assignments for publication events.
- Remove or archive only the catalog product for
Subscription.Deleted. - Periodically reconcile the paginated catalog, requesting optional expansions your integration needs.