Отрасль: Связь и уведомления. Актуально на 2026-10-24.
REST API корпоративного мессенджера Пачка: отправка и редактирование сообщений, чаты и каналы, треды, участники, сотрудники, реакции, напоминания, поиск, загрузка файлов, боты и вебхуки. Работает от имени пользователя (персональный токен) или бота (токен бота). У API есть официальная OpenAPI-спецификация, SDK для нескольких языков, CLI и документация в формате llms.txt.
Новые заказы, ошибки сервера, отчёты — в рабочий канал команды.
curl -X POST https://api.pachca.com/api/shared/v1/messages \
-H "Authorization: Bearer $PACHCA_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"message": {
"entity_id": 334,
"content": "Новый заказ №1042 на 15 000 ₽",
"display_name": "Магазин",
"buttons": [[{"text": "Открыть заказ", "url": "https://example.ru/admin/orders/1042"}]]
}
}'
Персональное уведомление: назначена задача, пришёл ответ клиента, нужно подтверждение.
curl -G https://api.pachca.com/api/shared/v1/users \
-H "Authorization: Bearer $PACHCA_TOKEN" \
--data-urlencode 'query=ivan@example.ru'
curl -X POST https://api.pachca.com/api/shared/v1/messages \
-H "Authorization: Bearer $PACHCA_TOKEN" -H 'Content-Type: application/json' \
-d '{"message": {"entity_type": "user", "entity_id": 12345, "content": "Тебе назначена задача: проверить заказ №1042"}}'
Под новый проект, клиента или инцидент — отдельный канал с нужными людьми.
curl -X POST https://api.pachca.com/api/shared/v1/chats \
-H "Authorization: Bearer $PACHCA_TOKEN" -H 'Content-Type: application/json' \
-d '{"chat": {"name": "Инцидент 24.10: оплата не проходит", "member_ids": [12345, 12346], "channel": false}}'
Создавать напоминания из своей системы: перезвонить клиенту, подготовить отчёт.
curl -X POST https://api.pachca.com/api/shared/v1/tasks \
-H "Authorization: Bearer $PACHCA_TOKEN" -H 'Content-Type: application/json' \
-d '{"task": {"kind": "call", "content": "Перезвонить Ивану Петрову по заказу №1042", "due_at": "2026-10-25T11:00:00+03:00", "priority": 2, "performer_ids": [12345]}}'
Бот слушает канал и реагирует: подтверждает получение, отвечает в треде.
import crypto from "node:crypto";
// Express: app.post("/pachca/webhook", express.raw({ type: "*/*" }), handler)
function isValid(rawBody, headers, secret) {
const signature = crypto.createHmac("sha256", secret).update(rawBody).digest("hex");
if (signature !== headers["pachca-signature"]) return false;
const { webhook_timestamp } = JSON.parse(rawBody);
return Math.abs(Date.now() / 1000 - webhook_timestamp) < 60;
}
https://api.pachca.com/api/shared/v1Тип: Bearer-токен
Токен передаётся в заголовке Authorization: Bearer <token>. Два типа токенов:
pachca auth login (живёт час и продлевается автоматически).Почти каждый метод требует определённого скоупа токена; скоупы не расширяют круг доступных данных. Владелец пространства может ограничить, кто создаёт токены.
curl "https://api.pachca.com/api/shared/v1/messages" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"message": {
"entity_id": 334,
"content": "Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)"
}
}'
Отправляет сообщение в беседу или канал, личное сообщение сотруднику или комментарий в тред.
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
message.entity_type |
body | string | нет | discussion (беседа или канал, по умолчанию), thread (тред), user (пользователь) |
message.entity_id |
body | integer | да | ID беседы/канала, треда или сотрудника |
message.content |
body | string | да | Текст; упоминания @nickname или <@user_id> |
message.files |
body | array | нет | Прикрепляемые файлы |
message.buttons |
body | array | нет | Строки кнопок: до 100 кнопок, до 8 в строке |
message.parent_message_id |
body | integer | нет | Ответ на сообщение в ленте чата (не в треде) |
message.display_avatar_url |
body | string | нет | Аватар отправителя для этого сообщения (только токен бота) |
message.display_name |
body | string | нет | Имя отправителя для этого сообщения (только токен бота) |
message.skip_invite_mentions |
body | boolean | нет | Не добавлять упомянутых в тред |
link_preview |
body | boolean | нет | Показывать предпросмотр первой ссылки |
Сообщения приходят от новых к старым.
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
chat_id |
query | integer | да | ID чата (беседа, канал, диалог или чат треда) |
sort |
query | string | нет | Поле сортировки |
order |
query | string | нет | Направление сортировки |
limit |
query | integer | нет | Количество записей за запрос |
cursor |
query | string | нет | Курсор из meta.paginate.next_page или meta.paginate.prev_page |
Меняет текст, файлы и кнопки отправленного сообщения; в интерфейсе появится пометка о правке.
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
id |
path | integer | да | ID сообщения |
message.content |
body | string | нет | Текст сообщения |
message.files |
body | array | нет | Файлы |
message.buttons |
body | array | нет | Кнопки |
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
id |
path | integer | да | ID сообщения |
code |
body | string | да | Символ эмодзи; записи вроде +1 или :+1: отклоняются |
name |
body | string | нет | Имя кастомного эмодзи |
Создаёт беседу или канал; владелец токена становится владельцем чата.
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
chat.name |
body | string | да | Название |
chat.member_ids |
body | array | нет | ID пользователей-участников |
chat.group_tag_ids |
body | array | нет | ID тегов-участников |
chat.channel |
body | boolean | нет | Создать канал |
chat.public |
body | boolean | нет | Открытый доступ |
По умолчанию — беседы, каналы и личные переписки владельца токена; с availability=public — все открытые.
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
availability |
query | string | нет | Выборка чатов по доступности |
archived |
query | boolean | нет | Добавить архивные чаты |
personal |
query | boolean | нет | Только личные или только групповые |
last_message_at_after |
query | string | нет | Последнее сообщение позже даты (ISO-8601) |
last_message_at_before |
query | string | нет | Последнее сообщение раньше даты (ISO-8601) |
sort |
query | string | нет | Поле сортировки |
order |
query | string | нет | Направление сортировки |
limit |
query | integer | нет | Количество записей |
cursor |
query | string | нет | Курсор пагинации |
Добавляет сотрудников и ботов в беседу, канал или тред.
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
id |
path | integer | да | ID чата |
member_ids |
body | array | да | ID пользователей |
silent |
body | boolean | нет | Не создавать системное сообщение о добавлении |
Все сотрудники пространства, кроме удалённых; приостановленные отмечены полем suspended.
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
query |
query | string | нет | Поиск по имени, фамилии, email и др. |
limit |
query | integer | нет | Количество записей |
cursor |
query | string | нет | Курсор пагинации |
Карточка владельца токена (для токена бота — карточка бота). Параметров нет.
Ищет по тексту сообщений и именам файлов только в чатах владельца токена.
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
query |
query | string | нет | Текст запроса |
chat_ids |
query | array | нет | Фильтр по чатам |
user_ids |
query | array | нет | Фильтр по авторам |
created_from |
query | string | нет | Дата создания от |
created_to |
query | string | нет | Дата создания до |
active |
query | boolean | нет | Фильтр по активности чата |
limit |
query | integer | нет | Количество результатов |
cursor |
query | string | нет | Курсор из meta.paginate.next_page |
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
task.kind |
body | string | да | Тип напоминания |
task.content |
body | string | нет | Описание |
task.due_at |
body | string | нет | Срок (ISO-8601); время без смещения считается UTC |
task.priority |
body | integer | нет | 1, 2 (важно) или 3 (очень важно) |
task.performer_ids |
body | array | нет | Ответственные |
task.chat_id |
body | integer | нет | Привязка к чату |
task.all_day |
body | boolean | нет | На весь день |
Создаёт тред, не привязанный к сообщению.
Пример ответа:
{"data": {"id": 265142, "chat_id": 2637266155, "message_id": null, "message_chat_id": null, "updated_at": "2023-02-01T19:20:47.204Z"}}
Первый шаг загрузки: возвращает адрес хранилища и подписанные поля формы. Полученный ключ файла затем передают в message.files.
data; пагинация — курсорная, курсор в meta.paginate.next_page.429 с текстом text/plain, а не JSON, и заголовком Retry-After — ждать нужно не меньше указанного.429 без паузы токен может быть заблокирован на час (порог около 22 000 отправок в час).403 может прийти в двух видах: OAuthError с insufficient_scope (у токена нет скоупа) или ApiError (запрет бизнес-логики).Pachca-Signature (ключ — Signing secret бота); поле webhook_timestamp стоит проверять на расхождение не больше минуты. IP Пачки: 37.200.70.177.https://dev.pachca.com/llms.txt и llms-full.txt.const signature = crypto.createHmac("sha256", WEBHOOK_SECRET).update(rawBody).digest("hex");
if (signature !== request.headers['pachca-signature']) {
throw "Invalid signature"
}
| Код | Описание |
|---|---|
400 |
Неприемлемый запрос, часто нет обязательного параметра |
401 |
Недействительный токен доступа |
402 |
Работа пространства приостановлена: израсходован лимит сообщений тарифа |
403 |
У токена нет прав на запрос |
404 |
Ресурс не существует |
409 |
Объект с такими данными уже существует |
410 |
Ресурс больше не доступен |
422 |
Правила сервиса не позволяют обработать запрос |
429 |
Слишком много запросов |
POST /messages) — ~4 запроса в секунду на каждый entity_id и не больше 30 запросов за 5 секунд по всем адресатам.GET /webhooks/events — ~5 запросов за 2 секунды.GET /company/chats и GET /company/bots — ~30 запросов в минуту.Если этого недостаточно — официальная документация: https://dev.pachca.com/ JSON: https://mcp-everything.ru/api/integrations/pachca. MCP: https://mcp-everything.ru/mcp