Права и роли
У API почти нет собственной логики доступа. Он работает по тем же правилам, что и интерфейс Пачки: токен видит ровно то, что видит выдавший его сотрудник, и может ровно то же, что может он. Если сотрудник не состоит в закрытом канале, то и его токен не получит оттуда ни сообщений, ни списка участников.
Исключения из правила есть, и все они описаны ниже: гости не работают с API вовсе, а Владелец пространства может получить перечень всех чатов и всех ботов, состав участников любого чата и выгрузить переписку всего пространства.
Скоупы работают поверх этих правил и только сужают доступ. Скоуп открывает методы, но не расширяет видимость: с chats:read вы получите те же чаты, что видны в интерфейсе, и ни одним больше. Какие скоупы выдать под задачу — в разделе Наборы прав под типовые задачи.
Две системы ролей
Роли в Пачке живут на двух независимых уровнях:
- Роль в пространстве — кем сотрудник является для всей организации.
- Роль в чате — кем он является внутри конкретной беседы или канала.
Уровни не наследуют права друг у друга. Администратор пространства не получает автоматического доступа к чужим чатам: в закрытом канале, где он не состоит, он такой же посторонний, как любой другой сотрудник. И наоборот, обычный сотрудник может быть Создателем канала и управлять там всем, включая администраторов пространства.
403. Прежде чем искать причину в скоупах токена, проверьте, состоит ли выдавший его сотрудник в чате и с какой ролью.Роли в пространстве
Роль приходит в поле role объекта сотрудника и меняется методом PUTРедактирование сотрудника. Роль guest назначают при создании сотрудника методом POSTНовый сотрудник, а сотрудника или мульти-гостя переводят в гости методом редактирования: роль guest передают вместе с chat_ids, где указан один чат. Что при этом происходит — в разделе Перевод в гости.
| Роль | Значение role | Что даёт |
|---|---|---|
| Владелец | admin | Всё, что может Администратор, плюс экспорт сообщений, журнал аудита, перечень всех чатов и всех ботов пространства и состав участников любого чата. В пространстве только один. |
| Администратор | admin | Управление сотрудниками и тегами, настройки пространства |
| Сотрудник | user | Обычная работа с чатами, сообщениями, тредами и напоминаниями |
| Мульти-гость | multi_guest | Доступ только к тем чатам, куда его добавили |
| Гость | guest | Доступ к одному чату, в который его пригласили |
Две особенности, из-за которых чаще всего возникают вопросы.
Владелец не выделен отдельным значением роли. В поле role у него admin, как и у остальных администраторов, и определить Владельца по объекту сотрудника нельзя. Редактировать его чужим токеном нельзя вообще: PUTРедактирование сотрудника, PUTЗагрузка аватара сотрудника и DELETEУдаление сотрудника возвращают для Владельца 403. Своим токеном он меняет собственный профиль, но не может сменить себе роль и не может себя деактивировать.
Гости не работают с API. Создать токен, войти в CLI или авторизовать бота гость не может: права на работу с API у этой роли нет. Токены, полученные до перевода в гости, при переводе отзываются, и запросы с ними отвечают 401. Ограничение касается только его собственных токенов: сам гость остаётся полноценным участником чата, куда его пригласили, и другие токены видят его как обычного участника.
Мульти-гость работает с API наравне с сотрудником, но видит через него ровно то же, что в интерфейсе. Он создаёт персональные токены, входит в CLI и авторизует ботов, а создавать и настраивать ботов не может. Подробнее — в разделе Мульти-гость в API.
Скоупы, доступные не всем ролям
Большинство скоупов доступно всем ролям, кроме гостя. Исключения стоит знать заранее, потому что при создании токена такие скоупы просто не появятся в списке:
- Только Владелец —
chat_exports:read,chat_exports:writeдля экспорта сообщений,audit_events:readдля журнала аудита,company_chats:readдля метода GETСписок чатов пространства иcompany_bots:readдля метода GETСписок ботов пространства. Все они доступны на тарифе Корпорация. - Владелец и Администратор —
users:create,users:update,users:delete,user_status:write,user_avatar:write,group_tags:writeдля тегов. - Все, кроме мульти-гостя —
chats:create,chats:leave,bots:readиbots:writeдля управления ботами,link_previews:writeи скоупы вебхуковwebhooks:events:readиwebhooks:events:delete. Что из-за этого закрыто мульти-гостю — в разделе Мульти-гость в API.
Отдельно от ролей часть скоупов зависит от типа токена: права самоуправления бота есть только у токена бота, а права управления ботами, черновиков и раздела «Важное» — только у персонального токена. Подробнее — в разделе Скоупы, полная таблица скоупов по ролям — в разделе Доступные скоупы.
Мульти-гость в API
Мульти-гость видит в интерфейсе только чаты, куда его добавили, и их участников. API отдаёт ему ровно столько же:
- Сотрудники — GETСписок сотрудников, GETИнформация о сотруднике и GETСтатус сотрудника отдают его самого, участников общих с ним чатов вместе с ботами и публичных ботов. Треды и архивные чаты общими не считаются, на остальных сотрудников методы отвечают
404. У чужих сотрудниковlist_tagsприходит пустым, а почта и телефон —null. - Чаты — GETСписок чатов с
availability=publicотдаёт только открытые чаты, где он участник. Создать беседу или канал он не может, как и выйти из чата: методы POSTНовый чат и DELETEВыход из чата отвечают403, как и в интерфейсе. - Напоминания — GETСписок напоминаний с
chat_idsотдаёт напоминания только тех чатов, где он участник, и доступных ему тредов: открытые чаты, куда он не вступал, не учитываются. - Теги — GETСписок тегов и GETИнформация о теге отдают только теги активных бесед и каналов, где он участник. GETСписок сотрудников тега ему закрыт и отвечает
403. - Упоминания —
<@id>в методах POSTНовое сообщение и PUTРедактирование сообщения превращается в упоминание только для доступных ему сотрудников, остальные остаются в тексте как есть. - Черновики — черновики и отложенные сообщения доступны ему, как сотруднику: скоупы
drafts:readиdrafts:writeвыдаются и мульти-гостю. С какими токенами работают черновики — в разделе Работает только личным токеном. - Боты — скоупы
bots:readиbots:writeему не выдаются, поэтому создавать и настраивать ботов он не может. Авторизовать бота и подключить его из витрины — может. Добавлять ботов в чаты он не может ни при какой настройке бота.
Перевод в гости
Сотрудника или мульти-гостя переводят в гости методом PUTРедактирование сотрудника с role: "guest" и chat_ids, где указан чат, в котором он останется. Это должна быть одна активная беседа или канал пространства, куда у токена есть право добавлять участников. Иначе метод отвечает 400 по полю chat_ids и не меняет ничего. Владельца пространства перевести в гости нельзя: метод отвечает 403.
Перевод меняет сразу многое:
- С сотрудника снимаются все теги.
- Он выходит из остальных бесед и каналов, в том числе архивных. Личные переписки и треды остаются.
- В указанный чат его добавляют, если он в нём не состоял. Права Админа или Редактора в этом чате снимаются.
- Все его токены отзываются и отвечают
401: персональные, входы в CLI и доступы, выданные ботам и программам с MCP.
Обратно это не возвращается: если потом повысить роль, чаты, теги и токены не восстановятся. На тарифе Корпорация перевод виден в журнале аудита: смена роли, выход из чатов, снятие тегов и отзыв каждого токена.
Токен и смена роли
Права токена сверяются с текущей ролью владельца при каждом запросе. Набор прав, сохранённый в токене, при этом не меняется: роль ограничивает его на каждом вызове. Поэтому изменения роли отражаются на токене сразу и пересоздавать его не нужно. Так работают все персональные токены, в том числе входы в CLI и токены, выданные ботам и программам с MCP. Исключение — перевод в гости: он отзывает все токены сотрудника.
| Что произошло с сотрудником | Что с его токеном |
|---|---|
| Роль понизили, но не до гостя | Ключ работает, но в объёме новой роли. Скоупы, которые новой роли недоступны, начинают отвечать 403 с кодом role_forbidden. |
| Роль вернули | Доступ восстанавливается сам |
| Перевели в гости | Ключ отозван и отвечает 401. Повышение роли его не вернёт. |
| Доступ приостановили | Ключ не работает: все методы отвечают 403 с кодом access_denied в errors[].code. Вернули доступ — снова работает. |
| Сотрудника удалили | Ключ отвечает 403 с кодом access_denied и не восстановится |
Токены сотрудника с приостановленным доступом не удаляются: Администратор видит их на вкладке Все токены. Если доступ сотруднику вернут, они снова заработают, поэтому их стоит отозвать заранее.
Роли в чате
Набор ролей зависит от типа чата:
- Беседа — Создатель, Админ, Участник.
- Канал — Создатель, Админ, Редактор, Подписчик.
Роль в чате задаётся методом PUTРедактирование роли участника и принимает значения admin, editor и member. Роль Создателя изменить нельзя, у него всегда права Админа чата.
role в объекте сотрудника — это его роль в пространстве, а не в чате. Чтобы получить участников с конкретной ролью в чате, используйте одноимённый параметр запроса role со значением owner, admin, editor или member.| Действие | Кто может |
|---|---|
| Читать сообщения и ставить реакции | Все участники чата |
| Создавать треды | Все участники чата |
| Писать сообщения | Создатель, Админ, Редактор, Участник |
| Закреплять сообщения | Создатель, Админ, Редактор, Участник |
| Добавлять участников | Все участники чата, кроме гостей и мульти-гостей |
| Удалять чужие сообщения | Создатель, Админ, Редактор |
| Исключать участников | Создатель, Админ |
| Менять роли участников | Создатель, Админ |
| Менять название и изображение чата | Создатель, Админ |
| Архивировать чат | Создатель, Админ |
Подписчик канала читает сообщения и ставит реакции, но не пишет в самом канале. Комментировать в тредах канала он при этом может. Обе роли, Участник и Подписчик, задаются одним значением member: как называется роль, зависит от типа чата.
В треде права определяет роль в чате, где находится родительское сообщение, а в самостоятельном треде — роль в самом треде, где его создатель становится владельцем. Подробнее — в разделе Права в треде.
В открытой беседе или канале любой сотрудник пространства может читать сообщения, ставить реакции и добавлять участников, не вступая в чат. Остальные действия из таблицы требуют участия.
Участника, который попал в чат по тегу, исключение из чата не выводит: его участие задаёт тег. Чтобы такой сотрудник вышел, снимают тег с него или отвязывают тег от чата.
Как роль в пространстве влияет на роль в чате
Связь между двумя системами ровно одна: роль в чате назначается в момент добавления участника, и в этот момент учитывается его роль в пространстве.
| Кого добавляют | Роль в чате |
|---|---|
| Создателя чата | Создатель |
| Владельца или Администратора пространства | Админ |
| Бота в канал | Редактор |
| Остальных сотрудников | Участник, в канале Подписчик |
В личных сообщениях у обоих собеседников права Админа.
Дальше эта роль живёт самостоятельно и не пересчитывается при смене роли в пространстве. Отсюда два следствия, которые заметны через API:
- Сотрудника повысили до Администратора пространства — в чатах, где он уже состоял, он остаётся Участником.
- Администратора понизили до Сотрудника — в своих чатах он остаётся Админом, пока роль не изменят методом PUTРедактирование роли участника.
Поэтому по роли в пространстве нельзя предсказать права в конкретном чате. Проверить, кто в чате Создатель, Админ, Редактор или рядовой участник, можно параметром role в методе GETСписок участников чата.
Видимость чатов
Видимость определяется участием, а не ролью в пространстве:
- Открытые беседы и каналы — видны всем сотрудникам пространства, даже если они не состоят в них.
- Закрытые беседы и каналы — видны только участникам. Это правило действует для всех ролей, включая Администратора и Владельца.
- Личные сообщения — доступны только собеседникам.
- Треды — видны тем, кому виден родительский чат, и тем, кого добавили в сам тред. Подробнее — в разделе Кто видит тред.
Гости и мульти-гости видят только те чаты, в которые их добавили. Открытые чаты пространства им недоступны. Как это правило действует в API для мульти-гостя — в разделе Мульти-гость в API.
Что доступно Владельцу пространства сверх остальных
Владелец обходит правило участия в трёх местах, и все три доступны только ему. Администратор пространства не получает ничего из этого.
- Перечень чатов всего пространства. GETСписок чатов пространства отдаёт беседы и каналы, включая закрытые, где Владелец не состоит. Личные переписки и треды в выдачу не попадают. Нужен тариф Корпорация и скоуп
company_chats:read. - Состав участников любого чата. GETСписок участников чата отдаёт участников даже закрытой беседы, где Владелец не состоит. Сообщения через этот метод не раскрываются.
- Переписка всего пространства. Экспорт сообщений выгружает сообщения из открытых, закрытых и архивных чатов, включая треды, независимо от участия в них. Личные переписки по умолчанию попадают в архив без текста сообщений, подробнее в разделе Что попадает в архив. Нужен тариф Корпорация и скоупы
chat_exports:writeиchat_exports:read.
То есть запрет на чтение закрытых чатов ограничивает обычную работу с API, но не перечень и не экспорт: на тарифе Корпорация Владелец видит закрытые чаты в списке и может получить их содержимое в виде архива.
Четвёртая привилегия Владельца лежит за пределами чатов — это полный перечень ботов пространства, включая чужих. Она описана в разделе Инвентаризация ботов пространства.
Инвентаризация чатов пространства
GETСписок чатов по умолчанию возвращает только те чаты, где сотрудник состоит участником. Чтобы получить все открытые беседы и каналы пространства, независимо от участия в них, передайте параметр availability со значением public:
Архивные чаты по умолчанию не возвращаются ни при одном значении availability. Чтобы получить их вместе с активными, передайте archived=true:
Отличить архивный чат в выдаче можно по полю archived объекта чата — оно приходит всегда, независимо от параметров запроса.
Граница у такой выгрузки одна: закрытые беседы и каналы, где токен не участник, в списке не возвращаются. Для Владельца пространства эту границу снимает отдельный метод — GETСписок чатов пространства:
Он отдаёт беседы и каналы всего пространства независимо от участия, сразу и активные, и архивные. Оставить одно состояние можно параметром activity со значением active или archived. Личные переписки и треды метод не возвращает. Нужен тариф Корпорация, скоуп company_chats:read и роль Владельца — Администратору метод отвечает 403. Каждый запрос попадает в журнал аудита как событие company_chats_accessed.
Состав участников и администраторов каждого чата возвращает GETСписок участников чата с параметром role — отдельным запросом на чат.
Содержимое закрытых чатов в перечень не входит: получить сами сообщения можно только через экспорт сообщений. В архив кладётся файл chats.json, где у каждого чата есть идентификатор, название, создатель и состав участников с их ролями в чате. Тип доступа и статус архивации в этот файл не попадают.
Управление чатами других сотрудников
Роль Создателя передать нельзя. PUTРедактирование роли участника принимает только значения admin, editor и member, а Создателя не меняет: чат навсегда остаётся закреплён за тем, кто его создал.
Получить права управления чужим чатом можно другим путём — через автоматическое назначение роли при входе. Владелец или Администратор пространства, попав в чат, сразу становится его Админом и получает управление настройками, участниками, ролями и архивацией.
Добавить их в чат методом POSTДобавление участников может:
- в открытый чат — любой сотрудник пространства, даже не состоящий в нём;
- в закрытый чат — любой его участник, кроме гостей и мульти-гостей.
Если в закрытом чате не осталось активных участников, методом POSTДобавление участников в него уже никого не добавить. Остаётся путь через тег: если к чату привязан тег, сотрудник, которому выдали этот тег, сам попадает в чат. Выдать тег в поле list_tags может Владелец или Администратор пространства, в том числе себе.
Чаты деактивированных и удалённых сотрудников
Чаты не архивируются автоматически ни при каких условиях. Архивация происходит только явным вызовом PUTАрхивация чата или действием в интерфейсе, поэтому уход сотрудника сам по себе к архивации его чатов не приводит.
| Что происходит с чатом | Деактивация сотрудника | Удаление сотрудника |
|---|---|---|
| Участие в беседах и каналах | Сохраняется | Снимается |
Поле owner_id чата | Не меняется | Не меняется |
| Архивация | Не происходит | Не происходит |
После удаления сотрудник перестаёт быть участником своих бесед и каналов, но поле owner_id продолжает указывать на него. Управление чатом остаётся у других его Админов, а если Админов не осталось — восстанавливается по схеме из раздела Управление чатами других сотрудников.
Найти чаты, созданные конкретным сотрудником, можно по полю owner_id в выдаче метода GETСписок чатов, а его текущий статус проверить полем suspended в методе GETИнформация о сотруднике.
Видимость ботов
Видимость бота определяется правом на его редактирование, а не участием в чатах. GETСписок ботов возвращает только тех ботов, которых вам разрешено редактировать: созданных вами и тех, чьи настройки открывают вам доступ. Это правило действует для всех ролей, включая Администратора пространства.
Имя бота, его токены, авторизация от имени сотрудника, страница в витрине и удаление бота доступны только создателю и Администраторам, если настройки бота открывают им доступ. Руководителю чата с ботом эти методы отвечают 403, даже когда остальные настройки ему открыты. Что из этого доступно вам, показывает поле permissions в объекте бота.
Инвентаризация ботов пространства
Полный перечень ботов пространства отдаёт GETСписок ботов пространства:
Нужен тариф Корпорация, скоуп company_bots:read и роль Владельца — Администратору метод отвечает 403. У ботов, недоступных вам для редактирования, приходят только имя и никнейм, а остальные настройки вебхука и oauth_client — null: адрес исходящего вебхука, события, команды, скоупы и права на редактирование не раскрываются. Форма объекта при этом та же, что у доступных ботов. Каждый запрос попадает в журнал аудита как событие company_bots_accessed.
Лимит у него общий с инвентаризацией чатов.
Наборы прав под типовые задачи
Права выбирают при выпуске токена: токену бота — на вкладке API в карточке бота, персональному токену — на странице Интеграции > API. В окне выбора право находится поиском по коду, например messages:create. Ниже — наборы для частых задач. Права открывают методы, но не расширяют видимость: бот работает только в доступных ему чатах, а персональный токен — в чатах своего сотрудника.
| Задача | Токен | Права |
|---|---|---|
| Уведомления в чат из мониторинга, CRM или CI | Бот | messages:create |
| Бот отвечает на сообщения и команды | Бот | messages:create, threads:create, reactions:write, messages:read, chats:read, profile:read |
| Интерактивный бот с кнопками и формами | Бот | права бота, который отвечает на сообщения, а также messages:update и views:write |
| Агент только читает | Персональный или бот | profile:read, chats:read, chat_members:read, messages:read, threads:read, users:read, search:chats, search:messages, search:users, files:read |
| Агент читает и пишет | Персональный или бот | права агента, который только читает, а также messages:create, messages:update, threads:create, reactions:write, uploads:write |
| Сценарий n8n: Pachca Trigger и отправка сообщений | Бот | messages:create, profile:read, bot_self:webhook:write, а для выбора чата из списка в узле — chats:read и search:chats |
Что дают права из наборов:
messages:create— отправить сообщение, в том числе с кнопками или в тредthreads:create— открыть тред у сообщения, чтобы ответить в нёмreactions:write— поставить реакцию, например отметить, что запрос принятmessages:read,chats:read,chat_members:read,threads:read— прочитать сообщения, сведения о чате, его участников и тредыprofile:read— узнать свойidметодом GETСвой профиль, по нему же Pachca Trigger отличает токен бота от персональногоmessages:update— изменить своё сообщение, например заменить кнопки после нажатияviews:write— открыть форму и ответить на её отправку, только с токеном ботаusers:read,search:users,search:chatsиsearch:messages— найти сотрудника, чат или сообщениеfiles:read— скачать вложение,uploads:write— отправить файлbot_self:webhook:write— Pachca Trigger сам прописывает боту адрес вебхука, при ручной настройке адреса право не нужно
Что добавить к набору по задаче:
| Задача | Права | Ограничение |
|---|---|---|
| Забирать события без вебхука | webhooks:events:read | Только с токеном бота |
| Удалять обработанные события | webhooks:events:delete | Только с токеном бота |
| Разворачивать ссылки | link_previews:write | Только с токеном бота |
| Выбирать сотрудника из списка в узле n8n | users:read и search:users | |
| Готовить черновики и отложенные сообщения | drafts:read и drafts:write | Только с персональным токеном |
| Работать с напоминаниями | tasks:read, tasks:create, tasks:update |
Входу в CLI и программе, подключённой к MCP через браузер, права вручную не выбирают, подробнее в разделе Скоупы. Если методу не хватает права, он отвечает 403 с кодом insufficient_scope, а недостающий скоуп назван в заголовке WWW-Authenticate и в шапке страницы метода. Добавьте право в меню токена: новые права действуют сразу. Права для отдельных операций n8n — в разделе Недостаточно прав (403 Forbidden).
Требования частых методов
| Что нужно сделать | Метод | Что требуется |
|---|---|---|
| Получить информацию о чате | GETИнформация о чате | Участие в чате. Для открытых бесед и каналов достаточно быть сотрудником пространства. |
| Получить участников чата | GETСписок участников чата | Участие в чате, либо открытый чат, либо роль Владельца пространства |
| Добавить участника | POSTДобавление участников | Участие в закрытом чате. В открытый чат добавить может любой сотрудник пространства. Гости и мульти-гости добавлять не могут. |
| Изменить роль участника | PUTРедактирование роли участника | Роль Создателя или Админа в беседе или канале. Нельзя менять роль себе и Создателю, а значение editor доступно только в каналах. |
| Исключить участника | DELETEИсключение участника | Роль Создателя или Админа в этом чате, а в треде — по правилам треда. Исключить Создателя нельзя. |
| Отправить сообщение | POSTНовое сообщение | Право писать в этом чате. Подписчик канала не пишет в самом канале, но может комментировать в его тредах. |
| Создать сотрудника | POSTНовый сотрудник | Роль Администратора или Владельца пространства |
| Экспортировать сообщения | POSTЭкспорт сообщений | Роль Владельца пространства, тариф Корпорация |
| Прочитать журнал аудита | GETЖурнал аудита событий | Роль Владельца пространства, тариф Корпорация |
| Получить все чаты пространства | GETСписок чатов пространства | Роль Владельца пространства, тариф Корпорация |
| Получить всех ботов пространства | GETСписок ботов пространства | Роль Владельца пространства, тариф Корпорация |
Личные данные сотрудников
Поля email и phone_number в объекте сотрудника выдаются не всем:
- Владелец и Администратор видят их всегда.
- Сотрудник видит их, если в настройках пространства разрешён показ личных данных. Иначе оба поля приходят как
null, кроме собственного профиля. - Токен бота подчиняется только этой настройке пространства и привилегию Администратора не наследует ни при каких условиях.
Собственные email и phone_number доступны всегда, независимо от роли и настройки.
Ошибки доступа
403 Forbidden— прав недостаточно. Причин пять: нужного скоупа нет в токене (полеerrorсодержитinsufficient_scope, недостающий скоуп дублируется в заголовкеWWW-Authenticate), скоуп в токене есть, но недоступен текущей роли владельца (role_forbidden), у выдавшего токен сотрудника нет права на действие (он не состоит в чате или его роль в чате ниже требуемой), возможность не входит в тариф пространства (методы с пометкой Корпорация), либо доступ выдавшего токен сотрудника приостановлен или сотрудник удалён (кодaccess_denied, подробнее в разделе Токен и смена роли).404 Not Found— объекта не существует. Чат, сообщение, тред, файл или экспорт другого пространства отвечают так же. Если чат вашего пространства существует, но недоступен, вернётся403.402 Payment Required— работа пространства приостановлена: израсходован лимит сообщений тарифа, а на платном тарифе к этому добавляется неоплата. Приходит с кодомpayment_requiredвместо ожидаемого ответа. Приостановка задевает не все методы: профиль и статусы, реакции, закрепления, превью ссылок, создание треда под сообщением, состав и архивация чатов, экспорт продолжают работать. Поэтому402объявлен не у каждого метода — смотрите список ответов на странице нужного.
Подробнее о структуре ответов с ошибками — в разделе Ошибки.