Account
Team & roles
Invite teammates to your workspace, choose between the admin and developer roles, manage members, and set the workspace's two-factor and security policy.
A workspace (organization) groups your team's Studio accounts and all of its projects. Every member can open every project in the workspace. Each member's role, admin or developer, decides what they can change.
Workspaces
- Signing up creates a workspace, and you are its first admin. Admins rename it in Settings → Workspace.
- Each Studio account belongs to exactly one workspace.
- Projects belong to the workspace, not to the person who created them. There is no per-project membership: every member sees every project.
- Workspace members are Studio accounts. Your app's end users are a separate system. See Authentication.
Roles
| Capability | Admin | Developer |
|---|---|---|
| Open every project; use the Studio SQL editor, realtime, storage, functions, jobs, logs, analytics and memory | Yes | Yes |
| View and rotate API keys and JWT settings | Yes | Yes |
| Create projects | Yes | No |
| Edit or delete projects, including Test Mode and the project logo | Yes | No |
| Open Project → Settings in Studio (SMTP, email templates, marketing, SMS, webhooks, social login, extensions) | Yes | No (hidden) |
| Change SMTP settings and send SMTP tests | Yes | No |
| Edit email templates and the brand color, send template previews | Yes | No |
| Send marketing broadcasts | Yes | No |
| Read or change SMS (Twilio) and social-login settings | Yes | No |
| Invite members, change roles, deactivate, activate or remove other members | Yes | No |
| Rename the workspace; require two-factor for all members | Yes | No |
| Change the workspace security settings | Yes | No |
| Start a paid plan or open the billing portal | Yes | No |
| View the member list and the workspace security settings | Yes | Yes |
The API enforces the admin-only actions, returning 403 with the required role. Studio also hides admin-only controls from developers. Billing details are in Plans & billing.
Studio hides more than the API blocks
Studio hides the whole Project → Settings page from developers, but the API only enforces the admin-only actions in the table above. Developers can still manage webhooks through the CLI, the MCP server or the API.
Two other rules apply on top of roles:
- Project creator only: the Tables and Auth pages (browsing and editing rows, RLS and policies), and SQL or migrations run from the CLI or MCP server, work only for the member who created the project, whatever their role. Other members get
403 This operation is restricted to the project ownerand can use the Studio SQL editor instead. - Plans: the whole workspace shares one plan, the highest plan held by any of its admins. See Plans & billing.
Role changes take effect on the member's next request. They don't need to sign in again.
Invite a member
- Open Members in the top navigation and click Invite member (admins only).
- Enter their email and choose Developer (the default) or Admin.
- They get an email with a link to
/accept-invitation/<token>. There they set their name and a password, and they are signed straight into your workspace with the chosen role.
- Through the API (
POST /api/admin/invitations),rolemust beadminordeveloper. Any other value returns400. - The new member's password must meet the workspace's minimum password length and the platform rules below.
- Invitations expire after 7 days and can be used once.
- You can't invite an email that already has an OrbitNest account, because an account can only belong to one workspace.
- Only one pending invitation per email is allowed. Pending invitations can't be listed or withdrawn. Wait for one to expire before sending another.
- Admins can send up to 10 invitations per hour.
- If the invitation email can't be sent, the invitation is discarded and you get an error, so you can try again.
Change a member's role
On Members, open the member's menu and choose Make Admin or Change to Developer.
A workspace always keeps at least one admin. Demoting the last admin is refused until you promote someone else.
Deactivate or activate a member
On Members, open the member's menu and choose Deactivate or Activate. The API route is PATCH /api/admin/admins/:id/active with { "is_active": false } or true (admins only).
- Deactivating signs the member out of every session. They can't sign in again until an admin reactivates them.
- Their account, projects and settings are kept.
- You can only change members of your own workspace.
- You can't deactivate yourself, a super admin, or the last active admin. These return
403.
Remove a member
On Members, open the member's menu and choose Delete.
- This permanently deletes the member's Studio account and signs them out everywhere. Their passkeys, linked sign-in providers and the invitations they sent are deleted with it.
- Projects they created stay in the workspace. Because the Tables and Auth pages are limited to a project's creator, those pages, and CLI or MCP SQL, stop working for the removed member's projects. The Studio SQL editor still works.
- You can't delete yourself from this list. The last admin can't be removed while other members remain.
Deleting the last account deletes the workspace
If the only remaining account in a workspace is deleted, through the API or the MCP server for example, the workspace is deleted along with every project and project database in it.
Require two-factor authentication
Admins can turn on Require two-factor authentication for all members in Settings → Security. The API enforces it:
- A member without a verified authenticator app gets
403with codeMFA_ENROLLMENT_REQUIREDon every request, and Studio sends them to the two-factor setup screen. - These still work while they set up: signing out, reading their profile, the two-factor and passkey setup endpoints, reading the workspace, and the Support inbox.
- Only an authenticator app counts. Passkeys don't satisfy the policy.
- The policy also applies to the CLI and MCP server, which sign in with Studio accounts, and to Studio admin tokens used to invoke edge functions.
- Super admins are exempt.
You can only turn the policy on once you have an authenticator app on your own account. Otherwise the request returns 400 with code MFA_REQUIRED_TO_ENABLE_POLICY.
Each member manages their own sign-in methods in Settings → Account: profile, passkeys, linked Google, GitHub or Apple accounts, and two-factor authentication with recovery codes.
Account changes
- Change your email: in Settings → Account, enter the new email and your current password. Studio emails a code to the new address, and the change takes effect once you enter it. Every session is then signed out. Over the API, send the new
emailwithcurrent_password(PATCH /api/admin/admins/:id, which returnspending_email), then the code toPOST /api/admin/admins/:id/email/verify{ "code": "…" }.- A wrong or missing password returns
403, an email another account uses returns409, and a second request within a minute returns429. - The code expires after 10 minutes, and 5 wrong codes invalidate it.
- Accounts that sign in only with Google, GitHub or Apple can't change their email here.
- A wrong or missing password returns
- Change your password:
PATCH /api/admin/admins/:id/passwordneedscurrent_password. Every session is signed out after the change.
Security settings
Settings → Security holds the workspace's security policy. Each workspace has its own settings. Every member can read them (GET /api/settings/security). Only admins can change them.
To save changes, an admin requests a 6-digit code, which is emailed to them and is valid for 10 minutes (POST /api/settings/security/step-up), then sends it as step_up_code with the new values (PUT /api/settings/security). After 5 wrong codes, the codes are invalidated and you must request a new one.
| Setting | Field | Allowed values | Default | What it does |
|---|---|---|---|---|
| Session timeout | sessionTimeout | 0, or 300 to 2,592,000 seconds | 86,400 (24 hours) | Signs members out after this long without activity. POST /api/auth/refresh then returns 401 Session expired due to inactivity. Access tokens never outlive the timeout. 0 turns it off |
| Max login attempts | maxLoginAttempts | 3 to 100 | 5 | Locks a member's account after this many failed sign-ins in a row. During the lockout, sign-in returns the same 401 Invalid credentials as a wrong password |
| Minimum password length | minPasswordLength | 8 to 128 | 8 | Applies when a member sets a password: accepting an invitation, changing a password, and resetting a password |
| Require uppercase | requireUppercase | true or false | true | Stored, but always effectively on (see below) |
| Require special character | requireSpecialChar | true or false | true | Stored, but always effectively on (see below) |
Values outside these ranges, and unknown fields, return 400. The settings apply only to Studio accounts in the workspace, not to your app's end users.
Platform password rules
Every Studio account password must have at least 8 characters with an uppercase letter, a lowercase letter, a digit and a special character (@$!%*?&). Turning off Require uppercase or Require special character doesn't relax these rules.