Current plan and expiry
Slim subscription payload β surfaces the organization's current plan and expiry so the mobile billing screen knows which CTA to render (renew, upgrade, take-no-action).
The dashboard's heavier /api/subscription/status response carries additional current_usage, limits, features, and billing blocks that drive an admin-facing billing UI. The mobile app never consumed those blocks, so this endpoint drops them β the payload shrinks from ~25 fields to ~17 and the request runs at most two flat DB queries (latest subscription row + best-effort org name lookup) instead of four.
FREE-plan fallback: organizations with no organization_subscriptions row receive a synthesized FREE-plan shape (plan_code=FREE, status=ACTIVE, current_period_end one year out). Clients never have to special-case subscription == null.
days_until_expiry is negative when current_period_end is in the past β mobile branches on < 0 to render the Berlangganan kembali CTA.
pending_downgrade is non-null only when a plan change is scheduled but not yet applied (typically a paid β free downgrade at period-end). Mobile shows a banner explaining when the change takes effect.
Current plan and expiry βΊ Responses
Subscription snapshot.
success