Skip to content

How to cancel your Torqueflow subscription

Garage owners can cancel their Torqueflow subscription from the billing settings page. Cancellation is immediate with a 30-day grace period. There is no retention funnel or multi-step process. An optional exit survey and a non-blocking save offer are presented before confirmation. Customers within 14 days of first paid conversion receive an automatic full refund.

  • Signed in as the garage owner or a user with the billing.cancel permission.
  • The organisation subscription state is active or buyout. Accounts in trial, grace_period, suspended, or demo states cannot trigger cancellation.

Navigate to Settings → Billing → Cancel subscription. The route is /settings/billing/cancel.

The system loads a CancellationContext object containing plan details, cooling-off eligibility, refund amount, and annual savings data.

2. Review the save offer (optional, non-blocking)

Section titled “2. Review the save offer (optional, non-blocking)”

If the account is on a monthly plan, an inline card shows the potential annual savings:

  • Displays the annual price per bay and the percentage discount (25% off monthly pricing).
  • A link redirects to the billing page to switch plan. This does not block cancellation.
  • Annual plan holders see a reminder of their current discount instead.

If the account is within 14 days of the first paid conversion date, a green banner states the refund amount. The conversion date is taken from the organisation trial_ends_at field, falling back to the subscription created_at date.

A card explains the consequences:

  • The subscription ends immediately.
  • A 30-day grace period begins.
  • After the grace period, the account is suspended.
  • Data is retained for 90 days after suspension.
  • Invoice history is retained for 24 months.
  • Reactivation is available at any time during the grace period.

An optional survey offers six predefined reasons:

  • Too expensive
  • Not the right fit
  • Using a competitor
  • Temporary pause — planning to return
  • Missing features I need
  • Other

A free-text field (max 500 characters) is available for additional feedback. The survey is saved to the subscription record before the Stripe cancellation call. If the save fails, cancellation proceeds regardless.

Click Confirm cancellation. The system performs these operations in order:

  1. Saves exit survey data to the subscription record (if provided).
  2. Calls stripe.subscriptions.cancel() to cancel the Stripe subscription immediately. This fires a customer.subscription.deleted webhook.
  3. Logs an audit event for the survey submission (if provided).
  4. Processes the cooling-off refund (if eligible). Checks for existing refunds to prevent duplicates.
  5. Logs an audit event for the cancellation request.
  6. Sends a confirmation email to the owner.

After successful cancellation, the result page shows:

  • A confirmation that the subscription is cancelled.
  • The grace period end date.
  • A refund banner (if a cooling-off refund was processed).
  • Information about what happens during and after the grace period.
  • A link back to the billing page.
  • A non-dismissible banner appears at the top of all pages showing the grace period end date and a Reactivate button.
  • The account remains fully functional. All features, data, and settings are preserved.
  • The banner links to the Stripe billing portal for reactivation.
  • During the grace period, the phone number is held. The billing status page shows the hold expiry date.
  • After the hold expires, the phone number is released. The billing status page shows a message confirming the release.
  • On reactivation, if the phone number was preserved, the confirmation email states this. If the number was released, the email directs the owner to set up a new number.
  • The organisation transitions to suspended state.
  • New job creation is blocked.
  • Existing work orders can still be completed. Invoices and payments can still be recorded.
  • Purchased credit expiry dates are narrowed to 30 days after the grace period end date. Original expiry dates are preserved for restoration on reactivation.
  • Data is retained for 90 days after suspension. Invoice history is retained for 24 months.
  • During the grace period: click Reactivate Subscription on the billing page or in the grace period banner. This opens the Stripe billing portal.
  • During the suspended state: click Reactivate Subscription on the billing status page. This also opens the Stripe billing portal.
  • On reactivation, purchased credit expiry dates are restored to their original values. Data, settings, and configuration are preserved.
  • A confirmation email is sent with plan details, next billing date, and phone number status.
  • Users without the billing.cancel capability see a message to contact an account administrator.
  • Eligible if the account is within 14 days of the first paid conversion.
  • The full amount of the latest paid invoice is refunded to the original payment method.
  • The refund is processed via Stripe. Idempotency checks prevent duplicate refunds.
  • If the invoice was paid via credit balance (no payment intent), the refund is skipped.
  • The confirmation email includes the refund amount and states it will arrive within 5-10 business days.
  • Sent from billing@mail.torqueflow.app.
  • Subject: “Your Torqueflow subscription has been cancelled”.
  • Contains the grace period end date, data retention timelines, and a reactivation button.
  • If a cooling-off refund was processed, a refund section and banner are included.
  • A data deletion request option is available on the billing page in the grace_period and suspended states.
  • This is separate from cancellation and requires explicit action by the owner.
  • If the account is already in grace_period state, submitting cancellation again returns success with the existing grace period end date. No duplicate Stripe calls or refunds are made.
SymptomCauseResolution
”Cannot cancel subscription in [state] state”The organisation is not in active or buyout state.Check the current subscription state on the billing page. Trial accounts must convert first. Already-cancelled accounts cannot be cancelled again.
”No subscription found” / “No active subscription found”No subscription record exists for this organisation, or it has no Stripe subscription ID.Contact Torqueflow support.
”Failed to cancel subscription — please try again or contact support”The Stripe API call failed.Retry. If the issue persists, check Stripe dashboard status or contact support.
Refund not receivedThe invoice was paid via credit balance, or the refund is still processing.Refunds take 5-10 business days. If the refund status shows failed, contact support.
Cannot reactivateThe user does not have the billing.cancel capability, or there is no Stripe customer record.Contact an account administrator, or contact Torqueflow support if the Stripe customer record is missing.
Grace period banner not showingThe organisation subscription_state has not transitioned to grace_period.The transition is triggered by the Stripe webhook handler. Allow a few seconds. If it persists, contact support.
Phone number released earlyThe phone hold expired before the grace period ended.Phone hold and grace period are tracked separately. Reactivation after phone release requires setting up a new number.
Exit survey data lostThe survey save failed before cancellation.The survey is saved best-effort. The cancellation still proceeds. Survey data may be absent from the subscription record.
Demo organisation cannot cancelDemo accounts are guarded from cancellation.This is expected behaviour. Demo organisations cannot modify billing.