# Managing Members

Add and remove contacts from your lists.

## Adding contacts to a list

There are three ways to add contacts to a list in SendBeam. Use whichever method fits your
workflow — the result is the same.

### From the list page

1. Navigate to **Lists** and open the target list.
2. In the **Add Contact to List** box at the top, enter the contact's email address. The contact must already exist in the workspace — add them under [Contacts](https://sendbeam.io/docs/contacts/adding) first if not.
3. Click the add button. The contact joins the list immediately; if the list uses double opt-in, they also receive the confirmation email.

### From a signup form

A [signup form](https://sendbeam.io/docs/forms) adds each visitor who submits it to the list you chose
when creating the form, creating the contact if they are new. This is how most lists grow.

### Via the API

`POST /api/v1/lists/{id}/contacts` adds an existing contact by ID. It is the
right tool for syncing memberships from your own systems or for bulk operations. It follows the
list's double opt-in setting exactly as the list page and forms do: on a double opt-in list (or
any list on the Free plan) the response says `"membership": "pending_confirmation"`,
the contact is emailed the confirmation link and campaigns skip them until they click it; on a
single opt-in list it says `"membership": "confirmed"`. Posting an unconfirmed member
again re-sends the confirmation (at most one per address every 10 minutes); a confirmed member
is a `409`. Only **subscribed** contacts can be added — an unsubscribed,
bounced or complained contact is refused with `422`. See the
[API reference](https://sendbeam.io/docs/api).

> Whichever way a contact joins a list — list page, form or API — any active automation with the **List Joined** trigger for that list starts for them (on a double opt-in list, once they confirm). This is the easiest way to run a welcome sequence.
> 

> CSV import creates contacts but does not put them on a list. After an import, add the contacts to the list through the API, or ask them to subscribe through a form so that consent is recorded.
> 

## Removing contacts from a list

Removing a contact from a list takes them off that list only. Their contact record, status, and
membership in any other lists are not affected.

- **From the list page** — find the contact in the members table and click the
  **Remove from list** icon on their row, then confirm.
- **Via the API** — `DELETE /api/v1/lists/{id}/contacts` with the
  contact's ID in the request body.

> Removing someone from a list is not the same as unsubscribing them. If a contact has asked to stop receiving email, set their status to **Unsubscribed** on their profile instead — that stops every campaign and automation email, and a form cannot silently re-add them.
> 

## Subscribers can leave one list

Every email carries an unsubscribe link. When the person who clicks it is on one or more of your lists, the
page they land on is a preference page: each list they are on, ticked, with the list this email was sent to
marked *"this email"*. Unticking a list and clicking **Save preferences** removes them
from just that list — they stay subscribed and keep receiving your other lists. **Unsubscribe from everything** (and unticking every list) does what it says: the contact becomes unsubscribed and goes on
the [suppression list](https://sendbeam.io/docs/contacts/suppressions).

Leaving a list fires the `contact.list_left` webhook event, and if the list was the one this
campaign went to, it counts as an unsubscribe in that campaign's statistics. The one-click unsubscribe that
Gmail and Yahoo trigger from the mailbox header is always the full unsubscribe, as those providers require.

## Offering a list to your other workspaces

If you run several sites on one account, a list in one workspace can be *offered* to the people who
subscribed on another. It is an offer, not a transfer: the person ticks it themselves, and a contact is created
in the list's own workspace with its own consent record and its own unsubscribe. No workspace ever sees
another's contacts.

### Marking a list offerable

1. Open the list under **Lists** and expand **List details**.
2. Tick **Offer this list on your other workspaces** and click **Save list**. Give the list a description while you are there — it is shown with the offer, and it is what persuades someone to tick.

The switch is shown only to a workspace admin, and only when the workspace belongs to an account — a workspace
with no account has no other workspaces to offer to. Through the API, `PATCH /api/v1/lists/{id}`
with `"offerable_across_account": true` does the same, and answers `403` for anyone else,
an API key included: a key is bound to one workspace, and this decision reaches beyond it.

### Where the offer appears

In one place only: the **More from us** tab of the [preference page](#leaving-one-list)
that your other workspaces' subscribers reach from the unsubscribe link in their emails. It never appears on a
signup form or in a campaign link, and it is never the tab the page opens on — someone who came to leave a list
is not made to walk past it. Each offer shows the list's name, which of your workspaces it belongs to and, if
you gave it one, its description — unticked. Nothing happens unless the person ticks it and clicks
**Sign me up**.

### What happens when someone ticks it

Everything after the tick is the list's own workspace's ordinary signup path, not a shortcut through it:

- **Its suppression list wins.** Someone who unsubscribed from that workspace is not re-added by
  ticking a box on another workspace's page. They are told only that nothing changed.
- **Its plan's contact cap applies.** A workspace that has used its allowance cannot gain a contact
  this way.
- **Its double opt-in is honoured.** On a double opt-in list — or any list in a Free-plan workspace —
  the membership is created unconfirmed and the confirmation email goes out, exactly as that workspace's own form
  would send it. Someone who never clicks the link is never mailed.

> The new contact's **source** reads *opted in via* followed by the name of the workspace whose page they ticked it on, so you can always answer where an address came from.
> 

## Viewing list members

Opening a list shows a table of everyone on it. Each row shows the contact's name and email,
their contact status, and the date they were added; on a double opt-in list, members who have
not yet confirmed carry an *awaiting confirmation* badge, and the total waiting is shown
at the top of the page. Twenty members are shown per page. The **List details**
panel above the table is where you rename the list or change its double opt-in setting.

From the members table you can:

- Click a contact's name or email to go directly to their full contact profile.
- Remove a contact from the list.

> The count shown on the Lists overview page and at the top of a list counts **every** member, including those who have not yet confirmed a double opt-in and those whose contact status is Unsubscribed or Bounced. The number actually mailed by a campaign can therefore be lower.
> 

## Member status

The status column in the members table is the contact's workspace-wide status, not a per-list
one:

- **Subscribed** — will receive campaigns sent to this list (on a double opt-in
  list, once they have confirmed).
- **Unsubscribed** — has opted out, by clicking an unsubscribe link or by being
  changed by hand. Never sent campaigns, even while still listed as a member.
- **Bounced** / **Complained** — suppressed automatically after a hard
  bounce or a spam complaint.

On a double opt-in list, members who are still unconfirmed are badged in the table and counted
at the top of the page. A campaign sent to the list skips them until they confirm.

---
Source: https://sendbeam.io/docs/lists/managing-members
