Для AI-агентов: markdown этой страницы — /docs-content/chats/copilot/draft.md индекс документации — /llms.txt
Черновой чат CoPilot
POST /v1/chats/copilot/draft
Открывает черновой чат CoPilot текущего пользователя. Ответ устроен как загрузка чата: карточка чата, первая страница сообщений, закреплённые сообщения, участники, файлы и блок copilot. Если чернового чата ещё нет, первый вызов его создаёт.
Параметры
Параметров в пути и в строке запроса нет. Любой параметр строки запроса отклоняется с 400 INVALID_PARAMS.
Поля запроса (body)
Тело необязательно.
| Поле | Тип | Обяз. | По умолч. | Описание |
|---|---|---|---|---|
messageLimit |
number | нет | — | Сколько сообщений взять на первую страницу. От 1 до 200: значение вне диапазона срезается, переданное и применённое значения — в meta.requestedMessageLimit и meta.appliedMessageLimit |
pinLimit |
number | нет | — | Сколько закреплённых сообщений вернуть. От 1 до 200, переданное и применённое значения — в meta.requestedPinLimit и meta.appliedPinLimit |
Другие поля тела отклоняются с 400 INVALID_PARAMS.
Примеры
curl — личный ключ
curl -X POST https://vibecode.bitrix24.tech/v1/chats/copilot/draft \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"messageLimit": 20}'
curl — OAuth-приложение
curl -X POST https://vibecode.bitrix24.tech/v1/chats/copilot/draft \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN" \
-H "Content-Type: application/json" \
-d '{"messageLimit": 20}'
JavaScript — личный ключ
const res = await fetch('https://vibecode.bitrix24.tech/v1/chats/copilot/draft', {
method: 'POST',
headers: {
'X-Api-Key': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({ messageLimit: 20 }),
})
const { data } = await res.json()
console.log('Черновой чат:', data.chat.dialogId)
JavaScript — OAuth-приложение
const res = await fetch('https://vibecode.bitrix24.tech/v1/chats/copilot/draft', {
method: 'POST',
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({ messageLimit: 20 }),
})
const { data } = await res.json()
console.log('Черновой чат:', data.chat.dialogId)
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
success |
boolean | Всегда true при успехе |
data.chat |
object | Карточка чернового чата: id, dialogId, name, type, owner, role и другие поля |
data.messages |
array | Первая страница сообщений |
data.pins |
array | Закреплённые сообщения |
data.users |
array | Участники, упомянутые на странице |
data.files |
array | Файлы сообщений страницы |
data.reactions |
array | Реакции на сообщения страницы |
data.copilot |
object | Блок CoPilot |
data.copilot.chats |
array | Чаты CoPilot страницы: dialogId, role — код роли, engine — код модели, titleIsCustom |
data.copilot.messages |
array|null | Роли CoPilot у сообщений страницы. null, если таких сообщений нет |
data.copilot.engines |
array|null | Модели чатов страницы: code, name, supportsReasoning |
data.copilot.roles |
object|null | Роли по коду роли: code, name, desc, avatar, default, prompts |
data.copilot.aiProvider |
string | Название модели по умолчанию |
data.hasPrevPage |
boolean | Есть сообщения старше первой страницы |
data.hasNextPage |
boolean | Есть сообщения новее первой страницы |
meta.requestedMessageLimit |
number | Переданный messageLimit, когда он вышел за диапазон от 1 до 200 |
meta.appliedMessageLimit |
number | Применённое значение messageLimit — только если он был приведён к границе |
meta.requestedPinLimit |
number | Переданный pinLimit, когда он вышел за диапазон от 1 до 200 |
meta.appliedPinLimit |
number | Применённое значение pinLimit — только если он был приведён к границе |
Пример ответа
{
"success": true,
"data": {
"chat": {
"id": 2001,
"dialogId": "chat2001",
"name": "CoPilot",
"type": "copilot",
"owner": 5,
"role": "owner"
},
"messages": [
{
"id": 9001,
"chatId": 2001,
"authorId": 0,
"date": "2026-09-25T10:00:00+03:00",
"text": "Здравствуйте! Чем помочь?",
"params": {}
}
],
"pins": [],
"users": [],
"files": [],
"reactions": [],
"copilot": {
"chats": [
{ "dialogId": "chat2001", "role": "copilot_assistant", "engine": "b24ai", "titleIsCustom": false }
],
"messages": null,
"engines": [
{ "code": "b24ai", "name": "BitrixGPT 5.5", "supportsReasoning": true }
],
"roles": {
"copilot_assistant": {
"code": "copilot_assistant",
"name": "BitrixGPT",
"desc": "Готов отвечать на все вопросы в общем формате",
"avatar": { "small": "", "medium": "", "large": "" },
"default": true,
"prompts": []
}
},
"aiProvider": "BitrixGPT 5.5"
},
"hasPrevPage": false,
"hasNextPage": false
}
}
Пример ответа при ошибке
422 — черновой чат CoPilot на портале недоступен:
{
"success": false,
"error": {
"code": "BITRIX_ERROR",
"message": "DRAFT_CHAT_NOT_AVAILABLE",
"b24Code": "DRAFT_CHAT_NOT_AVAILABLE"
}
}
Ошибки
| HTTP | Код | Описание |
|---|---|---|
| 400 | INVALID_PARAMS |
messageLimit или pinLimit не целое число, передано другое поле тела или параметр строки запроса. Проверяется до обращения к Битрикс24 |
| 422 | BITRIX_ERROR |
Битрикс24 отказал. Код портала — в error.b24Code. DRAFT_CHAT_NOT_AVAILABLE — черновой чат на портале выключен |
| 403 | BITRIX_ACCESS_DENIED |
Пользователю нельзя создавать чаты CoPilot — Битрикс24 отказал с кодом ACCESS_DENIED |
| 403 | SCOPE_DENIED |
API-ключ не имеет скоупа im |
| 403 | WRITE_BLOCKED_READONLY_KEY |
Ключ только для чтения — первый вызов создаёт чат |
| 401 | TOKEN_MISSING |
API-ключ не имеет настроенных токенов Битрикс24 |
Полный список общих ошибок API — Ошибки.
Известные особенности
Ключи ответа. Ключи-имена полей приводятся к camelCase. Ключи-данные остаются как есть: ключи словаря data.copilot.roles — коды ролей, и copilot_assistant приходит как copilot_assistant — тем же значением, что role в data.copilot.chats, поэтому роль находится прямым обращением roles[role].
Дальше — лента. Более старые сообщения читайте лентой в режиме v2 по data.chat.dialogId.