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

Create and manage Stripe Checkout Sessions with Managed Payments.

This is the primary integration point - all Managed Payments sales
must go through Checkout Sessions with `managed_payments: %{enabled: true}`.

Supports both one-time payments (`mode: "payment"`) and
subscriptions (`mode: "subscription"`).

## Example - subscription

    {:ok, session} = StripeManaged.CheckoutSession.create(%{
      line_items: [%{price: "price_abc", quantity: 1}],
      mode: "subscription",
      managed_payments: %{enabled: true},
      success_url: "https://example.com/success"
    })

    # Redirect to session["url"]

## Example - one-time payment

    {:ok, session} = StripeManaged.CheckoutSession.create(%{
      line_items: [%{price: "price_xyz", quantity: 1}],
      mode: "payment",
      managed_payments: %{enabled: true},
      success_url: "https://example.com/thanks"
    })

# `create`

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

Creates a new Checkout Session.

Required params:
  - `line_items` - list of `%{price: price_id, quantity: n}`
  - `mode` - `"subscription"` or `"payment"`
  - `managed_payments` - `%{enabled: true}`
  - `success_url` - redirect URL after successful payment

Optional params:
  - `cancel_url` - redirect URL if customer cancels
  - `customer` - existing customer ID
  - `customer_email` - pre-fill email
  - `metadata` - key-value metadata
  - `saved_payment_method_options` - saved payment method config
  - `payment_method_collection` - `"if_required"` for free trials

# `expire`

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

Expires a checkout session so it can no longer be completed.

# `list`

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

Lists checkout sessions.

# `list_line_items`

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

Retrieves line items for a session.

# `retrieve`

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

Retrieves a session by ID.

---

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