Skip to main content
Pausing lets a subscriber suspend their subscription without canceling it. Unlike cancellation, pausing preserves the subscription record with status = 'paused' and does not enter a grace period. The subscriber can resume at any time to return to active status. This pattern is useful for seasonal products, temporary budget concerns, or situations where a subscriber needs to step away without permanently ending the relationship.

PauseSubscription

Use the PauseSubscription action to suspend an active or trialing subscription.
use Pixelworxio\Subscribd\Actions\PauseSubscription;

$subscription = $user->subscription('default');

app(PauseSubscription::class)->execute($subscription);
PauseSubscription::execute() sets status = 'paused' and records paused_at on the Subscription model. It also contacts the configured gateway to suspend the billing schedule.

ResumeSubscription

Use the ResumeSubscription action or the facade shortcut to bring a paused subscription back to active status.
use Pixelworxio\Subscribd\Facades\Subscribd;

// Resume the default subscription
Subscribd::for($user)->resume();

// Resume a named subscription
Subscribd::for($user)->resumeSubscription();

Paused vs. canceled

PausedCanceled (grace period)Canceled (immediate)
statuspausedgracecanceled
subscribed()falsetruefalse
onGracePeriod()falsetruefalse
Can resumeYesYes (before period end)No
Access to featuresNoYesNo
Billing suspendedYesNo (final cycle runs)Yes
A paused subscription does not grant feature access. If your application checks allows() or limitOf(), those checks will fail while the subscription is paused. Gate your UI accordingly so subscribers understand why features are unavailable.

Query scope

Find all paused subscriptions with the built-in Eloquent scope.
use Pixelworxio\Subscribd\Models\Subscription;

Subscription::paused()->get();

Audit history via previous_subscription_id

Some gateways (PayPal, Braintree) create a new gateway subscription when you resume a paused one, rather than reactivating the original. In those cases, ResumeSubscription records the original subscription’s ID on the new record via the previous_subscription_id column, forming a linked audit chain.
$resumed = $user->subscription('default');

// The ID of the subscription that was paused before this one
$resumed->previous_subscription_id;
You can walk the chain to reconstruct the full billing history for a subscription slot:
$current = $user->subscription('default');

$history = collect([$current]);
while ($current->previous_subscription_id) {
    $current = Subscription::find($current->previous_subscription_id);
    $history->push($current);
}
Stripe reactivates the same subscription record on resume, so previous_subscription_id is null for Stripe-managed subscriptions. The column is always populated for PayPal and Braintree resumes.

Valid status transitions

The SubscriptionStatus state machine enforces which transitions are legal. For pause and resume:
  • activepaused (pause allowed)
  • trialingpaused (pause allowed)
  • pausedactive (resume)
  • pausedcanceled (cancel a paused subscription)
Attempting an invalid transition throws a SubscriptionException.