Skip to main content

Team Management

Invite colleagues to your workspace, decide what they can see before they join, and hand over their work when they leave.

Required Scopes​

ScopePurpose
team:readList members, roles and pending invitations
team:createCreate, edit, resend and revoke invitations
team:updateChange a member's roles and settings; also needed to set non-default member_settings on an invitation
team:deleteRemove members and preview what removing them affects
team:adminGrant system roles (Owner, Admin, ...)

GET /api/v1/users lists the current members (paginated, page_size up to 100) with their roles and availability. GET /api/v1/roles lists the roles you can grant: the system roles and your workspace's custom roles.

Invite a Member​

curl -X POST "https://api.sendseven.com/api/v1/invitations" \
-H "Authorization: Bearer s7_api_a1b2c3d4e5f6789012345678abcdef00" \
-H "Content-Type: application/json" \
-d '{
"email": "[email protected]",
"role_ids": ["role_support_agent", "role_campaigns"],
"member_settings": {
"inbox_access_mode": "restricted",
"inbox_ids": ["inbox_support_de"],
"contact_history_visibility": "accessible_only",
"tag_ids": ["tag_german"]
}
}'

The invitee receives an email and joins when they accept it. The invitation expires after 7 days. The response (201) is the invitation: id, email, status (pending), role_ids, member_settings, expires_at and so on.

FieldRequiredDescription
emailYesThe address to invite
role_idsOne of the role fields1 to 20 role IDs from GET /roles (system or custom roles). The first one is the primary role. Takes precedence over role_id and role
role_idA single role ID
roleDeprecated role name (admin, support_agent, marketing_agent, viewer, billing_admin, developer, owner). Prefer role_ids
member_settingsNoAccess settings applied when the invitation is accepted, see below

member_settings (all optional; anything left out uses the default)

FieldDefaultDescription
inbox_access_modeallall inboxes, or restricted to the custom inboxes in inbox_ids
inbox_idsCustom inboxes the member may see when restricted
contact_history_visibilityallaccessible_only: in a contact's conversation history the member sees only conversations from inboxes they can access. Members with restricted inbox access always get accessible_only; Owners and Admins always see everything
tag_idsMember tags (skills) for skill-based routing
ai_suggestions_enabledtruefalse turns off AI drafting and suggestions in Conversations for this member
account_billing_accessfalseAccess to the billing account's usage across workspaces. Only the billing account owner can grant it

Rules

  • You can only grant roles whose permissions your token has itself (403 otherwise). Granting a system role needs team:admin; the billing role can only be granted by an Owner.
  • Non-default member_settings need team:update in addition to team:create.
  • inbox_ids and tag_ids must belong to your workspace (422), and role IDs must exist (404).
  • 400 when the person already has a pending invitation or is already a member.
  • At most 30 invitations per hour (429).

Manage Pending Invitations​

MethodPathScopeDescription
GET/invitationsteam:readPending and past invitations: {"invitations": [...], "total": n}
PATCH/invitations/{invitation_id}team:createChange role_ids (or role_id, not both) and member_settings of a pending or expired invitation. member_settings are merged: a field set to null goes back to its default, "member_settings": null resets all. No new email is sent and the link and expiry stay the same. 409 once accepted
POST/invitations/{invitation_id}/resendteam:createSend the email again with a new link and a fresh 7-day expiry
DELETE/invitations/{invitation_id}team:createRevoke the invitation

Changing settings with PATCH also needs team:update for each setting you change, like on create.

Legacy: add a member without invitation​

POST /api/v1/users/invite (scope team:create, body {"email", "name", "role_id"}) adds the person to the workspace directly, without sending an email and without their confirmation. They can sign in with that email address right away. It exists for older integrations; use POST /invitations for new ones. Only Owners and Admins can call it, and 409 means the person is already a member.

Remove a Member​

Before removing someone, check what depends on them:

curl "https://api.sendseven.com/api/v1/users/usr_7f3a9c/removal-impact" \
-H "Authorization: Bearer s7_api_a1b2c3d4e5f6789012345678abcdef00"
{
"user_id": "usr_7f3a9c",
"owned_contacts": 214,
"open_assigned_conversations": 9,
"substitute_for": [
{"absence_id": "abs_1", "user_id": "usr_2b8e41", "user_name": "Jonas", "starts_at": "2026-11-02T00:00:00Z", "ends_at": "2026-11-09T00:00:00Z"}
],
"flows": [{"id": "flow_9d2", "name": "VIP hand-over", "status": "published"}]
}

substitute_for lists colleagues whose out-of-office names this member as substitute; flows lists flows that reference the member (for example as a fixed assignee). Scope team:delete.

Then remove the member and say what happens to their work:

curl -X DELETE "https://api.sendseven.com/api/v1/users/usr_7f3a9c" \
-H "Authorization: Bearer s7_api_a1b2c3d4e5f6789012345678abcdef00" \
-H "Content-Type: application/json" \
-d '{
"contacts": {"mode": "round_robin_inbox", "target_id": "inbox_support_de"},
"conversations": {"mode": "same_as_contacts"}
}'

Returns 204. The body is optional; the hand-over runs in the background right after the removal.

FieldValuesDefault
contacts.modeunassign, user, round_robin_inbox, round_robin_tag, least_busy_inbox, least_busy_tag: what happens to the contacts the member ownsunassign
contacts.target_idThe user, inbox or tag ID the mode needs
conversations.modekeep (stay assigned to the removed member), unassign, or same_as_contacts (follow the contacts' new owners): what happens to their open assigned conversationskeep

Rules: Only Owners and Admins can remove members, only an Owner can remove another Owner, you cannot remove yourself (400), and the last Owner cannot be removed (403). Out-of-office periods that named the member as substitute lose their substitute, and the colleagues concerned are notified.

API tokens of removed members stop working

API tokens and OAuth connections act as the member who created them. Once that member is removed or deactivated, their tokens return 401 immediately. Move integrations to another member's token before you remove someone.

Next Steps​