[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"docs-humanresources":3,"docs-tabs-humanresources":6},{"content":4,"lastmod":5},"\n# Управление персоналом\n\nОрганизационная структура портала Битрикс24: отделы и команды, их участники и сотрудники. Через API можно строить и менять дерево подразделений, управлять составом узлов и искать сотрудников — без обращения к интерфейсу портала.\n\n**Скоуп:** `humanresources` | **Базовый URL:** `https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1` | **Авторизация:** `X-Api-Key`\n\n## Разделы документации\n\n- [Узлы оргструктуры](\u002Fdocs\u002Fhumanresources\u002Fnodes) — создание, чтение, изменение, перечисление и поиск отделов и команд (5 эндпоинтов).\n- [Операции над узлами](\u002Fdocs\u002Fhumanresources\u002Fnode-operations) — дочерние узлы, счётчик, перемещение в дереве, средства коммуникации (5 эндпоинтов).\n- [Участники узлов](\u002Fdocs\u002Fhumanresources\u002Fmembers) — добавление, удаление, перемещение и полная замена состава с ролями (4 эндпоинта).\n- [Сотрудники](\u002Fdocs\u002Fhumanresources\u002Femployees) — поиск по имени, подчинённые, количество, вхождение в несколько подразделений (4 эндпоинта).\n\n## Что важно знать сразу\n\n1. **Узел — это отдел или команда.** Тип задаётся значением `type`: `DEPARTMENT` (отдел) или `TEAM` (команда). Параметр `type` обязателен при перечислении ([список узлов](\u002Fdocs\u002Fhumanresources\u002Fnodes\u002Flist)) и при создании.\n2. **Удаление узлов через API не выполняется.** В разделе нет эндпоинта удаления узла — дерево меняется созданием, изменением и перемещением узлов.\n3. **Роли участников зависят от типа узла.** Для отдела — `MEMBER_HEAD`, `MEMBER_DEPUTY_HEAD`, `MEMBER_EMPLOYEE`. Для команды — `MEMBER_TEAM_HEAD`, `MEMBER_TEAM_DEPUTY_HEAD`, `MEMBER_TEAM_EMPLOYEE`. Полный перечень — в разделе [Участники узлов](\u002Fdocs\u002Fhumanresources\u002Fmembers).\n4. **Состав участников возвращается только при получении одного узла.** [Список узлов](\u002Fdocs\u002Fhumanresources\u002Fnodes\u002Flist) и [поиск](\u002Fdocs\u002Fhumanresources\u002Fnodes\u002Fsearch) отдают сводные поля без участников — состав приходит в ответе [получения узла](\u002Fdocs\u002Fhumanresources\u002Fnodes\u002Fget).\n5. **Перечисление узлов — только по типу.** Сужение выдачи по произвольному полю узла не поддерживается. Чтобы найти узлы по подстроке названия, используйте [поиск узлов](\u002Fdocs\u002Fhumanresources\u002Fnodes\u002Fsearch) — обязательны `type` и `name`.\n6. **Форма ответа зависит от эндпоинта.** Перечисление узлов и поиск отдают массив в плоском `data` плюс `meta` (`total`, `hasMore`). Дочерние узлы и поиск сотрудников вкладывают массив в `data.items`. Счётчики и одиночные узлы возвращают объект в `data`. Точная форма — в секции «Поля ответа» каждого эндпоинта.\n\n## Полный пример\n\nСценарий на JavaScript: создать отдел, вложить в него подотдел, назначить руководителя, посмотреть дерево и перенести подотдел на верхний уровень.\n\n```javascript\nconst VIBE_KEY = process.env.VIBE_KEY\nconst BASE = 'https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1'\n\nasync function api(method, path, body = null) {\n  const opts = { method, headers: { 'X-Api-Key': VIBE_KEY } }\n  if (body) {\n    opts.headers['Content-Type'] = 'application\u002Fjson'\n    opts.body = JSON.stringify(body)\n  }\n  const res = await fetch(`${BASE}${path}`, opts)\n  if (!res.ok) throw new Error(`${method} ${path} → ${res.status}`)\n  return res.json()\n}\n\n\u002F\u002F 1. Создать отдел на верхнем уровне\nconst { data: parent } = await api('POST', '\u002Fhumanresources\u002Fnodes', {\n  type: 'DEPARTMENT',\n  name: 'Отдел разработки',\n  parentId: 1,\n})\nconsole.log(`Создан отдел: ${parent.id}`)\n\n\u002F\u002F 2. Создать подотдел внутри него\nconst { data: child } = await api('POST', '\u002Fhumanresources\u002Fnodes', {\n  type: 'DEPARTMENT',\n  name: 'Группа тестирования',\n  parentId: parent.id,\n})\n\n\u002F\u002F 3. Назначить руководителя отдела\nawait api('POST', `\u002Fhumanresources\u002Fnodes\u002F${parent.id}\u002Fmembers\u002Fadd`, {\n  userIds: [42],\n  role: 'MEMBER_HEAD',\n})\n\n\u002F\u002F 4. Посмотреть дочерние узлы отдела\nconst { data: children } = await api('GET', `\u002Fhumanresources\u002Fnodes\u002F${parent.id}\u002Fchildren`)\nconsole.log(`Дочерних узлов: ${children.items.length}`)\n\n\u002F\u002F 5. Перенести подотдел на верхний уровень\nawait api('POST', `\u002Fhumanresources\u002Fnodes\u002F${child.id}\u002Fmove`, { parentId: 1 })\nconsole.log('Подотдел перенесён на верхний уровень')\n```\n\n## Справочник эндпоинтов\n\nВсе 18 эндпоинтов раздела. Ссылки ведут на страницы с параметрами, примерами и кодами ошибок.\n\n**Узлы оргструктуры:**\n\n| Метод | Путь | Bitrix24 метод | Описание |\n|-------|------|---------------|---------|\n| GET | [`\u002Fv1\u002Fhumanresources\u002Fnodes`](\u002Fdocs\u002Fhumanresources\u002Fnodes\u002Flist) | humanresources.node.list | Список узлов выбранного типа |\n| GET | [`\u002Fv1\u002Fhumanresources\u002Fnodes\u002F:id`](\u002Fdocs\u002Fhumanresources\u002Fnodes\u002Fget) | humanresources.node.get | Узел с составом участников |\n| POST | [`\u002Fv1\u002Fhumanresources\u002Fnodes`](\u002Fdocs\u002Fhumanresources\u002Fnodes\u002Fcreate) | humanresources.node.add | Создать отдел или команду |\n| PATCH | [`\u002Fv1\u002Fhumanresources\u002Fnodes\u002F:id`](\u002Fdocs\u002Fhumanresources\u002Fnodes\u002Fupdate) | humanresources.node.edit | Изменить узел |\n| POST | [`\u002Fv1\u002Fhumanresources\u002Fnodes\u002Fsearch`](\u002Fdocs\u002Fhumanresources\u002Fnodes\u002Fsearch) | humanresources.node.search | Поиск узлов по названию |\n\n**Операции над узлами:**\n\n| Метод | Путь | Bitrix24 метод | Описание |\n|-------|------|---------------|---------|\n| GET | [`\u002Fv1\u002Fhumanresources\u002Fnodes\u002F:id\u002Fchildren`](\u002Fdocs\u002Fhumanresources\u002Fnode-operations\u002Fchildren) | humanresources.node.children | Дочерние узлы |\n| GET | [`\u002Fv1\u002Fhumanresources\u002Fnodes\u002Fcount`](\u002Fdocs\u002Fhumanresources\u002Fnode-operations\u002Fcount) | humanresources.node.count | Количество узлов по типам |\n| POST | [`\u002Fv1\u002Fhumanresources\u002Fnodes\u002F:id\u002Fmove`](\u002Fdocs\u002Fhumanresources\u002Fnode-operations\u002Fmove) | humanresources.node.move | Переместить узел в дереве |\n| GET | [`\u002Fv1\u002Fhumanresources\u002Fnodes\u002F:id\u002Fcommunications`](\u002Fdocs\u002Fhumanresources\u002Fnode-operations\u002Fcommunications-get) | humanresources.node.communication.list | Средства коммуникации узла |\n| PATCH | [`\u002Fv1\u002Fhumanresources\u002Fnodes\u002F:id\u002Fcommunications`](\u002Fdocs\u002Fhumanresources\u002Fnode-operations\u002Fcommunications-set) | humanresources.node.communication.edit | Настроить средства коммуникации |\n\n**Участники узлов:**\n\n| Метод | Путь | Bitrix24 метод | Описание |\n|-------|------|---------------|---------|\n| POST | [`\u002Fv1\u002Fhumanresources\u002Fnodes\u002F:id\u002Fmembers\u002Fadd`](\u002Fdocs\u002Fhumanresources\u002Fmembers\u002Fadd) | humanresources.node.member.add | Добавить участников |\n| POST | [`\u002Fv1\u002Fhumanresources\u002Fnodes\u002F:id\u002Fmembers\u002Fremove`](\u002Fdocs\u002Fhumanresources\u002Fmembers\u002Fremove) | humanresources.node.member.remove | Удалить участников |\n| POST | [`\u002Fv1\u002Fhumanresources\u002Fnodes\u002F:id\u002Fmembers\u002Fmove`](\u002Fdocs\u002Fhumanresources\u002Fmembers\u002Fmove) | humanresources.node.member.move | Переместить участников |\n| POST | [`\u002Fv1\u002Fhumanresources\u002Fnodes\u002F:id\u002Fmembers\u002Fset`](\u002Fdocs\u002Fhumanresources\u002Fmembers\u002Fset) | humanresources.node.member.set | Заменить состав |\n\n**Сотрудники:**\n\n| Метод | Путь | Bitrix24 метод | Описание |\n|-------|------|---------------|---------|\n| POST | [`\u002Fv1\u002Fhumanresources\u002Femployees\u002Fsearch`](\u002Fdocs\u002Fhumanresources\u002Femployees\u002Fsearch) | humanresources.employee.search | Поиск сотрудников по имени |\n| GET | [`\u002Fv1\u002Fhumanresources\u002Femployees\u002F:id\u002Fsubordinates`](\u002Fdocs\u002Fhumanresources\u002Femployees\u002Fsubordinates) | humanresources.employee.subordinates | Подчинённые сотрудника |\n| GET | [`\u002Fv1\u002Fhumanresources\u002Femployees\u002Fcount`](\u002Fdocs\u002Fhumanresources\u002Femployees\u002Fcount) | humanresources.employee.count | Количество сотрудников |\n| POST | [`\u002Fv1\u002Fhumanresources\u002Femployees\u002Fmultidepartment`](\u002Fdocs\u002Fhumanresources\u002Femployees\u002Fmultidepartment) | humanresources.employee.multidepartment | Сотрудники из нескольких отделов |\n\n## Коды ошибок\n\n### Ошибки раздела\n\n| Код | HTTP | Описание |\n|-----|------|----------|\n| `MISSING_REQUIRED_PARAMS` | 400 | Не передан обязательный параметр `type` при перечислении узлов |\n| `INVALID_PARAMS` | 400 | Невалидный `:id` в ручных операциях (`id must be a positive integer`) или нарушена валидация тела запроса |\n| `ENTITY_NOT_FOUND` | 404 | Узел с указанным `id` не найден |\n| `NOT_FOUND` | 404 | Неизвестная операция участника в пути (допустимы `add`, `remove`, `move`, `set`) |\n| `BITRIX_ERROR` | 422 | Передан неподдерживаемый фильтр при перечислении узлов |\n\n### Системные ошибки\n\n| Код | HTTP | Описание |\n|-----|------|----------|\n| `SCOPE_DENIED` | 403 | У ключа нет скоупа `humanresources` |\n| `TOKEN_MISSING` | 401 | У API-ключа не настроены токены Битрикс24 |\n| `BITRIX_ACCESS_DENIED` | 403 | Недостаточно прав на портале Битрикс24 |\n| `BITRIX_UNAVAILABLE` | 502 | Портал Битрикс24 недоступен |\n\nПолный справочник общих ошибок — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Смотрите также\n\n- [Лимиты и оптимизация](\u002Fdocs\u002Foptimization)\n- [Batch-запросы](\u002Fdocs\u002Fbatch)\n","2026-06-29",{}]