List Agents
Returns every agent who belongs to your organisation, with their role, teams and membership status, plus a usage block for the max_agents seat limit. Use the returned _id values as agentId when assigning conversations or building teams.
GET/v2.0/agents
Read-only by design
Agents come into existence by accepting an email invite — there is no way to create a working login from an API call, so the public API exposes listing only. Invite, deactivate and role changes live in the teambox app.
Code Example
curl -X GET "https://api.sendiee.com/v2.0/agents" \
-H "Authorization: Bearer YOUR_API_KEY"Response — 200 OK
{
"success": true,
"data": [
{
"_id": "6708b2d1c93b2e0012aa1001",
"name": "Aarti Menon",
"email": "[email protected]",
"profilePicture": "https://cdn.sendiee.com/agents/aarti.jpg",
"operatorLabel": "Aarti from Acme",
"isActive": true,
"membership": {
"orgId": "664f0c1a9d2b4e0011ab3c22",
"status": "active",
"roleId": {
"_id": "66f1...",
"name": "Manager",
"type": "manager",
"color": "#7C3AED"
},
"teamIds": [
{
"_id": "6710a1f4c93b2e0012aa7f01",
"name": "Sales",
"color": "#7C3AED",
"emoji": "💼"
}
],
"inboxView": "unified",
"joinedAt": "2026-08-02T09:20:00.000Z",
"lastActiveAt": "2026-09-08T16:03:00.000Z"
}
},
{
"_id": "6708b2d1c93b2e0012aa1003",
"name": "",
"email": "[email protected]",
"profilePicture": null,
"operatorLabel": null,
"isActive": true,
"membership": {
"orgId": "664f0c1a9d2b4e0011ab3c22",
"status": "invited",
"roleId": {
"_id": "66f1...",
"name": "Agent",
"type": "agent",
"color": "#6B7280"
},
"teamIds": [],
"inboxView": "unified",
"joinedAt": null,
"lastActiveAt": null
}
}
],
"usage": {
"maxAgents": 10,
"agentCount": 2,
"unlimited": false,
"over": false,
"behavior": "hard_block"
}
}Agent Object
| Parameter | Type | Description |
|---|---|---|
| _id | string | Agent id — pass as agentId when assigning or building teams |
| name | string | Display name. Empty until an invited agent completes signup |
| string | Login email the invite was sent to | |
| profilePicture | string | Avatar URL, or null |
| operatorLabel | string | Public-facing name customers see, when the workspace sets one |
| isActive | boolean | Account-level flag. false means the login is disabled entirely |
| membership | object | This organisation's membership record — see below |
Membership Object
| Parameter | Type | Description |
|---|---|---|
| status | string | active (accepted), invited (pending), or inactive (removed) |
| roleId | object | Populated role: { _id, name, type, color } |
| teamIds | array | Teams the agent belongs to, populated as { _id, name, color, emoji } |
| inboxView | string | Inbox layout preference: unified or per_channel |
| joinedAt | string (ISO 8601) | When the invite was accepted, or null while pending |
| lastActiveAt | string (ISO 8601) | Last time the agent used teambox |
Only active agents can take work
An
invited agent holds a seat but has no login yet. Assigning a conversation to one is refused upstream — filter on membership.status === "active" before building an assignment queue.Seat usage
A seat is consumed by every active or invited membership, so a pending invite counts. Sendiee Support sessions, when your workspace has granted staff access, are deliberately excluded from both the roster and the seat count.
Try It
Try it — API Playground