Fired when a subscription is cancelled. Billing stops permanently and the gateway subscription is archived.
When it fires
Section titled “When it fires”A subscription has been cancelled. Topiic has:
- Archived the subscription at the payment gateway (no further debits).
- Cleared
nextBillingDateandnextBillingAmount. - Set
status = Cancelledwith acancelledAttimestamp and optional reason.
Cancellation is terminal — a cancelled subscription cannot be resumed. To re-enrol the member, create a new subscription.
Headers
Section titled “Headers”Same envelope as other events: Topiic-Event-Id, Topiic-Idempotency-Key, Topiic-Signature. See Verifying signatures.
{ "id": "5d3f7c12-…", "type": "subscription.cancelled", "createdAt": "2026-08-14T16:02:48.502Z", "data": { "subscriptionId": "3c4d5e6f-7a8b-9c0d-1e2f-3a4b5c6d7e8f", "memberId": "1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d", "planId": "b6a8a5b8-7b3c-4d1e-9c2a-1f9e8d7c6b5a", "status": "Cancelled", "cancelledAt": "2026-08-14T16:02:48.000Z", "cancellationReason": "Customer moved overseas" }}data fields
Section titled “data fields”| Field | Type | Notes |
|---|---|---|
subscriptionId | UUID | The Topiic Subscription id. |
memberId | UUID | The Topiic Member id. |
planId | UUID | The Plan the subscription was enrolled in. |
status | string | Always "Cancelled". |
cancelledAt | ISO-8601 UTC | When cancellation took effect. |
cancellationReason | string | null | Free-text reason captured at cancellation. May be null. |
What to do on receipt
Section titled “What to do on receipt”- Verify the signature, dedupe on
event.id. - Find the customer on your side via
memberId. - Revoke the entitlement — disable class booking, end membership perks, schedule any farewell email.
- Keep the customer record. Don’t delete it — the Member still exists in Topiic, and you may want to win them back later.
- Return 2xx within 10 seconds.