Lifecycle state returned by GET /v1/subscriptions/status.
'grace_period' never grants entitlement: active is false during grace.
Grace means the billing provider (Apple billing grace, Google Play grace,
Stripe retries) keeps retrying the renewal payment until the grace window
ends; unlimited access is paused while the retry is in progress and resumes
automatically once the renewal succeeds. Renders can still be paid with
Spark/SOGNI in the meantime. During grace, currentPeriodEnd reflects when
the payment-retry window ends — not paid-through access.
Canceling during a free trial stops renewal and keeps trial access until
its original currentPeriodEnd, with trial limits still in effect. The
snapshot stays trialing with cancelAtPeriodEnd: true until expiry.
Always rely on the server's active value for the entitlement decision.
rather than the status string.
Lifecycle state returned by
GET /v1/subscriptions/status.'grace_period'never grants entitlement:activeisfalseduring grace. Grace means the billing provider (Apple billing grace, Google Play grace, Stripe retries) keeps retrying the renewal payment until the grace window ends; unlimited access is paused while the retry is in progress and resumes automatically once the renewal succeeds. Renders can still be paid with Spark/SOGNI in the meantime. During grace,currentPeriodEndreflects when the payment-retry window ends — not paid-through access.Canceling during a free trial stops renewal and keeps trial access until its original
currentPeriodEnd, with trial limits still in effect. The snapshot staystrialingwithcancelAtPeriodEnd: trueuntil expiry. Always rely on the server'sactivevalue for the entitlement decision. rather than the status string.