Every Stripe subscription moves through a defined set of statuses. `trialing` means the customer's inside a free trial period and hasn't been charged yet. `active` means it's current and paid. `past_due` means a renewal charge failed and Stripe is retrying it on its own schedule. `canceled` means it's over. `unpaid` means the retries ran out without success. That status, not a guess based on when someone last opened the dashboard, is what should be deciding whether a customer keeps access.
Cancelling a subscription in Stripe can happen two ways: immediately, which stops billing and ends access right away, or at the end of the current billing period, which lets the customer keep what they already paid for and stops the next renewal from happening. Which one's right depends on whether you want to deal with a prorated refund or just let the current period run out cleanly.
Pausing is a separate option from cancelling, set through Stripe's `pause_collection` field. It stops new invoices from being generated while the subscription stays on the books, so a customer can come back later without re-subscribing from scratch. You choose separately whether invoices that were already open while paused get kept, voided, or marked uncollectible.