Teams
A team groups agents so conversations can be routed to a queue instead of a single person. Every team has members (agentIds) and, optionally, managers (managerIds) who can see and manage everything assigned to it.
Managers are members too
Every id in
managerIds must also appear in agentIds, otherwise the call fails with 400 MANAGER_NOT_MEMBER.List Teams
Returns every team in the organisation with members and managers populated, plus a usage block for the max_teams plan limit.
GET/v2.0/teams
Code Example
curl -X GET "https://api.sendiee.com/v2.0/teams" \
-H "Authorization: Bearer YOUR_API_KEY"Response — 200 OK
{
"success": true,
"data": [
{
"_id": "6710a1f4c93b2e0012aa7f01",
"orgId": "664f0c1a9d2b4e0011ab3c22",
"name": "Sales",
"description": "Inbound demo requests and pricing questions",
"color": "#7C3AED",
"emoji": "💼",
"agentIds": [
{
"_id": "6708b2d1c93b2e0012aa1001",
"name": "Aarti Menon",
"email": "[email protected]",
"profilePicture": "https://cdn.sendiee.com/agents/aarti.jpg"
},
{
"_id": "6708b2d1c93b2e0012aa1002",
"name": "Rahul Verma",
"email": "[email protected]",
"profilePicture": null
}
],
"managerIds": [
{
"_id": "6708b2d1c93b2e0012aa1001",
"name": "Aarti Menon",
"email": "[email protected]",
"profilePicture": "https://cdn.sendiee.com/agents/aarti.jpg"
}
],
"defaultInboxView": "unified",
"isActive": true,
"createdAt": "2026-08-02T09:14:00.000Z",
"updatedAt": "2026-09-01T11:42:00.000Z"
}
],
"usage": {
"maxTeams": 5,
"teamCount": 1,
"unlimited": false,
"over": false,
"behavior": "hard_block"
}
}Team Object
| Parameter | Type | Description |
|---|---|---|
| _id | string | Team id — use it as teamId when assigning conversations |
| name | string | Team name, unique per organisation (case-insensitive) |
| description | string | Free-text description shown in the teambox app |
| color | string | Hex colour used for the team chipDefault: #6B7280 |
| emoji | string | Short emoji badge (max 8 characters) |
| agentIds | array | Members, populated as { _id, name, email, profilePicture } |
| managerIds | array | Managers, populated the same way. Always a subset of agentIds |
| defaultInboxView | string | Inbox layout for this team: unified or per_channel |
| isActive | boolean | Inactive teams stay in the list but are hidden from routing |
Usage Object
| Parameter | Type | Description |
|---|---|---|
| maxTeams | number | Team cap on the current plan |
| teamCount | number | Teams currently used |
| unlimited | boolean | true when the plan has no team cap |
| over | boolean | true when the org is above its cap (e.g. after a downgrade) |
| behavior | string | Enforcement at the cap. hard_block refuses new teams; anything else only flags the overage |
Try It — List Teams
Try it — API Playground
Create Team
Creates a team and syncs membership onto each agent in the same call. Names are unique per organisation, case-insensitive.
POST/v2.0/teams
Body Parameters
| Parameter | Type | Description |
|---|---|---|
| name | string | Team name. Must be unique within the organisation |
| description | string | Free-text description |
| color | string | Hex colour for the team chipDefault: #6B7280 |
| emoji | string | Emoji badge, trimmed to 8 characters |
| agentIds | array | Agent ids to add as members (from GET /v2.0/agents) |
| managerIds | array | Agent ids to promote to managers. Every one must also be in agentIds |
Code Example
curl -X POST "https://api.sendiee.com/v2.0/teams" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Sales",
"description": "Inbound demo requests and pricing questions",
"color": "#7C3AED",
"agentIds": ["6708b2d1c93b2e0012aa1001", "6708b2d1c93b2e0012aa1002"],
"managerIds": ["6708b2d1c93b2e0012aa1001"]
}'Response — 201 Created
{
"success": true,
"data": {
"_id": "6710a1f4c93b2e0012aa7f01",
"orgId": "664f0c1a9d2b4e0011ab3c22",
"name": "Sales",
"description": "Inbound demo requests and pricing questions",
"color": "#7C3AED",
"emoji": "💼",
"agentIds": [
{
"_id": "6708b2d1c93b2e0012aa1001",
"name": "Aarti Menon",
"email": "[email protected]",
"profilePicture": "https://cdn.sendiee.com/agents/aarti.jpg"
},
{
"_id": "6708b2d1c93b2e0012aa1002",
"name": "Rahul Verma",
"email": "[email protected]",
"profilePicture": null
}
],
"managerIds": [
{
"_id": "6708b2d1c93b2e0012aa1001",
"name": "Aarti Menon",
"email": "[email protected]",
"profilePicture": "https://cdn.sendiee.com/agents/aarti.jpg"
}
],
"defaultInboxView": "unified",
"isActive": true,
"createdAt": "2026-08-02T09:14:00.000Z",
"updatedAt": "2026-09-01T11:42:00.000Z"
}
}Errors
| Status | Code | Meaning |
|---|---|---|
| 400 | VALIDATION_ERROR | Missing name, or a team with that name already exists |
| 400 | MANAGER_NOT_MEMBER | A manager id is not in agentIds |
| 403 | LIMIT_EXCEEDED | The plan max_teams cap is reached |
Update Team
Partial update. Send only the fields you want to change — membership changes are synced onto every affected agent, and managers who are dropped from agentIds lose their manager role automatically.
PATCH/v2.0/teams/{teamId}
Body Parameters
| Parameter | Type | Description |
|---|---|---|
| name | string | New team name |
| description | string | New description |
| color | string | New hex colour |
| emoji | string | New emoji badge |
| agentIds | array | Replaces the member list wholesale — send the full array, not a delta |
| managerIds | array | Replaces the manager list. Ids missing from agentIds are dropped |
| isActive | boolean | Deactivate a team without deleting it |
Agents cannot be left team-less
Removing an agent whose only team this is returns
409 LAST_TEAM with the offending ids in agentIds. Add them to another team first.Code Example
curl -X PATCH "https://api.sendiee.com/v2.0/teams/6710a1f4c93b2e0012aa7f01" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "name": "Sales (EMEA)", "agentIds": ["6708b2d1c93b2e0012aa1001"] }'Response — 200 OK
{
"success": true,
"data": {
"_id": "6710a1f4c93b2e0012aa7f01",
"orgId": "664f0c1a9d2b4e0011ab3c22",
"name": "Sales (EMEA)",
"description": "Inbound demo requests and pricing questions",
"color": "#7C3AED",
"emoji": "💼",
"agentIds": [
{
"_id": "6708b2d1c93b2e0012aa1001",
"name": "Aarti Menon",
"email": "[email protected]",
"profilePicture": "https://cdn.sendiee.com/agents/aarti.jpg"
},
{
"_id": "6708b2d1c93b2e0012aa1002",
"name": "Rahul Verma",
"email": "[email protected]",
"profilePicture": null
}
],
"managerIds": [
{
"_id": "6708b2d1c93b2e0012aa1001",
"name": "Aarti Menon",
"email": "[email protected]",
"profilePicture": "https://cdn.sendiee.com/agents/aarti.jpg"
}
],
"defaultInboxView": "unified",
"isActive": true,
"createdAt": "2026-08-02T09:14:00.000Z",
"updatedAt": "2026-09-01T11:42:00.000Z"
}
}Deleting a team
There is no delete endpoint — removing a team reshuffles routing rules and open assignments, so it stays a deliberate action in the teambox app. Set
isActive: false to take a team out of rotation from code.