# `LatticeStripe.BillingPortal.Session.FlowData.SubscriptionCancel`
[🔗](https://github.com/szTheory/lattice_stripe/blob/v1.1.0/lib/lattice_stripe/billing_portal/session/flow_data/subscription_cancel.ex#L1)

The `subscription_cancel` branch of a `LatticeStripe.BillingPortal.Session.FlowData`.

Populated when `flow_data.type == "subscription_cancel"`. Provides deep-link access
to a cancellation flow for a specific subscription.

`subscription` is the Stripe subscription ID (`sub_*`) the portal should prefill.
`retention` is the raw Stripe retention object (type `"coupon_offer"` etc.) — kept as
a raw `map()` per D-02 (shallow leaf objects do not warrant dedicated modules).

Parent struct: `LatticeStripe.BillingPortal.Session.FlowData`.

# `t`

```elixir
@type t() :: %LatticeStripe.BillingPortal.Session.FlowData.SubscriptionCancel{
  extra: map(),
  retention: map() | nil,
  subscription: String.t() | nil
}
```

# `from_map`

```elixir
@spec from_map(map() | nil) :: t() | nil
```

---

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