Accounts
The Accounts view is the per-account command centre for Lumio operators. It lets you browse every account in the system, drill into a single account to inspect its members and plan, override numeric/boolean limits, toggle feature-flag overrides, set user-scope permission overrides, and forcibly detach channel or bot connections when something goes wrong.
Where to find it
Admin sidebar → Accounts. The list lives at /accounts; detail pages live at /accounts/\{id\}.
Quick start
- Open Admin → Accounts and search by account name or owner display name.
- Click a row to open the account detail page.
- Change the plan via Plan Management — the dropdown lists every plan defined on the Plans page — and click Update Plan.
- Scroll to Account Limits to override plan defaults per field. Leave a field blank to fall back to the plan default.
- Optionally open Feature Overrides to flip individual features ON/OFF for this account only.
Detailed walkthrough
Accounts list (/accounts)
- Search — debounced search against name and owner display name.
- Columns — Name, Owner, Plan (coloured badge), Members count, Created date.
- Pagination — 25 accounts per page, "Page X of Y (N accounts)" footer.
- Row click — navigates to
/accounts/\{id\}.
Account detail (/accounts/[id])
The detail page stacks these cards:
- Account Information — name (editable inline, requires
accounts:edit), Account ID, Owner display name, Created/Updated timestamps. A Delete Account button (requiresaccounts:delete) opens a confirmation dialog before permanently deleting the account and all its data. - Plan Management — current plan badge, a
<select>populated from the live plan list, and an Update Plan button that stays disabled until the selection differs from the current plan. Plans also define amax_accountsfield that limits how many accounts the plan owner can create. (Theenterprisetier was dropped in migration20260415000009_drop_enterprise_plan; existing accounts were moved to Pro.) - Members — table of all users in the account showing Name (linked to
/users/\{user_id\}), Email, Role, Owner flag, Joined date, Actions. An Add Member button (requiresaccounts:edit) adds a user by user ID. Each non-owner member row has a Remove button with a confirmation dialog. - Account Limits — per-account overrides for numeric and boolean plan limits. Fields:
max_overlays,max_widgets,max_storage_bytes,max_upload_size_bytes,max_integrations,chat_retention_days,custom_bot_allowed,obs_remote_allowed,copyright_detection_allowed, plus a free-text Notes field. The three boolean fields are tri-state dropdowns (plan default / Yes / No); empty numeric fields fall back to the plan default. Save Limits persists the whole form in one PUT, and the card shows the last-updated timestamp next to the button. - Channel Connections — table showing Platform, Channel Name, Connected Since, Actions. Actions per row (all gated on
accounts:edit): Disconnect (with confirmation dialog) and a reconnect-flag toggle. When the reconnect flag is set, an amber warning icon appears next to the platform badge. See Reconnect Flags for what the flag does. - Bot Connections — same layout, showing Platform, Bot Type, Bot Username, Connected Since, Actions. Same actions: Disconnect and reconnect-flag toggle.
- Feature Overrides — see below.
- Permission Overrides — per-account overrides for user-scope permissions. See User Roles.
Extension dev mode is a user-scoped flag and has no account-scoped surface; set it from the Users detail page, which is the surface wired to the API.
Disconnecting a connection is destructive and immediate: the backend row is removed and the encrypted token discarded. The reconnect flag is non-destructive and can be toggled on and off; it forces the user to re-authorize without deleting the connection data.
Feature Overrides card (feature-overrides.tsx)
Rendered below the account detail card stack. Each row is a feature flag with:
- Feature name.
- Override —
ON,OFF,Global OFF, or unset. - Resolved — the effective state after the plan and global kill-switch are applied.
- Actions — ON / OFF buttons to set an override, plus a clear action (DELETE on
/accounts/\{id\}/features/\{feature_id\}) to remove the override and fall back to plan defaults.
StreamElements tokens
The API exposes per-account StreamElements tokens (GET / DELETE under /v1/admin/accounts/\{id\}/se-tokens, GraphQL adminSeTokens / adminDeleteSeToken), but the shipped account detail page renders no SE-tokens card. Use the API directly, or the account owner's own StreamElements settings.
Resolved limit overrides
A second PUT endpoint exists at /v1/admin/accounts/\{id\}/resolved-limits (GraphQL adminSetAccountLimits). It takes the same fields as the limits form but writes through the resolved-limits path. The shipped detail page saves through PUT /v1/admin/accounts/\{id\}/limits; the resolved-limits path is API-only.
Common scenarios
- Comp a customer with higher limits — keep them on Pro and use the per-account Limits card to bump storage, overlay caps, or chat retention above the plan defaults.
- Investigate a chargeback — open the account, review members and connections, then disconnect the channel connections if the account is being rotated.
- Temporarily disable a flaky integration for one customer — set a feature override to
OFFwithout touching the global kill-switch. - Recovery after an OAuth leak — disconnect the affected channel connection; the user will be prompted to reconnect.
Permissions
| Action | Permission |
|---|---|
| View account list / detail, limits, features, connections | accounts:read |
| Edit account name, manage members, set reconnect flags | accounts:edit |
| Change plan / limits / per-account feature overrides | accounts:edit |
| Disconnect channel connections | accounts:edit |
| Disconnect bot connections | accounts:edit |
| Delete account | accounts:delete |
| Read per-account permission overrides | accounts:overrides-read |
| Set / clear per-account permission overrides | accounts:overrides-edit |
| List / delete SE tokens (API only) | se-tokens:read / se-tokens:delete |
All of these additionally require admin:access to enter the dashboard. System admins (system_admin.is_system = true) implicitly have every permission.
platforms:read / platforms:edit exist in the admin permission registry but no admin account endpoint enforces them today — connection deletion is gated on accounts:edit.
API
| UI action | GraphQL | REST |
|---|---|---|
| List accounts | adminAccounts | GET /v1/admin/accounts |
| Get account detail | adminAccount | GET /v1/admin/accounts/\{id\} |
| Update account name | adminUpdateAccountName | PATCH /v1/admin/accounts/\{id\} |
| List login connections | adminAccountLoginConnections | — |
| Delete account | adminDeleteAccount | DELETE /v1/admin/accounts/\{id\} |
| Update plan | adminUpdateAccountPlan | PATCH /v1/admin/accounts/\{id\}/plan |
| Add member | adminAddAccountMember | POST /v1/admin/accounts/\{id\}/members |
| Remove member | adminRemoveAccountMember | DELETE /v1/admin/accounts/\{id\}/members/\{user_id\} |
| Get limits | adminAccountLimits | GET /v1/admin/accounts/\{id\}/limits |
| Save limits | adminUpsertAccountLimits / adminSetAccountLimits | PUT /v1/admin/accounts/\{id\}/limits |
| Save resolved limits | adminSetAccountLimits | PUT /v1/admin/accounts/\{id\}/resolved-limits |
| Get feature overrides | adminAccountFeatures | GET /v1/admin/accounts/\{id\}/features |
| Set feature override | adminSetAccountFeature | PUT /v1/admin/accounts/\{id\}/features |
| Clear feature override | adminClearAccountFeature | DELETE /v1/admin/accounts/\{id\}/features/\{feature_id\} |
| List channel connections | adminAccountChannelConnections | GET /v1/admin/accounts/\{id\}/connections |
| Delete channel connection | adminDeleteAccountChannelConnection | DELETE /v1/admin/accounts/\{id\}/connections/\{platform\} |
| Delete account login connection | adminDeleteAccountLoginConnection | — |
| Set channel reconnect flag | adminSetChannelReconnectFlag | PUT /v1/admin/channel-connections/\{id\}/reconnect-flag |
| List bot connections | adminAccountBotConnections | GET /v1/admin/accounts/\{id\}/bot-connections |
| Delete bot connection | adminDeleteAccountBotConnection | DELETE /v1/admin/accounts/\{id\}/bot-connections/\{platform\} |
| Set bot reconnect flag | adminSetBotReconnectFlag | PUT /v1/admin/bot-connections/\{id\}/reconnect-flag |
| Set primary login connection | adminSetPrimaryLoginConnection | -- |
| List SE tokens | adminSeTokens | GET /v1/admin/accounts/\{id\}/se-tokens |
| Delete SE token | adminDeleteSeToken | DELETE /v1/admin/accounts/\{id\}/se-tokens/\{token_id\} |
| List permission overrides | adminAccountPermissionOverrides | GET /v1/admin/accounts/\{id\}/permission-overrides |
| Set permission override | adminSetAccountPermissionOverride | PUT /v1/admin/accounts/\{id\}/permission-overrides |
| Remove permission override | adminRemoveAccountPermissionOverride | DELETE /v1/admin/accounts/\{id\}/permission-overrides/\{permission\} |
Tips & gotchas
- Empty fields in the limits form are semantically different from
0. An empty field inherits the plan default; a zero disables the feature for that account. - Notes on the limits form is the audit trail. Fill it in with a ticket ID or Slack link when you override anything non-trivial.
- Plan changes are immediate — there is no Stripe sync here; billing adjustments still go through the Stripe dashboard.
- Deleting a channel connection does not revoke the token at the platform. Use it for recovery, not revocation.
Related
- Users — user records that own or belong to accounts
- Plans — plan definitions and default feature grid
- Feature Flags — global kill-switches that override everything here
- Providers — per-platform kill-switches