Skip to main content

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​

  1. Open Admin → Accounts and search by account name or owner display name.
  2. Click a row to open the account detail page.
  3. Change the plan via Plan Management - the dropdown lists every plan defined on the Plans page - and click Update Plan.
  4. Scroll to Account Limits to override plan defaults per field. Leave a field blank to fall back to the plan default.
  5. 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:

  1. Account Information - name (editable inline, requires accounts:edit; while the channel takes its name from a connection, the channel shows that connection's name and the next connection sync overwrites the edit), Account ID, Owner display name, Created/Updated timestamps. A Delete Account button (requires accounts:delete) opens a confirmation dialog before permanently deleting the account and all its data, including an uploaded channel picture.
  2. 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 a max_accounts field that limits how many accounts the plan owner can create. (The enterprise tier was dropped in migration 20260415000009_drop_enterprise_plan; existing accounts were moved to Pro.)
  3. Members - table of all users in the account showing Name (linked to /users/\{user_id\}), Email, Role, Owner flag, Joined date, Actions. Add Member (requires accounts:edit) opens a dialog that requires both a user ID and a role from this account. Roles load when the dialog opens; no role is preselected, and the Owner/system role is not offered. The Add button stays disabled until both fields are selected. The dialog reports a role-loading error or an empty assignable-role list. Each non-owner member row has a Remove button with a confirmation dialog.
  4. 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, max_setting_presets, custom_bot_allowed, obs_remote_allowed, copyright_detection_allowed, plus a free-text Notes field. max_setting_presets is the per-user setting-preset quota override (0 = unlimited; blank inherits the plan) - because presets resolve to the best account a user can reach, raising it lifts every member of this account. 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. An operator limit change emits the system:account_limits_updated audit event.
  5. 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. Disconnecting the connection that is the channel's name/picture source switches the channel to its own details (the connection's last channel name, the initial as picture) and notifies the owner in-app - see Channel name and picture.
  6. Bot Connections - same layout, showing Platform, Bot Type, Bot Username, Connected Since, Actions. Same actions: Disconnect and reconnect-flag toggle.
  7. Feature Overrides - see below.
  8. 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 immediate: the backend row is removed and the encrypted token discarded; for YouTube the revenue data goes too. The account's chatter profiles, moderator notes, moderation and AutoMod logs, chat and events for that platform stay; they belong to the channel and follow plan retention until the channel is dissolved. 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 OFF without touching the global kill-switch.
  • Recovery after an OAuth leak - disconnect the affected channel connection; the user will be prompted to reconnect.

Permissions​

ActionPermission
View account list / detail, limits, features, connectionsaccounts:read
Edit account name, manage members, set reconnect flagsaccounts:edit
Change plan / limits / per-account feature overridesaccounts:edit
Disconnect channel connectionsaccounts:edit
Disconnect bot connectionsaccounts:edit
Delete accountaccounts:delete
Read per-account permission overridesaccounts:overrides-read
Set / clear per-account permission overridesaccounts: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 actionGraphQLREST
List accountsadminAccountsGET /v1/admin/accounts
Get account detailadminAccountGET /v1/admin/accounts/\{id\}
List account roles for Add MemberadminAccountRoles (accounts:read)GET /v1/admin/accounts/\{id\}/roles
Update account nameadminUpdateAccountNamePATCH /v1/admin/accounts/\{id\}
List login connectionsadminAccountLoginConnections-
Delete accountadminDeleteAccountDELETE /v1/admin/accounts/\{id\}
Update planadminUpdateAccountPlanPATCH /v1/admin/accounts/\{id\}/plan
Add member with an account-owned roleadminAddAccountMember(accountId, userId, roleId) (accounts:edit)POST /v1/admin/accounts/\{id\}/members with required user_id and role_id
Remove memberadminRemoveAccountMemberDELETE /v1/admin/accounts/\{id\}/members/\{user_id\}
Get limitsadminAccountLimitsGET /v1/admin/accounts/\{id\}/limits
Save limitsadminUpsertAccountLimits / adminSetAccountLimitsPUT /v1/admin/accounts/\{id\}/limits
Save resolved limitsadminSetAccountLimitsPUT /v1/admin/accounts/\{id\}/resolved-limits
Get feature overridesadminAccountFeaturesGET /v1/admin/accounts/\{id\}/features
Set feature overrideadminSetAccountFeaturePUT /v1/admin/accounts/\{id\}/features
Clear feature overrideadminClearAccountFeatureDELETE /v1/admin/accounts/\{id\}/features/\{feature_id\}
List channel connectionsadminAccountChannelConnectionsGET /v1/admin/accounts/\{id\}/connections
Delete channel connectionadminDeleteAccountChannelConnectionDELETE /v1/admin/accounts/\{id\}/connections/\{platform\}
Delete account login connectionadminDeleteAccountLoginConnection-
Set channel reconnect flagadminSetChannelReconnectFlagPUT /v1/admin/channel-connections/\{id\}/reconnect-flag
List bot connectionsadminAccountBotConnectionsGET /v1/admin/accounts/\{id\}/bot-connections
Delete bot connectionadminDeleteAccountBotConnectionDELETE /v1/admin/accounts/\{id\}/bot-connections/\{platform\}
Set bot reconnect flagadminSetBotReconnectFlagPUT /v1/admin/bot-connections/\{id\}/reconnect-flag
List SE tokensadminSeTokensGET /v1/admin/accounts/\{id\}/se-tokens
Delete SE tokenadminDeleteSeTokenDELETE /v1/admin/accounts/\{id\}/se-tokens/\{token_id\}
List permission overridesadminAccountPermissionOverridesGET /v1/admin/accounts/\{id\}/permission-overrides
Set permission overrideadminSetAccountPermissionOverridePUT /v1/admin/accounts/\{id\}/permission-overrides
Remove permission overrideadminRemoveAccountPermissionOverrideDELETE /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.
  • 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