canvas-drop
Open app

Teams

A team is a named group you share canvases with — the slice between "just me" and "everyone." Share a canvas with a team from its Share tab, and every member can open and use it (full backend, like a member). Manage teams on the Teams page in the dashboard, or over MCP.

Teams sit on the middle rung of the per-canvas access ladder:

Rung Who can open it
Private Just you, the owner.
Specific people A named few you add by email.
Team Members of the teams you grant — a personal team, or a subset of your org.
Whole org Anyone signed in to your organization.
Public link Anyone with the URL — static files only while the instance switch is on and the owner account has not been revoked.

See Sharing & access for the full ladder and the password / expiry modifiers.

Personal vs org teams

The kind of team is a fixed choice at creation:

  • Personal — friends & family. Any signed-in user can create one (no org required) and add people by email when policy allows it. Direct membership is the access boundary.
  • Org-attached — a subset of your org. Only org members can create one, and members must belong to that org. Access is re-checked against your live org membership on every request, so someone removed from the org loses access at once — even if a stale membership row lingers.

Team names are per-creator: you can't make two teams with the same name, but different people can each have a team named "Design."

Creating a team and adding people

On the Teams page, pick Personal (or your org), name the team, and create it — you're its first member and its manager. Then add people by email:

  • An existing user joins immediately.
  • A brand-new person (no account yet) becomes Pending sign-in. They turn into a full member the first time they sign in through your instance's configured auth — there's no app-owned password and no magic-link account to manage. Until they sign in, they show as Pending on the roster and simply can't open anything yet.

This is auth-delegated: the identity provider is the only authority, so there's nothing to take over. See the security model for the full picture.

Who may add a brand-new external email is gated. A self-serve member can always add existing users and people on your org's domains, but adding a brand-new external email (one that can't already sign in) is admin-only unless the operator turns on invites.allowMemberNewEmails. Adds are also rate-limited per person. See Sign-in permits & access emails.

The roster

Expanding a team shows its members plus any pending sign-ins (email-only rows for people who haven't signed in yet). Remove a member at any time — including a pending invite, so a typo'd email can be taken back without an admin — or leave a team yourself (leaving asks you to confirm: you can't re-add yourself). Canceling a pending invite removes the team access it would have granted; if the add also newly admitted that address to sign in to the instance, an admin can revoke the sign-in permit from the People directory. The team's creator (or an admin) can rename or delete it — deleting a team removes its memberships and unshares every canvas shared with it, but the canvases themselves are untouched.

Sharing a canvas with a team

On a canvas's Share tab, choose the Team rung and pick one or more teams you belong to. The picker labels each team Personal or by its org, so you can see how far the share reaches. A team grant is independent of your own membership afterward: if you later leave the team, the canvas stays shared with it until you change the rung.

Team canvases are strictly team-scoped — they never appear in the org-wide gallery. They are link-only by default: team members can open the URL, but the canvas does not appear in discovery. On the canvas Share tab, turn on List for people with access when members should find it under Shared in the dashboard (or through list_shared_canvases over MCP).

Over MCP (agents)

Everything here is available to an agent over MCP, wrapping the same service the dashboard uses: create_team (omit orgId for a personal team), add_team_member (returns granted or pending), cancel_team_invite (take back a pending invite by its roster id), list_team_members (members + pending), grant_access, list_shared_canvases, and update_canvas with access: "team" + teamIds. Add discoverability: "listed" when a team share should show in Shared; leave it unset or set discoverability: "link_only" for URL-only access.