Cancel Subscription

User cancels their recurring subscription through the platform's native store settings.

Planned — not yet live.

Who Can Do This

Any user with type subscriber. Cancellation is performed in the App Store or Google Play — not within the 95octane app. Any subscriber can access store subscription management regardless of their account status.

How Cancellation Works

Cancellation is managed entirely by the App Store (iOS) or Google Play (Android). The 95octane app has no in-app cancellation flow. 95octane learns of subscription state changes only via RevenueCat webhooks.

Operator-initiated cancellation (banned users): For users with status: banned_final, 95octane cancels the subscription programmatically via RevenueCat at the time of the ban on Android (Google Play supports programmatic cancellation). On iOS, the App Store does not support programmatic cancellation — the subscription lapses at the next renewal unless the user cancels manually. The user cannot take any action in-app while banned (they see only the ban screen). An iOS banned_final user therefore continues to be charged by the App Store until their current billing period ends — this is an accepted trade-off given the platform limitation.

Subscription Lifecycle Events

Event Trigger 95octane action
Purchase User subscribes or re-subscribes Grant subscriber access; increment early-adopter slot counter
Renewal Auto-renewal payment succeeds Access continues seamlessly; slot counter not incremented
Cancellation User cancels in store Access continues to end of billing period; app displays pending cancellation notice with the subscription end date
Re-enabled auto-renewal User reverses their cancellation before period ends Pending cancellation notice cleared; access continues normally
Expiration Billing period ends after cancellation Revoke access immediately; start 7-day asset handoff window
Billing issue Renewal payment fails App displays billing issue notice with Manage Subscription link. User retains subscriber access for the duration of the store's grace period while the store retries billing. If billing recovers within the grace period → RENEWAL event received, notice cleared, access continues normally. If the grace period expires without recovery → EXPIRATION event received, access revoked immediately and 7-day asset handoff window begins
Refund Store issues a refund Revoke access immediately; start 7-day asset handoff window
Refund reversed Store reverses a previously issued refund Restore subscriber access immediately on the same plan (early-adopter or standard) as the original purchase

Steps

  1. User navigates to subscription management in App Store (iOS) or Google Play (Android) — not within the 95octane app directly.
  2. User selects the 95octane subscription and cancels it.
  3. The store confirms cancellation; subscription remains active until the end of the current billing period.
  4. At period end, the store notifies RevenueCat; RevenueCat delivers an expiry webhook to 95octane.
  5. 95octane processes the webhook: the user's type reverts to free and the expiry flow begins.

Rules

  • Cancellation takes effect at the end of the paid period — access is not revoked immediately.
  • There is no grace window for feature access after expiry.
  • The store's billing retry grace period is platform-defined in duration (Apple and Google set their own retry windows). During this period the user retains full subscriber access.
  • Asset freeze and handoff window. At expiry, every group and ride the user owns (except rides covered by the free quota exception) is frozen immediately — unavailable to all members and participants from the moment of expiry. The user has 7 days to resolve frozen assets by transferring or deleting them. Day 30 is counted from the expiry date (not from the freeze date). Frozen assets not resolved by day 30 are permanently deleted.
  • Free quota exception. Rides for which the user still has free Premium ride quota available are excluded from the mandatory transfer. The user created those rides as a subscriber; since free-with-quota users can hold ride ownership, they may retain those rides without transferring.
  • Buddy requests and buddy connections are not affected by subscription expiry.

Pending Cancellation State

95octane is notified immediately via RevenueCat when the user cancels — before the billing period ends. From this point the user is in a pending cancellation state: they retain full subscriber access, but the app displays a notice showing the date their subscription will end and a Manage Subscription link (sourced from RevenueCat's managementURL) that deeplinks directly to the store's subscription management screen.

If the user re-enables auto-renewal in the store before the period ends, RevenueCat sends an UNCANCELLATION event and the pending cancellation notice is cleared. Access continues normally. The early-adopter slot counter is not incremented — reversing a cancellation is not a new subscribe event.

Billing Issue State

95octane is notified immediately via RevenueCat when a renewal payment fails (BILLING_ISSUE event). The app displays a billing issue notice with a Manage Subscription deeplink so the user can update their payment method in the store. The user retains full subscriber access throughout the store's grace period while billing is retried.

  • If billing recovers during the grace period, a RENEWAL event is received, the notice is cleared, and access continues normally.
  • If the grace period expires without recovery, an EXPIRATION event is received, access is revoked immediately, and the 7-day asset handoff window begins.

The renewal date shown on the View Subscription Status screen remains the original renewal date — it does not update to the grace period expiry date.

What Happens Next

The user retains subscriber access until their billing period ends.

At expiry and beyond

For the full expiry flow — admin role revocation, immediate asset freeze, the 7-day handoff window, re-subscribing during the window, and day-30 permanent deletion — see Expired Subscriptions in the Subscription overview.

Failure Cases

  • Cancellation not reflected immediately — the store controls timing; the app reflects entitlement status as reported by RevenueCat and may lag briefly after the billing period ends.
  • Webhook delivery failure — if RevenueCat cannot deliver a webhook to 95octane (e.g. a server outage), it retries up to 5 times with increasing delays. 95octane's webhook handler is idempotent — duplicate deliveries of the same event (e.g. a duplicate Purchase event) are safe and do not double-increment the slot counter. If all retries fail, entitlement drift self-corrects via Apple and Google server notifications pushing subscription events directly to RevenueCat. 95octane can also poll RevenueCat's REST API on demand (e.g. on app open) to re-sync entitlement state.
  • Refund issued during pending cancellation — if a refund is approved while the user is in pending cancellation state (billing period not yet ended), access is revoked immediately — the same as a refund at any other time. The pending cancellation notice is cleared and the standard expiry flow (admin role revocation, immediate asset freeze, 7-day handoff window) begins at once.
  • Refund issued by the store — if the store approves a refund, RevenueCat delivers a refund webhook and access is revoked immediately. The same expiry flow applies: admin roles are revoked, the 7-day asset handoff window begins, and the user's type reverts to free. A live ride in progress at the moment of refund continues uninterrupted — same behaviour as a normal expiry. If a handoff window is already running when the refund arrives, the day-30 deletion clock is not reset — the original expiry date remains the anchor. Only refunds for the latest subscription period trigger a webhook — refunds for earlier periods are not surfaced to 95octane and require no action. If a refund arrives after a user's assets were already permanently deleted at day 30, the account is restored to free but deleted assets are not recoverable.
  • Refund reversed by the store — access is restored immediately on the same plan (early-adopter or standard) as the original purchase. The slot counter is not re-decremented. If the reversal arrives after the user's assets were already permanently deleted at day 30, subscriber access is still restored but deleted assets are not recoverable — same outcome as re-subscribing after day-30 deletion.