Для 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 — личный ключ

Terminal
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-приложение

Terminal
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 — личный ключ

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-приложение

javascript
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

Пример ответа

JSON
{
  "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 — нарушена валидация:

JSON
{
  "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.

Смотрите также