Subscription lifecycle
A subscription begins in one of two states depending on whether the plan has a trial period, then progresses through the following transitions:All status transitions are validated by
SubscriptionStatus::canTransitionTo(). Attempting an invalid transition (e.g., from canceled back to active) throws an exception. Use resumeSubscription() to restore a grace-period subscription to active.SubscriptionStatus enum values
| Status | Description |
|---|---|
active | Subscription is current and paid |
trialing | Within the free trial period; not yet charged |
past_due | Payment failed; dunning retries are in progress |
grace | Subscription was canceled but the period has not yet ended |
paused | Manually paused; billing is suspended |
canceled | Subscription has ended |
incomplete | Initial payment never completed (e.g., 3D Secure abandoned) |
Checking subscription status
TheManagesBilling trait adds helper methods directly to your billable model:
Query scopes
TheSubscription model ships with scopes for filtering by status:
Pausing and resuming
Multiple named subscriptions
A single billable can hold independent subscriptions simultaneously. Each subscription has aname that defaults to 'default'. Use the name option when subscribing to create additional slots:
Multiple subscriptions are independent — canceling
'storage' does not affect 'default'. Entitlements can be checked across all active slots at once using forAll(). See Entitlements for details.