For AI agents: markdown of this page — /docs-content-en/bots/management/update.md documentation index — /llms.txt
Update a bot
PATCH /v1/bots/:botId
Updates a bot's properties. Pass only the fields you want to change.
Two body forms — both valid. The platform accepts both a flat record (the same one as
POST /v1/bots) and the Bitrix24 format with afieldswrapper. If the body containsfields, the request is forwarded to Bitrix24 unchanged. Otherwise the known top-level fields are automatically expanded intofields.properties.*/fields.*. The behavior of both forms is identical.
Request fields (body)
| Parameter (flat) | Parameter (Bitrix24 format) | Type | Description |
|---|---|---|---|
name |
fields.properties.name |
string | New bot name |
lastName |
fields.properties.lastName |
string | New last name |
workPosition |
fields.properties.workPosition |
string | New job title |
color |
fields.properties.color |
string | New avatar color |
gender |
fields.properties.gender |
string | Gender: M or F |
avatar |
fields.properties.avatar |
string | Bot avatar: PNG or JPEG as a base64 string without the data:image/...;base64, prefix, up to ~50 KB. See "Known specifics" |
eventMode |
fields.eventMode |
string | Event mode: fetch or webhook |
webhookUrl |
fields.webhookUrl |
string | URL for push notifications |
isHidden |
fields.isHidden |
boolean | Hide from the contact list |
isReactionsEnabled |
fields.isReactionsEnabled |
boolean | Allow reactions |
backgroundId |
fields.backgroundId |
string | Chat background: azure, mint, steel, slate, teal, cornflower, sky, peach, frost |
isSupportOpenline |
fields.isSupportOpenline |
boolean | Open Channels support (only for type: "openline") |
| — | fields.botToken |
string | Your own bot token instead of the platform-issued one: 32 to 40 characters from the [A-Za-z0-9_-] alphabet. A value outside those bounds is rejected with 400 BOT_TOKEN_INVALID before the account is called, and the bot token is left unchanged. Accepted only in the fields form — the field has no flat name. See "Known specifics" |
Examples
curl — personal key
curl -X PATCH https://vibecode.bitrix24.com/v1/bots/42 \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"fields": {
"properties": { "name": "New name", "color": "MINT" },
"eventMode": "fetch"
}
}'
curl — OAuth application
curl -X PATCH https://vibecode.bitrix24.com/v1/bots/42 \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"fields": {
"properties": { "name": "New name", "color": "MINT" },
"eventMode": "fetch"
}
}'
JavaScript — personal key
const res = await fetch('https://vibecode.bitrix24.com/v1/bots/42', {
method: 'PATCH',
headers: {
'X-Api-Key': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
fields: {
properties: { name: 'New name', color: 'MINT' },
eventMode: 'fetch',
},
}),
})
const { data } = await res.json()
JavaScript — OAuth application
const res = await fetch('https://vibecode.bitrix24.com/v1/bots/42', {
method: 'PATCH',
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
fields: {
properties: { name: 'New name', color: 'MINT' },
eventMode: 'fetch',
},
}),
})
Response fields
| Field | Type | Description |
|---|---|---|
data.bot |
object | The updated bot. The field set matches the registration response |
data.bot.id |
number | Bot ID in the Bitrix24 account |
data.bot.code |
string | System bot code |
data.bot.type |
string | Bot type: bot, personal, or supervisor |
data.bot.eventMode |
string | Event delivery mode: fetch or webhook |
data.users |
array | The bot's card as a Bitrix24 account user |
Response example
The main fields are shown. The full set of bot fields is in the registration response.
{
"success": true,
"data": {
"bot": {
"id": 42,
"code": "my_helper_bot",
"type": "bot",
"eventMode": "fetch",
"isHidden": false,
"isReactionsEnabled": true,
"language": "en"
},
"users": []
}
}
Error response example
403 — the bot belongs to a different key:
{
"success": false,
"error": {
"code": "BOT_ACCESS_DENIED",
"message": "This bot belongs to a different API key"
}
}
Errors
| HTTP | Code | Description |
|---|---|---|
| 400 | INVALID_BOT_ID |
botId is not a number |
| 400 | BOT_TOKEN_INVALID |
fields.botToken is shorter than 32 or longer than 40 characters, contains characters outside [A-Za-z0-9_-], or was not passed as a string. The account is not called and the bot token stays as it was |
| 404 | BOT_NOT_FOUND |
Bot not found |
| 403 | BOT_ACCESS_DENIED |
The bot belongs to a different API key |
| 403 | SCOPE_DENIED |
The API key does not have the imbot scope |
| 401 | TOKEN_MISSING |
The API key has no configured tokens |
Full list of common API errors — Errors.
Known specifics
Symmetry with registration. PATCH accepts both a flat body ({ name, eventMode, ... }) and the Bitrix24 format with a fields wrapper — just like POST /v1/bots. If the body contains a fields key, the platform forwards it to Bitrix24 unchanged. Otherwise it normalizes the flat fields itself.
type cannot be changed: the type field is not accepted on update.
Your own bot token is needed only if it is already fixed on your integration side. The platform issues the token itself at registration, and that value passes the bounds by construction. Setting your own value makes sense only when the integration is already tied to a specific token. The same value authenticates the events Bitrix24 delivers to the bot, so use a random value at least 32 characters long — for example 32 hexadecimal characters. Meaningful strings such as support-bot-2026 do not pass the bounds.
Avatar format. The avatar field accepts a PNG or JPEG image as a base64 string without the data:image/...;base64, prefix — pass only the base64 data itself. A string with the data: prefix results in a 422 response. Size — up to ~50 KB: on excess, the request completes successfully (success: true), but the avatar is not saved and the bot's avatar remains empty. The endpoint accepts JSON only — file upload via multipart/form-data is not supported (415 response). Pass the value as avatar (flat form) or as fields.properties.avatar (the fields form) — the result is the same.