Skip to main content

Pausing Subscriptions

Pausing lets a subscriber stop billing temporarily while preserving their account and subscription record. It’s a powerful retention tool — users who might otherwise cancel can take a break and return later.

Pause a subscription

use Pixelworxio\Subscribd\Actions\PauseSubscription;

$subscription = $user->subscription();
app(PauseSubscription::class)->execute($subscription);
The subscription enters Paused status. Billing stops immediately. paused_at is set to now and paused_until is null (manual resume required).

Pause with an auto-resume date

use Carbon\CarbonImmutable;

app(PauseSubscription::class)->execute($subscription, [
    'resume_at' => CarbonImmutable::now()->addWeeks(4),
]);
paused_until is stored on the subscription. Run subscribd:expire-subscriptions on a schedule to auto-resume when the date passes.

Resume a paused subscription

use Pixelworxio\Subscribd\Actions\ResumeSubscription;

app(ResumeSubscription::class)->execute($subscription);
This resumes billing at the gateway, clears paused_at and paused_until, and fires SubscriptionResumed.

Checking pause status

$subscription = $user->subscription();

$subscription->status->value;       // 'paused'
$subscription->paused_at;           // when the pause started
$subscription->paused_until;        // auto-resume date, or null

Gating feature access during a pause

A paused subscription is intentionally left in the Paused status rather than Canceled so your application can distinguish between the two and handle them differently. Gate access as appropriate for your product:
// Allow data access but block feature usage during a pause
$subscription = $user->subscription();

if ($subscription->status->value === 'paused') {
    abort(402, 'Your subscription is paused. Resume to continue.');
}
Or use Laravel’s Gate/Policy:
class FeaturePolicy
{
    public function use(User $user): bool
    {
        $status = $user->subscription()?->status->value;
        return in_array($status, ['active', 'trialing', 'grace']);
    }
}

Listening to pause events

use Pixelworxio\Subscribd\Events\SubscriptionPaused;
use Pixelworxio\Subscribd\Events\SubscriptionResumed;

Event::listen(SubscriptionPaused::class, function (SubscriptionPaused $event): void {
    Mail::to($event->subscription->billable->billingEmail())
        ->send(new PausedConfirmationMail($event->subscription));
});

Event::listen(SubscriptionResumed::class, function (SubscriptionResumed $event): void {
    Mail::to($event->subscription->billable->billingEmail())
        ->send(new ResumedConfirmationMail($event->subscription));
});

Gateway support

GatewayNative pause support
Stripe✅ Yes
PayPal⚠️ Limited
Braintree❌ No (local status only)
Paddle✅ Yes
FastSpring❌ No (local status only)
Square❌ No (local status only)
For gateways without native pause support, Subscribd updates the local subscription status only. Billing will not stop at the gateway level — use CancelSubscription with a grace period instead if hard billing stop is required.

Pause vs. cancel

SituationRecommended action
”I need a break but want to come back”Pause
”Traveling for 2 months, won’t need it”Pause with resume_at
”I’m done with this product”Cancel
”Too expensive right now”Pause or swap to a lower plan

The SubscriptionManager component

The subscription-manager Livewire component includes pause and resume actions in its management UI:
<livewire:subscribd::subscriber.subscription-manager />
See Livewire Components for the full component reference.

Next steps