# `StripeManaged.Subscription`
[🔗](https://github.com/safemyprivacy0-bit/stripe_managed/blob/main/lib/stripe_managed/subscription.ex#L1)

Manage subscriptions created through Managed Payments.

Subscriptions are created via Checkout Sessions, not directly.
Use this module to retrieve, update, and cancel existing subscriptions.

Note: Invoice Items cannot be attached to Managed Payments subscriptions.
All sales must originate from Checkout Sessions.

# `cancel`

```elixir
@spec cancel(String.t(), map(), keyword()) :: StripeManaged.Client.response()
```

Cancels a subscription.

By default, cancels immediately. Pass `cancel_at_period_end: true`
to cancel at the end of the current billing period instead.

# `list`

```elixir
@spec list(
  map(),
  keyword()
) :: StripeManaged.Client.response()
```

Lists subscriptions. Filter by `customer`, `price`, `status`, etc.

# `list_all`

```elixir
@spec list_all(
  map(),
  keyword()
) :: Enumerable.t()
```

Returns a lazy Stream of all subscriptions, auto-paginating.

# `resume`

```elixir
@spec resume(String.t(), map(), keyword()) :: StripeManaged.Client.response()
```

Resumes a paused subscription.

# `retrieve`

```elixir
@spec retrieve(
  String.t(),
  keyword()
) :: StripeManaged.Client.response()
```

Retrieves a subscription by ID.

# `update`

```elixir
@spec update(String.t(), map(), keyword()) :: StripeManaged.Client.response()
```

Updates a subscription.

Supports changing prices (upgrade/downgrade), quantity, metadata,
and `payment_behavior` for proration control.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
