For AI agents: markdown of this page — /docs-content-en/chats/messages/reactions-list.md documentation index — /llms.txt
List reactions to a message
GET /v1/chats/messages/:messageId/reactions
Returns, page by page, who reacted to a message and how.
The chat is resolved from the message, so no dialogId is needed. Reaction codes are listed on the Add a reaction page.
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
ParametermessageId (path) |
Typenumber | Requiredyes | Default— | DescriptionMessage ID, a positive integer — from the chat feed (GET /v1/chats/:dialogId/messages) or from the response of sending |
Parameterreaction (query) |
Typestring | Requiredno | Default— | DescriptionOnly reactions with this code, in camelCase |
ParameterlastId (query) |
Typenumber | Requiredno | Default— | DescriptionCursor: the id of the last reaction of the previous page. The boundary itself is not included |
Parameterorder (query) |
Typestring | Requiredno | Defaultdesc |
Descriptiondesc — newest first, asc — oldest first |
Parameterlimit (query) |
Typenumber | Requiredno | Default50 | DescriptionReactions per page, from 1 to 200: a value outside the range is clamped and echoed in meta.requestedLimit and meta.appliedLimit |
Any other parameter or a repeated parameter is rejected with 400 INVALID_PARAMS.
Examples
curl — personal key
curl -X GET "https://vibecode.bitrix24.com/v1/chats/messages/1001/reactions?limit=20" \
-H "X-Api-Key: YOUR_API_KEY"
curl — OAuth application
curl -X GET "https://vibecode.bitrix24.com/v1/chats/messages/1001/reactions?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/messages/1001/reactions?limit=20', {
method: 'GET',
headers: {
'X-Api-Key': 'YOUR_API_KEY',
},
})
const { data } = await res.json()
console.log('Reactions:', data.reactions.map((r) => `${r.userId}: ${r.reaction}`))
JavaScript — OAuth application
const res = await fetch('https://vibecode.bitrix24.com/v1/chats/messages/1001/reactions?limit=20', {
method: 'GET',
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
},
})
const { data } = await res.json()
console.log('Reactions:', data.reactions.map((r) => `${r.userId}: ${r.reaction}`))
Response fields
| Field | Type | Description |
|---|---|---|
Fieldsuccess |
Typeboolean | DescriptionAlways true on success |
Fielddata.reactions |
Typearray | DescriptionReactions on the page |
Fielddata.reactions[].id |
Typenumber | DescriptionReaction ID — the lastId cursor for the next page |
Fielddata.reactions[].messageId |
Typenumber | DescriptionMessage ID |
Fielddata.reactions[].userId |
Typenumber | DescriptionID of the user who reacted |
Fielddata.reactions[].reaction |
Typestring | DescriptionReaction code |
Fielddata.reactions[].dateCreate |
Typestring | DescriptionWhen the reaction was added (ISO 8601) |
Fielddata.users |
Typearray | DescriptionUsers who added the reactions on this page: id, name, firstName, lastName, avatar and other messenger user fields |
Fielddata.hasNextPage |
Typeboolean | DescriptionThere are more reactions after this page |
Fieldmeta.requestedLimit |
Typenumber | DescriptionThe limit you passed, when it fell outside the 1 to 200 range |
Fieldmeta.appliedLimit |
Typenumber | DescriptionThe limit value applied — only when it was clamped to a bound |
Response example
The main user fields are shown.
{
"success": true,
"data": {
"users": [
{
"id": 5,
"active": true,
"name": "Anna Smith",
"firstName": "Anna",
"lastName": "Smith",
"avatar": "",
"bot": false,
"type": "user"
}
],
"reactions": [
{
"id": 13,
"messageId": 1001,
"userId": 5,
"reaction": "fire",
"dateCreate": "2026-10-06T09:18:54+00:00"
},
{
"id": 9,
"messageId": 1001,
"userId": 5,
"reaction": "like",
"dateCreate": "2026-10-06T09:18:53+00:00"
}
],
"hasNextPage": false
}
}
Error response example
422 — there is no such message:
{
"success": false,
"error": {
"code": "BITRIX_ERROR",
"message": "MESSAGE_NOT_FOUND",
"b24Code": "MESSAGE_NOT_FOUND"
}
}
Errors
| HTTP | Code | Description |
|---|---|---|
| HTTP400 | CodeINVALID_PARAMS |
DescriptionmessageId is not a positive integer, a parameter other than reaction, lastId, order, limit, a repeated parameter, a reaction code not in camelCase or an invalid value. Checked before any call to Bitrix24 |
| HTTP404 | CodeENTITY_NOT_FOUND |
DescriptionBitrix24 reported "not found"; the portal code is in error.b24Code |
| HTTP422 | CodeBITRIX_ERROR |
DescriptionBitrix24 returned an error; the code is in error.b24Code, for example MESSAGE_NOT_FOUND — there is no such message |
| HTTP403 | CodeSCOPE_DENIED |
DescriptionThe API key does not have the im scope |
| HTTP403 | CodeWRITE_BLOCKED_READONLY_KEY |
DescriptionReading in READONLY mode is not available to an application key, a management key or a key whose owner type is unconfirmed |
| HTTP401 | CodeTOKEN_MISSING |
DescriptionThe API key has no Bitrix24 tokens configured |
Full list of common API errors — Errors.
Known specifics
The reactions list may make you a member. When the message's chat allows auto-join, reading the list may add the current user as a member — as loading a chat does. An ordinary employee personal key in READONLY mode may read the list. This read does not itself mark messages read.
Counters are in the feed. The reaction summary per message on a page — reactionCounters, ownReactions — comes in the reactions collection of the feed in v2 mode. This endpoint is for finding out who exactly reacted.