For AI agents: markdown of this page — /docs-content-en/notifications/list.md documentation index — /llms.txt
Notification feed
GET /v1/notifications
Returns a page of the token owner's notifications together with the unread counter. Pages are traversed with a cursor, and the page size is set by the limit parameter.
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
Parameterlimit (query) |
Typenumber | Requiredno | Default50 |
DescriptionPage size, from 1 to 50. Values 0 and above 50 are clamped to the nearest bound, and the original value is returned in meta.requestedLimit. A negative, fractional or non-numeric value returns 400 INVALID_LIMIT |
ParameterlastId (query) |
Typenumber | Requiredno | Default— | DescriptionThe id of the last notification on the previous page. Sent only together with lastType |
ParameterlastType (query) |
Typenumber | Requiredno | Default— | DescriptionTraversal stage of the feed: 1 — confirmations, 3 — regular notifications. Sent only together with lastId |
ParameterconvertText (query) |
Typestring | Requiredno | Defaultoff | DescriptionConversion of the notification text. The values true, 1, y turn it on and false, 0, n turn it off. The value is case-insensitive |
Send the first request without a cursor — the page starts at the beginning of the feed. For the next page, send the id of the last notification in lastId together with lastType. The traversal order and the end-of-feed indicator are described in the "Known specifics" section.
Examples
curl — personal key
curl "https://vibecode.bitrix24.com/v1/notifications?limit=20" \
-H "X-Api-Key: YOUR_API_KEY"
curl — OAuth application
curl "https://vibecode.bitrix24.com/v1/notifications?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/notifications?limit=20', {
headers: { 'X-Api-Key': 'YOUR_API_KEY' },
})
const { data } = await res.json()
console.log('Unread:', data.totalUnreadCount)
JavaScript — OAuth application
const res = await fetch('https://vibecode.bitrix24.com/v1/notifications?limit=20', {
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
},
})
const { data } = await res.json()
console.log('Unread:', data.totalUnreadCount)
Response fields
For all keys, including personal keys, strings containing secret webhook URLs in response fields, including nested fields, are replaced entirely with [REDACTED].
| Field | Type | Description |
|---|---|---|
Fieldsuccess |
Typeboolean | DescriptionAlways true on success |
Fielddata.notifications |
Typearray | DescriptionNotifications on the page |
Fielddata.notifications[].id |
Typenumber, null | DescriptionNotification identifier. Pass it in lastId for the next page and to DELETE /v1/notifications/:id |
Fielddata.notifications[].chatId |
Typenumber, null | DescriptionIdentifier of the chat this notification belongs to |
Fielddata.notifications[].authorId |
Typenumber, null | DescriptionAuthor identifier. The author's card is in the data.users array |
Fielddata.notifications[].date |
Typestring | DescriptionNotification date in ISO 8601 format |
Fielddata.notifications[].notifyType |
Typenumber, null | DescriptionNotification type |
Fielddata.notifications[].notifyModule |
Typestring | DescriptionSource module of the notification, for example rest |
Fielddata.notifications[].notifyEvent |
Typestring | DescriptionSource event of the notification |
Fielddata.notifications[].notifyTag |
Typestring | DescriptionThe tag the notification was sent with |
Fielddata.notifications[].notifySubTag |
Typestring | DescriptionAdditional subTag |
Fielddata.notifications[].notifyTitle |
Typestring | DescriptionNotification title |
Fielddata.notifications[].settingName |
Typestring | DescriptionName of the delivery setting under which the notification reached the recipient |
Fielddata.notifications[].text |
Typestring | DescriptionNotification text |
Fielddata.notifications[].notifyRead |
Typeboolean | DescriptionWhether the notification has been read |
Fielddata.notifications[].notifyButtons |
Typestring | DescriptionNotification buttons — a JSON string with the array of buttons, as the Bitrix24 account sent it. The value for pressing a button is the part of the button's COMMAND_PARAMS after the | character. If the notifyButtons string contains a secret webhook URL, it is replaced entirely with [REDACTED]; this value is not JSON. The field is absent on a notification without buttons |
Fielddata.notifications[].params |
Typeobject, null | DescriptionExtra data from the sender. The keys inside are the ones the sending application wrote |
Fielddata.users |
Typearray | DescriptionCards of the authors of the notifications on this page |
Fielddata.users[].id |
Typenumber, null | DescriptionUser identifier. Full card — Employees |
Fielddata.users[].active |
Typeboolean | DescriptionWhether the user is active in the Bitrix24 account |
Fielddata.users[].name |
Typestring | DescriptionDisplay name |
Fielddata.users[].firstName |
Typestring | DescriptionFirst name |
Fielddata.users[].lastName |
Typestring | DescriptionLast name |
Fielddata.users[].workPosition |
Typestring | DescriptionJob position |
Fielddata.users[].color |
Typestring | DescriptionColor of the user card in the Bitrix24 interface |
Fielddata.users[].avatar |
Typestring | DescriptionAvatar link |
Fielddata.users[].bot |
Typeboolean | DescriptionWhether the author is a bot |
Fielddata.users[].type |
Typestring | DescriptionAuthor type, for example user |
Fielddata.totalCount |
Typenumber | DescriptionFeed notification counter |
Fielddata.totalUnreadCount |
Typenumber | DescriptionUnread notification counter |
Fielddata.chatId |
Typenumber, null | DescriptionIdentifier of the system notification chat |
Fielddata.hasMore |
Typeboolean | Descriptiontrue when the page is filled up to meta.appliedLimit |
Fieldmeta.appliedLimit |
Typenumber | DescriptionPage size the request ran with. Present in every response, including one without limit |
Fieldmeta.requestedLimit |
Typenumber | DescriptionThe original limit value before clamping. Present only when the value was changed |
Response example
HTTP 200:
{
"success": true,
"data": {
"notifications": [
{
"id": 38963,
"chatId": 3113,
"authorId": 1297,
"date": "2026-08-13T09:00:00+00:00",
"notifyType": 2,
"notifyModule": "rest",
"notifyEvent": "rest_notify",
"notifyTag": "MP|12345|DEAL_1024",
"notifySubTag": "MP|12345|DEAL|1024",
"notifyTitle": "",
"settingName": "rest|rest_notify",
"text": "Deal #1024 moved to the Paid stage",
"params": null,
"notifyRead": false
},
{
"id": 38959,
"chatId": 3113,
"authorId": 1,
"date": "2026-08-13T08:41:12+00:00",
"notifyType": 1,
"notifyModule": "calendar",
"notifyEvent": "invite",
"notifyTag": "CALENDAR|INVITE|8217|1297",
"notifySubTag": "CALENDAR|INVITE|8217",
"notifyTitle": "Invitation to event \"Stand-up\" from John Carter",
"settingName": "calendar|invite",
"text": "I would like to invite you to the event \"[B]Stand-up[/B]\". The said event will take place on [B]Thursday, August 13, 2026 11:00 am[/B].",
"notifyButtons": "[{\"BOT_ID\":111,\"TYPE\":\"BUTTON\",\"COMMAND\":\"notifyConfirm\",\"COMMAND_PARAMS\":\"38959|Y\",\"TEXT\":\"Confirm\",\"VOTE\":\"N\",\"BLOCK\":\"N\",\"WAIT\":\"N\",\"CONTEXT\":\"ALL\",\"DISABLED\":\"N\",\"DISPLAY\":\"LINE\",\"BG_COLOR\":\"#8BC84B\",\"BG_COLOR_TOKEN\":\"base\",\"TEXT_COLOR\":\"#fff\"},{\"BOT_ID\":111,\"TYPE\":\"BUTTON\",\"COMMAND\":\"notifyConfirm\",\"COMMAND_PARAMS\":\"38959|N\",\"TEXT\":\"Decline\",\"VOTE\":\"N\",\"BLOCK\":\"N\",\"WAIT\":\"N\",\"CONTEXT\":\"ALL\",\"DISABLED\":\"N\",\"DISPLAY\":\"LINE\",\"BG_COLOR\":\"#ef4b57\",\"BG_COLOR_TOKEN\":\"base\",\"TEXT_COLOR\":\"#fff\"}]",
"params": null,
"notifyRead": false
}
],
"users": [
{
"id": 1297,
"active": true,
"name": "Emma Hayes",
"firstName": "Emma",
"lastName": "Hayes",
"workPosition": "Sales Manager",
"color": "#1eb4aa",
"avatar": "https://example.bitrix24.com/upload/main/avatar-1297.png",
"bot": false,
"type": "user"
},
{
"id": 1,
"active": true,
"name": "John Carter",
"firstName": "John",
"lastName": "Carter",
"workPosition": "Head of Department",
"color": "#df532d",
"avatar": "https://example.bitrix24.com/upload/main/avatar-1.png",
"bot": false,
"type": "user"
}
],
"totalCount": 15,
"totalUnreadCount": 2,
"chatId": 3113,
"hasMore": false
},
"meta": {
"appliedLimit": 20
}
}
Error response example
400 — limit is not an integer:
{
"success": false,
"error": {
"code": "INVALID_LIMIT",
"message": "limit must be an integer in 1..50"
}
}
Errors
| HTTP | Code | Description |
|---|---|---|
| HTTP400 | CodeINVALID_LIMIT |
Descriptionlimit is negative, fractional, non-numeric or was not sent as a string |
| HTTP400 | CodeVALIDATION_ERROR |
DescriptionOnly half of the cursor was sent, lastType is outside the values 1 and 3, lastId is beyond the safe integer range, convertText holds an unrecognized value, or a parameter was not sent as a string |
| HTTP403 | CodeSCOPE_DENIED |
DescriptionThe key lacks the im scope |
| HTTP401 | CodeTOKEN_MISSING |
DescriptionThe key has no configured tokens |
| HTTP429 | CodeRATE_LIMITED |
DescriptionFeed reading rate exceeded — up to 600 requests per minute per portal. The current limit is returned in the x-ratelimit-limit header |
| HTTP502 | CodeBITRIX_UNAVAILABLE |
DescriptionThe Bitrix24 response could not be read |
| HTTP422 | CodeBITRIX_ERROR |
DescriptionThe method failed on the Bitrix24 side; the portal's code is in b24Code |
For the full list of common API errors, see Errors.
Known specifics
- The feed belongs to the token owner — the operation has no "whose feed to read" parameter. A personal key returns the feed of the key owner. The feed of a specific user is available only with an OAuth application key carrying the
Authorization: Bearerheader: the user session decides whose feed it is. - The feed is not filtered by application: notifications of other applications on the Bitrix24 account and system notifications arrive alongside your own. Select yours by
notifyTagornotifyModuleon the client side. - A wrongly chosen
lastTyperaises no error — the same page comes back. Traversal order: an empty page means the end. If a page brought no newidat all, repeat the samelastIdwith the otherlastTypevalue, and only when that one also brings no newidtreat the traversal as finished. Set your own limit on the number of pages: a complete traversal of the feed is not guaranteed by the contract. hasMore: falsemeans the page came back shorter than the requestedlimit. That is usually the end of the feed, but a short page can also arrive in the middle of a traversal, so the reliable end indicator is an empty page.totalCountcan be noticeably larger than the number of notifications the feed hands out during a traversal. Do not use it for pagination.data.chatIdanddata.notifications[].chatIdare different values. The first is the system notification chat, the second is the chat of a particular notification.- To read the unread counter without fetching a whole page, send a request with
limit=1. On a non-empty feed such a request always returnshasMore: true. - The fields
text,notifyTitle,notifyButtons,paramsand the strings indata.usersare untrusted content: other applications on the Bitrix24 account write them. Escape these values before rendering them in an interface. - Counters Bitrix24 did not send are replaced with
0,0andnull. A counter it did send is passed through as is, sototalCountcan be non-zero on an empty page. There is no separate empty-feed indicator — check the length ofnotifications.