Register a Bot imbot.v2.Bot.register
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: authorized user
The method imbot.v2.Bot.register registers a new chat bot.
The method is idempotent: a repeated call with the same fields.code from the same application returns the existing bot without updating the data. To update, use imbot.v2.Bot.update.
If the bot runs as part of an application, events will not be sent to the application until the installation is complete. Check the application installation
Method Parameters
Required parameters are marked with *
|
Name |
Description |
|
fields* |
Object with bot parameters. Parameter descriptions — below |
Parameter fields
|
Name |
Description |
|
code* |
Unique code of the bot within the application |
|
botToken |
Unique authorization token for the bot. Required for authorization via webhook, not needed for OAuth. Pass the unique botToken — this key will be tied to the chat bot and will be required for all subsequent calls to imbot.v2* via webhook. Maximum length — 40 characters. As of 06.08.2026, tokens longer than 40 characters will be rejected with the error |
|
properties* |
Properties of the bot's profile. Parameter descriptions — below |
|
type |
Type of the bot. Description of types and their behavior — Bot Types. Default value: |
|
eventMode |
Event delivery mode. Allowed values:
Default value: |
|
webhookUrl |
URL of the bot's event handler. Required when |
|
isHidden |
Hidden bot. Allowed values: |
|
isReactionsEnabled |
Enable support for reactions. Allowed values: |
|
isSupportOpenline |
Enable support for Open Channels. Allowed values: |
|
backgroundId |
Background of the bot's chat. Default |
Parameter properties
|
Name |
Description |
|
name* |
Name of the bot. Displayed in the chat list and dialog header |
|
lastName |
Last name of the bot |
|
workPosition |
Position of the bot (displayed in the profile) |
|
color |
Avatar color, available colors. |
|
gender |
Gender. Allowed values: |
|
avatar |
Avatar. Pass a Base64 string without the prefix How to prepare data: How to upload files |
Available Backgrounds
|
ID |
Theme |
Color |
|
|
dark |
Blue |
|
|
dark |
Mint |
|
|
dark |
Steel |
|
|
dark |
Slate |
|
|
dark |
Teal |
|
|
dark |
Cornflower |
|
|
light |
Sky |
|
|
light |
Peach |
|
|
light |
Frost |
Code Examples
How to Use Examples in Documentation
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"fields": {
"code": "support_bot",
"botToken": "my_bot_token",
"properties": {"name": "Support Bot", "workPosition": "AI Assistant"},
"type": "bot",
"eventMode": "fetch"
}
}' \
https://**put_your_bitrix24_address**/rest/**put_your_user_id_here**/**put_your_webhook_here**/imbot.v2.Bot.register
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"fields": {
"code": "support_bot",
"properties": {"name": "Support Bot", "workPosition": "AI Assistant"},
"type": "bot",
"eventMode": "fetch"
},
"auth": "**put_access_token_here**"
}' \
https://**put_your_bitrix24_address**/rest/imbot.v2.Bot.register
try {
const response = await $b24.callMethod('imbot.v2.Bot.register', {
fields: {
code: 'support_bot',
properties: {
name: 'Support Bot',
workPosition: 'AI Assistant',
},
type: 'bot',
eventMode: 'fetch',
},
});
const { result } = response.getData();
console.log('result:', result);
} catch (error) {
console.error('Error:', error);
}
from b24pysdk.errors import BitrixAPIError, BitrixSDKException
try:
bitrix_response = client.imbot.v2.bot.register(
fields={
"code": "support_bot",
"properties": {
"name": "Support Bot",
"workPosition": "AI Assistant",
},
"type": "bot",
"eventMode": "fetch",
},
).response
result = bitrix_response.result
print(result)
except BitrixAPIError as error:
print(
"Bitrix API error",
f"error: {error.error}",
f"error_description: {error.error_description}",
sep="\n",
)
except BitrixSDKException as error:
print(f"Bitrix SDK error: {error.message}")
except Exception as error:
print(f"Unexpected error: {error}")
try {
$response = $b24Service
->core
->call(
'imbot.v2.Bot.register',
[
'fields' => [
'code' => 'support_bot',
'properties' => [
'name' => 'Support Bot',
'workPosition' => 'AI Assistant',
],
'type' => 'bot',
'eventMode' => 'fetch',
],
]
);
$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.Bot.register',
{
fields: {
code: 'support_bot',
properties: {
name: 'Support Bot',
workPosition: 'AI Assistant',
},
type: 'bot',
eventMode: 'fetch',
},
},
function(result) {
if (result.error()) {
console.error(result.error().ex);
} else {
console.log(result.data());
}
}
);
require_once('crest.php');
$result = CRest::call(
'imbot.v2.Bot.register',
[
'fields' => [
'code' => 'support_bot',
'properties' => [
'name' => 'Support Bot',
'workPosition' => 'AI Assistant',
],
'type' => 'bot',
'eventMode' => 'fetch',
],
]
);
if (!empty($result['error'])) {
echo 'Error: '. $result['error_description'];
} else {
echo 'Bot ID: '. $result['result']['bot']['id'];
}
// client and ctx are already created — see the Go SDK section
res, err := client.Core().Call(ctx, "imbot.v2.Bot.register", b24.Params{
"fields": b24.Params{
"code": "support_bot",
"botToken": "my_bot_token",
"properties": b24.Params{
"name": "Support Bot",
"workPosition": "AI Assistant",
},
"type": "bot",
"eventMode": "fetch",
},
})
if err != nil {
return fmt.Errorf("imbot.v2.Bot.register: %w", err)
}
// The response shape is shown below on this page.
fmt.Printf("%s\n", res.Result)
Response Handling
HTTP Status: 200
{
"result": {
"bot": {
"id": 456,
"code": "support_bot",
"type": "bot",
"isHidden": false,
"isSupportOpenline": false,
"isReactionsEnabled": true,
"backgroundId": null,
"language": "en",
"moduleId": "rest",
"eventMode": "fetch",
"countMessage": 0,
"countCommand": 0,
"countChat": 0,
"countUser": 0
},
"users": [
{
"id": 456,
"active": true,
"name": "Support Bot",
"firstName": "Support",
"lastName": "Bot",
"workPosition": "AI Assistant",
"color": "#df532d",
"avatar": "",
"gender": "M",
"birthday": "",
"extranet": false,
"bot": true,
"connector": false,
"externalAuthId": "bot",
"status": "online",
"idle": false,
"lastActivityDate": "2025-01-15T10:30:00+01:00",
"absent": false,
"departments": [1],
"phones": false,
"type": "bot"
}
]
},
"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 bot registration |
|
result.bot |
Bot object in extended format (available only to the owner) (detailed description) |
|
result.users |
Array of related users (detailed description) |
|
time |
Information about the request execution time |
Fields of the Bot Object
|
Field |
Description |
|
id |
Identifier of the bot |
|
code |
Symbolic code of the bot |
|
type |
Type of the bot |
|
isHidden |
Bot is hidden from the contact list |
|
isSupportOpenline |
Bot supports open lines |
|
isReactionsEnabled |
Reactions are enabled for bot messages |
|
backgroundId |
ID of the chat background or |
|
language |
Language of the bot |
|
moduleId |
Module identifier |
|
eventMode |
Event delivery mode: |
|
countMessage |
Number of messages sent by the bot |
|
countCommand |
Number of registered commands |
|
countChat |
Number of chats of the bot |
|
countUser |
Number of users interacted with the bot |
Fields of the User Object
|
Field |
Description |
|
id |
Identifier of the user |
|
active |
User is active |
|
name |
User's full name |
|
firstName |
User's first name |
|
lastName |
User's last name |
|
workPosition |
Position |
|
color |
User's color |
|
avatar |
Avatar URL |
|
gender |
User's gender |
|
birthday |
Date of birth |
|
extranet |
User is an extranet user |
|
bot |
Indicates if the user is a bot |
|
connector |
User is connected via connector |
|
externalAuthId |
External type of authorization |
|
status |
User's status |
|
idle |
User is inactive |
|
lastActivityDate |
Date of last activity |
|
absent |
User is absent |
|
departments |
List of departments |
|
phones |
List of phones |
|
type |
Type of user |
Complete descriptions of all object fields can be found on the Objects and Fields page.
Error Handling
HTTP Status: 400, 403
{
"error": "BOT_CODE_REQUIRED",
"error_description": "Bot code is required"
}
|
Name |
Description |
|
error |
String error code. It consists of digits, Latin letters, and underscores. It may arrive empty — in that case only |
|
error_description |
Error message for the developer. Do not show it to the end user without processing |
Possible Error Codes
|
Code |
Description |
Value |
|
|
Bot token is not specified |
|
|
|
Bot code is required |
Bot code ( |
|
|
Bot properties are required |
Bot properties (name) are not specified |
|
|
Bot code is already taken |
Bot code is already taken by another application |
|
|
Invalid bot type |
Invalid bot type. Allowed values: |
|
|
Invalid event mode |
Invalid event delivery mode. Allowed values: |
|
|
Webhook URL is required |
|
|
|
Bot registration failed |
Bot registration error |
|
|
Invalid callback URL |
Invalid handler URL |
|
|
Bot limit exceeded |
Application bot limit exceeded (100 bots) |
|
|
Avatar must be an image |
Avatar must be an image ( |
|
|
Avatar exceeds maximum size |
Avatar size exceeds maximum (5000×5000 px) |
Statuses and System Error Codes
HTTP Status: 4xx, 5xx
The errors described below are returned by the REST API itself, not by the logic of a specific method. They can arrive in response to any method.
|
Status |
Code |
Description |
|
|
|
An internal server error has occurred. Retry the call, and if the error persists, contact the server administrator or Bitrix24 technical support |
|
|
|
The server returned an unexpected response. Retry the call, and if the error persists, contact the server administrator or Bitrix24 technical support |
|
|
|
The request intensity limit has been exceeded |
|
|
|
The method is blocked because the request resource intensity limit has been exceeded. The block is lifted automatically once the accumulated execution time of the method no longer exceeds the limit |
|
|
|
The request contains no authorization data: neither an access token nor a webhook code was passed |
|
|
|
Methods are called over the HTTPS protocol only |
|
|
|
The REST API is blocked due to overload. This is a manual individual block. To have it lifted, contact Bitrix24 technical support |
|
|
|
The REST API is available only on commercial plans. A webhook receives a different error message — |
|
|
|
No active webhook with the specified user identifier and secret code was found |
|
|
|
No method with this name was found. The name is misspelled, the method does not exist in the REST API, or it is unavailable without the required scope |
|
|
|
The request requires broader permissions than the token has: for a webhook these are the permissions granted to it, for an application it is the scope. For an application, the error message ends with |
|
|
|
The access token has expired |
|
|
|
The application is installed, but the Bitrix24 administrator has granted access to it only to specific users |
|
|
|
The public part of the site is closed. To open it 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 |