Get Events from imbot.v2.Event.get
If you are developing integrations for Bitrix24 using AI tools (Codex, Claude Code, Cursor), connect to the MCP server so that the assistant can utilize the official REST documentation.
Scope:
imbotWho can execute the method: owner of the registered bot
The method imbot.v2.Event.get retrieves events for the bot in polling agent mode. It is used for bots with eventMode: "fetch".
The method confirms the receipt of events with IDs less than the provided offset. On the next call, only new events starting from the confirmed ones are returned.
Only one application—the one that registered the bot—can receive events for a specific bot. If multiple independent agents are needed, register a separate bot for each.
When to Use imbot.v2.Event.get
This method is suitable if:
- the bot does not have a public URL for incoming HTTP requests
- events need to be fetched by a single background agent (worker) on a schedule
- explicit control of the event queue is required through
offsetandnextOffset - bot events
ONIMBOTV2*and user eventsONIMV2*need to be received in a single stream viawithUserEvents
Alternative: Webhook Mode
Instead of polling, you can use webhook mode:
- In imbot.v2.Bot.register, specify
fields.eventMode = webhook - Set
fields.webhookUrlto receive incoming events - Example of a webhook handler
Step-by-step setup for both options: Quick Start.
Method Parameters
Required parameters are marked with *
|
Name |
Description |
|
botId* |
Bot ID |
|
botToken |
Unique authorization token for the bot. Required for webhook authorization, not needed for OAuth. Pass the same botToken that was specified during chat bot registration |
|
offset |
Confirms all events with IDs less than the specified value. Not passed on the first call |
|
limit |
Maximum number of events returned (1–1000). Default is |
|
withUserEvents |
Include user events ( |
Retrieving Bot and User Events
When withUserEvents: true, the method returns both bot events ONIMBOTV2* and user events ONIMV2* in a single response.
Requirements:
- The application must have the
imscope in addition toimbot - The current user must be subscribed via im.v2.Event.subscribe
userIdis determined from the authorization—specifying someone else's is not possible
One offset confirms both bot events and user events simultaneously.
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"botId":456,"botToken":"my_bot_token","offset":1000,"limit":50,"withUserEvents":true}' \
https://**put_your_bitrix24_address**/rest/**put_your_user_id_here**/**put_your_webhook_here**/imbot.v2.Event.get
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"botId":456,"offset":1000,"limit":50,"withUserEvents":true,"auth":"**put_access_token_here**"}' \
https://**put_your_bitrix24_address**/rest/imbot.v2.Event.get
try {
const response = await $b24.callMethod('imbot.v2.Event.get', {
botId: 456,
offset: 1000,
limit: 50,
withUserEvents: true,
});
const { result } = response.getData();
console.log('result:', result);
} catch (error) {
console.error('Error:', error);
}
try {
$response = $b24Service
->core
->call(
'imbot.v2.Event.get',
[
'botId' => 456,
'offset' => 1000,
'limit' => 50,
'withUserEvents' => true,
]
);
$result = $response
->getResponseData()
->getResult();
echo 'result: ' . print_r($result, true);
} catch (Throwable $exception) {
error_log($exception->getMessage());
echo 'Error: ' . $exception->getMessage();
}
BX24.callMethod(
'imbot.v2.Event.get',
{
botId: 456,
offset: 1000,
limit: 50,
withUserEvents: true,
},
function(result) {
if (result.error()) {
console.error(result.error().ex);
} else {
console.log(result.data());
}
}
);
require_once('crest.php');
$result = CRest::call(
'imbot.v2.Event.get',
[
'botId' => 456,
'offset' => 1000,
'limit' => 50,
'withUserEvents' => true,
]
);
if (!empty($result['error'])) {
echo 'Error: ' . $result['error_description'];
} else {
foreach ($result['result']['events'] as $event) {
echo $event['type'] . ': ' . $event['eventId'] . "\n";
}
}
Code Examples
How to Use Examples in Documentation
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"botId":456,"botToken":"my_bot_token","offset":1000,"limit":50}' \
https://**put_your_bitrix24_address**/rest/**put_your_user_id_here**/**put_your_webhook_here**/imbot.v2.Event.get
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"botId":456,"offset":1000,"limit":50,"auth":"**put_access_token_here**"}' \
https://**put_your_bitrix24_address**/rest/imbot.v2.Event.get
try {
const response = await $b24.callMethod('imbot.v2.Event.get', {
botId: 456,
offset: 1000,
limit: 50,
});
const { result } = response.getData();
console.log('result:', result);
} catch (error) {
console.error('Error:', error);
}
try {
$response = $b24Service
->core
->call(
'imbot.v2.Event.get',
[
'botId' => 456,
'offset' => 1000,
'limit' => 50,
]
);
$result = $response
->getResponseData()
->getResult();
echo 'result: ' . print_r($result, true);
} catch (Throwable $exception) {
error_log($exception->getMessage());
echo 'Error: ' . $exception->getMessage();
}
BX24.callMethod(
'imbot.v2.Event.get',
{
botId: 456,
offset: 1000,
limit: 50,
},
function(result) {
if (result.error()) {
console.error(result.error().ex);
} else {
console.log(result.data());
}
}
);
require_once('crest.php');
$result = CRest::call(
'imbot.v2.Event.get',
[
'botId' => 456,
'offset' => 1000,
'limit' => 50,
]
);
if (!empty($result['error'])) {
echo 'Error: ' . $result['error_description'];
} else {
foreach ($result['result']['events'] as $event) {
echo $event['type'] . ': ' . $event['eventId'] . "\n";
}
}
Response Handling
HTTP Code: 200
{
"result": {
"events": [
{
"eventId": 1001,
"type": "ONIMBOTV2MESSAGEADD",
"date": "2025-01-15T10:30:00+01:00",
"data": {}
}
],
"nextOffset": 1002,
"hasMore": false
},
"time": {
"start": 1728626400.123,
"finish": 1728626400.234,
"duration": 0.111,
"processing": 0.045,
"date_start": "2024-10-11T10:00:00+01:00",
"date_finish": "2024-10-11T10:00:00+01:00"
}
}
Returned Data
|
Name |
Description |
|
result |
Result of the operation |
|
result.events |
Array of events |
|
result.events[].eventId |
Event ID. Pass in the next call as |
|
result.events[].type |
Type of event. List of types described below |
|
result.events[].date |
Date and time of the event |
|
result.events[].data |
Event data. Format depends on the event type: event descriptions |
|
result.nextOffset |
Value for the next call |
|
result.hasMore |
|
|
time |
Information about the request execution time |
Event Types
|
Type |
Description |
|
|
New message to the bot |
|
|
Message edited |
|
|
Message deleted |
|
|
Bot added to chat |
|
|
Bot removed |
|
|
Context of chat call passed |
|
|
Slash command invoked |
|
|
Reaction changed |
Events are addressed to a specific bot—by mentioning @bot or in a private chat. For bots of type personal and supervisor, all events in chats where the bot is present are delivered.
Detailed description of the data format for each event: Event Formats for imbot.v2.
Error Handling
HTTP Status: 400, 403
{
"error": "BOT_NOT_FOUND",
"error_description": "Bot not found"
}
|
Name |
Description |
|
error |
String error code. It may consist of digits, Latin letters, and underscores |
|
error_description |
Textual description of the error. The description is not intended to be shown to the end user in its raw form |
Possible Error Codes
|
Code |
Description |
Value |
|
|
Bot token is not specified |
|
|
|
Bot ID is required |
|
|
|
Bot not found |
Bot not found |
|
|
Bot is registered by another application |
Bot registered by another application |
|
|
Scope error |
Missing |
|
|
Auth error |
Unable to determine the current user |
|
|
User not subscribed |
User not subscribed to events via im.v2.Event.subscribe |
Statuses and System Error Codes
HTTP Status: 20x, 40x, 50x
The errors described below may occur when calling any method.
|
Status |
Code |
Description |
|
|
|
An internal server error has occurred. Please contact the server administrator or Bitrix24 technical support |
|
|
|
An internal server error has occurred. Please contact the server administrator or Bitrix24 technical support |
|
|
|
The request intensity limit has been exceeded |
|
|
|
The current method is not permitted for calls using batch |
|
|
|
The maximum length of parameters passed to the batch method has been exceeded |
|
|
|
Invalid access token or webhook code |
|
|
|
The HTTPS protocol is required for method calls |
|
|
|
The REST API is blocked due to overload. This is a manual individual block; please contact Bitrix24 technical support to lift it |
|
|
|
The REST API is only available on commercial plans |
|
|
|
The user associated with the access token or webhook used to call the method lacks the necessary permissions |
|
|
|
The manifest is not available |
|
|
|
The request requires higher privileges than those provided by the webhook token |
|
|
|
The provided access token has expired |
|
|
|
The user does not have access to the application. This means that the application is installed, but the portal administrator has restricted access to this application to specific users only |
|
|
|
The public part of the site is closed. To open the public part of the site on an on-premise installation, disable the "Temporary closure of the public part of the site" option. Path to the setting: Desktop > Settings > Product Settings > Module Settings > Main Module > Temporary closure of the public part of the site |
Continue Learning
- API Change Log for imbot.v2
- Chatbots 2.0: Quick Start
- Chatbots 2.0: Overview of Methods
- Event Formats for imbot.v2
- Register a bot imbot.v2.Bot.register
- Send Message imbot.v2.Chat.Message.send
- Get User Events im.v2.Event.get
- Subscribe to Events im.v2.Event.subscribe