# Members

One person across many workspaces, with their own profile, keys, and a role per workspace

A **member** is a person in Splits, identified by their email address, or an [agent](#agent-members) acting through API keys. One member can belong to any number of [workspaces](/docs/workspaces), and holds two kinds of things:

* **Across every workspace**: their profile (display name, email, avatar) and their [signing keys](/docs/members/keys) (passkeys and registered EOAs). These belong to the member, not to any workspace.
* **Per workspace**: a membership, stored offchain, with a [role](/docs/workspaces/roles) (Owner or Member), granting read access to that workspace's accounts, balances, and transactions plus the role's administrative capabilities.

Membership confers **no onchain authority**: a member cannot move funds unless one of their signing keys has been added to an account's signer set, making them a [signer](/docs/accounts/signers#signers-vs-membership) on that account.

## Signing up

Members authenticate by email: enter yours at [app.splits.org](https://app.splits.org) and click the emailed sign-in link, or sign in with a passkey once you've saved one. Most members register by [accepting an invite](#inviting); registering directly leads into [creating a workspace](/docs/workspaces#creating-a-team).

## Inviting

Prerequisites: you must be an **Owner** of the workspace.

1. Go to [Settings > Members](https://app.splits.org/settings/team/members/) and select *Invite member*.
2. Enter the invitee's email address and select their role.
3. The invitee receives an email with a join link (it may land in spam). If they're new to Splits, they register as part of accepting.
4. During acceptance, the invitee is prompted to save a passkey: they need at least one [signing key](/docs/members/keys) before they can be added to an account's signer set.
5. You receive an email confirmation once they've accepted.

To give the new member signing power on an account, continue to [Changing signers](/docs/accounts/editing#changing-signers-and-thresholds).

## Role changes and removal

Owners can change a member's role, remove a member, or revoke a pending invitation from the member's row in [Settings > Members](https://app.splits.org/settings/team/members/).

Removing a member revokes their offchain access only, including any API keys they created in the workspace. If their signing keys are signers on any account, remove them via a separate onchain [signer update](/docs/accounts/editing#changing-signers-and-thresholds).

## Agent members

An **agent member** is an AI agent that joined the workspace when a member approved its [browser login](/docs/introduction/agents#sign-in-from-the-browser), or by [creating the workspace](/docs/workspaces#from-an-agent) itself. It is a member of its own, not the person who approved it: [Settings > Members](https://app.splits.org/settings/team/members/) shows it with an *Agent* label, and its proposals, signatures, signer registrations, and invoices are recorded under its name. One agent member exists per agent signing key, reused in every workspace that key is approved in; its display name is the client name the agent gave at its first login.

What differs from a person:

* **It has no email and cannot sign in to the app.** It acts only through its API keys. A key created in Settings > API Keys acts as the person who created it, never as an agent.
* **Its signing keys are EOAs** registered under it, never passkeys.
* **Its role is set at approval.** It joins as a Member, or as an Owner when the approver granted its key the **Owner** scope (see [API key scopes](/docs/workspaces/roles#api-key-scopes)). An agent that created the workspace is its Owner. Owners can change an agent's role later from its row in Settings > Members; a role change never changes the key's scopes.
* **It cannot be invited.** Membership comes only from an approved login or an agent-created workspace.
* **Removing it also proposes removing its keys.** Removing an agent revokes its access and creates one signer update per account where its keys are signers, dropping them; Owners sign those like any [signer change](/docs/accounts/editing#changing-signers-and-thresholds). An account that the removal would leave below its threshold is reported instead, for a [reset](/docs/accounts/editing#resetting-signers) through its owner.

## Programmatic access

Via the [Splits CLI / MCP](/docs/introduction/agents):

* `splits members list`: list all members of the workspace, with each one's `kind` (`HUMAN` or `AGENT`) and role (requires **Read** scope)
* `splits members signers <userId>`: list a member's passkey IDs, needed when adding them as a signer via `accounts create` or `accounts update-signers` (requires **Read** scope)

Managing members (inviting, removing, changing roles) is web-only today.
