What happens when a user accepts “Pause” in Juttu
- Juttu updates the subscription in your payment provider (source of truth) - Stripe or Paddle
- Your app should react to Stripe webhooks to toggle in-app access
- Optional: Show a Pause Wall to paused users, with clear actions to Resume or Cancel
Webhook refs:
- Stripe Billing subscription webhooks → https://docs.stripe.com/billing/subscriptions/webhooks
Stripe Integration Details
Juttu uses Stripe’s pause collection feature to manage pauses.
How it works
When a pause is accepted, Juttu updates the subscription:
pause_collection: {
behavior: "void",
resumes_at: resumeTimestamp
}This tells Stripe to:
- Keep the subscription active
- Void invoices created during the pause
- Automatically resume billing at
resumes_at
IMPORTANT: Stripe does not change the subscription status — it stays "active".
You should simply treat pause_collection != null as paused in your system.
How to detect a pause (in your webhook)
Listen for the customer.subscription.updated event.
When it fires, check for the presence of the pause_collection object in the subscription payload:
if (event.type === 'customer.subscription.updated') {
const subscription = event.data.object;
if (subscription.pause_collection) {
// Subscription is paused
// Optional: subscription.pause_collection.resumes_at tells you when it auto-resumes
} else {
// Subscription is active (not paused)
}
}Related Stripe webhooks you may see
customer.subscription.updated→ fires when pause is applied or removedinvoice.created (status = "void")→ during the pause periodinvoice.voided→ when invoices are voided
What to do in your app when a user is paused
In short, you probably want to restrict access to your app.
There are different options and behaviors that you can add to make this experience nicer for the user.
A pause wall is the best approach for most companies.
How the Pause Wall works (end-user view)
A pause wall is a pop-up that restricts access to your application, informs the user about his/her status (paused) and gives the option for the user to take action (resume subscription now).
The minimal version of a pause wall
- Listen to provider webhooks
- Gate the app behind a Pause Wall (popup) when
subscription.pause_collection != null
How a pause wall works in detail:
User pauses their subscription.
Then they visit your application site.
Activation
- Subscription’s
pause_collectionis set (Stripe)
Behavior
- Blocks access to your main app via a pop-up
- An advanced pause wall shows options to:
- Resume now (trigger immediate unpause in Stripe)
- Optional: cancel at term end
- Soft wall: Allow to access parts of the app, but restrict others
FAQ
Why use pause_collection instead of setting status = paused?
Short answer: it keeps the subscription live, clean, and automatically restorable.
Upsides of using pause_collection
- Subscription stays active
- Keeps subscription data, history, and analytics intact
- Avoids breaking integrations tied to subscription ID
- Automatic resumption
- Stripe resumes billing at resumes_at automatically
- No manual reactivation or new subscription creation needed
- Cleaner analytics
- MRR and churn metrics remain accurate
- You can measure pause → resume retention
- Better customer experience
- Seamless resume, no new payment required
- No disruption to trials, add-ons, or custom plans
- Simpler state management
- One continuous subscription lifecycle
- No need to link “old” and “new” subscriptions
- All metadata persists