Для AI-агентов: markdown этой страницы — /docs-content/feedback/endpoints.md индекс документации — /llms.txt
Эндпоинты раздела «Обратная связь»
Отправка обращений в трекер обратной связи, чтение и фильтрация, обновление статуса и резолюции, комментарии и вложения. Переключайте методы во вкладках — у каждого свои параметры, поля ответа и коды ошибок.
Базовый URL: https://vibecode.bitrix24.tech/v1 | Авторизация: X-Api-Key
Отправить обращение
POST /v1/feedback
Создаёт обращение в трекере обратной связи. Принимает любой действительный ключ — портал и автор определяются по владельцу ключа. Тело передаётся плоско, без обёртки fields.
Поля запроса (body)
| Поле | Тип | Обяз. | Описание |
|---|---|---|---|
Полеcategory |
Типstring | Обяз.да | ОписаниеОдно из: BUG, SUGGESTION, DOCS, CHAT, BOTS, OTHER. Регистр не важен |
Полеtitle |
Типstring | Обяз.да | ОписаниеЗаголовок, 3–200 символов |
Полеbody |
Типstring | Обяз.да | ОписаниеОписание, 10–20000 символов. Нижняя граница снимается, если приложены вложения через attachmentIds |
Полеcontext |
Типobject | Обяз.нет | ОписаниеНеобязательный JSON-объект до 10 КБ — эндпоинт, тело запроса, requestId, версия инструмента. Верхний уровень должен быть объектом: массивы, строки, числа, boolean и null отклоняются |
ПолеattachmentIds |
Типarray | Обяз.нет | ОписаниеДо 5 идентификаторов заранее загруженных вложений. Как загрузить — Загрузить вложение |
Категории
| Категория | Когда выбирать |
|---|---|
КатегорияBUG |
Когда выбиратьПоведение расходится с документацией или ломается |
КатегорияSUGGESTION |
Когда выбиратьПредложение улучшения или новой возможности |
КатегорияDOCS |
Когда выбиратьДокументация неполная, устарела или расходится с поведением API |
КатегорияCHAT |
Когда выбиратьОбратная связь по чат-платформе — сообщения, диалоги, файлы |
КатегорияBOTS |
Когда выбиратьОбратная связь по бот-платформе — регистрация, события, команды |
КатегорияOTHER |
Когда выбиратьНе подходит под остальные категории |
Примеры
curl — личный ключ
curl -X POST https://vibecode.bitrix24.tech/v1/feedback \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"category": "BUG",
"title": "POST /v1/deals/search возвращает 500 при пустом filter",
"body": "При вызове POST /v1/deals/search с телом {\"filter\":{}} приходит 500. Ожидал пустой массив или 400.",
"context": {
"endpoint": "/v1/deals/search",
"httpStatus": 500,
"requestId": "req_abc123"
}
}'
curl — OAuth-приложение
curl -X POST https://vibecode.bitrix24.tech/v1/feedback \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"category": "BUG",
"title": "POST /v1/deals/search возвращает 500 при пустом filter",
"body": "При вызове POST /v1/deals/search с телом {\"filter\":{}} приходит 500. Ожидал пустой массив или 400.",
"context": {
"endpoint": "/v1/deals/search",
"httpStatus": 500,
"requestId": "req_abc123"
}
}'
JavaScript — личный ключ
const res = await fetch('https://vibecode.bitrix24.tech/v1/feedback', {
method: 'POST',
headers: {
'X-Api-Key': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
category: 'BUG',
title: 'POST /v1/deals/search возвращает 500 при пустом filter',
body: 'При вызове POST /v1/deals/search с телом {"filter":{}} приходит 500. Ожидал пустой массив или 400.',
context: { endpoint: '/v1/deals/search', httpStatus: 500, requestId: 'req_abc123' },
}),
})
const { data } = await res.json()
console.log('Номер обращения:', 'VB-' + data.id.slice(0, 8))
JavaScript — OAuth-приложение
const res = await fetch('https://vibecode.bitrix24.tech/v1/feedback', {
method: 'POST',
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
category: 'BUG',
title: 'POST /v1/deals/search возвращает 500 при пустом filter',
body: 'При вызове POST /v1/deals/search с телом {"filter":{}} приходит 500. Ожидал пустой массив или 400.',
context: { endpoint: '/v1/deals/search', httpStatus: 500, requestId: 'req_abc123' },
}),
})
const { data } = await res.json()
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
Полеsuccess |
Типboolean | ОписаниеВсегда true при успехе |
Полеdata.id |
Типstring | ОписаниеUUID обращения. Номер для человека — VB- плюс первые 8 символов |
Полеdata.category |
Типstring | ОписаниеКатегория обращения |
Полеdata.title |
Типstring | ОписаниеЗаголовок |
Полеdata.status |
Типstring | ОписаниеНачальный статус — всегда NEW |
Полеdata.createdAt |
Типstring | ОписаниеДата создания в формате ISO 8601 |
Пример ответа
{
"success": true,
"data": {
"id": "a1b2c3d4-1111-2222-3333-444455556666",
"category": "BUG",
"title": "POST /v1/deals/search возвращает 500 при пустом filter",
"status": "NEW",
"createdAt": "2026-04-19T10:30:00.000Z"
}
}
Пример ответа при ошибке
400 — нарушена валидация:
{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "title must be 3-200 characters"
}
}
Ошибки
| HTTP | Код | Описание |
|---|---|---|
| HTTP400 | КодVALIDATION_ERROR |
Описаниеcategory, title, body или context не прошли валидацию |
| HTTP403 | КодMANAGEMENT_KEY_READ_ONLY |
ОписаниеКлюч управления может читать и обновлять обращения, но не создавать их |
| HTTP403 | КодWRITE_BLOCKED_READONLY_KEY |
ОписаниеКлюч только для чтения — см. права доступа |
| HTTP409 | КодDUPLICATE_FEEDBACK |
ОписаниеПохожее обращение уже отправлено недавно. В error.existingTicketId — существующее обращение |
| HTTP409 | КодOPEN_TICKET_EXISTS |
ОписаниеПо этой теме уже есть открытое обращение. В error.existingTicketId — оно же |
| HTTP429 | КодFEEDBACK_QUOTA_EXCEEDED |
ОписаниеПревышена суточная квота на создание обращений (на портал или на ключ). Возвращает заголовок Retry-After и поля scope, limit, retryAfter |
| HTTP401 | КодMISSING_API_KEY |
ОписаниеНе передан заголовок X-Api-Key |
| HTTP429 | КодRATE_LIMITED |
ОписаниеБольше 5 запросов в минуту с одного ключа. Это суммарный лимит платформы; действующее значение приходит в заголовке X-RateLimit-Limit |
Полный список общих ошибок API — Ошибки.
Известные особенности
Источник фиксируется автоматически. У обращений через API поле source равно api, у отправленных с формы в кабинете — ui. Портал и автор берутся из владельца ключа, вводить их вручную не нужно.
Контекст ускоряет разбор. В context кладут объект JSON с requestId, версиями, телом запроса и ответом сервера — до 10 КБ. Переданный верхнеуровневый массив, скаляр (string, number, boolean) или null отклоняется с 400 VALIDATION_ERROR; без context или с {} обращение принимается.
Защита от дублей и квота. Похожий по содержанию запрос отклоняется как 409 DUPLICATE_FEEDBACK, а открытое обращение с тем же заголовком — как 409 OPEN_TICKET_EXISTS. В обоих случаях error.existingTicketId указывает на существующее обращение, если у ключа есть к нему доступ. Отдельно действует суточная квота на портал и на ключ — при превышении приходит 429 FEEDBACK_QUOTA_EXCEEDED с заголовком Retry-After. Это не то же самое, что лимит частоты (429 RATE_LIMITED): обещанные 5 запросов в минуту — суммарный лимит платформы; действующее значение приходит в заголовке X-RateLimit-Limit.