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 |
|---|---|---|---|---|
messageId (path) |
number | yes | — | Message ID, a positive integer — from the chat feed (GET /v1/chats/:dialogId/messages) or from the response of sending |
reaction (query) |
string | no | — | Only reactions with this code, in camelCase |
lastId (query) |
number | no | — | Cursor: the id of the last reaction of the previous page. The boundary itself is not included |
order (query) |
string | no | desc |
desc — newest first, asc — oldest first |
limit (query) |
number | no | 50 | Reactions 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 |
|---|---|---|
success |
boolean | Always true on success |
data.reactions |
array | Reactions on the page |
data.reactions[].id |
number | Reaction ID — the lastId cursor for the next page |
data.reactions[].messageId |
number | Message ID |
data.reactions[].userId |
number | ID of the user who reacted |
data.reactions[].reaction |
string | Reaction code |
data.reactions[].dateCreate |
string | When the reaction was added (ISO 8601) |
data.users |
array | Users who added the reactions on this page: id, name, firstName, lastName, avatar and other messenger user fields |
data.hasNextPage |
boolean | There are more reactions after this page |
meta.requestedLimit |
number | The limit you passed, when it fell outside the 1 to 200 range |
meta.appliedLimit |
number | The 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 |
|---|---|---|
| 400 | INVALID_PARAMS |
messageId 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 |
| 404 | ENTITY_NOT_FOUND |
Bitrix24 reported "not found"; the portal code is in error.b24Code |
| 422 | BITRIX_ERROR |
Bitrix24 returned an error; the code is in error.b24Code, for example MESSAGE_NOT_FOUND — there is no such message |
| 403 | SCOPE_DENIED |
The API key does not have the im scope |
| 403 | WRITE_BLOCKED_READONLY_KEY |
Reading in READONLY mode is not available to an application key, a management key or a key whose owner type is unconfirmed |
| 401 | TOKEN_MISSING |
The 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.