What is a workspace?
A workspace is the top-level container in Connie. Every contact, page, workflow, message, file, and connected account lives inside one. Users can belong to multiple workspaces and switch between them from the sidebar. Each workspace has:- A UUID
idand a short URL slug - A display name and (optional) logo
- A subscription plan and credit balance
- A set of members with roles
- A settings blob — defaults, feature toggles, the workspace invite code
All Connie plans include unlimited seats and unlimited connected accounts. The only thing that scales with plan size is credit allowance.
Roles
Four roles, each with a defined capability ceiling:Guest is a role, not a separate member type. A guest sits in
workspace_members like any other user, just with reduced permissions.Adding people
Two flows, both pointed atworkspace_invites:
Direct email invite
Admin enters an email → Connie generates a 7-day expiring token → user accepts at
/invite/{token}. If the user already exists in Connie, they’re added immediately on invite send.Workspace invite code
A 12-character, non-expiring, reusable code lives in
settings.invite_code. Anyone with the code joins via /invite/{code}. Used for broad onboarding (e.g. “everyone with this URL can join”).Page invites vs workspace invites
These are different flows that often get confused:
Page invites are emitted from the Pages module’s share modal. If a recipient isn’t yet a workspace member, accepting a page invite also adds them as a guest to the workspace.
Settings
Workspace settings are a JSONB blob editable by admins:logo_url— uploaded to theworkspace-logosbucketinvite_code— the reusable invite codedefault_thread_visibility— public-to-workspace vs. private-by-defaultallow_guest_access— kill switch for the entire guest role- Module-specific toggles surfaced in Settings → Workspace
uploadWorkspaceLogo) and write the resulting URL into the settings blob.
Tool accounts
Tool accounts are per-workspace OAuth-managed connections — Gmail mailboxes, LinkedIn accounts, Slack workspaces, Stripe organizations, etc. What makes them workspace-level instead of user-level:- Shared across the team — once an admin connects the workspace’s Stripe account, every workflow and every member can use it
- Access modes per tool:
auto,requires_approval, ordisabled— admins control which tools workflows can call without explicit human approval - Default account — for tools that can have multiple accounts (e.g. several mailboxes), one is marked default for unscoped operations
Approval tasks
Some workflows pause and require a human to approve before continuing — these surface as approval tasks in the workspace. Lifecycle:- A workflow hits a
humanApprovalnode (Temporal activity) - The dispatcher fans out a notification to every user in
required_approvers - Approvers see the task in the workspace tasks view and can approve or reject
- The workflow resumes (on approve) or terminates (on reject)
- If the task times out (configurable per node), the run is cancelled
Files
workspace-files is a general-purpose file store scoped to your workspace — useful for attachments referenced by workflows, tasks, or shared from chat.
- Multipart upload with signed-URL persistence to Supabase storage
- Paginated list + search by filename
- Download URLs are short-lived signed links — safe to share but they expire
- Admins can delete any file; members can delete their own
Preferences
Three layers of preference, each with its own endpoint:User × workspace
/user-preferences — per-user, per-workspace settings: selected inbox accounts, unread-only filter, theme, AI tool category opt-ins, emoji skin tone, reaction shortcuts.User × global
/user/notification-preferences — global toggles for the 21 notification categories (email + bell per category). payment_subscription is always on and cannot be muted.Workspace × global
/workspaces/{id}/settings — admin-managed defaults that apply to the entire workspace.Profile
User-level (not workspace-level) endpoints for personal profile management:/profile/avatar— upload PNG/JPEG/WebP up to 2 MB; stored inprofile-avatarsbucket- Avatar URLs include a cache-bust timestamp so updates show immediately across all workspaces
Common workflows
Onboard a new teammate
- Settings → Members → Invite with their email and target role
- They receive an email with the 7-day token link
- Once accepted, they appear in the member list and seat-count is reconciled with Stripe automatically
Set up a shared mailbox the team can run automations against
- Connect the mailbox via Tools as a workspace tool account
- Admin marks the account as default for the email tool
- Workflows that send email pick this account automatically — no per-flow configuration
Require approval on outbound messages
- Settings → Tool access → set the email tool to
requires_approval - Add yourself as an approver
- Any workflow that tries to send an email now creates an approval task — you confirm or reject inline
API reference
Members
List, invite, update roles, and remove workspace members.
Invitations
Manage pending invites — list, resend, revoke, accept, decline.
Page invites
Accept or decline a per-page invite token.
Files
Workspace-scoped file store with signed-URL upload and download.
Preferences
User and workspace preference endpoints.
Tool accounts
Manage per-workspace OAuth integration accounts.
Approvals
Inspect and resolve pending approval tasks.
Settings
Workspace name, logo, and settings JSONB.