Team and access
There are two separate team flows in the portal, and they never mix. On your side, an owner invites other admins to help run the portal. On the client side, a client account owner invites their own teammates into their portal. Each side has its own people, its own roles, and its own page. An admin is never a member of a client's team, and a client teammate is never an admin.
Admin staff
This is your team. The owner of your org invites other admins by email, and each gets their own login scoped to this org only.
Where it lives
/admin/settings/team. The page lists every admin in your org, with a pill for the owner, a "You" pill for yourself, an "Invite pending" pill for anyone who hasn't finished signing up, and an "MFA" pill for anyone with multi-factor authentication turned on. Only an owner sees the invite form and the remove buttons. Other admins see the list but can't change it.
Roles
There are three roles: owner, admin, and viewer. The first person in an org is the owner. Each role really does control what a member can do:
- Viewer is read-only. Viewers see the dashboard, clients, projects, billing, and the activity log, but can't change anything.
- Admin can view and edit everything: add and edit clients and projects, draft and send quotes, invoices, and contracts, change settings, manage connected apps like Stripe and DocuSign, export data, and use the AI features.
- Owner can do all of that plus the owner controls: manage the team and roles, manage the subscription and account-level choices, and manage the keys that let AI assistants act on the account.
The team page shows a full "What each role can do" table. It is generated from the same rules the server enforces, so what you read there is exactly what applies.
Changing roles
Owners see a role menu on every member's row; pick a new role and hit Save. Changing your own role asks you to confirm first, because moving yourself off owner takes your owner controls away immediately, and only another owner can give them back.
Inviting a team member
Open the "Invite a team member" panel, enter an email, optionally a first and last name, and pick their role (invites default to admin). The portal sends an email with a secure signup link, and you can change the role later. A few things are blocked on purpose:
- You can't invite your own email a second time.
- You can't invite an email that's already in use as a client portal account in this or any other org. One person can't be both an admin and a client, so that account has to be cleaned up first.
- The email has to be a valid address.
The signup link and its expiry
Each invite carries a secure link valid for 14 days. The invitee clicks it, sets up their login, and lands in the portal as an admin. Resending an invite generates a fresh link and invalidates the previous one, so only the most recent email works.
Resending
While an invite is still pending (the person hasn't finished signing up), the owner sees a Resend invite button next to their row. It emails a new 14-day link.
Removing an admin
The owner can remove any admin with the Remove button, or step down with Leave org on their own row. Removing someone revokes their access to this org right away. Their underlying account is preserved, since they may have access to other orgs.
One guard protects you: the portal will not let you remove the last owner, or change the last owner's role to something else. If you're the only owner, use the role menu to promote another member to owner first, then make your change.
Client teammates
This is the client's team, managed entirely on the client side. A client account owner invites their own coworkers into their portal so several people from the same company can see projects, invoices, and documents, each with their own login and audit trail. You don't manage this list for them.
Where it lives
/dashboard/settings/team, on the client's dashboard. The page shows everyone on their team, with an owner pill, a "You" pill, and an "Invite pending" pill for unclaimed invites. Only the account owner sees the invite form and remove controls.
Roles
The client side ships with two roles: owner and member. The first teammate is the owner. Everyone invited after that comes in as a member with full portal access, except they can't manage the team. The owner is the only one who can invite or remove teammates.
Inviting a teammate
The owner opens "Invite a teammate", enters an email, and optionally a first and last name. The portal emails a secure signup link. Inviting an email that belongs to a service provider admin is blocked, since one person can't be both a client teammate and an admin.
The signup link and its expiry
Same as the admin side: a secure link valid for 14 days. If the invitee already has an account from another portal, the link routes them to sign in and joins them to the team instead of dead-ending on "email taken". Resending replaces the old link.
Resending
A pending teammate's row shows a Resend invite button for the owner. It sends a fresh 14-day link.
Removing a teammate
The owner removes a teammate with Remove, or leaves the team with Leave team on their own row. Access is revoked immediately, and the person's account is preserved in case they belong to other portals. As on the admin side, the last owner can't be removed. A different owner has to exist first, and owner promotion on the client side is handled by the service provider in this version.
A note on multiple orgs
Switching between organizations is a client-only feature. A client whose email belongs to more than one portal can switch between them from their dashboard. Admins do not switch orgs. Each admin login is scoped to a single org, and other orgs' admins never appear on your team page.
