Cancelling
How to cancel a paid plan, what happens to your data, and how to come back later.
You can cancel any time. Cancellation is handled by Stripe's Customer Portal — JustTunnel doesn't ask why, doesn't make you call anyone, and doesn't sit on the request.
How to cancel
- Sign in to the dashboard.
- Open the billing portal (the dashboard surfaces a "Manage billing" action that opens a Stripe Customer Portal session via
GET /api/billing/portal,internal/billing/handlers.go:75). - Select your subscription and choose Cancel plan.
- Stripe schedules the cancellation at the end of your current billing period.
For Team subscriptions, the team's billing admin opens the portal from the team's settings page; the proxy lives at POST /api/teams/{slug}/billing/portal.
You won't lose access immediately — see below.
What happens immediately
Nothing visible. Until the period ends:
- Your plan and limits stay at the current tier.
- Reserved subdomains stay yours.
- Active tunnels keep running.
- Your card is not charged again at the next renewal.
This is intentional: you've already paid for the current period, and revoking access mid-period would be punishing you for the part you already bought.
What happens at period end
When the Stripe subscription ends:
- Your plan is set to
free. - Excess tunnels are closed oldest-first by the downgrader (
internal/billing/downgrade.go:39). Free has a one-tunnel cap, so multiple active tunnels at the moment of downgrade will see all but the newest one closed. - Reserved subdomains are released because Free can't hold them (
internal/billing/downgrade.go:60). The names go back into the pool — the next user to request that name gets it. - Workers above the Free cap are quarantined per the worker reaper.
- You receive a "plan downgraded" email (
internal/billing/grace.go:110).
If you cancel a Team subscription, the team is downgraded — the team itself isn't deleted. To delete a team, see Teams → Deleting a team.
Data retention
JustTunnel doesn't store traffic content. Tunnels are forwarders, not loggers — there's nothing to retain on the request body side.
What we do store is account-level metadata: your user record, your team memberships, your reserved-subdomain history, audit rows, and Stripe identifiers. None of this is deleted by cancellation alone — your account stays intact so that a re-subscribe (see below) puts you exactly where you left off, minus the things that were released by the downgrade.
If you want a full account deletion (not just a cancellation), contact support. We don't currently have a self-serve account-deletion flow.
Reactivating
You can come back at any time:
- Sign in to the dashboard.
- Start a new Stripe Checkout session (the dashboard's upgrade action calls
POST /api/billing/checkout,internal/billing/handlers.go:27). - Pick the plan you want.
Important nuances:
- Reserved subdomains are not magically restored. If your subdomain was released at downgrade and someone else has reserved it in the meantime, it's theirs. If it's still free in the pool, you can re-reserve it under your re-upgraded Pro plan.
- Teams you owned still exist. Cancelling a personal subscription doesn't dissolve teams you own — the team's own subscription is separate. Cancelling a Team subscription downgrades the team but keeps it.
- Stripe customer is reused. Your existing Stripe customer ID is preserved on your user record, so re-subscribing is fast and your payment methods are remembered.
- Gifted plans are unaffected. If a JustTunnel admin has gifted you a plan, the gift overrides whatever Stripe-side cancellation you do (
internal/plan/enforcer.go—EffectivePlanpicks the higher of gifted and stripe).
After re-subscribing, run:
justtunnel status
to confirm the new plan is live. The Stripe webhook usually applies within seconds.
Cancelling vs failed payment
Two different paths land you on Free, with different timing:
| Path | Timing | Trigger |
|---|---|---|
| Voluntary cancellation | End of billing period | You clicked Cancel in the portal |
| Failed payment | 5 days after first failed charge | Stripe couldn't charge your card after retries (internal/billing/grace.go:13) |
The failed-payment path is the involuntary one — see Upgrade and downgrade → Involuntary downgrade. You can resolve a failed payment by updating your card in the Stripe portal before the grace period ends; that re-bills the failed invoice and keeps you on your plan.
Related
- Upgrade and downgrade — what a downgrade actually does
- Plans — what each tier looks like if you come back
- Teams → Deleting a team — for team-level deletion
- Privacy Policy — full data-retention details