# Signers \[The keys in an account's signer set that approve its transactions]

A signer is a [signing key](/docs/members/keys) (a passkey or EOA belonging to a [member](/docs/members)) that has been added to an [account](/docs/accounts)'s signer set. Approvals are counted against the account's [threshold](/docs/accounts/thresholds): a transaction executes once enough signers have signed. The signer set stores public keys onchain; private keys stay with the members.

Managing signers is an onchain edit to one account's signer set (see [Editing](/docs/accounts/editing)), and is separate from managing a member's [signing keys](/docs/members/keys) in personal settings: adding or removing a key changes no account's signer set, and removing a signer from an account doesn't delete the member's key.

## Signers vs membership

Signing authority is separate from [membership](/docs/members) and [roles](/docs/teams/roles). The two often overlap 1:1, but are distinct:

| | Team member | Signer |
| --- | --- | --- |
| Stored | Offchain | Onchain (account's signer set) |
| Scoped to | A team | An account |
| What it is | A person's association with a team | A signing key belonging to a member |
| Grants | Visibility + [role](/docs/teams/roles) capabilities | Authority to approve transactions, counted against the account's threshold |
| Managed in | [Settings > Members](https://app.splits.org/settings/team/members/) | Account settings > Signers ([how](/docs/accounts/editing#changing-signers-and-thresholds)) |

Two rules connect them:

1. **Every signer on a team's accounts must be a member of that team.**
2. **Neither membership nor any role ever makes someone a signer.** Adding a signer is a separate, onchain action.

## Recovery signers

The [Root account](/docs/accounts#root)'s signers are the team's recovery signers: EOAs chosen at team setup that can reset every other account's signers. See [Recovery](/docs/teams/recovery#recovery-signers).

## Programmatic access

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

* `splits accounts signers <address>`: an account's signers and threshold (**Read** scope)
* `splits accounts update-signers <address> ...`: propose signer/threshold changes; approval happens in the web UI (**Owner** scope)
* `splits members signers <userId>`: a member's passkey IDs, for adding them as a signer (**Read** scope)
