Skip to content

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.

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 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.

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.

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.

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"
}
]

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"
}
]
  1. Deduplicate by envelope id.
  2. Upsert product snapshots by ClassSubscriptionId.
  3. Replace plans as a set for Subscription.Plans.Updated.
  4. Update visibility without deleting assignments for publication events.
  5. Remove or archive only the catalog product for Subscription.Deleted.
  6. Periodically reconcile the paginated catalog, requesting optional expansions your integration needs.