For AI agents: markdown of this page — /docs-content-en/chats/members/mentionable.md documentation index — /llms.txt
Users to mention
GET /v1/chats/:dialogId/users/mentionable
Returns the chat members the current user can mention with @. The list contains active members, excluding the current user, members whose membership is hidden, and hidden bots.
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
ParameterdialogId (path) |
Typestring | Requiredyes | Default— | DescriptionDialog ID: chatXXX for a group chat, a user ID for a direct dialog, or the me alias. chatXXX is the id field of a recent dialogs row, a user ID comes from the user list |
Parameterlimit (query) |
Typenumber | Requiredno | Default50 | DescriptionHow many members to return, from 1 to 200. A value outside the range is clamped, and the requested and applied values are returned in meta.requestedLimit and meta.appliedLimit. If omitted, the Bitrix24 account default of 50 applies |
Any other parameter, or a repeated one, is rejected with 400 INVALID_PARAMS.
Examples
curl — personal key
curl "https://vibecode.bitrix24.com/v1/chats/chat123/users/mentionable?limit=20" \
-H "X-Api-Key: YOUR_API_KEY"
curl — OAuth application
curl "https://vibecode.bitrix24.com/v1/chats/chat123/users/mentionable?limit=20" \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN"
JavaScript — personal key
const res = await fetch('https://vibecode.bitrix24.com/v1/chats/chat123/users/mentionable?limit=20', {
headers: { 'X-Api-Key': 'YOUR_API_KEY' },
})
const { data } = await res.json()
console.log('Can be mentioned:', data.users.map((u) => u.name))
JavaScript — OAuth application
const res = await fetch('https://vibecode.bitrix24.com/v1/chats/chat123/users/mentionable?limit=20', {
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
},
})
const { data } = await res.json()
Response fields
| Field | Type | Description |
|---|---|---|
Fieldsuccess |
Typeboolean | DescriptionAlways true on success |
Fielddata |
Typeobject | DescriptionResult object |
Fielddata.users |
Typearray | DescriptionMembers who can be mentioned |
Fielddata.users[].id |
Typenumber | DescriptionUser ID |
Fielddata.users[].name |
Typestring | DescriptionFull name |
Fielddata.users[].firstName |
Typestring | DescriptionFirst name |
Fielddata.users[].lastName |
Typestring | DescriptionLast name |
Fielddata.users[].workPosition |
Typestring | DescriptionJob title |
Fielddata.users[].avatar |
Typestring | DescriptionAvatar URL. An empty string when no avatar is set |
Fielddata.users[].color |
Typestring | DescriptionAvatar color in hexadecimal format |
Fielddata.users[].type |
Typestring | DescriptionUser type: user, extranet, bot and others |
Fielddata.users[].bot |
Typeboolean | DescriptionThe user is a bot |
Fielddata.users[].extranet |
Typeboolean | DescriptionAn external user |
Fielddata.users[].status |
Typestring | DescriptionPresence status, for example online |
Fielddata.users[].lastActivityDate |
Typestring | DescriptionTime of the last activity (ISO 8601) |
Fielddata.users[].absent |
Typeboolean | string | Descriptionfalse or the end date of the absence |
Fielddata.users[].departments |
Typearray | DescriptionDepartment IDs |
Fieldmeta.requestedLimit |
Typenumber | DescriptionThe limit that was sent. Returned together with appliedLimit, and only when the value was outside the 1 to 200 range |
Fieldmeta.appliedLimit |
Typenumber | DescriptionThe applied limit value — only when it was clamped to a bound |
The user object also carries other messenger fields.
Response example
{
"success": true,
"data": {
"users": [
{
"id": 7,
"active": true,
"name": "John Brown",
"firstName": "John",
"lastName": "Brown",
"workPosition": "Designer",
"color": "#df532d",
"avatar": "",
"gender": "M",
"bot": false,
"extranet": false,
"status": "online",
"lastActivityDate": "2026-09-20T10:01:00+00:00",
"absent": false,
"departments": [1],
"type": "user"
}
]
}
}
Error response example
400 — limit is not a number:
{
"success": false,
"error": {
"code": "INVALID_PARAMS",
"message": "`limit` must be an integer (1-200)."
}
}
Errors
| HTTP | Code | Description |
|---|---|---|
| HTTP400 | CodeINVALID_PARAMS |
DescriptionA parameter other than limit, a repeated parameter or a non-numeric limit. Checked before any call to Bitrix24 |
| HTTP403 | CodeSCOPE_DENIED |
DescriptionThe API key does not have the im scope |
| HTTP403 | CodeWRITE_BLOCKED_READONLY_KEY |
DescriptionRead-only key, and the chat is not confirmed: a value other than chatN was passed and the personal dialog was not found in the same employee's recent dialog list — up to 20 pages and 4000 rows — or the alias creates a dialog. Rejected before any call to Bitrix24 |
| HTTP403 | CodeWRITE_BLOCKED_READONLY_KEY |
DescriptionRead-only key that is not an employee's personal key: an application key with a user session, a management key, or a key with an unconfirmed owner |
| HTTP401 | CodeTOKEN_MISSING |
DescriptionThe API key has no Bitrix24 tokens configured |
| HTTP404 | CodeENTITY_NOT_FOUND |
DescriptionBitrix24 answered "not found". The Bitrix24 code is in error.b24Code |
| HTTP422 | CodeBITRIX_ERROR |
DescriptionBitrix24 returned an error. The Bitrix24 code is in error.b24Code. For a chat that does not exist, the code is CHAT_NOT_FOUND |
| HTTP502 | CodeME_ALIAS_RESOLUTION_FAILED |
DescriptionFailed to resolve the user when using the me alias |
| HTTP502 | CodeBITRIX_UNAVAILABLE |
DescriptionBitrix24 is unavailable or returned a server error |
Full list of common API errors — Errors.
Known specifics
The list may be shorter than limit and incomplete. Hidden bots are filtered out after the members are fetched, so a page can be shorter than limit. There is no cursor: in a chat with more than 200 members, the list is not complete — read all members through the list of members.
The call may make you a member. If the chat allows auto-join, the call adds the current user as a member, just as opening the chat does. This read is allowed for a READONLY key under two conditions: it is an employee's personal key, and the chat is confirmed — chatN was passed or the personal dialog was found in the same employee's recent dialogs. The call itself does not mark messages as read. The im scope and the user's Bitrix24 permissions still apply.