Inviting Users to Team Chat
Team Chat has two different audiences, and two different ways to bring each one in.
| Audience | How they join |
|---|---|
| Teammates in your own workspace | Anyone with a SendSeven user account for your workspace can browse and join public channels themselves. There is no separate "invite to Team Chat" step. |
| External guests | Someone in another SendSeven workspace (an agency, a client, a partner) can be invited into one specific external channel, so both sides see the same conversation without either party leaving their own workspace. |
Teammates in your own workspace
Every user in your workspace can already see and use Team Chat -- there's no invitation flow to run. What you can automate:
| Method & Path | Required Scope | Purpose |
|---|---|---|
GET /api/v1/team-chat/channels/browse | team_chat:read | List public channels the calling user hasn't joined yet |
POST /api/v1/team-chat/channels/{channel_id}/join | team_chat:create | Join a public channel |
POST /api/v1/team-chat/channels/{channel_id}/leave | team_chat:create | Leave a channel |
GET /api/v1/team-chat/channels/{channel_id}/members | team_chat:read | List members, with each member's role and notification_level |
GET /api/v1/team-chat/users | team_chat:read | Team directory |
Private channels have no self-serve join -- an existing member adds people from within the app.
External guests (cross-workspace)
Team Chat can link a channel to a guest from another SendSeven workspace, so an agency and its client can share one channel without either side getting access to the other's full workspace. This only works on channels created with channel_type: "external".
| Method & Path | Required Scope | Purpose |
|---|---|---|
POST /api/v1/team-chat/external/invite | team_chat:settings | Invite a guest, by email, to an external channel |
GET /api/v1/team-chat/external/invitations/sent | team_chat:settings | Invitations you've sent |
GET /api/v1/team-chat/external/invitations/received | team_chat:read | Invitations sent to you |
POST /api/v1/team-chat/external/invitations/{invitation_id}/accept | team_chat:read | Accept an invitation |
POST /api/v1/team-chat/external/invitations/{invitation_id}/decline | team_chat:read | Decline an invitation |
DELETE /api/v1/team-chat/external/invitations/{invitation_id} | team_chat:admin | Revoke an invitation you sent |
Only a channel admin can send an invitation for that channel.
Send an invitation
POST /api/v1/team-chat/external/invite
Content-Type: application/json
| Field | Type | Required | Description |
|---|---|---|---|
channel_id | string | Yes | The external channel to invite the guest into. |
target_email | string | Yes | Email address to invite. |
message | string | No | Optional note included with the invitation, up to 500 characters. |
curl -X POST "https://api.sendseven.com/api/v1/team-chat/external/invite" \
-H "Authorization: Bearer s7_api_a1b2c3d4e5f6789012345678abcdef00" \
-H "Content-Type: application/json" \
-d '{
"channel_id": "3f7c1a92-5d84-4b1e-9a3c-70e2f8d41b05",
"target_email": "[email protected]",
"message": "Let'\''s use this channel to coordinate the launch."
}'
Response (200 OK):
{
"message": "If this user has an account, we will let them know."
}
For privacy, POST /external/invite always returns the same success message, whether or not target_email belongs to an existing SendSeven user. This prevents an integration (or a curious channel admin) from using the endpoint to enumerate accounts. If the address does belong to a user, they receive a notification and see the invitation under GET /external/invitations/received in their own workspace.
Once accepted, the channel appears in the guest's channel list with is_external: true and a source_tenant_id identifying your workspace. When reading or posting into an external channel from the guest side, pass that source_tenant_id back on the relevant calls (the Bot API uses the same query parameter).
What's next
- Team Chat Bots -- post channel messages and DMs programmatically once your channels and members are set up.
- Team Chat Webhook -- get notified when messages land in a bot-enabled channel.